26
EDA 技技—— VHDL 技技技技 1 EDA 技技 ——技技 VHDL 技技 主主主主 主 主 2005. 2

EDA 技术 —— 基于 VHDL 语言

  • Upload
    sevita

  • View
    198

  • Download
    0

Embed Size (px)

DESCRIPTION

EDA 技术 —— 基于 VHDL 语言. 主讲教师:许 钢 2005. 2. 第 6 讲 VHDL 并行语句.   并行语句是硬件描述语言与软件程序最大的区别所在。所有并行语句在结构体中的执行都是同时进行的,即它们的执行顺序与语句书写的顺序无关。这种并行性是由硬件本身的并行性决定的,即一旦电路接通电源,它的各部分就会按照事先设计好的方案同时工作。 VHDL 有几种主要并行语句: 进程语句 块语句 并行信号赋值语句 元件例化语句 生成语句 并行过程调用语句. 第 6 讲 VHDL 并行语句. 进程语句 ( Process ). - PowerPoint PPT Presentation

Citation preview

Page 1: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 1

EDA技术——基于 VHDL语言主讲教师:许 钢

2005. 2

Page 2: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 2

第 6讲 VHDL 并行语句  并行语句是硬件描述语言与软件程序最大的区别所在。所有并行语句在结构体中的执行都是同时进行的,即它们的执行顺序与语句书写的顺序无关。这种并行性是由硬件本身的并行性决定的,即一旦电路接通电源,它的各部分就会按照事先设计好的方案同时工作。VHDL 有几种主要并行语句:•进程语句•块语句•并行信号赋值语句•元件例化语句•生成语句•并行过程调用语句

Page 3: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 3

第 6讲 VHDL 并行语句  进程 (Process) 语句是一种并发处理语句,在一个构造体中多个 Process 是同时并行运行,它是 VHDL 语言中描述硬件系统并发行为的最基本的语句。它的特点归纳如下:• 一个进程语句可以与其他进程语句并发运行;• 进程语句可以存取在设计实体或构造体中定义的所有信号;• 在一个进程模块内的语句都是按顺序执行的;• 进程有挂起和执行两个状态,要激活进程,在进程结构中必须包含一个敏感信号列表或含一个 Wait 语句;• 进程之间的通信是通过信号传递实现的。

进程语句 ( Process )

Page 4: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 4

第 6讲 VHDL 并行语句  块语句是将结构体中的并行语句组合在一起,其主要目的是改善并行语句及其结构的可读性,一般用于较复杂的 VHDL 程序中;但从综合的角度看, BLOCK 语句没有实用价值。块语句的语法描述如下: 块标号: 块标号: BLOCKBLOCK   说明语句;   说明语句;   BEGINBEGIN   并行语句   并行语句 ;;   END BLOCKEND BLOCK    [[ 块标号块标号 ]] ;;注意:块标号必须有。注意:块标号必须有。

块语句( Block )

Page 5: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 5

第 6讲 VHDL 并行语句  说明语句与结构体的说明语句相同,主要是对该块所要用到的对象、其它模块等加以说明。可说明的项目有:• 端口说明、类属说明;• 子程序说明及子程序体;• 类型说明;• 常数说明;• 信号说明;• 元件说明等。  

块语句( Block )

Page 6: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 6

第 6讲 VHDL 并行语句例 1 :ARCHITECTURE behave OF test_block ISBEGIN  ...  p1:BLOCK    BEGIN     aequalb<='1' WHEN a=b ELSE '0';     agreatb<='1' WHEN a>b ELSE '0';     alessb<='1' WHEN a<b ELSE '0';  END BLOCK;  ...END behave;

块语句( Block )

Page 7: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 7

第 6讲 VHDL 并行语句   BLOCK是可以嵌套的,内层 BLOCK块可以使用外层 BLOCK块所定义的信号,而反之则不行。例 2 :  BLK1: Block     Signal qbus; std_logic_vector;   Begin     BLK2: Block        Signal qbus: std_logic_vector;      Begin       —— BLK2语句  --使用 BLK1中的 qbus: BLK1-qbus     End Block BLK2       —— BLK1语句  End Block BLK1

(尽量不要用同名变量或信号。)

块语句( Block )

Page 8: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 8

第 6讲 VHDL 并行语句  块是一个独立的子结构,它可以包含 Port 和 Generic 语句。这样就允许设计者通过这两个语句将块内的信号变化传递给块的外部信号,同样也可以将块外部的信号变化传递给块的内部。   Port 和 Generic 语句的这种性能,将允许在一个新的设计中可重复使用已有的 Block 块。在新的模块中,如果 Port 名和 Generic 名与原来的不一致时,在块中采用 Port 和 Generic 映射就可以顺利解决这个问题。

块语句( Block )

Page 9: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 9

第 6讲 VHDL 并行语句例 3 :Architecture cpu-blk OF cpu IsArchitecture cpu-blk OF cpu Is   Signal ibus,dbus,x: tw32;Signal ibus,dbus,x: tw32;BeginBegin   ......   ALUALU :: BlockBlock     Port(abusPort(abus ,, bbusbbus :: In tw32; In tw32;                  doutdout :: Out tw32);Out tw32);     Port Map( abus=>ibus, bbus=>dbus, dout=>x );Port Map( abus=>ibus, bbus=>dbus, dout=>x );    原有的信号、变量等说明语句原有的信号、变量等说明语句 ;;   BeginBegin    原有的块内语句原有的块内语句 ;;   End Block ALU;End Block ALU;   ......End cpu-blk;End cpu-blk;

块语句( Block )

Page 10: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 10

第 6讲 VHDL 并行语句  并行信号赋值语句有三种形式: 简单信号赋值语句 简单信号赋值语句的格式: 赋值目标 <= 表达式 ;

并行信号赋值语句

Page 11: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 11

第 6讲 VHDL 并行语句  并行信号赋值语句有三种形式: 条件信号赋值语句 条件信号赋值语句的格式: 赋值目标 <=表达式 1 WHEN 赋值条件 ELSE      表达式 2 WHEN 赋值条件 ELSE       ......      表达式 n;例 4 :ARCHITECTURE archmux OF mux4 IS  BEGIN    y<=a0 WHEN s="00" ELSE     a1 WHEN s="01" ELSE     a2 WHEN s="10" ELSE     a3 ;END archmux;

并行信号赋值语句

对比 If语句:   If条件信号赋值语句是顺序语句,只能用在进程( Process)中。

Page 12: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 12

第 6讲 VHDL 并行语句  并行信号赋值语句有三种形式: 选择信号赋值语句 选择信号赋值语句的格式:  WITH 选择表达式 SELECT 赋值目标信号 <=表达式 1 WHEN 选择值 1,        表达式 2 WHEN 选择值 2,         ......        表达式 n WHEN others;例 5 :ARCHITECTURE archmux OF mux4 IS  BEGIN    WITH s SELECT   y<=a0 WHEN "00",     a1 WHEN "01",     a2 WHEN "10",     a3 WHEN OTHERS;   --最后一句为分号;END archmux;

并行信号赋值语句

对比 Case语句:   Case语句是顺序语句,只能用在进程( Process)中。

Page 13: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 13

第 6讲 VHDL 并行语句  并行过程调用语句见第 7 讲。

并行过程调用语句

Page 14: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 14

第 6讲 VHDL 并行语句  我们常把已设计好的设计实体称为一个元件或一个模块。 VHDL中基本的设计层次是元件,它可以作为别的模块或者高层模块引用的低层模块。  元件声明是对 VHDL 模块(即底层设计,也是完整的 VHDL 设计)的说明,使之可在其他模块中被调用。元件声明可放在程序包中,也可放在其它某个设计的结构体中进行。  元件例化是指元件的调用。  元件声明及元件例化的语法分别如下: 元件声明:  COMPONENT 元件实体名  --注意:没有 IS,书 P58有错!   PORT (元件端口信息 );  --同该元件定义时实体的 PORT部分  END COMPONENT [元件实体名 ]; 元件例化: 例化名 : 元件实体名 PORT MAP (端口列表) ; 其中端口列表可以采用位置关联和名称关联的方法。

元件例化语句

Page 15: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 15

第 6讲 VHDL 并行语句例 6 :一个模为 10 的计数器和一个七段译码器的连接。LIBRARY ieee;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_1164.ALL;

ENTITY cntvh10 ENTITY cntvh10 PORT ( rd,ci,clk: IN std_logic;PORT ( rd,ci,clk: IN std_logic; co : OUT std_logic;co : OUT std_logic; qout: OUT std_logic_vector(6 DOWNTO 0));qout: OUT std_logic_vector(6 DOWNTO 0));END cntvh10;END cntvh10;

--接下一页

元件例化语句

Page 16: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 16

第 6讲 VHDL 并行语句例 6 :一个模为 10 的计数器和一个七段译码器的连接。ARCHITECTURE arch OF cntvh10 ISARCHITECTURE arch OF cntvh10 IS

---- 元件声明(库中已有元件声明(库中已有 decode48decode48 及及 cntm10cntm10 这两个元件)这两个元件) COMPONENT decode48 COMPONENT decode48 –-–- 注意:没有注意:没有 ISIS PORT ( adr: IN std_logic_vector(3 DOWNTO 0);PORT ( adr: IN std_logic_vector(3 DOWNTO 0); decodeout: OUT std_logic_vector(6 DOWNTO 0));decodeout: OUT std_logic_vector(6 DOWNTO 0)); END COMPONENT;END COMPONENT;

COMPONENT cntm10 COMPONENT cntm10 –-–- 注意:没有注意:没有 ISIS PORT ( ci,nreset,clk: IN std_logic;PORT ( ci,nreset,clk: IN std_logic; co: OUT std_logic;co: OUT std_logic; qcnt: BUFFER std_logic_vector(3 DOWNTO 0));qcnt: BUFFER std_logic_vector(3 DOWNTO 0)); END COMPONENT;END COMPONENT;-- 接下一页

元件例化语句

Page 17: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 17

第 6讲 VHDL 并行语句例 6 :一个模为 10 的计数器和一个七段译码器的连接。 SIGNAL qa: std_logic_vector(3 DOWNTO 0);SIGNAL qa: std_logic_vector(3 DOWNTO 0);BEGINBEGIN u1: cntm10 PORT MAP (ci,rd,clk,co,qa);u1: cntm10 PORT MAP (ci,rd,clk,co,qa); ---- 元件例化语句,位置关联元件例化语句,位置关联 u2: decode48 PORT MAP(decodeout=>qout, adr=>qa);u2: decode48 PORT MAP(decodeout=>qout, adr=>qa); ---- 元件例化语句,名称关联元件例化语句,名称关联END arch;END arch;  元件例化时的端口列表可采用位置关联方法,如 u1 。这种方法要求的实参(该设计中连接到端口的实际信号,如 ci,rd 等)所映射的形参(被调用元件的对外接口信号)的位置同元件声明中一致。  元件例化时的端口列表也可采用名称关联方法映射实参与形参,如u2 。格式为(形参 1=> 实参 1 ,形参 2=> 实参 2 ,… . ),这种方法与位置无关。  建议采用位置关联方法映射实参与形参。

元件例化语句

Page 18: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 18

第 6讲 VHDL 并行语句例 6 :一个模为 10 的计数器和一个七段译码器的连接。  元件例化示意图如下:

元件例化语句

注意:元件声明时端口名一定要用原元件定义时的端口名,不能变动!

Page 19: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 19

第 6讲 VHDL 并行语句  生成语句有一种复制作用,它可以生成与某个元件或设计单元电路完全相同的一组并行元件或设计单元电路结构。生成语句的格式: 标号: FOR 循环变量 IN 取值范围 GENERATE      说明语句;     BEGIN      并行语句;     END GENERATE  [标号 ];或 标号: IF 条件 GENERAE      说明语句;     BEGIN      并行语句;     END GENERATE  [标号 ];

生成语句( Generate )

Page 20: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 20

第 6讲 VHDL 并行语句例 7 :利用 Generate 语句产生 4 个 D触发器 ,如图所示。

生成语句( Generate )

Page 21: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 21

第 6讲 VHDL 并行语句例 7 :利用 Generate 语句产生 4 个 D触发器 ,如图所示。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;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;

生成语句( Generate )

Page 22: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 22

第 6讲 VHDL 并行语句  一般来讲,如果电路中各元件实体的输入、输出端是规则的,则用FOR_GENERATE 设计;如果是不规则的,则用 IF_GENERATE 语句设计。例 8 : 4位移位寄存器的设计,如图所示。

生成语句( Generate )

Page 23: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 23

第 6讲 VHDL 并行语句例 8 : 4位移位寄存器的设计,如图所示。LIBRARY ieee;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_1164.ALL;ENTITY n_shifter ISENTITY n_shifter IS GENERIC(m:integer:=4);GENERIC(m:integer:=4); PORT(a,clk,clrn,prn: IN std_logic;PORT(a,clk,clrn,prn: IN std_logic; b: OUT std_logic);b: OUT std_logic);END n_shifter;END n_shifter;

ARCHITECTURE behave OF n_shifter ISARCHITECTURE behave OF n_shifter IS COMPONENT dffCOMPONENT dff PORT(d,clk,clrn,prn: IN std_logic;PORT(d,clk,clrn,prn: IN std_logic; q: OUT std_logic);q: OUT std_logic); END COMPONENT ;END COMPONENT ; SIGNAL x:std_logic_vector(0 TO (m-2));SIGNAL x:std_logic_vector(0 TO (m-2)); ---- 接下一页接下一页

生成语句( Generate )

Page 24: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 24

第 6讲 VHDL 并行语句例 8 : 4位移位寄存器的设计,如图所示。BEGINBEGIN shifter: FOR i IN 0 TO (m-1) GENERATEshifter: FOR i IN 0 TO (m-1) GENERATE u1:IF i=0 GENERATEu1:IF i=0 GENERATE dffx: dff PORT MAP(a,clk,clrn,prn,x(i)); dffx: dff PORT MAP(a,clk,clrn,prn,x(i)); END GENERATE u1;END GENERATE u1; u2:IF (i>0 AND i/=(m-1)) GENERATEu2:IF (i>0 AND i/=(m-1)) GENERATE dffx:dff PORT MAP(x(i-1),clk,clrn,prn,x(i));dffx:dff PORT MAP(x(i-1),clk,clrn,prn,x(i)); END GENERATE u2;END GENERATE u2; u3:IF i=(m-1) GENERATEu3:IF i=(m-1) GENERATE dffx:dff PORT MAP(x(i-1),clk,clrn,prn,b);dffx:dff PORT MAP(x(i-1),clk,clrn,prn,b); END GENERATE u3;END GENERATE u3; END GENERATE shifter;END GENERATE shifter;END behave;END behave;

生成语句( Generate )

Page 25: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 25

第 6讲 VHDL 并行语句例 8 : 4位移位寄存器的设计,如图所示。设计中用到的中间信号:

生成语句( Generate )

Page 26: EDA 技术 —— 基于 VHDL 语言

EDA技术—— VHDL并行语句 26

第 6讲 VHDL 并行语句第 6 讲 (完)