EDA技术 第07讲 VHDL04 并行语句2_第1页
EDA技术 第07讲 VHDL04 并行语句2_第2页
EDA技术 第07讲 VHDL04 并行语句2_第3页
EDA技术 第07讲 VHDL04 并行语句2_第4页
EDA技术 第07讲 VHDL04 并行语句2_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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) 子程序调用语句

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

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

4、映射);,信号映射可采用位置映射和名称映射的方法,8,位置映射方式: (连接实体端口(信号)名) 排列方式与元件端口定义相同。 名字映射方式: 元件端口名“=” 连接实体端口(信号)名 位置可以任意。,9,ORD41逻辑原理图,【例】,10,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; 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;

5、,底层文件,实现与非门的功能,11,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ORD41 IS PORT(A1,B1,C1,D1:IN STD_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; BEGIN U1:ND2 PORT MAP (A1

6、,B1,X); -位置关联方式 U2:ND2 PORT MAP (A=C1,C=Y,B=D1); -名字关联方式 U3:ND2 PORT MAP (X,Y,C=Z1); -混合关联方式 END ARCHITECTURE ARTORD41;,元件例化部分,试用元件例化实现普通中小规模芯片的扩展(例如用2片2-4译码器实现3-8译码器),13,【例】,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity bcd_add_4 is port(a,b:in std_logic_vector(

7、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 of bcd_add_4 is ,底层文件,实现1位BCD码加法,提问: 电路图?,14,【例】, entity bcd_add_new is port(a,b:in std_logic_vector(7 downto 0); c_out :out std_logic; s:out std_logic_vector(7 downto 0); err

8、:out std_logic); end bcd_add_new; architecture bh of bcd_add_new is component bcd_add_4 is port(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 component bcd_add_4;,顶层文件,提问: 如何元件 例化?,15,signal err_1,err_2:std_logic; signal c_

9、out_tmp,c_in_tmp:std_logic; begin c_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 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,在一个结构体中调用子程序,包括并行过程的调用非常类似于元件例化,因为通过调用,为当

10、前系统增加了一个类似于元件的功能模块。但这种调用是在同一层次内进行的,并没有因此而增加新的电路层次,这类似于在原电路系统增加了一个电容或一个电阻。,17,块语句,元件或模块: 已设计好的设计实体。,用途:将结构体中的并行语句划分成多个并列方式的块。 相当于将一个数字系统,分割成几块电路板!用于用几块电路板来组合成一个更大系统。,块语句是VHDL中具有的一种划分机制,允许设计者合理分组一个模型的区域,即把类似的部分由块语句保持在一起。,18,BLOCK的应用可使结构体层次鲜明,结构明确。利用BLOCK语句可以将结构体中的并行语句划分成多个并列方式的BLOCK,每一个BLOCK都像一个独立的设计实

11、体,具有自己的类属参数说明和界面端口,以及与外部环境的衔接描述。 在较大的VHDL程序的编程中,恰当的块语句的应用对于技术交流、程序移值、排错和仿真都是十分有益的。,19,元件声明格式:,块标号:BLOCK (块保护表达式) Generic(类属表) Port(端口说明) BEGIN 并行语句 END BLOCK 块标号;,同该元件实体定义中的部分,20,接口说明部分有点类似于实体的定义部分,它可包含由关键词PORT、GENERIC、PORT MAP和GENERIC MAP引导的接口说明等语句,对BLOCK的接口设置以及与外界信号的连接状况加以说明。 块的类属说明部分和接口说明部分的适用范围仅

12、限于当前BLOCK。所以,所有这些在BLOCK内部的说明对于这个块的外部来说是完全不透明的,即不能适用于外部环境,但对于嵌套于内层的块却是透明的。块的说明部分可以定义的项目主要有:USE语句、子程序、数据类型、子类型、常数、信号、元件。 并行语句部分可包含结构体中的任何并行语句结构。BLOCK语句本身属并行语句,BLOCK语句中所包含的语句也是并行语句。,21,例:设计CPU,ALU一个块、寄存器堆一块,而移位寄存器是另一个块。,22,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cpu IS PORT (clk,interrupt :IN

13、 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 SIGNAL qbus : std_logic_vector(31downto 0); BEGIN - alu behavior statements END BLOCK ALU; REG8:B

14、LOCK 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 PORT (abus,bbus :IN std_logic_vector(31downto 0); d_out :OUT std_logic_vect

15、or(31downto 0); ctbus : IN INTEGER); PORT MAP (abus = ibus, bbus = dbus, d_out =data, ctbus =cont); SIGNAL qbus : std_logic_vector(31downto 0); BEGIN d_out = tw_add(abus,bbus) WHEN ctbus = 0 ELSE tw_sub(abus,bbus) WHEN ctbus = 1 ELSE abus; END BLOCK ALU;,函数调用,25,B1:BLOCK SIGNAL s0:std_logic; BEGIN s

16、0=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的父模块,B3将只从B3的说明部分取S2,来自B2的S2是

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

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

19、两种形式: 表达式 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个相同的电路元件,38

20、,【例】 利用元件例化和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; USE IEEE.STD_LOGIC_1164

21、.ALL; ENTITY LATCH IS PORT(D:IN STD_LOGIC; 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; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SN74373 IS PORT (

22、D:IN STD_LOGIC_VECTOR(8 DOWNTO 1); OEN,G:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(8 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,BEGIN GELATCH:FOR INUM IN 1 TO 8

23、GENERATE -用FOR_GENERATE 语句循环例化8个1锁存器 LATCHX:LATCH PORT MAP(D(INUM),G,SIG_MID(INUM); -位置关联 END 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_log

24、ic); end; architecture bh of d_tmp is signal q_tmp: std_logic; Signal nq_tmp: std_logic; Begin,process(ci) begin 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

25、; q: out std_logic_vector(3 downto 0); end; architecture bh of d_jsq is component d_tmp is port(ci,d: in std_logic; q,nq: out 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

26、); 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); END 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

27、 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; ARCHITECTURE 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,B

28、EGIN 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 PORT 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; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论