VHDL语言第5章
VHDL硬件描述语言与数字逻辑电路设计 (5)[88页]
第5章 VHDL构造体的描述方式
5.1 构造体的行为描述方式 5.2 构造体的寄存器传输(RTL)描述方式 5.3 构造体的结构描述方式 习题与思考题
第5章 VHDL构造体的描述方式
5.1 构造体的行为描述方式
什么样的描述属于行为描述方式,这一点目前还没有确 切的定义,所以在不同的书刊中,对相同或相似的某些用 VHDL描述的逻辑电路的程序有不同的说明。有的说明为行 为描述方式,有的说明为寄存器传输描述方式。但是,有一 点是明确的,行为描述方式是对系统数学模型的描述,其抽 象程度比寄存器传输描述方式和结构描述方式更高。
第5章 VHDL构造体的描述方式
5.1.2 延时语句 在VHDL中存在两种延时类型:惯性延时和传输延时。
这两种延时常用于VHDL的行为描述方式。 1.惯性延时 在VHDL中,惯性延时是缺省的,即在语句中如果不作
特别说明,产生的延时一定是惯性延时,这是因为大多数器 件在行为仿真时都会呈现这种惯性延时。
第5章 VHDL构造体的描述方式
第5章 VHDL构造体的描述方式
在例5-2中用了两个语句:第一个语句是选择语句,第 二个语句是代入语句。这两个语句是条件代入类型语句。也 就是说,只有WHEN后面所指定的条件得到满足时,指定的 代入值才被代入信号量sel或输出量q。
当第一个语句执行时,将使用选择信号。根据选择信号 sel的当前值,后跟的5种状态下的值i0~i3、'X' 中的一个值 将通过输出端口q输出。在正常情况下,q端将选择i0~i3之 一输出,在非正常情况下将输出 'X' 值。
第5章 VHDL构造体的描述方式
几乎所有器件都存在惯性延时,因此,硬件电路的设计 人员为了逼真地仿真硬件电路的实际工作情况,在代入语句 中总要加上惯性延时时间的说明。例如:
第五章 组合逻辑电路的VHDL语言描述
BEGIN
PROCESS ( a, datain ) BEGIN IF ( datain = '1' ) THEN dataout <= '0' ; ELSE dataout <= '1' ; END IF ; END PROCESS ; END ARCHITECTURE behavioral_2 ; --RTL描述方式 ,MAX中需要加入时钟a
第5章
组合逻辑电路的VHDL描述
仿真波形
第5章
组合逻辑电路的VHDL描述
5.1.5 2输入同或门电路
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cynxor2 IS PORT ( datain1, datain2 : IN STD_LOGIC ; dataout : OUT STD_LOGIC ) ; END ENTITY cynxor2 ; ARCHITECTURE behavioral OF cynxor2 IS BEGIN
END ENTITY cyxor2 ;
ARCHITECTURE behavioral OF cyxor2 IS BEGIN dataout <= datain1 XOR datain2 ; END ARCHITECTURE behavioral ;
第5章
组合逻辑电路的VHDL描述
LIBRARY IEEE ;
第5章
组合逻辑电路的VHDL描述
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY cynot IS
PORT ( a, datain : IN STD_LOGIC ; END ENTITY cynot ; ARCHITECTURE behavioral_2 OF cynot IS dataout : OUT STD_LOGIC ) ;
第五章_VHDL语言的主要描述语句
例:
library ieee; use ieee.std_logic_1164.all; entity kdec24 is port(a:in std_logic_vector (1 downto 0); en:in std_logic; f:out std_logic_vector (3
architecture d of kdec24 is begin
执行到该语句等待20ns以后,再继续执行下一条指令。
wait for( a*(b+c));
若a=2,b=50ns,c=70ns, 则执行到该语句时,就要等待2*(50+70)=240ns后, 再继续执行后续语句。
2016/3/23 20
例:利用wait for构成输入信号波形
process entity inhibittestbench is begin end entity inhibittestbench; xt<='0';yt<='0'; architecture beh of wait for 10 ns; inhibittestbench is xt<='0';yt<='1'; component inhibit is wait for 10 ns; port (x,y:in bit;z: out bit); xt<='1';yt<='0'; end component inhibit; wait for 10 ns; signal xt,yt,zt:bit; xt<='1';yt<='1'; begin wait; --进入无限期等待, u1: inhibit port map (xt, yt, 避免进入无限期循环; zt); end process; end architecture beh;
FPGA中文VHDL语言教程
第5章VHDL深入本章仍将沿用第3章中通过一些实例引出了相关的VHDL语法结构和语言现象,并给予一定说明的方法,介绍一些新的实例及相关的VHDL语法知识,使读者进一步深入了解VHDL语言现象和语句规则的特点,以及应用VHDL表达与设计电路的方法。
下面首先对第3章出现的一些语法现象作更为深入的讨论,然后再引出一些新的实例,帮助读者对相关的语法现象作更详细的了解。
5.1 数据对象及其示例说明在VHDL中,数据对象有三类,即变量(V ARIABLE)、常量(CONSTANT)和信号(SIGNAL)。
如前所述,数据对象类似于一种容器,它接受不同数据类型的赋值。
变量和常量可以从软件语言中找到对应的类型,然而信号的表现较特殊,它具有更多的硬件特征,是VHDL中最有特色的语言要素之一。
尽管信号和变量已在前面一些示例中出现过,但都没有作更详细的解释,这势必影响对VHDL程序的更好理解,以下将针对数据对象给出一些示例,以作进一步的说明。
5.1.1 常数常数的定义和设置主要是为了使程序更容易阅读和修改。
例如,将逻辑位的宽度定义为一个常量,只要修改这个常量就能很容易地改变宽度,从而改变硬件结构。
在程序中,常量是一个恒定不变的值,一旦作了数据类型和赋值定义后,在程序中不能再改变,因而具有全局性意义。
常数定义的一般表述如下:CONSTANT 常数名:数据类型 := 表达式;例如:CONSTANT FBT : STD_LOGIC_VECTOR := "010110" ; -- 标准位矢类型CONSTANT DATAIN : INTEGER := 15 ; -- 整数类型第1句定义常数FBT的数据类型是STD_LOGIC_VECTOR,它等于"010110";第2句定义常数DATAIN的数据类型是整数INTEGER,它等于15 。
VHDL要求所定义的常量数据类型必须与表达式的数据类型一致。
《数字电子技术与接口技术试验教程》课件第5章
第5章 基于HDL的时序逻辑电路实验
图5-2 边沿D触发器的仿真结果
9
第5章 基于HDL的时序逻辑电路实验 (2) 边沿D触发器的VHDL源代码如下:
--Behavioral D Flip-Flop with Clock Enable and Asynchronous Reset
entity Dflipflop is Port (D,clk,rst,ce : in STD_LOGIC; Q : out STD_LOGIC);
architecture Behavioral of DFF is begin
process(clk, rst,D) begin
if (CLK'event and CLK='1') then if rst ='1' then Q <= '0'; else Q<=D; end if;
end if; end process; end Behavioral;
end if; end process; end Behavioral;
13
第5章 基于HDL的时序逻辑电路实验
(3) 带有置位和清零端的边沿D触发器的约束文件规定
如下:
#Basys2约束文件: NET "clk" LOC ="B8"; //时钟
#Basys2约束文件: NET "clk" LOC ="B8"; //时钟
end Dflipflop;
architecture Behavioral of Dflipflop is begin
process(clk, rst,D,ce)
第五章(VHDL主要描述语句)
(4) CASE语句执行中必须选中,且只能选中所列条件语
句中一条。这表明CASE语句中至少要包含一个条件语句。
CASE语句常用来描写总线行为、编码器和译码器的结构。CASE语句 与IF语句功能相似但CASE语句的可读性好,非常简洁。
CASE语句的误用:
SIGNAL value : INTEGER RANGE 0 TO 15 ; SIGNAL out_1 : BIT ; CASE value IS -- 缺少 WHEN条件语句 END CASE ; -- 分支条件不包含2到15 CASE value IS WHEN 0 => out_1 <= „1‟; WHEN 1 => out_1 <=„0‟; END CASE ; -- 在5到10上发生重叠 CASE value IS WHEN 0 TO 10 => out_1 <= „1‟; WHEN 5 TO 15 => out_1 <= „0‟; END CASE ;
IF语句不仅可用于选择器设计,还可用于比较 器,译码器等进行条件控制的逻辑设计。IF语句 中至少应有一个条件句,条件句必须由布尔表达 式构成,条件表达式中能使用关系运算操作及逻 辑运算操作的组合表达式。 IF语句颠倒条件判别次序,会引起在综合时逻辑 功能的变化,即IF语句判别条件不可颠倒。 IF语句中,先处理最起始的条件;如果不满足, 再处理下一个条件。一般把条件约束最多的作为 起始条件。
例
用IF语句描述一个二位等值比较器
ARCHITECTURE a OF compare IS LIBRARY IEEE; BEGIN PROCESS(a,b) USE IEEE.STD_LOGIC_1164.ALL; BEGIN ENTITY compare IS IF(a>b) THEN eater<='1';equal<='0';less<='0'; generic(n:natural:=2); ELSIF (a=b) THEN PORT( greater<='0';equal<='1';less<='0'; ELSE a,b:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); greater<='0';equal<='0';less<='1'; greater,equal,less:OUT STD_LOGIC); END IF; END PROCESS; END; END;
EDA技术及应用 第5章
表 5-1 端口模式说明
端口模式
端口模式说明(以设计实体为主体)
IN
OUT
BUFFER INOUT LINKAGE
输入,只读模式,将变量或信号信息通过该端口读入,与 IN、INOUT 及 BUFFER 型端口连接
输出,单向赋值模式,将信号通过该端口输出,与 OUT、INOUT 及 BUFFER 型端 口连接
第 5 章 VHDL程序结构
5.1 实体 5.2 构造体 5.3 库 5.4 程序包 5.5 配置
作为一种程序设计语言,VHDL除有上述两种基本语言结 构外,还有程序包(PACKAGE)、库(LIBRARY)和配置 (CONFIGURATION)。一个相对完整的VHDL程序(或称为设 计实体)具有如图5-1所示的结构。下面就这几部分结构作两点 说明:
(1) VHDL中实体、构造体、库、程序包是必备的结构, 而配置不是必备的,可以省略。通常我们将VHDL所描述的某 个电路称之为一个设计实体。需要注意的是,当设计中只调用 STD库时,可以省略库、程序包使用说明,这是由于STD库是 显式打开的,不用声明。
(2) 在一个VHDL设计中只能有一个实体;而同一个设计 实体可以对应多个构造体。这是因为VHDL语言支持行为级、 RTL传输级等多种抽象描述层次,而一个抽象层次通常可以对 应至少一种描述语句。
2. 类属说明 类属(GENERIC)参量是一种端口常数,用于说明端口的静 态特性。类属的值可以由设计实体外部提供,因此,设计者可 以通过重新设定类属参量来改变一个设计实体或一个元件的内 部电路结构和规模。
类属说明的格式如下: GENERIC(常量名:数据类型[:=设定值 量纲]; 常量名:数据类型[:=设定值 量纲]);
库、程序包使用说明
《VHDL语言程序设计》课程教学大纲
GDOU-B-11-213《VHDL语言程序设计》课程教学大纲课程简介课程简介:本课程为软件工程专业嵌入式专业方向的专业课,是开发基于FPGA/CPLD嵌入式系统的必备基础。
主要内容包括FPGA/CPLD目标器件的结构和工作原理、EDA技术和工作流程、VHDL基础知识、VHDL实用方法和设计深入、原理图输入法、LPM宏功能模块实用方法、状态机设计以及EDA优化设计。
目的是为后续课程的学习和嵌入式系统的设计作必须的基础准备。
课程大纲一、课程的性质与任务:本课程是软件工程专业的专业方向课程。
教学任务主要包括使学生了解EDA技术的工作流程,正确使用开发平台,掌握以VHDL为代表的硬件描述语言的基本知识、编程实用方法和工程设计方法,掌握原理图设计法、状态机设计法,能够正确使用IP Core和LPM等宏功能模块。
本课程是软件工程专业嵌入式专业方向的第一门专业方向课,是后续课程的必备基础,具有较重要的地位。
二、课程的目的与基本要求:本课程涉及到的学科基础知识面广,要求软硬件兼备,需要较好的学科基础。
通过本课程的学习,最终达到能够设计基于FPGA/CPLD的ASIC,并能进行EDA优化的目的。
三、面向专业:软件工程四、先修课程:《计算系统基础》五、本课程与其它课程的联系:本课程的先行课程是计算系统基础。
服务的主要后续课程包括基于FPGA的嵌入式软件开发、基于ARM的嵌入式软件开发等。
六、教学内容安排、要求、学时分配及作业:第一章概述(2学时)1.1 EDA技术及其发展(C)1.2 硬件描述语言硬件描述语言种类、自顶向下设计方法、EDA工程设计流程。
(A)1.3 面向FPGA/CPLD的开发流程设计输入、分析综合、布局布线、仿真、下载和硬件测试。
(A)1.4 IP Core 及EDA技术发展趋势。
(C)第二章 FPGA硬件特性与编程技术(8学时)2.1 PLD发展历程及其分类(c)2.2 低密度PLD工作原理PROM、PLA、PAL、GAL。
第5章 组合逻辑电路(combinational logic)
o <= ‘1’ when a=’1’ and b =’1’ else ‘0’; 这表示当输入端信号a及信号b都是逻辑’1’时,输出信号o才会为’1’,否则 输出信号o都是’0’。由此可以画出其真值表如表5—1所示。
表 5-1
a
b
C
0
0
0
0
1
0
1
0
0
1
l
1
由真值表可得知它也是一个and gate。 ‘ 当 然 两 种 表 示 法 各 有 优 劣 ,第 一 种 表 示法 相 当 简 洁 ,一 眼 看 去 便 知 道 是 一 个 双输入的and gate。在输入端扩充时也相当明确,例如4输入的and gate其表示 成:
( ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’ ), --|L|
( ‘U’, ‘X’, ‘0’, ‘1’, ‘X’, ‘X’, ‘0’, ‘1’, ‘X’ ), --|H|
( ‘U’, ‘X’, ‘0’, ‘X’, ‘X’, ‘X’, ‘0’, ‘X’, ‘X’ ), --|-|
( ‘U’, ‘U’, ‘0’, ‘U’, ‘U’, ‘U’, ‘0’, ‘U’, ‘U’ ), --|U|
( ‘U’, ‘X’, ‘0’, ‘X’, ‘X’, ‘X’, ‘0’, ‘X’, ‘X’ ), --|X|
( ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’ ), --|0|
设计起来就太麻烦了,设计者可能要重写许多function来处理一些像and、or、
not等最基本的功能。
事实上如果你声明的a、b、o、o1都是std_logic,在compile时仍然不会出 现 任 何 错 误 信 息 , 这 又 是 为 什 么 呢 ?原 因 是 std_logic及 UX01都 是 由 基 本 类 型 std_ulogic所衍生的子数据类型。在IEEE的std_logic_1164 package中,虽然没 有一个如下所示的function:
第5章 可编程逻辑器件综合设计
图5.4 宏单元的结构
第5章 可编程逻辑器件综合设计
5.2 CPLD/FPGA结构与原理
设 组 合 逻 辑 的 输 出 (AND3 的 输 出 ) 为 f , 则 f =(A+B)*C*(!D)=A*C*!D + B*C*!D (!D表示D的“非”), CPLD将以下面的方式来实现组合逻辑f如图5.6所示,A,B, C,D由CPLD芯片的引脚输入后进入可编程连线阵列(PIA), 在内部会产生A,A反,B,B反,C,C反,D,D反8个输出。 图中每一个叉表示相连(可编程熔丝导通),所以得到 f = f1 + f2 = (A*C*!D) + (B*C*!D)。这样组合逻辑就实 现了。
图5.11 宏单元的结构
第5章 可编程逻辑器件综合设计
5.3 Xilinx公司的CPLD介绍
3. XC9500的结构
图5.12 开关矩阵的内部结构
第5章 可编程逻辑器件综合设计
5.3 Xilinx公司的CPLD介绍
3. XC9500的结构 (3) 乘积项分配器 (4) 开关矩阵 (5) 输入/输出块 CI/OB
5.1 可编程逻辑器件概述
图5.1 典型的PLD的部分结构(实现组合逻辑的部分)[u1]
图5.1 典型的PLD的部分结构(实现组合逻辑的部分)
第5章 可编程逻辑器件综合设计
5.1 可编程逻辑器件概述
5.1.1 PLD分类 PLD产品一般分为两大类。 (1) 中小规模PLD:主要指PAL,GAL和CPLD,是基于 乘积项(Product-Term)技术,EEPROM(或Flash)工艺。 EEPROM工艺的PLD密度小,多用于5000门以下的小规 模设计,适合做复杂的组合逻辑,如译码。 (2) FPGA:基于查找表(Look-Up table,LUT)技术, SRAM工艺的大规模PLD/FPGA。SRAM工艺的PLD(FPGA), 密度高,触发器多,多用于10000门以上的大规模设 计,适合做复杂的时序逻辑,如数字信号处理和各种 算法。PLD产品一般分为两大类。
第5章_VHDL_状态机
康芯科技
; ; ; ; ;
KX
康芯科技
5.2 Moore状态机
5.2.2 单进程Moore状态机
【例5-4】
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY MOORE1 IS PORT (DATAIN :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
康芯科技
5.2 Moore状态机
5.2.1 多进程状态机
图5-5 采样状态机结构框图
KX
康芯科技
【例5-2】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADCINT IS PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--来自0809转换好的8位数据 CLK : IN STD_LOGIC; --状态机工作时钟 EOC : IN STD_LOGIC; --转换状态指示,低电平表示正在转换 ALE : OUT STD_LOGIC; --8个模拟信号通道地址锁存信号 START : OUT STD_LOGIC; --转换开始信号 OE : OUT STD_LOGIC; --数据输出3态控制信号 ADDA : OUT STD_LOGIC; --信号通道最低位控制信号 LOCK0 : OUT STD_LOGIC; --观察数据锁存时钟 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位数据输出 END ADCINT; ARCHITECTURE behav OF ADCINT IS TYPE states IS (st0, st1, st2, st3,st4) ; --定义各状态子类型 SIGNAL current_state, next_state: states :=st0 ; SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; -- 转换后数据输出锁存时钟信号 BEGIN ADDA <= '1';--当ADDA<='0',模拟信号进入通道IN0;当ADDA<='1',则进入通道IN1 Q <= REGL; LOCK0 <= LOCK ; COM: PROCESS(current_state,EOC) BEGIN --规定各状态转换方式 CASE current_state IS (接下页)
EDA技术与VHDL课后答案(第3版)潘松 黄继业
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY 8f_suber IS
PORT ( x0,x1,x2,x3,x4,x5,x6,x7 : IN STD_LOGIC ;
y0,y1,y2,y3,y4,y5,y6,y7 : IN STD_LOGIC ;
sub_in : IN STD_LOGIC ;
ELSIF u2_y<= u2_b ;
ELSE u2_y<= NULL ;
END IF ;
END PROCESS p_ MUX21A_u2 ;
u1_s<= s0 ; u1_a<= a2 ; u1_b<= a3 ;
tmp<= u1_y ;
u2_s<=s1 ; u2_a<= a1 ; u2_b<= tmp;
diff=>diff2 ) ;
u3 : f_suber PORT MAP (x=>x3, y=>y3, sub_in=>c, sub_out=>d,
diff=>diff3 ) ;
u4 : f_suber PORT MAP (x=>x4, y=>y4, sub_in=>d, sub_out=>e,
diff=>diff4 ) ;
sub_in x y
sub_out
diffr
0
x
0
y
0
f_suber
sub_in x y
sub_out
diffr
1
x
1
y
1
f_suber
sub_in x y
sub_out
diffr
第5章 VHDL结构及实例
8.3 VHDL子程序
8.3.7 子程序调用语句
1. 过程调用
5.3 VHDL操作符
逻辑操作符(Logical Operator) 关系操作符(Relational Operator) 算术操作符(Arithmetic Operator) 符号操作符(Sign Operator) 重载操作符(Overloading Operator)
HDL可编程逻辑器件 第5章 VHDL结构及实例
5.1 VHDL程序的基本结构
通常一个完整的VHDL程序(或称为设 计实体)应该包含库(LIBRARY)、程序包 (PACKAGE)、实体(ENTITY)、结构体 ( A R C H I T E C T U R E ) 和 配 置 (CONFIGURATION)五个部分,如图5.1 所示。
VHDL重载函数:
-- 程序包首 PACKAGE STD_LOGIC_UNSIGNED is function "+" (L : STD_LOGIC_VECTOR ; R : INTEGER) return STD_LOGIC_VECTOR ; function "+" (L : INTEGER; R : STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR ; function "+" (L : STD_LOGIC_VECTOR ; R : STD_LOGIC ) return STD_LOGIC_VECTOR ; ... end STD_LOGIC_UNSIGNED ;
库、程序包使用说明 设 计 实 体 结构体(ARCHITECTURE)
GENERIC 类属说明
实体(ENTITY)
EDA技术及应用 (5)
第 5 章 VHDL程序结构
表 5-1 端口模式说明
端口模式
端口模式说明(以设计实体为主体)
IN
OUT
BUFFER INOUT LINKAGE
输入,只读模式,将变量或信号信息通过该端口读入,与 IN、INOUT 及 BUFFER 型端口连接
输出,单向赋值模式,将信号通过该端口输出,与 OUT、INOUT 及 BUFFER 型端 口连接
第 5 章 VHDL程序结构
3. PORT端口 端口类似于原理图部件符号上的管脚,实体通过端口与外界 通信。 实体端口格式如下:
PORT(端口名:端口模式 数据类型; 端口名:端口模式 数据类型);
第 5 章 VHDL程序结构
(1) 端口名:由设计者定义的与外部通信的引脚名称,命名 应符合VHDL命名规则。
(5) 为了使同一个VHDL源程序文件能适应各个EDA开发软件 的使用要求,建议各个源程序文件的命名均与其实体名 一致。
第 5 章 VHDL程序结构
5.1 实 体
1. 实体语句结构 实体语句结构如下: ENTITY 实体名 IS
[GENERIC(类属表);] [PORT(端口表);] END [ENTITY] 实体名;
第 5 章 VHDL程序结构 (2) STD库。VHDL语言定义了两个标准程序包,即STANDARD
和TEXTIO程序包,它们都被收入在STD库中。只要在VHDL应用环 境中,可随时调用这两个程序包中的所有内容,即在编译和综合 过程中,VHDL的每一项设计都自动地将其包含进去了。由于STD 库符合VHDL语言标准,因而在应用中不必如IEEE库那样显式表达 出来。
第 5 章 VHDL程序结构 【例5.3】 构造体功能描述举例。 ARCHITECTURE bhv OF dff2 IS Signal Q1:STD_LOGIC; BEGIN PROCESS(clk0,cl) BEGIN
第5章_VHDL时序电路+状态机+交通灯
时序逻辑电路设计
读懂每一个时序电路的VHDL程 序,能够熟练进行分析。 能够根据已知功能写出相关的 VHDL程序。
重点内容: • 时序逻辑电路的基本概念 • 触发器 • 寄存器 • 计数器
时钟信号
任何时序电路都以时钟信号为驱动信号, 时序电路仅在时钟信号的边沿到来时,其 状态才发生改变。因此,时钟信号通常是 描述时序电路程序的执行条件. 另外,时序电路也总是以时钟进程的形式 进行描述的。
(三).计数器
1.计数器简介
定义: 数字电路中用来记忆时钟脉冲个数的逻辑电 路。 原理:采用几个触发器的状态,按照一定规 律随时钟变化来记忆时钟的个数。 计数器的模:一个计数器所能记忆时钟脉冲 的最大数目。
1.计数器简介
计数器的分类
1、同步计数器、异步计数器。
2、加法计数器、减法计数器和可逆计数器。
IF (clk′EVENT AND clk=′0′) THEN WAIT UNTIL clk=‘0’; IF (clk’last_value=‘1’ AND clk’event AND clk=‘0’) THEN
IF (falling_edge(clk)) THEN
复位信号
同步复位,就是当复位信号有效且在给 定的时钟边沿到来时,触发器才被复位 。换一句话说,即使复位信号有效,如 果时钟脉冲边沿未到来,触发器也不会 复位。 非同步复位则不同,一旦复位信号有效 ,触发器就立即复位。
第5章 VHDL基本逻辑电路设计
--时序逻辑电路
时序逻辑电路概述
回顾:
组合逻辑电路:任意时刻的输出仅取决于该 时刻数据的输入,与电路原来的状态无关。 时序逻辑电路:是指数字电路在任何时刻的 输出不仅取决于当时的输入信号,而且还取决 于电路原来的状态,或者说和以前的输入有关。
2024年verilogHDL培训教程华为(多场景)
verilogHDL培训教程华为(多场景)VerilogHDL培训教程——华为第一章:引言随着电子设计自动化(EDA)技术的不断发展,硬件描述语言(HDL)在数字电路设计领域扮演着越来越重要的角色。
VerilogHDL 作为一种主流的硬件描述语言,因其强大的功能、灵活的语法和广泛的应用范围,已成为数字集成电路设计工程师必备的技能之一。
本教程旨在帮助读者掌握VerilogHDL的基本概念、语法和设计方法,为华为等企业培养合格的数字电路设计人才。
第二章:VerilogHDL基础2.1VerilogHDL简介VerilogHDL是一种用于数字电路设计的硬件描述语言,它可以在多个层次上对数字系统进行描述,包括算法级、寄存器传输级(RTL)、门级和开关级。
VerilogHDL的设计初衷是为了提高数字电路设计的可重用性、可移植性和可维护性。
2.2VerilogHDL编程环境(1)文本编辑器:Notepad++、SublimeText等;(2)仿真工具:ModelSim、IcarusVerilog等;(3)综合工具:XilinxISE、AlteraQuartus等。
2.3VerilogHDL语法基础(1)关键字:VerilogHDL中的关键字具有特定含义,如module、endmodule、input、output等;(2)数据类型:包括线网类型(wire)、寄存器类型(reg)、整数类型(integer)等;(3)运算符:包括算术运算符、关系运算符、逻辑运算符等;(4)模块与端口:模块是VerilogHDL设计的基本单元,端口用于模块之间的信号传递;(5)行为描述与结构描述:行为描述用于描述电路的功能,结构描述用于描述电路的结构。
第三章:VerilogHDL设计流程3.1设计流程概述(1)需求分析:明确设计任务和功能要求;(2)模块划分:根据需求分析,将设计任务划分为若干个模块;(3)编写代码:使用VerilogHDL编写各个模块的代码;(4)仿真验证:对设计进行功能仿真和时序仿真,确保设计正确;(5)综合与布局布线:将VerilogHDL代码转换为实际电路,并进行布局布线;(6)硬件测试:在FPGA或ASIC上进行实际硬件测试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章 VHDL语言构造体的描述方式VHDL构造体的三种描述方式◆行为描述方式◆寄存器传输级(RTL)描述方式◆结构描述方式5.1 行为描述方式行为描述方式是指对系统数学模型的抽象描述,其抽象程度比寄存器传输描述方式和结构化描述方式的更高。
因此,行为描述有时被称为高级描述。
在行为描述方式的程序中,大量采用了算术运算、关系运算、惯性延时、传输延时等难于进行逻辑综合和不能进行逻辑综合的VHDL语句,一般来说,采用行为描述方式的VHDL程序主要用于系统层数学模型的仿真或者系统工作原理的仿真。
PORT(reset,clk : IN STD_LOGIC;q : OUT STD_LOGIC_VECTOR(3 downto 0)); END cnt;ARCHITECTURE behav OF cnt ISSIGNAL qo : STD_LOGIC_VECTOR(3 downto 0); BEGINPROCESS (clk,reset)BEGINIF reset='0' THENqo<="0000";ELSIF (clk'event and clk='1') THENIF qo="1001" THENqo<="0000";ELSEqo<=qo+’1’;END IF;END IF;q<=qo;END PROCESS; END behav; 异步清零的模10计数器它对计数器时钟信号的触发要求作了明确而详细的描述,对时钟信号特定的行为方式所产生的信息后果作了准确的定义。
这充分展现了VHDL最为闪光之处。
ELSIF (clk'event and clk='1') THENPORT(reset,en,load,clk : IN STD_LOGIC;din : IN STD_LOGIC_VECTOR(3 downto 0);q : OUT STD_LOGIC_VECTOR(3 downto 0)); END cntb;ARCHITECTURE behav OF cntb ISSIGNAL qo : STD_LOGIC_VECTOR(3 downto 0);BEGINPROCESS (clk,reset,en,load,qo)BEGINIF reset='0' THENqo<="0000";ELSIF (clk'event and clk='1') THENIF load='0' THENqo<=din;ELSIF en='1' THENqo<=qo+1;END IF;END IF;q<=qo;4位二进制计数器 END PROCESS;END behav;◆行为描述只描述设计电路的功能或电路的行为,而没有指明或实现这些行为的硬件结构;或者说行为描述只表示输入输出之间的转换行为,它不包含任何结构信息。
◆行为描述通常指顺序语句描述,即含有进程的非结构化的逻辑描述。
◆行为描述的设计模型定义了系统的行为,通常由一个或多个进程构成,每一个进程又包含了一系列的顺序语句。
◆在VHDL中一些专门用于描述系统行为的语句有:延时语句、决断函数、 GENERIC语句、 GUARDED BLOCK语句等。
代入语句的格式为:信号量 <= 敏感信号量表达式;例如:z <= a nor (b and c);等同于:process (a,b,c)beginz <= a nor (b and c);end process;电路信号传输必然存在延时,VHDL语言描述延时行为有如下两种类型:◆惯性延时◆传输延时1. 惯性延时:◆ 系统或器件的输出信号要发生变化必须有一段时间的延时,这段延时时间常称为系统或器件的惯性或惯性延时。
◆ 因为大多数器件在行为仿真时都会呈现惯性延时,在VHDL 语言中,惯性延时是缺省的,即在语句中如果不做特别说明,产生的延时一定是惯性延时。
◆ 惯性延时的重要特点是:当一个系统或器件,它的输入信号变化周期小于系统或器件的惯性延时时,其输出将保持不变(见惯性延时示例)。
◆ 惯性延时说明只在行为仿真时有意义,逻辑综合时将被忽略,或者在逻辑综合前必须去掉延时说明。
因为实际延时量的大小取决于最终的硬件电路的固有物理延时。
B <= a after 20ns; a b 0 10 20 30 40 50ns惯性延时示例2. 传输延时:◆ 在VHDL 语言中,传输延时不是缺省的,必须在语句中明确说明。
◆传输延时常用于描述总线延时、连接线的延时及ASIC 芯片中的路径延时。
◆具有传输延时的代入语句格式如下所示:b<=TRANSPORT a AFTER 20 ns ; 语句中“TRANSPORT ”是专门用于说明传输延时的前置词。
◆传输延时波形如图所示,当有10 ns 的脉冲波形输入时,经20ns 传输延时后,将在输出端完全复现输入端的输入波形,而不管输入波形的形状和宽窄如何。
B <= transport a after 20ns;a b0 10 20 30 40 50ns 传输延时示例LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY mux4_1 ISPORT(d0,d1,d2,d3 : IN STD_LOGIC;sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0);q : OUT STD_LOGIC);END mux4_1;ARCHITECTURE behav OF mux4_1 ISBEGINWITH sel SELECTq<=d0 AFTER 10 ns WHEN ”00”,d1 AFTER 10 ns WHEN ”01”,d2 AFTER 10 ns WHEN ”10”,d3 AFTER 10 ns WHEN ”11”,’X’ AFTER 10 ns WHEN others;END behav;5.1.3 多驱动器描述语句一条并发代入语句创建一个驱动器,当多个驱动器同时驱动一个信号时,则带来多驱动器问题,多驱动器问题由决断函数解决。
所谓决断函数是指当多个驱动器同时驱动一个信号时,定义输出哪一个值的函数。
决断函数用于声明一个决断信号。
下图为一个信号具有2个驱动源的情况。
a bya b a AND b a OR b y 0 0 0 0 0 0 1 0 1 x 1 0 0 1 x 1 1 1 1 1求解多重驱动信号的真值表图示逻辑的VHDL 程序:ARCHITECTURE behav OF myd IS SIGNAL y : reso X01; BEGIN y<=a AND b; y<=a OR b; END behav;y 的决断函数模型:FUCTION reso(a,b :X01) RETURN X01 IS BEGINIF a/=b THEN RETURN(’X’); ELSE RETURN(a) ; END IF ; END reso;当多个进程同时驱动一个信号时,会带来多驱动器问题。
多驱动器问题由决断函数解决。
逻辑设计时应避免多驱动。
std_logic_1164((标准逻辑)的判决函数如下表所示。
CONSTANT resolution_table : stdlogic_table := (-- ----------------------------------------------------------- | U X 0 1 Z W L H - | |-- ---------------------------------------------------------( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U | ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X | ( 'U','X', '0', 'X', '0', '0', '0', '0','X' ), -- | 0 | ( 'U','X', 'X','1', '1', '1', '1', '1', 'X' ), -- | 1 | ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z | ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W | ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L | ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H | ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - | );FUNCTION resolved ( s : std_logic_vector ) RETURN std_logic IS V ARIABLE result : std_logic := ‘Z’; -- weakest state defaultBEGINIF (s'LENGTH = 1) THEN RETURN s(s'LOW);ELSEFOR i IN s'RANGE LOOPresult := resolution_table(result, s(i));END LOOP;END IF;RETURN result;END resolved;5.1.4 GENERIC语句GENERIC语句用于不同层次之间的参数传递。