《[信息与通信]6设计进阶》由会员分享,可在线阅读,更多相关《[信息与通信]6设计进阶(35页珍藏版)》请在金锄头文库上搜索。
1、EDA技术实用教程,第6章 VHDL设计进阶,2019/1/19,6.1 数据对象DATA OBJECTS,6.1.1 常数(CONSTANT),常数的值不变,它可以在任何部分说明,并可以是任意数据类型,常数定义的一般表述: CONSTANT 常数名:数据类型 := 表达式 ;,例如: CONSTANT FBT: STD_LOGIC_VECTOR :=“010110”; CONSTANT DATA: INTEGER:=15;,2019/1/19,6.1 数据对象DATA OBJECTS,变量可以改变值,它可以在进程和子程序中说明,并可以是任意数据类型,6.1.2 变量(VARIABLE),定义
2、变量的一般表述: VARIABLE 变量名 : 数据类型 := 初始值 ;,例如: VARIABLE muxval : integer range 7 downto 0; muxval:=0; VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); CQI := (OTHERS =0),2019/1/19,6.1 数据对象DATA OBJECTS,信号可以随时间而改变值,它可以在结构中说明,并可以是任意数据类型,6.1.3 信号(SIGNAL),定义格式: SIGNAL 信号名: 数据类型 := 初始值 ;,赋值: 信号名=同类型的值;,2019/1/19,6
3、.1.4 进程中的信号与变量赋值语句,表6-1 信号与变量赋值语句功能的比较,行为特性的三个方面,() 信号赋值需要一个延时。 ()在一个进程中,所有赋值语句(包括变量赋值),在进程启动时立即执行赋值操作,但信号赋值须在一个延时后完成(END )。 () 当在进程中存在对同一信号多次赋值时,最后一个赋值有效。,2019/1/19,【例6-5】 SIGNAL in1,in2,e1, . : STD_LOGIC ; . PROCESS(in1,in2, . . .) VARIABLE c1,. . . : STD_LOGIC_VECTOR(3 DOWNTO 0) ; BEGIN IF in1 =
4、1 THEN . - 第 1 行 e1 = “1010“ ; - 第 2 行 . IF in2 = 0 THEN . . . - 第 15+n 行 . c1 := “0011“ ; - 第 30+m 行 . END IF; END PROCESS;,6.1.4 进程中的信号与变量赋值语句,2019/1/19,【例6-1】 ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE QQ : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN QQ := D1 ; END IF; Q1 = QQ; E
5、ND PROCESS ; END ;,. . . 【例6-2】 ARCHITECTURE bhv OF DFF3 IS SIGNAL QQ : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK =1 THEN QQ = D1 ; END IF; Q1 = QQ; END PROCESS ; END ;,6.1.4 进程中的信号与变量赋值语句,信号与变量_相同综合结果示例,2019/1/19,6.1.4 进程中的信号与变量赋值语句,信号与变量_不同综合结果示例,2019/1/19,6.1.4 进程中的信号与变量赋值语句,【例6-4
6、】,信号与变量_不同综合结果示例,2019/1/19,【例6-6】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS signal muxval : integer range 7 downto 0; BEGIN process(i0,i1,i2,i3,a,b) begin muxval q q q q null; e
7、nd case; end process; END body_mux4;,2019/1/19,图6-4 例6-6的错误的工作时序,2019/1/19,【例6-7】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS BEGIN process(i0,i1,i2,i3,a,b) variable muxval : inte
8、ger range 7 downto 0; begin muxval := 0; if (a = 1) then muxval := muxval + 1; end if; if (b = 1) then muxval := muxval + 2; end if; case muxval is when 0 = q q q q null; end case; end process; END body_mux4;,2019/1/19,图6-5 例6-7的正确工作时序,2019/1/19,【例6-8】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTI
9、TY shift IS PORT (clk,c0: IN STD_LOGIC; md: in std_logic_vector(2 downto 0); d: in std_logic_vector(7 downto 0); qb: out std_logic_vector(7 downto 0); cn : OUT STD_LOGIC ); END ;,2019/1/19,【例6-8】 ARCHITECTURE behav OF shift IS signal reg : std_logic_vector(7 downto 0); signal cy: STD_LOGIC; BEGIN PR
10、OCESS(clk,c0,md) BEGIN IF clkevent and clk=1 then CASE md is when “001“=reg(0)reg(0)reg(7)reg(7)reg(7 downto 0) reg=reg;cy=cy; end case; end if; END PROCESS; qb(7 downto 0)=reg(7 downto 0);cn=cy; END ;,2019/1/19,图6-7 例6-8的工作时序,2019/1/19,6.2 双向电路和三态控制电路设计,6.2.1 三态门设计,【例6-9】 LIBRARY IEEE; USE IEEE.STD
11、_LOGIC_1164.ALL; ENTITY tri_s IS port ( enable : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END tri_s ; ARCHITECTURE bhv OF tri_s IS BEGIN PROCESS(enable,datain) BEGIN IF enable = 1 THEN dataout = datain ; ELSE dataout =“ZZZZZZZZ“ ; END IF ; E
12、ND PROCESS; END bhv;,图6-8 8位3态控制门电路,2019/1/19,6.2 双向电路和三态控制电路设计,6.2.2 双向端口设计,【例6-10】 library ieee; use ieee.std_logic_1164.all; entity tri_state is port (control : in std_logic; in1: in std_logic_vector(7 downto 0); q : inout std_logic_vector(7 downto 0); x : out std_logic_vector(7 downto 0); end tr
13、i_state; architecture body_tri of tri_state is begin process(control,q,in1) begin if (control = 0) then x = q ; else q = in1; x=“ZZZZZZZZ“ ; end if; end process; end body_tri;,2019/1/19,6.2.2 双向端口设计,图6-10 例6-10的仿真波形图,图6-9 例6-10的综合结果,2019/1/19,6.2.2 双向端口设计,【例6-11】 (以上部分同上例) process(control,q,in1) beg
14、in if (control=0) then x = q ; q = “ZZZZZZZZ“; else q = in1; x =“ZZZZZZZZ“; end if; end process; end body_tri;,图6-12 例6-11的仿真波形图,2019/1/19,6.2.3 三态 总线电路设计,2019/1/19,6.2.3 三态总线电路设计,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tristate2 IS port ( input3, input2, input1, input0 : IN STD_LOGIC_VECT
15、OR (7 DOWNTO 0); enable : IN STD_LOGIC_VECTOR(1 DOWNTO 0); output : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); END tristate2 ; ARCHITECTURE multiple_drivers OF tristate2 IS BEGIN PROCESS(enable,input3, input2, input1, input0 ) BEGIN IF enable = “00“ THEN output Z); END IF ; IF enable = “01“ THEN output Z);
16、END IF ; IF enable = “10“ THEN output Z); END IF ; IF enable = “11“ THEN output Z); END IF ; END PROCESS; END multiple_drivers;,【例6-12】,2019/1/19,图6-13 例6-12错误的综合结果,6.2.3 三态总线电路设计,2019/1/19,6.2.3 三态总线电路设计,library ieee; use ieee.std_logic_1164.all; entity tri is port (ctl : in std_logic_vector(1 downto 0); datain1, datain2,datain3, datain4 : in std_logic_vector(7 downto 0);