EDA技术第07讲VHDL04并行语句.ppt

上传人:小飞机 文档编号:5428633 上传时间:2023-07-06 格式:PPT 页数:62 大小:874KB
返回 下载 相关 举报
EDA技术第07讲VHDL04并行语句.ppt_第1页
第1页 / 共62页
EDA技术第07讲VHDL04并行语句.ppt_第2页
第2页 / 共62页
EDA技术第07讲VHDL04并行语句.ppt_第3页
第3页 / 共62页
EDA技术第07讲VHDL04并行语句.ppt_第4页
第4页 / 共62页
EDA技术第07讲VHDL04并行语句.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《EDA技术第07讲VHDL04并行语句.ppt》由会员分享,可在线阅读,更多相关《EDA技术第07讲VHDL04并行语句.ppt(62页珍藏版)》请在三一办公上搜索。

1、1,第七讲 VHDL 之四3.5 VHDL中的并行语句,2,第四章 硬件描述语言VHDL,3.1 硬件描述语言概述3.2 VHDL程序基本结构3.3 VHDL的基本数据类型及运算操作符3.4 VHDL中的顺序语句3.5 VHDL中的并行语句3.6 程序包与库3.7 类属3.8 子程序3.9 基本逻辑电路设计3.10 状态机的VHDL设计,3,顺序语句(Sequential Staements),VHDL语句,并行语句(Concurrent Statements),赋值语句转向控制语句(If、Case、Loop、Next、Exit)等待语句(wait)子程序调用语句断言语句(assert)空操作

2、语句(null),进程语句并行信号赋值语句元件声明/例化语句块语句生成语句并行过程调用语句,4,并行语句,进程语句 并行信号赋值语句 元件声明/例化语句 块语句 生成语句 并行过程调用语句,5,元件声明/例化语句,元件或模块:已设计好的设计实体。,用途:为当前设计实体中插入已编译好的实体;相当于为一个电路板上插入已有的芯片!,已设计好的一个VHDL设计实体、来自FPGA元件库中的元件、别的硬件描述语言(如Verilog)设计实体、软IP核、FPGA中的嵌入式硬IP核。,6,元件例化是使VHDL设计实体构成自上而下层次化设计的一种重要途径!相对而言,当前设计实体为上层(顶层);被插入到当前实体的

3、元件实体为下层(底层)。,元件声明:(选取元件)要说明元件的外部接口界面(引脚名及宽度等)。是对VHDL元件(即底层设计实体)的说明,使之可被调用。声明可在程序包中,也可在其它某个设计的结构体中进行。元件例化:(使用元件)将元件插入当前电路板(当前设计实体)中。要给调用的元件的编号,并且要说明元件引脚与电路板的链接。,7,元件声明格式:,COMPONENT 元件名 IS GENERIC(类属表)PORT(端口表)END COMPONENT 例化元件名;,同该元件实体定义中的部分,元件例化格式:,元件标号:元件名 PORT MAP(信号映射);,信号映射可采用位置映射和名称映射的方法,8,位置映

4、射方式:(连接实体端口(信号)名)排列方式与元件端口定义相同。名字映射方式:元件端口名“=”连接实体端口(信号)名 位置可以任意。,9,ORD41逻辑原理图,【例】,10,LIBRARY IEEE;ENTITY ND2 IS PORT(A,B:IN STD_LOGIC;C:OUT STD_LOGIC);END ND2;ARCHITECTURE ARTND2 OF ND2 IS BEGIN Y=A NAND B;END ARCHITECTURE ARTND2;,底层文件,实现与非门的功能,11,LIBRARY IEEE;ENTITY ORD41 IS PORT(A1,B1,C1,D1:IN ST

5、D_LOGIC;Z1:OUT STD_LOGIC);END ORD41;ARCHITECTURE ARTORD41 OF ORD41 IS COMPONENT ND2 PORT(A,B:IN STD_LOGIC;C:OUT STD_LOGIC);END COMPONENT;,元件声明部分,12,SIGNAL X,Y:STD_LOGIC;BEGINU1:ND2 PORT MAP(A1,B1,X);-位置关联方式U2:ND2 PORT MAP(A=C1,C=Y,B=D1);-名字关联方式U3:ND2 PORT MAP(X,Y,C=Z1);-混合关联方式END ARCHITECTURE ARTORD

6、41;,元件例化部分,试用元件例化实现普通中小规模芯片的扩展(例如用2片2-4译码器实现3-8译码器),13,【例】,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bcd_add_4 isport(a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);c_in:in std_logic;err,c_out:out std_logic);End bcd_add_4;architecture bh

7、of bcd_add_4 is,底层文件,实现1位BCD码加法,提问:电路图?,14,【例】,entity bcd_add_new isport(a,b:in std_logic_vector(7 downto 0);c_out:out std_logic;s:out std_logic_vector(7 downto 0);err:out std_logic);end bcd_add_new;architecture bh of bcd_add_new iscomponent bcd_add_4 isport(a,b:in std_logic_vector(3 downto 0);s:out

8、 std_logic_vector(3 downto 0);c_in:in std_logic;err,c_out:out std_logic);end component bcd_add_4;,顶层文件,提问:如何元件例化?,15,signal err_1,err_2:std_logic;signal c_out_tmp,c_in_tmp:std_logic;beginc_in_tmp=0;u1:bcd_add_4 port map(a(3 downto 0),b(3 downto 0),s(3 downto 0),c_in_tmp,err_1,c_out_tmp);u2:bcd_add_4

9、 port map(a(7 downto 4),b(7 downto 4),s(7 downto 4),c_out_tmp,err_2,c_out);err=err_1 or err_2;end;,16,在一个结构体中调用子程序,包括并行过程的调用非常类似于元件例化,因为通过调用,为当前系统增加了一个类似于元件的功能模块。但这种调用是在同一层次内进行的,并没有因此而增加新的电路层次,这类似于在原电路系统增加了一个电容或一个电阻。,17,块语句,元件或模块:已设计好的设计实体。,用途:将结构体中的并行语句划分成多个并列方式的块。相当于将一个数字系统,分割成几块电路板!用于用几块电路板来组合成一个

10、更大系统。,块语句是VHDL中具有的一种划分机制,允许设计者合理分组一个模型的区域,即把类似的部分由块语句保持在一起。,18,BLOCK的应用可使结构体层次鲜明,结构明确。利用BLOCK语句可以将结构体中的并行语句划分成多个并列方式的BLOCK,每一个BLOCK都像一个独立的设计实体,具有自己的类属参数说明和界面端口,以及与外部环境的衔接描述。在较大的VHDL程序的编程中,恰当的块语句的应用对于技术交流、程序移值、排错和仿真都是十分有益的。,19,元件声明格式:,块标号:BLOCK(块保护表达式)Generic(类属表)Port(端口说明)BEGIN 并行语句END BLOCK 块标号;,同该

11、元件实体定义中的部分,20,接口说明部分有点类似于实体的定义部分,它可包含由关键词PORT、GENERIC、PORT MAP和GENERIC MAP引导的接口说明等语句,对BLOCK的接口设置以及与外界信号的连接状况加以说明。块的类属说明部分和接口说明部分的适用范围仅限于当前BLOCK。所以,所有这些在BLOCK内部的说明对于这个块的外部来说是完全不透明的,即不能适用于外部环境,但对于嵌套于内层的块却是透明的。块的说明部分可以定义的项目主要有:USE语句、子程序、数据类型、子类型、常数、信号、元件。并行语句部分可包含结构体中的任何并行语句结构。BLOCK语句本身属并行语句,BLOCK语句中所包

12、含的语句也是并行语句。,21,例:设计CPU,ALU一个块、寄存器堆一块,而移位寄存器是另一个块。,22,LIBRARY IEEE;ENTITY cpu IS PORT(clk,interrupt:IN std_logic;addr:OUT std_logic_vector(31downto 0);data:INOUT std_logic_vector(31downto 0);END cpu;,23,ARCHITECTURE cpu_blk OF cpu IS SIGNAL ibus,dbus:std_logic_vector(31downto 0);BEGIN ALU:BLOCK SIGNA

13、L qbus:std_logic_vector(31downto 0);BEGIN-alu behavior statements END BLOCK ALU;REG8:BLOCK SIGNAL zbus:std_logic_vector(31downto 0);BEGIN REG1:BLOCK SIGNAL qbus:std_logic_vector(31downto 0);BEGIN-reg1 behavior statements END BLOCK REG1;-nore REG8 statements END BLOCK REG8;END cpu_blk;,24,ALU:BLOCK P

14、ORT(abus,bbus:IN std_logic_vector(31downto 0);d_out:OUT std_logic_vector(31downto 0);ctbus:IN INTEGER);PORT MAP(abus=ibus,bbus=dbus,d_out=data,ctbus=cont);SIGNAL qbus:std_logic_vector(31downto 0);BEGINd_out=tw_add(abus,bbus)WHEN ctbus=0 ELSE tw_sub(abus,bbus)WHEN ctbus=1 ELSE abus;END BLOCK ALU;,函数调

15、用,25,B1:BLOCKSIGNAL s0:std_logic;BEGINs0=C;B2:BLOCK SIGNAL S2:std_logic;BEGIN S2=A and B;B3:BLOCK SIGNAL S2:std_logic;BEGIN X=S2;s2=A or B;END BLOCK B3;Y=s2;END BLOCK B2;Z=s0;END BLOCK B1;,X?,例:块的嵌套,26,27,28,29,信号S2在两个块均被描述,特点是一个块含在另一个块之中,会看成块B3被两个称为S2的信号访问,第一个从B3的说明中得到S2的局部说明,第二个从B2的说明部分得到说明,B2是B3的

16、父模块,B3将只从B3的说明部分取S2,来自B2的S2是被B3中同名的说明所跨接。,30,生成语句,用途:简化为有规则设计结构的逻辑描述。生成语句具有复制作用。,31,74373,元件例化?,32,标号:FOR 循环变量 IN 取值范围 GENERATE 说明 BEGIN 并行语句 END GENERATE标号;,标号:IF 条件 GENERATE 说明 BEGIN 并行语句 END GENERATE 标号;,FOR生成语句的语句格式:,IF生成语句的语句格式:,33,(1)生成方式:有FOR语句结构或IF语句结构,用于规定并行语句的复制方式。(2)说明部分:这部分包括对元件数据类型、子程序和

17、数据对象作一些局部说明。(3)并行语句:生成语句结构中的并行语句是用来“COPY”的基本单元,主要包括元件、进程语句、块语句、并行过程调用语句、并行信号赋值语句甚至生成语句(允许嵌套)。(4)标号:生成语句中的标号并不是必须的,但如果在嵌套生成语句结构中就是很重要的。,34,对于FOR语句结构,与LOOP语句十分相似。但从软件运行的角度看,FOR 生成语句格式中循环变量的递增方式有顺序,但最后生成的设计结构却是完全并行的,这就是为什么必须用并行语句来作为生成设计单元的缘故。,一般来讲,如果电路中各元件实体的输入、输出端是规则的,则用FOR_GENERATE设计;如果是不规则的,则用IF_GEN

18、ERATE语句设计。,35,循环变量有两种形式:表达式 TO 表达式;-递增方式 如:1 TO 5表达式 DOWNTO 表达式;-递减方式 如:5 DOWNTO 1其中的表达式必须是整数,36,【例】COMPONENT COMP PORT(X:IN STD_LOGIC;Y:OUT STD_LOGIC);END COMPONENT;SIGNAL A,B:STD_LOGIC_VECTOR(0 TO 7);GEN:FOR I IN ARANGE GENERATE U1:COMP PORT MAP(X=A(I),Y=B(I);END GENERATE GEN;,37,生成语句产生的8个相同的电路元件,

19、38,【例】利用元件例化和FOR_GENERATE语句完成一个8位三态锁存器的设计。(74LS373/74HC373)的工作逻辑进行设计。74373的器件引脚功能分别是:D1-D8为数据输入端;Q1-Q8为数据输出端;OEN为输出使能端,若OEN=1,则Q8-Q1的输出为高阻态,若OEN=0,则保存在锁存器中的信号值;G为数据锁存控制端,若G=1,D8-D1输入端的信号进入锁存器中,若G=0,锁存器将保持原先锁入的信号值不变。,39,74LS373 引脚图,40,41,【例】-1位锁存器LATCH的逻辑描述LIBRARY IEEE;ENTITY LATCH IS PORT(D:IN STD_L

20、OGIC;ENA:IN STD_LOGIC;Q:OUT STD_LOGIC);END ENTITY LATCH;ARCHITECTURE ONE OF LATCH IS,BEGIN PROCESS(D,ENA)BEGIN IF ENA=1 THEN Q=D;END IF;END PROCESS;END ARCHITECTURE ONE;,42,-SN74373的逻辑描述LIBRARY IEEE;ENTITY SN74373 IS PORT(D:IN STD_LOGIC_VECTOR(8 DOWNTO 1);OEN,G:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(8

21、DOWNTO 1);END ENTITY SN74373;ARCHITECTURE ONE OF SN74373 IS COMPONENT LATCH PORT(D,ENA:IN STD_LOGIC;Q:OUT STD_LOGIC);END COMPONENT;SIGNAL SIG_MID:STD_LOGIC_VECTOR(8 DOWNTO 1);,43,BEGINGELATCH:FOR INUM IN 1 TO 8 GENERATE-用FOR_GENERATE 语句循环例化8个1锁存器LATCHX:LATCH PORT MAP(D(INUM),G,SIG_MID(INUM);-位置关联END

22、 GENERATE;Q=SIG_MID WHEN OEN=0 ELSE“ZZZZZZZZ”;END ARCHITECTURE ONE;,44,例:用generate语句生成4位异步二进制加法计数器,45,library ieee;use ieee.std_logic_1164.all;entity d_tmp is port(ci,d:in std_logic;q,nq:out std_logic);end;architecture bh of d_tmp is signal q_tmp:std_logic;Signal nq_tmp:std_logic;Begin,process(ci)be

23、gin if cievent and ci=1 then q_tmp=d;nq_tmp=not d;end if;end process;q=q_tmp;nq=nq_tmp;end;,底层设计部分,46,47,library ieee;use ieee.std_logic_1164.all;entity d_jsq is port(cp:in std_logic;q:out std_logic_vector(3 downto 0);end;architecture bh of d_jsq iscomponent d_tmp is port(ci,d:in std_logic;q,nq:out

24、std_logic);end component d_tmp;,顶层设计,48,signal tmp:std_logic_vector(4 downto 0);begin tmp(0)=cp;u:for i in 0 to 3 generate v:d_tmp port map(tmp(i),tmp(i+1),q(i),tmp(i+1);end generate;end;,顶层设计,49,50,ARCHITECTURE archdff_4 OF dff_4 IS COMPONENT dff PORT(d,clk,clrn,prn:IN std_logic;q:OUT std_logic);EN

25、D COMPONENT;BEGIN dff4:FOR i IN 3 DOWNTO 0 GENERATE u:dff PORT MAP(d(i),clk,clrn,prn,q(i);END GENERATE;END archdff_4;,51,例:4位移位寄存器的设计,如图所示。,52,LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY n_shifter IS GENERIC(m:integer:=4);PORT(a,clk,clrn,prn:IN std_logic;b:OUT std_logic);END n_shifter;ARCHITECTU

26、RE behave OF n_shifter IS COMPONENT dff PORT(d,clk,clrn,prn:IN std_logic;q:OUT std_logic);END COMPONENT;SIGNAL x:std_logic_vector(0 TO(m-2);,53,BEGIN shifter:FOR i IN 0 TO(m-1)GENERATE u1:IF i=0 GENERATE dffx:dff PORT MAP(a,clk,clrn,prn,x(i);END GENERATE u1;u2:IF(i0 AND i/=(m-1)GENERATE dffx:dff POR

27、T MAP(x(i-1),clk,clrn,prn,x(i);END GENERATE u2;u3:IF i=(m-1)GENERATE dffx:dff PORT MAP(x(i-1),clk,clrn,prn,b);END GENERATE u3;END GENERATE shifter;END behave;,54,设计中用到的中间信号,55,作业1:,用2片2-4译码器实现3-8译码器,56,57,例 二进制加法/减法计数器的描述。,LIBRARY IEEE;ENTITY binary_up_down_counter IS GENERIC(min_count:NATURAL:=0;ma

28、x_count:NATURAL:=255);PORT(clk:IN STD_LOGIC;reset:IN STD_LOGIC;enable:IN STD_LOGIC;updown:IN STD_LOGIC;q:OUT INTEGER RANGE min_count TO max_count);END ENTITY;,58,ARCHITECTURE rtl OF binary_up_down_counter ISSIGNAL direction:INTEGER;-定义计数方向信号BEGINProc1:PROCESS(updown)BEGINIF(updown=1)THEN direction=1

29、;ELSEdirection=-1;END IF;END PROCESS Proc1;Proc2:PROCESS(clk)VARIABLE cnt:INTEGER RANGE min_count TO max_count;BEGIN IF(clk EVENT and clk=1)THENIF reset=1 THENcnt:=0;-计数器复位ELSIF enable=1 THEN cnt:=cnt+direction;-加法/减法计数END IF;END IF;q=cnt;-输出当前计数值END PROCESS Proc2;END rtl;,59,60,信号赋值语句(15),61,例7:利用Generate 语句产生4个D触发器,如图所示。,62,LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY dff_4 IS PORT(clk,clrn,prn:IN std_logic;d:IN std_logic_vector(3 DOWNTO 0);q:OUT std_logic_vector(3 DOWNTO 0);END dff_4;,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号