收藏 分享(赏)

第4章 应用VHDL设计数字系统.ppt

上传人:gnk289057 文档编号:9231230 上传时间:2019-07-30 格式:PPT 页数:83 大小:710KB
下载 相关 举报
第4章 应用VHDL设计数字系统.ppt_第1页
第1页 / 共83页
第4章 应用VHDL设计数字系统.ppt_第2页
第2页 / 共83页
第4章 应用VHDL设计数字系统.ppt_第3页
第3页 / 共83页
第4章 应用VHDL设计数字系统.ppt_第4页
第4页 / 共83页
第4章 应用VHDL设计数字系统.ppt_第5页
第5页 / 共83页
点击查看更多>>
资源描述

1、EDA技术及其应用,第4章 应用VHDL设计数字系统,推荐参考书,推荐参考书: VHDL数字电路设计教程(Ciruit Design with VHDL), Volnei A. Pedroni著,乔庐峰 王志功 等译; VHDL实用教程,成电,潘松,VHDL硬件描述语言的基本介绍,VHDL:Very-High-Speed-Integrated-Circuit Hardware Description Language。即超高速集成电路硬件描述语言。 VHDL的功能:通过用VHDL硬件描述语言编程,从而利用PLD器件(Programmable Logic Device可编程逻辑器件,包括PAL、

2、GAL、CPLD和FPGA器件等)完成某种数字逻辑电路的设计。除了VHDL这种硬件描述语言以外,还有几种比较著名的硬件描述语言HDL(Hardware Description Language),比如:ABEL,AHDL和VerilogHDL,其中VHDL和VerilogHDL都已成为IEEE标准,在我国和欧美得到了广泛使用。而ABEL正朝国际化标准努力,支持ABEL的开发系统比较少。AHDL是Altera公司开发的硬件描述语言。,4.1 多路选择器的VHDL描述,4.1.1 多路选择器的VHDL描述,图4-1 mux21a实体 图4-2 mux21a结构体,4.1 多路选择器的VHDL描述,

3、4.1.1 多路选择器的VHDL行为描述,【例4-3】 ENTITY mux21a ISPORT ( a, b, s : IN BIT; y : OUT BIT); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGINPROCESS (a,b,s) BEGINIF s = 0 THENy = a ; ELSE y = b ;END IF;END PROCESS; END ARCHITECTURE one ;,4.1 多路选择器的VHDL描述,4.1.1 多路选择器的VHDL行为描述,【例4-1】 ENTITY mux21a ISPORT

4、(a, b : IN BIT; s : IN BIT;y : OUT BIT); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGINy = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,4.1 多路选择器的VHDL描述,4.1.1 多路选择器的VHDL数据流描述,【例4-2】 ENTITY mux21a ISPORT ( a, b : IN BIT; s : IN BIT;y : OUT BIT ); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS

5、SIGNAL d,e : BIT; BEGINd = a AND (NOT S) ;e = b AND s ;y = d OR e ; END ARCHITECTURE one ;,4.1 多路选择器的VHDL描述,4.1.1 多路选择器的VHDL描述,图4-3 mux21a功能时序波形,4.1 多路选择器的VHDL描述,4.1.2 语句结构和语法说明,1. 实体表达,【例4-4】 ENTITY e_name IS PORT ( p_name_1 : port_type data_type;.p_name_n : port_type data_type ); END ENTITY e_name

6、;,4.1 多路选择器的VHDL描述,4.1.2 语句结构和语法说明,2. 实体名,3. 端口语句和端口信号名,4. 端口模式 输入(IN);输出(OUT);双向模式(INOUT);缓冲(BUFFER),4.1 多路选择器的VHDL描述,6. 结构体表达,【例4-5】 ARCHITECTURE arch_name OF e_name IS说明语句 BEGIN(功能描述语句) END ARCHITECTURE arch_name ;,5. 数据类型 整型INTEGER,布尔型BOOLEAN,标准逻辑型STD_LOGIC,比特型BIT,等 BIT型取值为1或0,注意不能写成:1,0,这样是INTE

7、GER型,4.1 多路选择器的VHDL描述,7. 赋值符号和数据比较符号,赋值:y 1,a=1 ,a=1 常用于条件语句:IF(a=1) THEN . - 注意,()中的数据类型必须是BOOLEAN,8. 逻辑操作符 AND,OR,NOT, NAND,NOR,XOR,XNOR, 只能对BIT型、BOOLLEAN型和STD_LOGIC型使用,9. 条件语句 IF 条件 THEN 顺序语句; END IF;,4.1 多路选择器的VHDL描述,10. WHEN_ELSE条件信号赋值语句,赋值目标 = 表达式 WHEN 赋值条件 ELSE表达式 WHEN 赋值条件 ELSE.表达式 ;,z = a W

8、HEN p1 = 1 ELSEb WHEN p2 = 1 ELSEc ;,4.1 多路选择器的VHDL描述,11. 进程语句和顺序语句 PROCESS(敏感信号列表)顺序语句; END PROCESS IF 条件 THEN 顺序语句; END IF; 就是一种顺序语句 每个VHDL程序中可以同时包含多个PROCESS进程语句,所有的进程语句都分别对应电路中的一个模块,所有进程语句之间是“并行运行”的。但是进程语句内部的顺序语句是按先后顺序来运行的。,12. 文件取名和存盘 文件名必须与实体名一致,文件后缀必须是VHD,不分大小写。,4.2 寄存器描述的VHDL程序,4.2.1 D触发器的描述,

9、图4-4 D触发器,4.2 寄存器描述的VHDL程序,【例4-6】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 ISPORT (CLK : IN STD_LOGIC ;D : IN STD_LOGIC ;Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 ISSIGNAL Q1 : STD_LOGIC ; -定义一个信号,类似芯片内一个数据暂存点 BEGINPROCESS (CLK) -因为进程中要读取CLK,所以应放在敏感信号列表中BEGINIF CLKEVENT AND

10、 CLK = 1 THENQ1 = D ; END IF; END PROCESS ;Q = Q1 ; -将内部的暂存数据向端口输出(双横线-是注释符号) END bhv;,4.2 寄存器描述的VHDL程序,【例4-6】或者还可以这样描述 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 ISPORT (CLK : IN STD_LOGIC ;D : IN STD_LOGIC ;Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS BEGINPROCESS (CLK) -因为

11、进程中要读取CLK,所以应放在敏感信号列表中VARIABLE Q1 : STD_LOGIC ; -定义一个变量,类似芯片内一个数据暂存点BEGINIF CLKEVENT AND CLK = 1 THENQ1 := D ; END IF; Q = Q1 ; -将内部的暂存数据向端口输出(双横线-是注释符号)END PROCESS ; END bhv;,4.2 寄存器描述的VHDL程序,4.2.2 VHDL描述的语言现象说明,1. 标准逻辑位数据类型STD_LOGIC,BIT数据类型定义: TYPE BIT IS(0,1); -只有两种取值STD_LOGIC数据类型定义: TYPE STD_LOG

12、IC IS (U,X,0,1,Z,W,L,H,-);因为 STD_LOGIC类型包括了BIT类型的取值,而且范围更广泛,所以一般设计电路时多使用STD_LOGIC类型,而很少使用BIT类型,4.2 寄存器描述的VHDL程序,4.2.2 VHDL描述的语言现象说明,2. 设计库和标准程序包,LIBRARY WORK ; LIBRARY STD ; USE STD.STANDARD.ALL ; BIT类型在STD库中定义,由于STD库和WORK是自动打开的,所以使用BIT类型可以不用先说明STD库和程序包STANDARD,LIBRARY ; USE ALL ;,LIBRARY IEEE ; USE

13、 IEEE.STD_LOGIC_1164.ALL ;,STD_LOGIC类型在IEEE库中定义,由于IEEE库不是标准库,系统不能自动打开,所以使用STD_LOGIC类型一定要先说明IEEE库和相应的程序包STD_LOGIC_1164,4.2 寄存器描述的VHDL程序,4.2.2 VHDL描述的语言现象说明,3. 信号定义和数据对象,4. 上升沿检测表达式和信号属性函数EVENT,5. 不完整条件语句与时序电路 不完整条件语句是描述时序电路的关键,ARCHITECTURE bhv OF DFF1 ISSIGNAL Q1 : STD_LOGIC ; -定义一个信号,类似芯片内一个数据暂存点 BE

14、GINPROCESS (CLK) -因为进程中要读取CLK,所以应放在敏感信号列表中BEGINIF CLKEVENT AND CLK = 1 THENQ1 = D ; END IF; END PROCESS ;Q = Q1 ; -将内部的暂存数据向端口输出(双横线-是注释符号) END bhv;,4.2 寄存器描述的VHDL程序,4.2.2 VHDL描述的语言现象说明,【例4-7】 ENTITY COMP_BAD IS PORT( a1,b1 : IN BIT;q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS

15、 (a1,b1) BEGIN IF a1 b1 THENq1 = 1 ;ELSIF a1 b1 THEN -注意写法,不是ELSEIFq1 = 0 ; -未提及当a1=b1时,q1作何操作,那么q1就保持原值不变,有记忆END IF; END PROCESS ; END ;,5. 不完整条件语句与时序电路,4.2 寄存器描述的VHDL程序,4.2.2 VHDL描述的语言现象说明,5. 不完整条件语句与时序电路,图4-5 例4-7的电路图(Synplify综合),4.2 寄存器描述的VHDL程序,4.2.2 VHDL描述的语言现象说明,5. 不完整条件语句与时序电路 在用if语句描述组合电路的时

16、候,一定要考虑到所有的条件下的输出信号取值。,【例4-8】 . IF a1 b1 THEN q1 = 1 ; ELSEq1 = 0 ; END IF; .,4.2 寄存器描述的VHDL程序,4.2.2 VHDL描述的语言现象说明,5. 不完整条件语句与时序电路,图4-6 例4-8的电路图(Synplify综合),4.2 寄存器描述的VHDL程序,4.2.3 实现时序电路的不同表述,【例4-9】 . PROCESS (CLK) BEGINIF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THENQ = D ; -确保CLK的变化是一次上升沿的跳变END

17、IF; END PROCESS ;,4.2 寄存器描述的VHDL程序,4.2.3 实现时序电路的不同表述,【例4-10】 . PROCESS (CLK) BEGINIF CLK=1 AND CLKLAST_VALUE=0 THEN Q = D ; END IF; END PROCESS ;,4.2 寄存器描述的VHDL程序,【例4-11】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 ISPORT (CLK,D : IN STD_LOGIC ;Q : OUT STD_LOGIC ); END ; ARCHITECTURE bh

18、v OF DFF3 ISSIGNAL Q1 : STD_LOGIC; BEGINPROCESS (CLK)BEGINIF RISING_EDGE(CLK) THEN - 必须打开STD_LOGIC_1164程序包 Q1 = D ; END IF; END PROCESS ;Q = Q1 ; -在此,赋值语句可以放在进程外,作为并行赋值语句 END ;,4.2 寄存器描述的VHDL程序,4.2.3 实现时序电路的不同表述,【例4-12】 . PROCESS BEGINWAIT UNTIL CLK = 1 ; -利用wait语句Q = D ; END PROCESS; VHDL要求,当进程中使用了

19、WAIT语句后,就不必列出敏感信号。,4.2 寄存器描述的VHDL程序,4.2.3 实现时序电路的不同表述,【例4-13】 . PROCESS (CLK) BEGINIF CLK = 1 THENQ = D ; -利用进程的启动特性产生对CLK的边沿检测END IF; END PROCESS ;,图4-7 例4-13的时序波形,4.2 寄存器描述的VHDL程序,4.2.3 实现时序电路的不同表述,【例4-14】 . PROCESS (CLK,D) BEGINIF CLK = 1 THEN -电平触发型寄存器Q = D ; END IF; END PROCESS;,图4-8 例4-14的时序波形

20、,4.2 寄存器描述的VHDL程序,4.2.4 异步时序电路设计,【例4-15】. ARCHITECTURE bhv OF MULTI_DFF ISSIGNAL Q1,Q2 : STD_LOGIC; BEGINPRO1: PROCESS (CLK)BEGINIF CLKEVENT AND CLK=1 THENQ1 = NOT (Q2 OR A);END IF; END PROCESS ;PRO2: PROCESS (Q1)BEGINIF Q1EVENT AND Q1=1 THENQ2 = D; END IF; END PROCESS ; QQ = Q2 ; .,异步电路必须使用多个时钟进程语句

21、来构成,每个进程使用不同的时钟信号; 一个时钟进程语句只能构成对应单一时钟信号的时序电路。,4.2 寄存器描述的VHDL程序,4.2.4 异步时序电路设计 前一级触发器的输出是后一级触发器的时钟信号,这样所有的触发器不是同时翻转,所以叫做“异步时序电路”,图4-9 例4-15综合后的电路(Synplify综合),4.2 寄存器描述的VHDL程序,4.2.4 请对比:同步时序电路设计,【例4-15】. ARCHITECTURE bhv OF MULTI_DFF ISSIGNAL Q1,Q2 : STD_LOGIC; BEGINPRO1: PROCESS (CLK)BEGINIF CLKEVENT

22、 AND CLK=1 THENQ1 = NOT (Q2 OR A);END IF; END PROCESS ;PRO2: PROCESS (CLK)BEGINIF CLKEVENT AND CLK=1 THENQ2 = D; END IF; END PROCESS ; QQ = Q2 ; .,4.3 1位全加器的VHDL描述,VHDL语言的结构化描述 4.3.1 半加器描述,图4-11 全加器f_adder电路图及其实体模块,4.3 1位全加器的VHDL描述,4.3.1 半加器描述,图4-10 半加器h_adder电路图及其真值表,4.3 1位全加器的VHDL描述,4.3.1 半加器描述,【例

23、4-16】 LIBRARY IEEE; -半加器描述(1):布尔方程描述方法 USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder IS BEGIN so = NOT(a XOR (NOT b) ; co = a AND b ; END ARCHITECTURE fh1;,4.3 1位全加器的VHDL描述,4.3.1 半加器描述,图4-11 全加器f_add

24、er电路图及其实体模块,【例4-17】 LIBRARY IEEE; -半加器描述(2):真值表描述方法 USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder IS SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; -定义标准逻辑位矢量数据类型 BEGINabc so so so so NULL ;END CASE;END

25、 PROCESS; END ARCHITECTURE fh1 ;,4.3 1位全加器的VHDL描述,4.3.1 或门逻辑描述,【例4-18】 LIBRARY IEEE ; -或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a ISPORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGINc = a OR b ; END ARCHITECTURE one ;,4.3 1位全加器的VHDL描述,4.3.1 半加器描述,【

26、例4-19】 LIBRARY IEEE; -1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder ISPORT (ain,bin,cin : IN STD_LOGIC;cout,sum : OUT STD_LOGIC ); END ENTITY f_adder; ARCHITECTURE fd1 OF f_adder ISCOMPONENT h_adder -调用半加器声明语句PORT ( a,b : IN STD_LOGIC;co,so : OUT STD_LOGIC);END COMPONENT ;COMPONENT or2a

27、PORT (a,b : IN STD_LOGIC; c : OUT STD_LOGIC);END COMPONENT;SIGNAL d,e,f : STD_LOGIC; -定义3个信号作为内部的连接线。 BEGINu1 : h_adder PORT MAP(a=ain,b=bin,co=d,so=e); -元件例化语句u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum);u3 : or2a PORT MAP(a=d, b=f, c=cout); END ARCHITECTURE fd1;,4.3 1位全加器的VHDL描述,1. CASE语句,CASE I

28、S WHEN = ; . ; ; WHEN = ; . ; ; . WHEN OTHERS = ; END CASE ;,WHEN OTHERS = ;,总结:,4.3 1位全加器的VHDL描述,2. 标准逻辑矢量数据类型,描述端口:B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 描述信号:SIGNAL A :STD_LOGIC_VECTOR(1 TO 4),B = “01100010“ ; - B(7)为 0B(4 DOWNTO 1) = “1101“ ; - B(4)为 1B(7 DOWNTO 4) = A ; - B(6)等于 A(2),SIGNAL C :

29、BIT_VECTOR(3 DOWNTO 0);,总结:,4.3 1位全加器的VHDL描述,3. 并置操作符 ,SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; . a = 1 0 d(1) 1 ; - 元素与元素并置,并置后的数组长度为4 . IF a d = “101011“ THEN . - 在IF条件句中可以使用并置符,总结:,4.3 1位全加器的VHDL描述,4. 全加器描述和例化语句,元件说明: COMPONENT 元件名 IS PORT (端口名表) ;END

30、COMPONENT 文件名 ;,端口名可以与原来设计文件的名字不一样,但是数据类型要一样。 COMPONENT h_adderPORT ( c,d : IN STD_LOGIC;e,f : OUT STD_LOGIC);,元件连接: 例化名 : 元件名 PORT MAP( 端口名 = 连接端口名,.);,总结:,4.3 1位全加器的VHDL描述,总结:,5. 电路设计中利用VHDL语言的描述方法 : 行为描述方法 例如:IF s = 0 THEN y ain,b=bin,co=d,so=e); u2 : h_adder PORT MAP(a=e,b=cin,co=f,so=sum); u3 :

31、 or2a PORT MAP(a=d, b=f, c=cout);,4.4 计数器设计,【例4-20】上一个程序相当于:D触发器+加法器 的结构 ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : OUT INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 ISSIGNAL D,Q1 : INTEGER RANGE 15 DOWNTO 0; BEGIN PROCESS (CLK) -D触发器 BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; -VHDL要求赋

32、值符号两边数据类型要一致END IF;END PROCESS ;D = Q1 + 1; -加法器Q = Q1; END bhv;,4.4 计数器设计,【例4-20】最好这样描述 ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : OUT INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 ISSIGNAL Q1 : INTEGER RANGE 15 DOWNTO 0; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 +

33、 1 ; -VHDL要求赋值符号两边数据类型要一致END IF;END PROCESS ;Q = Q1; END bhv;,4.4 计数器设计,【例4-20】不建议使用BUFFER ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 ISBEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; END IF;END PROCESS ; END bhv; -

34、注意,不是当时钟上升沿来到时,才加1并将加法结果传递给Q,而是时钟上升沿来到时,只是将加1的结果传递给Q,加1的操作是在D触发器的输出一变化马上就加完了。,4.4 计数器设计,4.4.1 4位二进制加法计数器设计,1 十进制整数 0 十进制整数 35 十进制整数 10E3 十进制整数,等于十进制整数10000 16#D9# 十六进制整数,等于十六进制整数D9 H 8#720# 八进制整数,等于八进制整数720 O 2#11010010# 二进制整数,等于二进制整数11010010 B 整数的表达不加引号,如:1、0、25 逻辑位的数据必须加引号,如:1、0、”10”、”10110”,4.4.2

35、 整数类型,4.4 计数器设计,4.4.3 计数器设计的其他表述方法,【例4-21】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ; ARCHITECTURE bhv OF CNT4 ISSIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK)

36、 BEGIN IF CLKEVENT AND CLK = 1 THENQ1 = Q1 + 1 ; -为了进行“标准逻辑向量”和“整数”类型数据的加法运算,必须先打开- USE IEEE.STD_LOGIC_UNSIGNED.ALL,这叫“运算符重载”END IF;END PROCESS ;Q = Q1 ; END bhv;,4.4 计数器设计,此加法器由两大部分组成:纯组合电路:加法器时序电路:边沿触发方式锁存器,图4-12 4位加法计数器RTL电路(Synplify综合),4.4 计数器设计,4.4.3 计数器设计的其他表述方法,图4-13 4位加法计数器工作时序,4.5 一般加法计数器设计

37、,【例4-22】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 ISPORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10; ARCHITECTURE behav OF CNT10 IS BEGINPROCESS(CLK, RST, EN)VARIABLE CQI : STD_LOGIC_VECTOR(3 DO

38、WNTO 0); BEGINIF RST = 1 THENCQI := (OTHERS =0) ; -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿IF EN = 1 THEN -检测是否允许计数(同步使能)IF CQI 0); -大于9,计数值清零 END IF;END IF;END IF; IF CQI = 9 THEN COUT = 1; -计数大于9,输出进位信号ELSE COUT = 0;END IF;CQ = CQI; -将计数值向端口输出END PROCESS; END behav;,4.5 一般加法计数器设计,4.5.1 相关语法说

39、明,1. 变量,“:= ”,2. 省略赋值操作符(OTHERS=X),a:= 1,SIGNAL d1 : STD_LOGIC_VECTOR(4 DOWNTO 0);VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0);. d1 0); a1 := (OTHERS=0) ;,d1 e(3),3=e(5), OTHERS=e(1) );,d1= e(1) ,4.5 一般加法计数器设计,4.5.2 程序分析,图4-14 例4-22的RTL电路(Synplify综合),4.5 一般加法计数器设计,4.5.2 程序分析,图4-15 例4-22的工作时序,4.5 一般加法

40、计数器设计,4.5.3 含并行置位的移位寄存器设计,【例4-23】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHFRT IS - 8位右移寄存器PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB : OUT STD_LOGIC ); END SHFRT; ARCHITECTURE behav OF SHFRT IS BEGINPROCESS (CLK, LOAD)VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNT

41、O 0);BEGINIF CLKEVENT AND CLK = 1 THENIF LOAD = 1 THEN REG8 := DIN; -由(LOAD=1)装载新数据ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF;END IF;QB = REG8(0); - 输出最低位END PROCESS; END behav;,4.5 一般加法计数器设计,4.5.3 含并行置位的移位寄存器设计,图4-16 例4-23的工作时序,4.6 基于QuartusII的VHDL文本输入设计,4.6.1 建立工作库文件夹和编辑设计文件,图4-17 选择VHDL文本编

42、辑器,4.6 基于QuartusII的VHDL文本输入设计,4.6.1 建立工作库文件夹和编辑设计文件,图4-18 选择编辑文件的语言类型,键入源程序并存盘,4.6 基于QuartusII的VHDL文本输入设计,4.6.2 创建工程,图4-19 利用“New Preject Wizard”创建工程cnt10,4.6 基于QuartusII的VHDL文本输入设计,4.6.2 创建工程,图4-20 将所有相关的文件都加入进此工程,4.6 基于QuartusII的VHDL文本输入设计,4.6.3 全程编译,图4-21例4-22的时序仿真波形图,4.6.4 时序仿真,4.6 基于QuartusII的V

43、HDL文本输入设计,4.6.5 应用RTL电路图观察器,图4-22 RTL Viewer选择,4.6 基于QuartusII的VHDL文本输入设计,4.6.5 应用RTL电路图观察器,图4-23 例4-22的RTL图,4.6 基于QuartusII的VHDL文本输入设计,4.6.6 硬件测试器,图4-24下载cnt10.sof并启动SignalTap II,测试输出数据,4.6 基于QuartusII的VHDL文本输入设计,4.6.6 硬件测试器,图4-25 SignalTap II数据窗设置后的信号波形,习 题,4-1. 画出与下例实体描述对应的原理图符号元件:ENTITY buf3s IS

44、 - 实体1: 三态缓冲器PORT (input : IN STD_LOGIC ; - 输入端enable : IN STD_LOGIC ; - 使能端output : OUT STD_LOGIC ) ; - 输出端 END buf3x ; ENTITY mux21 IS -实体2: 2选1多路选择器PORT (in0, in1, sel : IN STD_LOGIC; output : OUT STD_LOGIC);,习 题,4-2. 图4-26所示的是4选1多路选择器,试分别用IF_THEN语句和CASE语句的表达方式写出此电路的VHDL程序。选择控制的信号s1和s0的数据类型为STD_L

45、OGIC_VECTOR;当s1=0,s0=0;s1=0,s0=1;s1=1,s0=0和s1=1,s0=1分别执行y=a、y=b、y=c、y=d。,图4-26 4选1多路选择器,习 题,4-3. 图4-27所示的是双2选1多路选择器构成的电路MUXK,对于其中MUX21A,当s=0和1时,分别有y=a和y=b。试在一个结构体中用两个进程来表达此电路,每个进程中用CASE语句描述一个2选1多路选择器MUX21A。,图4-27 双2选1多路选择器,习 题,4-4. 图4-28是一个含有上升沿触发的D触发器的时序电路,试写出此电路的VHDL设计文件。,图4-28 时序电路图,习 题,4-5. 给出1位

46、全减器的VHDL描述。要求: (1) 首先设计1位半减器,然后用例化语句将它们连接起来,图4-29中h_suber是半减器,diff是输出差,s_out是借位输出,sub_in是借位输入。 (2) 以1位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设计(减法运算是 x y - sun_in = diffr)。,图4-29 1位全减器,习 题,4-6. 根据图4-30,写出顶层文件MX3256.VHD的VHDL设计文件。,图4-30 题4-6电路图,4-7. 设计含有异步清零和计数使能的16位二进制加减可控计数器。,实验与实践,4-1. 基于VHDL的组合电路的设计,.

47、COMPONENT MUX21APORT ( a,b,s : IN STD_LOGIC;y : OUT STD_LOGIC);END COMPONENT ; .u1 : MUX21A PORT MAP(a=a2,b=a3,s=s0,y=tmp); u2 : MUX21A PORT MAP(a=a1,b=tmp,s=s1,y=outy); END ARCHITECTURE BHV ;,实验与实践,4-2. 时序电路的设计,4-3. 含异步清0和同步时钟使能的加法计数器的设计,4-4. 数控分频器的设计,图4-31 当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns),实验与实践,4

48、-2. 时序电路的设计,4-3. 含异步清0和同步时钟使能的加法计数器的设计,4-4. 数控分频器的设计,【例4-24】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF ISPORT ( CLK : IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);FOUT : OUT STD_LOGIC ); END; ARCHITECTURE one OF DVF ISSIGNAL FULL : STD_LOGIC; BEGINP_R

49、EG: PROCESS(CLK)VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN IF CLKEVENT AND CLK = 1 THENIF CNT8 = “11111111“ THEN CNT8 := D; -当CNT8计数计满时,输入数据D被同步预置给计数器CNT8FULL = 1; -同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; -否则继续作加1计数FULL = 0; -且输出溢出标志信号FULL为低电平 END IF;END IF;END PROCESS P_REG ;P_DIV: PROCESS(FULL)VARIABLE CNT2 : STD_LOGIC;BEGINIF FULLEVENT AND FULL = 1 THEN CNT2 := NOT CNT2; -如果溢出标志信号FULL为高电平,D触发器输出取反IF CNT2 = 1 THEN FOUT = 1; ELSE FOUT = 0;END IF;END IF;END PROCESS P_DIV ; END;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报