《第4章VHDL设计初步1.ppt》由会员分享,可在线阅读,更多相关《第4章VHDL设计初步1.ppt(36页珍藏版)》请在三一文库上搜索。
1、第4章,VHDL设计初步,本章内容,4.1 多路选择器VHDL描述(简单组合电路) 4.2 寄存器描述及其VHDL语言现象(简单时序电路) 4.3 1为二进制全加器的VHDL设计(实例) 4.4 VHDL文本输入设计方法(工具使用,通过上机操作掌握),本章重点掌握内容,1、实体及端口的定义。 2、结构体和信号的定义。 3、基本逻辑操作符和信号赋值操作符。 4、IF-THEN-ELSE(顺序)、WHEN-ELSE(并行)语句。 5、进程语句。 6、信号的上升沿表示方法。 7、元件例化方法。,是什么是VHDL?,Very high speed integrated Hardware Descrip
2、tion Language (VHDL) 是IEEE、工业标准硬件描述语言 用语言的方式而非图形等方式描述硬件电路 容易修改 容易保存 特别适合于电路的设计,VHDL的功能和标准,VHDL 描述 输入端口 输出端口 电路的行为和功能 VHDL有过两个标准: IEEE Std 1076-1987 (called VHDL 1987) IEEE Std 1076-1993 (called VHDL 1993),【例4-1】 ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ; A
3、RCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,4.1 多路选择器VHDL描述,图4-1 mux21a实体,图4-2 mux21a结构体,4.1.1 2选1多路选择器的VHDL描述,4.1.1 2选1多路选择器的VHDL描述,【例4-2】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNA
4、L d,e : BIT; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECTURE one ;,【例4-3】 . . . ARCHITECTURE one OF mux21a IS BEGIN y = (a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one;,4.1.1 2选1多路选择器的VHDL描述,【例4-4】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; AR
5、CHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one ;,4.1.1 2选1多路选择器的VHDL描述,图4-3 mux21a功能时序波形,4.1.2 VHDL相关语句说明,1. 实体表达,【例4-5】 ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type ); END ENTIT
6、Y e_name; 或: 【例4-6】 ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type ); END e_name;,4.1.2 VHDL相关语句说明,2. 实体名,3. PORT语句和端口信号名,4. 端口模式,IN,OUT,INOUT,BUFFER,5. 数据类型BIT,4.1.2 VHDL相关语句说明,6. 结构体表达,【例4-7】 ARCHITECTURE arch_name OF e_name IS (说明语句) BEGIN (功能描述语句) END ARCHITECTU
7、RE arch_name ; 或: 【例4-8】 ARCHITECTURE arch_name OF e_name IS (说明语句) BEGIN (功能描述语句) END arch_name ;,7. 信号传输(赋值)符号和数据比较符号,4.1.2 VHDL相关语句说明,8. 逻辑操作符AND、OR、NOT,9. IF_THEN条件语句,10. WHEN_ELSE条件信号赋值语句,赋值目标 = 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE . 表达式 ;,11. PROCESS进程语句和顺序语句,12. 文件取名和存盘,4.1.3 VHDL设计的基本概念和语句小
8、节,数据类型,信号赋值符,条件比较符, 延时,实体,结构体,端口定义,端口模式,逻辑操作符,IF条件语句,并行条件语句,进程语句,顺序语句,并行语句,文件取名,文件存盘,4.2 寄存器描述及其VHDL语言现象,4.2.1 D触发器的VHDL描述,【例4-9】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1
9、 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; Q = Q1 ; -将内部的暂存数据向端口输出 END PROCESS ; END bhv;,D触发器,比较用5种不同语句的D触发器VHDL程序,Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin p
10、rocess (clk) begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ; end process; end test1_body;,LIBRARY IEEE; USE IEEE.std_logic_1164.all; Entity test1 is port (clk, d : in bit; q : out bit); end test1; architecture body of test1 is begin process (clk,d) begin if rising_edge(clk) then q =
11、 d; end if; end process; end test1_body;,They are all the same,DFF,Entity test1 is port (clk : in bit; d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk,d) begin if (clk = 1) then q1 = d; end if; q = q1 ; end process; end body;,Entity test1 is po
12、rt (clk : in bit; d : in bit; q : out bit); end test1; architecture body of test1 is signal q1 : bit ; begin process (clk) begin if (clk = 1) then q1 = d; end if; q = q1 ; end process; end body;,4.2.2 D触发器VHDL描述的语言现象说明,1. 标准逻辑位数据类型STD_LOGIC,BIT数据类型定义: TYPE BIT IS(0,1);,STD_LOGIC数据类型定义: TYPE STD_LOGI
13、C IS (U,X,0,1,Z,W,L,H,-);,STD_LOGIC所定义的9种数据的含义是: U表示未初始化的; X表示强未知的; 0表示强逻辑0; 1表示强逻辑1; Z表示高阻态; W 表示弱未知的; L表示弱逻辑0; H表示弱逻辑1; -表示忽略。,4.2.2 D触发器VHDL描述的语言现象说明,2. 设计库和标准程序包,3. SIGNAL信号定义和数据对象,【例4-10】 ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = D ; END IF; END PROC
14、ESS ; END ;,使用库和程序包的一般定义表式是: LIBRARY ; USE ALL ;,4.2.2 D触发器VHDL描述的语言现象说明,4. 上升沿检测表式和信号属性函数EVENT,关键词EVENT是信号属性,VHDL通过以下表式来测定某信号的跳变边沿: EVENT,5. 不完整条件语句与时序电路,【例4-11】 ENTITY COMP_BAD IS PORT( a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a
15、1 b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 = 0 ;- 未提及当a1=b1时,q1作何操作 END IF; END PROCESS ; END ;,4.2.2 D触发器VHDL描述的语言现象说明,5. 不完整条件语句与时序电路,图4-5 例4-11的电路图,5. 不完整条件语句与时序电路,【例4-12】 ENTITY COMP_GOOD IS PORT(a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_GOOD IS BEGIN PROCESS (a1,b1) B
16、EGIN IF a1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; END PROCESS ; END,图4-6 例4-12的电路图,4.2.5 VHDL设计基本概念和语言现象小节,数据类型,数据对象,信号属性,时钟检测,VHDL库,程序包,时序电路,异步时序,4.3 1位二进制全加器的VHDL设计,图4-10半加器h_adder电路图,图4-11 全加器f_adder电路图,4.3.1 半加器描述和CASE语句,a b so co 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1,表5-1 半加器h_adder逻辑功能真值表,1. CASE语句,
17、CASE语句的一般表式是:,CASE IS When = ; . ; ; When = ; . ; ; . END CASE ;,2. 标准逻辑矢量数据类型STD_LOGIC_VECTOR,3. 并置操作符 ,以下是一些并置操作示例:,SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; . a = 10d(1)1 ; - 元素与元素并置,并置后的数组长度为4 . IF a d = “101011“ THEN . - 在IF条件句中可以使用并置符,4.3.1 半加器描述和CAS
18、E语句,在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽,如: B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4),4.3.1 半加器描述和CASE语句,【例4-20】 LIBRARY IEEE ;-或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a
19、IS BEGIN c = a OR b ; END ARCHITECTURE fu1;,【例4-21】 LIBRARY IEEE; -半加器描述(1) USE IEEE.STD_LOGIC_1164.ALL; ENTITY adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY adder; ARCHITECTURE fh1 OF adder is BEGIN so = NOT(a XOR (NOT b) ; co = a AND b ; END ARCHITECTURE fh1;,【例4-22】 LIBR
20、ARY 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) ; BEGIN abc so so so so NULL ; END CASE; END PROCESS; END ARCHITECTURE fh1 ;,【例4-22】 . -
21、半加器描述(3) SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 ); BEGIN abc cso cso cso cso=“10“ ; END CASE; END PROCESS; END ARCHITECTURE fh1;,【例4-23】 LIBRARY IEEE; -1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT (ain,bin,cin : IN STD_LOGIC; cout,sum : OUT STD_LOGIC ); END ENTITY f_adder
22、; ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder PORT ( a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC); END COMPONENT ; COMPONENT or2a PORT (a,b : IN STD_LOGIC; c : OUT STD_LOGIC); END COMPONENT; SIGNAL d,e,f : STD_LOGIC; BEGIN u1 : h_adder PORT MAP(a=ain,b=bin,co=d,so=e); u2 : h_adder PORT MAP(a=e, b
23、=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout); END ARCHITECTURE fd1;,4.3.2 全加器描述和例化语句,元件例化语句由两部分组成,第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示: COMPONENT 元件名 IS PORT (端口名表) ; END COMPONENT 文件名 ;,元件例化语句的第二部分则是此元件与当前设计实体(顶层文件)中元件间及端口的连接说明。语句的表达式如下: 例化名 : 元件名 PORT MAP( 端口名 = 连接端口名
24、,.);,4.5 一位十进制计数器设计,Port (rst,en,clk:in std_logic;cq:out std_logic_vectore(3 downto 0);cout:out std_logic); If rst=1 then cq=0000 ; elsif clkevent and clk=1 then if en=1 then if tmp9 then tmp=tmp+1; end if; end if End if; If tmp=9 then tmp=0000;cout=1; else cout=0; end if; Cq=tmp;,4.5.3 含并置的移位寄存器的设计
25、,IF CLKEVENT AND CLK=1 THEN IF LOAD=1 REG8=DIN; ELSE REG8(6 DOWNTO 0)=REG(7 DOWNTO 1); END IF; QB=REG8(0); END IF,STEP1:建立 工作库文件夹,STEP2:输入设计项目 原理图/VHDL文本代码,STEP3:存盘,注意 原理图/文本取名,STEP4:将设计项 目设置成Project,STEP5:选 择目标器件,STEP11: 硬件测试,STEP9:引脚 锁定并编译,STEP8:仿真测 试和波形分析,STEP7:建立仿 真波形文件,STEP6: 启动编译,STEP10:编程 下载/配置,VHDL文本输入设计流程,作业,P93 4-2 设计4选1多路选择器 4-4 设计时序电路,实验内容,1、利用CASE语句由真值表实现1位全加器,再由1位全加器例化实现8位全加器。 2、用VHDL语言实现7人表决器,多数通过绿灯亮,否则红灯亮。,
链接地址:https://www.31doc.com/p-2909381.html