收藏 分享(赏)

第5章 VHDL设计技术深入.ppt

上传人:Facebook 文档编号:2348537 上传时间:2018-09-11 格式:PPT 页数:85 大小:500.50KB
下载 相关 举报
第5章 VHDL设计技术深入.ppt_第1页
第1页 / 共85页
第5章 VHDL设计技术深入.ppt_第2页
第2页 / 共85页
第5章 VHDL设计技术深入.ppt_第3页
第3页 / 共85页
第5章 VHDL设计技术深入.ppt_第4页
第4页 / 共85页
第5章 VHDL设计技术深入.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

1、EDA技术及其应用,第5章 VHDL设计技术深入,5.1 深入讨论数据对象,5.1.1 常数 常量的定义和设置主要为了使程序更容易阅读和修改。,CONSTANT 常数名:数据类型 := 表达式 ;,第1句定义常数FBT的数据类型是STD_LOGIC_VECTOR,它等于“010110”;第2句定义常数DATAIN的数据类型是整数INTEGER,它等于15 。 常量的定义位置和“可视”范围。见课本p151,CONSTANT FBT : STD_LOGIC_VECTOR := “010110“ ; - 标准位矢类型 CONSTANT DATAIN : INTEGER := 15 ; - 整数类型,

2、在VHDL中,数据对象有三类:变量(VARIABLE),常量(CONSTANT),信号(SIGNAL),5.1 深入讨论数据对象,5.1.2 变量 变量是一个局部量,只能在进程和子程序中定义和使用。,VARIABLE 变量名 : 数据类型 := 初始值 ;,VARIABLE a : INTEGER RANGE 0 TO 15 ;-变量a定义为常数,取值范围是0到5 VARIABLE d : STD_LOGIC := 1 ;-变量a定义为标准逻辑位类型, 初始值是1,VARIABLE x,y : INTEGER RANGE 15 DOWNTO 0 ;-定义变量x和y为整数类型 VARIABLE

3、a,b : STD_LOGIC_VECTOR(7 DOWNTO 0) ; x := 11 ; y := 2 + x ; - 运算表达式赋值,y 也是实数变量 a := b -b向a赋值 a(0 TO 5) := b(2 TO 7) ;,目标变量名 := 表达式 ;,5.1 深入讨论数据对象,5.1.3 信号,SIGNAL 信号名: 数据类型 := 初始值 ;,SIGNAL a,b,c,y,z: INTEGER ;. PROCESS (a,b,c) BEGINy = a + b ;z = c a ;y = b ; END PROCESS ;,目标信号名 = 表达式 AFTER 时间量;,信号的赋

4、值既可以出现在进程中,也可以出现在结构体的并行语句中。在进程中属于顺序信号赋值,如果对同一信号多次赋值,只有最后一次赋值生效;在结构体中属于并行信号赋值,这时,不允许对同一个信号进行多次赋值。,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,表5-1 信号与变量赋值语句功能的比较,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,【例5-1】 . . .ARCHITECTURE bhv OF DFF3 ISBEGIN PROCESS (CLK)VARIABLE QQ : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK=1 THEN QQ :

5、= D1 ; END IF;END PROCESS ;Q1 = QQ;END ;,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,【例5-2】. . .ARCHITECTURE bhv OF DFF3 ISSIGNAL QQ : STD_LOGIC ;BEGIN PROCESS (CLK)BEGIN IF CLKEVENT AND CLK=1 THEN QQ = D1 ; END IF;END PROCESS ;Q1 = QQ;END ;,5.1 深入讨论数据对象,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dff IS P

6、ORT (d , clk:IN STD_LOGIC;q: BUFFER STD_LOGIC;qbar: OUT STD_LOGIC); END dff; ARCHITECTURE two_dff OF dff IS BEGINPROCESS(clk)BEGINIF(clkEVENTANDclk=1)THENq=d; -生成了一个触发器qbar =NOT d; -生成了另一个触发器END IF;END PROCESS; END two_dff;,5.1 深入讨论数据对象,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dff IS PORT (

7、d , clk:IN STD_LOGIC;q: BUFFER STD_LOGIC;qbar: OUT STD_LOGIC); END dff; ARCHITECTURE two_dff OF dff IS BEGINPROCESS(clk)BEGINIF(clkEVENTANDclk=1)THENq=d; -生成了一个触发器END IF;END PROCESS;qbar =NOT d; -使用了一个反相器,没有触发器 END two_dff;,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,【例5-3】LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.

8、ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ;Q1 : OUT STD_LOGIC ) ; END ; ARCHITECTURE bhv OF DFF3 ISSIGNAL A,B : STD_LOGIC ;BEGIN PROCESS (CLK) BEGINIF CLKEVENT AND CLK = 1 THEN A = D1 ;B = A ;Q1 = B ;END IF;END PROCESS ;END ;,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,【例5-4】 LIBRARY IEEE ; USE IEEE.STD_

9、LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ;Q1 : OUT STD_LOGIC ) ; END ; ARCHITECTURE bhv OF DFF3 ISBEGIN PROCESS (CLK)VARIABLE A,B : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN A := D1 ;B := A ; Q1 = B ;END IF;END PROCESS ;END ;,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,【例5-6】 LIBRARY IEE

10、E; 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) beginmuxval q q q q null; end case; end process; END body_mux4;,5.1 深入讨论数据

11、对象,5.1.4 进程中的信号与变量赋值,图5-3 例5-6的RTL电路(Synplify综合),5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,【例5-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 :

12、integer range 7 downto 0; beginmuxval := 0; if (a = 1) then muxval := muxval + 1; end if; if (b = 1) then muxval := muxval + 2; end if; case muxval iswhen 0 = q q q q null; end case; end process; END body_mux4;,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,图5-4 例5-7的RTL电路(Synplify综合),5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值

13、,图5-5 例5-6中错误的工作时序,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,图5-6 例5-7中正确的工作时序,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,【例5-8】 Library IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHIFT ISPORT (CLK,C0 : IN STD_LOGIC; -时钟和进位输入MD : IN STD_LOGIC_VECTOR(2 DOWNTO 0); -移位模式控制字D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -待加载移位的数据QB : OU

14、T STD_LOGIC_VECTOR(7 DOWNTO 0); -移位数据输出CN : OUT STD_LOGIC); -进位输出 END ENTITY; ARCHITECTURE BEHAV OF SHIFT ISSIGNAL REG : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL CY : STD_LOGIC ;BEGIN PROCESS (CLK,MD,C0)BEGINIF CLKEVENT AND CLK = 1 THENCASE MD ISWHEN “001“ = REG(0) REG(0) REG(7) REG(7) REG(7 DOWNTO 0) RE

15、G = REG ; CY = CY ; -保持 END CASE;END IF;END PROCESS; QB(7 DOWNTO 0) = REG(7 DOWNTO 0); CN = CY; -移位后输出 END BEHAV;,5.1 深入讨论数据对象,5.1.4 进程中的信号与变量赋值,图5-7 例5-8中带进位循环左移仿真波形(MD=“001“),5.2 双向和三态电路信号赋值,5.2.1 三态门设计,图5-8 8位3态控制门电路(Synplify综合),5.2 双向和三态电路信号赋值,5.2.1 三态门设计,【例5-9】 LIBRARY IEEE; USE IEEE.STD_LOGIC_

16、1164.ALL; ENTITY tri_s ISport ( 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)BEGINIF enable = 1 THEN dataout = datain ; ELSE dataout =“ZZZZZZZZ” ; -注意Z必须大写!END IF ; EN

17、D PROCESS; END bhv;,5.2 双向和三态电路信号赋值,5.2.2 双向端口设计,图5-12 例5-11的综合结果(Synplify综合),5.2 双向和三态电路信号赋值,5.2.2 双向端口设计,【例5-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

18、_vector(7 downto 0); end tri_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;,5.2 双向和三态电路信号赋值,5.2.2 双向端口设计,图5-11 例5-10的综合结果(Synplify综合),5.2 双向和三态电路信号赋值,5.2.2 双向端口设计,图5-9 例5-10

19、的仿真波形图,5.2 双向和三态电路信号赋值,5.2.2 双向端口设计,【例5-11】 (以上部分同上例) process(control,q,in1) begin if (control=0) then x = q ; q = “ZZZZZZZZ“;else q = in1; x =“ZZZZZZZZ“;end if; end process; end body_tri;,5.2 双向和三态电路信号赋值,5.2.2 双向端口设计,图5-12 例5-11的综合结果(Synplify综合),5.2 双向和三态电路信号赋值,5.2.2 双向端口设计,图5-10 例5-11的仿真波形图,5.2.3

20、三态总线电路设计,5.2 双向和三态电路信号赋值,5.2 双向和三态电路信号赋值,5.2.3 三态总线电路设计,【例5-12】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tristate2 ISport ( input3, input2, input1, input0 : IN STD_LOGIC_VECTOR (7 DOWNTO 0);enable : IN STD_LOGIC_VECTOR(1 DOWNTO 0);output : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); END tristate2 ;

21、ARCHITECTURE multiple_drivers OF tristate2 IS BEGIN PROCESS(enable,input3, input2, input1, input0 )BEGINIF enable = “00“ THEN output Z); END IF ;IF enable = “01“ THEN output Z); END IF ;IF enable = “10“ THEN output Z); END IF ;IF enable = “11“ THEN output Z); END IF ; END PROCESS; END multiple_drive

22、rs;,5.2 双向和三态电路信号赋值,5.2.3 三态总线电路设计,图5-13 例5-12错误的综合结果(Synplify综合结果),5.2 双向和三态电路信号赋值,【例5-13】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tristate2 ISport ( datain3, datain2, datain1, datain0 : IN STD_LOGIC_VECTOR (7 DOWNTO 0);ctl : IN STD_LOGIC_VECTOR(1 DOWNTO 0);q : OUT STD_LOGIC_VECTOR (7 DOW

23、NTO 0); END tristate2 ; ARCHITECTURE multiple_drivers OF tristate2 IS BEGINq Z); q Z);q Z);q Z); END multiple_drivers;,每个并行赋值语句都等同于一个独立运行的进程。一般使用并行赋值语句时,对同一信号不能多次赋值,这样会造成多重赋值,造成赋值冲突,但是高阻态Z例外。,5.2.3 三态总线电路设计,5.2.3 三态总线电路设计,5.2 双向和三态电路信号赋值,图5-14 例5-13正确的综合结果(Synplify综合结果),5.3 IF语句概述,(1) IF 条件句 Then -

24、不完整if语句,用于产生时序电路顺序语句 END IF ; (2) IF 条件句 Then - 完整if语句,用于产生组合电路顺序语句 ELSE 顺序语句 END IF ; (3) IF 条件句 Then - 多重嵌套if语句IF 条件句 Then . END IF END IF (4) IF 条件句 Then - 多重条件判断语句顺序语句ELSIF 条件句 Then顺序语句.ELSE顺序语句END IF,5.3 IF语句概述,【例5-14】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY control_stmts IS PORT (a, b,

25、c: IN BOOLEAN;output: OUT BOOLEAN);END control_stmts;ARCHITECTURE example OF control_stmts ISBEGINPROCESS (a, b, c)VARIABLE n: BOOLEAN;BEGINIF a THEN n := b; ELSE n := c;END IF;output = n;END PROCESS;END example;,5.3 IF语句概述,表5-2 8线-3线优先编码器真值表,注:表中的“x”为任意,类似VHDL中的“”值。,5.3 IF语句概述,【例5-15】优先编码器设计 LIBRAR

26、Y IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7);output : OUT STD_LOGIC_VECTOR(0 TO 2) ); END coder; ARCHITECTURE behav OF coder ISSIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINPROCESS (din)BEGINIF (din(7)=0) THEN output = “000“ ; ELSIF (din(6)=0) THEN

27、output = “100“ ; ELSIF (din(5)=0) THEN output = “010“ ; ELSIF (din(4)=0) THEN output = “110“ ; ELSIF (din(3)=0) THEN output = “001“ ;ELSIF (din(2)=0) THEN output = “101“ ;ELSIF (din(1)=0) THEN output = “011“ ;ELSE output = “111“ ;END IF ;END PROCESS ;END behav;,5.3 IF语句概述,表5-2 8线-3线非优先编码器真值表,注:表中的“x

28、”为任意,类似VHDL中的“”值。,5.3 IF语句概述,【例5-15】非优先编码器设计 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY coder IS PORT ( din : IN STD_LOGIC_VECTOR(0 TO 7);output : OUT STD_LOGIC_VECTOR(0 TO 2) ); END coder; ARCHITECTURE behav OF coder ISSIGNAL SINT : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINPROCESS (din)BEGINIF (din

29、=“11111110“) THEN output = “000“ ; ELSIF (din=“11111101“) THEN output = “100“ ; ELSIF (din=“11111011“) THEN output = “010“ ; ELSIF (din=“11110111“) THEN output = “110“ ; ELSIF (din=“11101111“) THEN output = “001“ ;ELSIF (din=“11011111“) THEN output = “101“ ;ELSIF (din=“10111111“) THEN output = “011“

30、 ;ELSE output = “111“ ;END IF ;END PROCESS ;END behav;,5.4 深入了解进程语句,5.4.1 进程语句格式,PROCESS语句结构的一般表达格式如下进程标号: PROCESS ( 敏感信号参数表 ) IS进程说明部分BEGIN顺序描述语句END PROCESS 进程标号;,5.4 深入了解进程语句,5.4.2 进程结构组成,进程说明部分,敏感信号参数表,5.4 深入了解进程语句,2. PROCESS中的顺序语句具有明显的顺序/并行运行双重性,5.4.3 进程要点,1. PROCESS为一无限循环语句,【例5-3】LIBRARY IEEE ;

31、 USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ;Q1 : OUT STD_LOGIC ) ; END ; ARCHITECTURE bhv OF DFF3 ISSIGNAL A,B : STD_LOGIC ;BEGIN PROCESS (CLK) BEGINIF CLKEVENT AND CLK = 1 THEN A = D1 ;B = A ;Q1 = B ;END IF;END PROCESS ;END ;,【例5-4】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_

32、1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ;Q1 : OUT STD_LOGIC ) ; END ; ARCHITECTURE bhv OF DFF3 ISBEGIN PROCESS (CLK)VARIABLE A,B : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = B ; B := A ; A := D1 ;END IF;END PROCESS ;END ;,5.4 深入了解进程语句,4. 进程语句本身是并行语句,【例5-16】 ENTITY mul IS PORT

33、 (a, b, c, selx, sely : IN BIT;data_out : OUT BIT ); END mul; ARCHITECTURE ex OF mul ISSIGNAL temp : BIT; BEGINp_a: PROCESS (a, b, selx)BEGINIF (selx = 0) THEN temp = a; ELSE temp = b;END IF;END PROCESS p_a ;p_b : PROCESS(temp, c, sely)BEGINIF (sely = 0) THEN data_out = temp; ELSE data_out = c;END I

34、F;END PROCESS p_b ; END ex;,3. 进程必须由敏感信号的变化来启动,5.4 深入了解进程语句,5. 信号是多个进程间的通信线,6. 一个进程中只允许描述对应于一个时钟信号的同步时序逻辑,5.5 并行语句特点,data2 = data1 ; data1 = a AND b ;,【例5-17】 ARCHITECTURE dataflow OF mux ISSIGNAL select : INTEGER RANGE 15 DOWNTO 0; BEGIN Select = 0 WHEN s0=0 AND s1=0 ELSE1 WHEN s0=1 AND s1=0 ELSE2

35、WHEN s0=0 AND s1=1 ELSE3 ;x = a WHEN select=0 ELSEb WHEN select=1 ELSEc WHEN select=2 ELSEd ;,5.6 仿真延时,5.6.1 固有延时,z = x XOR y AFTER 5ns ;,z = x XOR y ;,B = A AFTER 20ns ;-固有延时模型,5.6 仿真延时,5.6.2 传输延时,B = TRANSPORT A AFTER 20 ns;- 传输延时模型,图5-15 固有延时输入输出波形 图5-16传输延时输入输出波形,5.6 仿真延时,5.6.3 仿真 ,VHDL仿真器和综合器将自

36、动为系统中的信号赋值配置一足够小而又能满足逻辑排序的延时量,即仿真软件的最小分辩时间,这个延时量就称为仿真(Simulation Delta),或称 延时,从而使并行语句和顺序语句中的并列赋值逻辑得以正确执行。由此可见,在行为仿真、功能仿真乃至综合中,引入 延时是必需的。仿真中, 延时的引入由EDA工具自动完成,无需设计者介入。,5.7 实体与相关语句语法,5.7.1 实体语句结构,ENTITY 实体名 ISGENERIC ( 参数名:数据类型 );PORT ( 端口表 );END ENTITY 实体名;,5.7 实体与相关语句语法,5.7.2 参数传递说明语句,参数传递说明语句(GENERI

37、C语句)是一种常数参数的端口界面,常以一种说明的形式放在实体或块结构体前的说明部分。,GENERIC( 常数名 : 数据类型 : 设定值 ; 常数名 : 数据类型 : 设定值 ) ;,5.7.3 参数传递映射语句,GENERIC MAP(类属表),5.7 实体与相关语句语法,5.7.2 参数传递说明语句,【例5-18】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY andn IS -描述了一个n输入与门GENERIC ( n : INTEGER =8); -定义类属参量及其数据类型,最好设一个默认值PORT(a : IN STD_LOGIC_VE

38、CTOR(n-1 DOWNTO 0);-用类属参量限制矢量长度c : OUT STD_LOGIC);END;ARCHITECTURE behav OF andn ISBEGINPROCESS (a)VARIABLE int : STD_LOGIC;BEGINint := 1;FOR i IN aLENGTH - 1 DOWNTO 0 LOOP -循环语句IF a(i)=0 THEN int := 0;END IF;END LOOP;c =int ;END PROCESS;END;,5.7 实体与相关语句语法,5.7.2 参数传递说明语句,【例5-19】LIBRARY IEEE;USE IEEE

39、.STD_LOGIC_1164.ALL;ENTITY exn ISPORT(d1,d2,d3,d4,d5,d6,d7 : IN STD_LOGIC;q1,q2 : OUT STD_LOGIC);END;ARCHITECTURE exn_behav OF exn ISCOMPONENT andn -调用例5-18的元件调用声明GENERIC ( n : INTEGER);PORT(a : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);C : OUT STD_LOGIC);END COMPONENT ;BEGIN u1: andn GENERIC MAP (n =2); -参

40、数传递映射语句,定义类属变量,n赋值为2PORT MAP (a(0)=d1,a(1)=d2,c=q1);u2: andn GENERIC MAP (n =5) ; - 定义类属变量,n赋值为5PORT MAP (a(0)=d3,a(1)=d4,a(2)=d5,a(3)=d6,a(4)=d7, c=q2);END;,5.7 实体与相关语句语法,【例5-20】 LIBRARY IEEE; -待例化元件 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_arith.ALL; USE IEEE.STD_LOGIC_unsigned.ALL; ENTITY

41、addern ISPORT (a, b: IN STD_LOGIC_VECTOR;result: out STD_LOGIC_VECTOR); END addern; ARCHITECTURE behave OF addern IS BEGINresult = a + b; END;,因为本程序没有为a,b,result定义宽度,所以本程序不能单独编译,5.7 实体与相关语句语法,5.7.3 参数传递映射语句,GENERIC MAP(类属表),【例5-21】 LIBRARY IEEE; -顶层设计 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_

42、arith. ALL; USE IEEE.STD_LOGIC_unsigned. ALL; ENTITY adders ISGENERIC (msb_operand: INTEGER := 16; msb_sum: INTEGER :=16); -注意有分号“;”PORT( b: IN STD_LOGIC_VECTOR (msb_operand-1 DOWNTO 0);result: OUT STD_LOGIC_VECTOR (msb_sum-1 DOWNTO 0); END adders; ARCHITECTURE behave OF adders ISCOMPONENT addernPOR

43、T ( a, b: IN STD_LOGIC_VECTOR;result: OUT STD_LOGIC_VECTOR);END COMPONENT; SIGNAL a: STD_LOGIC_VECTOR (msb_sum/2-1 DOWNTO 0);SIGNAL twoa: STD_LOGIC_VECTOR (msb_operand-1 DOWNTO 0); BEGINtwoa twoa , b = b, result = result);U2: addern PORT MAP (a=b (msb_operand-1 downto msb_operand/2),b=b(msb_operand/

44、2-1 downto 0), result = a); END behave;,5.7 实体与相关语句语法,【例5-20】 LIBRARY IEEE; -待例化元件 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_arith.ALL; USE IEEE.STD_LOGIC_unsigned.ALL; ENTITY addern ISGENERIC(n: INTEGER := 8); -默认值设为8,注意有分号“;”PORT (a, b: IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);result: out STD_LOGIC

45、_VECTOR(n-1 DOWNTO 0); END addern; ARCHITECTURE behave OF addern IS BEGINresult = a + b; END;,为了增加可读性,例5-20和例5-21可以加入参数说明和参数映射语句。 而且,加入“GENERIC(n: INTEGER := 8);”后,例5-20也可以单独编译了。,5.7 实体与相关语句语法,5.7.3 参数传递映射语句,GENERIC MAP(类属表),【例5-21】 LIBRARY IEEE; -顶层设计 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC

46、_arith. ALL; USE IEEE.STD_LOGIC_unsigned. ALL; ENTITY adders ISGENERIC (msb_operand: INTEGER := 16; msb_sum: INTEGER :=16);PORT( b: IN STD_LOGIC_VECTOR(msb_operand-1 DOWNTO 0);result: OUT STD_LOGIC_VECTOR(msb_sum-1 DOWNTO 0); END adders; ARCHITECTURE behave OF adders ISCOMPONENT addernGENERIC(n: INT

47、EGER); -不能设默认值,注意有分号“;”PORT ( a, b: IN STD_LOGIC_VECTOR (n-1 DOWNTO 0);result: OUT STD_LOGIC_VECTOR (n-1 DOWNTO 0);END COMPONENT; SIGNAL a: STD_LOGIC_VECTOR (msb_sum/2-1 DOWNTO 0);SIGNAL twoa: STD_LOGIC_VECTOR (msb_operand-1 DOWNTO 0); BEGINtwoa 16) -n设为16,注意没有分号“;”PORT MAP (a = twoa , b = b, result

48、 = result);U2: addern GENERIC MAP(n=8) -n设为8,注意没有分号“;”PORT MAP (a=b (msb_operand-1 downto msb_operand/2),b=b(msb_operand/2-1 downto 0), result = a); END behave;,5.7 实体与相关语句语法,5.7.3 参数传递映射语句,图5-17 例5-21的RTL电路图(Synplify综合),5.8 直接数字综合器(DDS)设计,(5-1),(5-2),(5-5),(5-6),5.8 直接数字综合器(DDS)设计,图5-18 基本DDS结构,5.8

49、 直接数字综合器(DDS)设计,关于基本DDS结构的常用参量计算,(1) DDS的输出频率fout。,(2) DDS的频率分辨率。,(5-8),(3) DDS的频率输入字计算。,5.8 直接数字综合器(DDS)设计,图5-19 DDS . vhd顶层原理图,5.8 直接数字综合器(DDS)设计,【例5-22】 LIBRARY ieee ; -波形数据ROM USE ieee.std_logic_1164.all; LIBRARY altera_ mf; USE altera _ mf. Altera _ mf _ components .all; ENTITY data _ rom IS PORT ( address : IN STD_LOGIC_VECTOR (9 DOWNTO 0);inclock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0); END data _ rom;. . .init _file = “./data/LUT10X10.mif“, -波形数据初始化文件路径lpm _hint = “ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=rom2“, . . . END;,

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

当前位置:首页 > 中等教育 > 小学课件

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


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

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

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