VHDL的基本语法(一)

news2024/11/15 8:43:55

1 VHDL基本结构

1 实体 Entity:描述所设计的系统的外部接口信号,定义电路设计中所有的输入和输出端口
2 结构体 Architecture:描述系统内部的结构和行为
3 包集合 package:存放各设模块能共享的数据类型、常数和子程序等;
4 配置 configuration:指定实体所对应的结构体
5 库 library:存放已经编译的实体、结构体、包集合和配置

VHDL的基本设计的基本设计单元结构:程序包说明、实体说明和结构体说明三部分:

在这里插入图片描述

1.1 实体 Entity

实体描述了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。

定义方式:
在这里插入图片描述
注意:实体名由设计者自由命名,用来表示倍设计电路芯片的名称,但是必须与VHDL程序的文件名称相同。要与文件名一致
在这里插入图片描述

类属说明
类属为设计实体与外界通信的静态信息提供通道,用来规定端口的大小、实体中子元件的数目和实体的定时特性等

在这里插入图片描述

2 结构体

结构体定义了设计单元具有的功能,描述了该基本设计单元的行为、元件和内部的连接关系;

定义方式:
在这里插入图片描述

提示:

  1. 声明语句的作用:用于声明该结构体将用到的信号、数据类型、常熟、子程序和元件等。声明的内容是局部的。
  2. 功能描述语句:具有描述结构体的功能和行为。

一个实体可对应多个结构体,每个结构体代表该实体功能的不同实现方案或不同实现方式。同一时刻只有一个结构体起作用,通过configuration 决定用哪个结构体进行仿真或综合。

在结构体描述中,具体给出了输入、输出信号之间的逻辑关系。

在这里插入图片描述

3 VHDL语句

3.1 并行语句

在结构体中的执行是同时进行,执行顺序与书写顺序无关。如下图所示:

在这里插入图片描述
并行信号赋值

  1. 简单赋值语句
    在这里插入图片描述
  2. 选择信号赋值语句
    在这里插入图片描述
    例子:
    实现一个四乘一多路选择器,当选择信号为00 则输出信号为data0的数据,选择为01输出data1的信号,一次类推;

在这里插入图片描述
程序如下:

library ieee:
use ieee.std_logic_1164.all;
entity mux is
port(
	data0,data1,data2,data3: in std_logic_vector(7 downto 0);
	sel : IN std_logic_vector(1 downto 0);
	dout: out std_logic_vector(7 downto 0);
);
end;
architecture dataflow of mux is
begin
	with sel select
		dout <= data0 when "00",
				data1 when "01",
				data2 when "10",
				data3 when "11",
				"00000000" when others;	
end

3.2 进程语句

进程语句定义顺序语句模块,用于将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。

  1. 进程本身是并行语句,但内部是顺序语句
  2. 进程只有在特定的时刻(敏感信号发生变化)才会被激活。
    在这里插入图片描述
    在这里插入图片描述
    例子1:
    把clock设为敏感信号,当clock上升沿时,输出时钟就进行取反一次。
    程序如下:
library ieee;
use ieee.std_logic_1164.all
entity FreDevider is 
port
(
	Clock: in std_logic;
	Clkout: out std_logic
);
end;

architecture Behavior of FreDevider is
Signal Clk:std_logic;
begin
	process(C)
end

例子2:
本例子做一个自加器,每遇到一个clock的上升沿,num就自加1,加到3就自动清零,重新开始,循环及进行,还有一个复位按钮,只要检测是reset的值为1,num的数值就清零,重新开始计数。

代码如下:

library ieee;
use ieee.std_logic_1164.all;

entity Counter is
port(
	reset: in std_logic;  // 异步时钟复位信号
	clock: in std_logic;	// 时钟信号
	num : buffer integer range 0 to 3
);
end;

architecture Behavior of counter is
begin
	process(reset,clock)
		begin
			if reset="1" THEN
				num <= 0;
			elsif rising_edge(clock) THEN
				if num = 3 THEN
					num <= 0;
				else
					num <= num + 1;
				end if;
			end if;
		end process;
		end;
end;

进程的启动:
当process的敏感信号参数表中没有列出任何敏感信号时,进程通过wait语句启动;

例子:

architecture behavior of state is
begin
	process -- 敏感信号列表为空
	begin
	wait until clock; -- 等待clock激活进程
		if(drive = '1') then
			case output is
			when s1 => output <= s2;
			when s2 => output <= s3;
			when s3 => output <= s4;
			when s4 => output <= s1;
			end case;
		end if;
		end process;
	end
end

进程的注意事项
1 进程本身是并行语句,但内部为顺序语句
2 进程在敏感信号发生变化时被激活,在使用了敏感表的进程中不能含 wait语句;
3 同一进程中对同一信号多次赋值,只有最后一次生效
4 在不同进程中,不可对同一信号进行赋值
5 一个进程不可同时对时钟上下沿敏感。
6 进程中的信号赋值在进程挂起时生效的,而变量赋值是即时生效的。
7 相对于结构体而言,信号具有全局性,是进程间进行并行联系的重要途经
8 进程为综合器支持,且其建模方式直接影响仿真和综合结果,综合后对应宇进程的硬件结构对进程中所有可读入信号都是敏感的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/510455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一百一十、Hive时间转换——from_unixtime踩坑(不要用from_unixtime,而是用from_utc_timestamp)

1.详情 从kettle转换任务得到时间戳为13位&#xff0c;1683701579457。想看看这个时间戳与createTime字段的关系&#xff0c;于是一开始使用了from_unixtime&#xff0c;结果踩坑了 2.运行问题&#xff08;晚8个小时&#xff09; hive> select from_unixtime(cast(1683701…

产品经理怎样活着走出需求评审会?

需求评审是产品经理工作的重要环节&#xff0c;是团队成员间衔接需求的重要桥梁&#xff0c;产品经理的方案能准确落地的重要保障。 一场成功的需求评审会&#xff0c;是能够完整清晰传递产品目标、产品功能&#xff0c;能获得团队认同&#xff0c;并且会后团队能够配合实施的…

orin配置系统

查看linux下的opencv安装版本&#xff1a; pkg-config --modversion opencv查看linux下的opencv安装路径&#xff1a; sudo find / -iname "*opencv*"可知opencv安装在/usr/local/lib里面。 在~/.bashrc中配置如下 在刷机完成的Orin&#xff0c;执行如下命令以安装…

uboot下内存操作mw和md命令详解

mw简介 u-boot 中的 mw 命令是用于向内存写入数据的命令,它有4种形式: mw.b - 写入 1 个字节(8 比特)的数据mw.w - 写入 1 个字(2 字节,16 比特)的数据mw.l - 写入 1 个长字(4 字节,32 比特)的数据mw.q - 写入 1 个四字(8 字节,64 比特)的数据 它们的语法格式是: mw.b addres…

servlet的运行原理

Servlet在容器中的执行过程 1.浏览器向服务器发出GET请求 2.服务器上的Tomcat接收到该url,根据该url判断为Servlet请求&#xff0c;此时Tomcat将产生两个对象&#xff1a;请求对象(HttpServletRequest)和响应对象(HttpServletResponce) 3.Tomcat根据url找到目标Servlet,且创建…

kubernetes详细介绍

kubernetes组件 1 kubernetes组件2 kubernetes概念3 Pod3.1 pod的生命周期1. Pod会出现5种状态2. pod的创建过程3. pod的终止过程 3.2 Pod控制器1. 什么是Pod控制器2. ReplicaSet(RS)3. Deployment4. Horizontal Pod Autoscaler(HPA)5. DaemonSet6. Job7. Cronjob 4 Service4.1…

TypeScript extends和implements区别

&#xff08;被人理解是幸运的&#xff0c;但不被理解未必不幸。一个把自己的价值完全寄托于他人的理解上面的人往往并无价值。——周国平&#xff09; extends 相关文章 implements implements是一个类实现一个接口用的关键字.实现一个接口&#xff0c;必须实现接口中的所有…

React+Antd+Vite+TypeScript 项目实战教程(一)

本教程属于react入门教程&#xff0c;课程围绕如何搭建一个项目框架展开&#xff0c;会带你快速了解react、redux、redux-devtool、react-router-dom、axiox这些常见技术的使用方式&#xff0c;教程最后会附上项目源码。 一、创建项目 在搭建项目时&#xff0c;我们通常会使用…

QT界面开发杂记(五)

QString转char* QString("name").toStdString().c_str() c_str()没有‘\0’结尾可能导致一些错误可以使用以下方法解决&#xff1a; QString xmlPath "path"; const char cXmlName[1024] {0}&#xff1b; memcpy((void*)cXmlName,xmlPath.toStdStri…

目标检测 pytorch复现CenterNet目标检测项目

目标检测 pytorch复现CenterNet目标检测项目 1、项目创新点2、CenterNet网络结构3、CenterNet的模型计算流程如下&#xff1a;4、详细实现原理4.1、heatmap(热力图)理解和生成4.1.1 heatmap生成4.1.2 heatmap高斯函数半径的确定 4.1.3 CenterNet中生成高斯核的部分代码进行解析…

关于hashmap,希望能够帮到你

文章目录 前言介绍hashmap前先说一下关于的map知识 一、Map的概念和场景1.map的概念2.模型1. 纯 key 模型2. Key-Value 模型 二、Map的使用1.关于Map的使用2. 关于Map.Entry<K, V>的说明3. Map 的常用方法说明 三.hashmap1.方法构造2 冲突-概念3. 冲突-避免-哈希函数设计…

深入学习MYSQL-数据检索

前言 由于大部分基础知识都已经学过了&#xff0c;这里只把觉得应该记录一下的知识点做个笔记。然后以下笔记和sql均来自书籍(MYSQL必会知识) LIKE模糊查询 通配符% 相当于是查询一jet开头后面任意的数据 select prod_id,prod_name from products where prod_name like jet…

GRPC 程序在 Kubernetes 中的负载均衡

本文的背景使用的是 kratos 框架。 背景 众所周知 grpc 底层使用 http2 协议&#xff0c;而 http2 是一个长链接多路复用的。在正常情况下客服端与服务端一对一不会需要负载均衡手段&#xff1b;但是当服务上云之后为了保障服务的可用性所以我们服务端一般是多副本&#xff0…

用chatgpt实现 java导出excel复杂表。

记录一次使用chatgpt解决实际问题的&#xff0c;需求是在页面添加一个订单导出excel的功能&#xff0c;订单编号、订单明细&#xff0c;相同订单编号合并单元格&#xff0c;模板如下 表头表尾不用说&#xff0c; 主要是表格内容部分&#xff0c;左边是订单编号&#xff0c;右边…

clickhouse linux 离线安装

1. 下载离线安装包&#xff0c;下四个包&#xff0c;版本号要一致, (在此下的是20.8.3.18-1.el7.x86_64版) clickhouse-server, clickhouse-client, clickhouse-common-static, clickhouse-server-common Altinity/clickhouse - Packages packagecloudBrowse pa…

人工智能基础部分15-自然语言处理中的数据处理上采样、下采样、负采样是什么?

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分15-自然语言处理中的数据处理上采样、下采样、负采样是什么&#xff1f;在自然语言处理中&#xff0c;上采样、下采样、负采样都是用于处理数据不平衡问题的技术&#xff0c;目的是为了优化模型的训…

《记录》chariles配置

Charles配置 1、下载&#xff1a;官网下载-傻瓜式安装 2、windows配置解析pc端的https包 http包解析是配好的&#xff0c;需要自行配置https 2.1、下载证书 1、如图点击 之后下一步点完成就行。 2.2、代理设置 这里勾选其实勾不勾都行&#xff0c;默认不改也行。我是看了…

DC域控服务器与辅助DC域控服务器之间的数据同步以及创建域组织机构和域用户

本篇主要是处理DC域控服务器与辅助DC域控服务器之间的数据同步关系&#xff0c;DC域控服务器与辅助DC域控服务器的创建可以参考上篇文章 验证DC域控服务器与辅助DC域控服务器之间的数据同步关系&#xff0c;分别在辅助DC域控服务器DC上面新建一个用户&#xff0c;看看再对应的…

一名【合格】前端工程师的自检清单

1.JavaScript规定了几种语言类型&#xff1f; 基本数据类型&#xff1a;number、string、boolean、null、undefined、symbol(es6) 对象引用类型&#xff1a;Array、Function、Object、RegExp、Error、Date 2.JavaScript对象的底层数据结构是什么&#xff1f; JavaScript 对象…

甄云科技对话格瑞德,探讨高复杂度采购事业的数“智”解决之道

在由甄云科技主办的客户高层访谈节目“甄知访谈”中&#xff0c;本期我们走进山东格瑞德集团&#xff0c;一起来分享格瑞德的采购数字化转型之路。由甄云科技总裁姚一鸣对话格瑞德集团有限公司供应链总经理徐涵先生。 山东格瑞德集团成立于 1993 年&#xff0c;是一家围绕人工…