《第05讲 硬件描述语言2》由会员分享,可在线阅读,更多相关《第05讲 硬件描述语言2(139页珍藏版)》请在金锄头文库上搜索。
1、 硬件执行:并发执行(VHDL本质)仿真执行:顺序执行、并发执行分为两大类:顺序(Sequential)描述语句并发(Concurrent)描述语句ARCHITECTUREProcess ProcessENTITYSequential ProcessCombinational Processportsportscomponent3.4 VHDL顺序语句(Sequential)1顺序描述语句:执行顺序与书写顺序一致,与传统软件设计 语言的特点相似。顺序语句只能用在进程与子程 序中。可描述组合逻辑、时序逻辑。常用的顺序描述语句:赋值语句; if语句;case语句;loop语句;next语句;exi
2、t语句;子程序;return语句;wait语句;null语句。23.4.1 对象与赋值语句1、VHDL中常用的对象:所有对象均分为:变量和信号对象 := 表达式; - 变量赋值对象 顺序处理语句;when 分支条件 = 顺序处理语句;when 分支条件 = 顺序处理语句; end case;26其中的分支条件可有以下的形式:when 值 = 顺序处理语句;when 值 to 值 = 顺序处理语句; when 值|值|值|值 = 顺序处理语句;以上三种方式的混合;when others = 顺序处理语句;27Case 语句使用注意:1)分支条件的值必须在表达式的取值范围内 。2)两个分支条件不能
3、重叠。3)CASE语句执行时必须选中,且只能选中一个分支条件。4)如果没有 others 分支条件存在,则分支条件必须覆盖表达式所有可能的值。 对std_logc, std_logic_vector数据类型要特别注意使用others分支条件。28例:用case 语句描述四选一电路29例:case 语句的误用 signal value : integer range 0 to 15 ;signal out_1 : bit ; case value is - 缺少 when条件语句 end case ;case value is - 分支条件不包含2到15 when 0 = out_1 out_1
4、 out_1 out_1 z1z2z3z410;end loop L2;352)for loop 语句特点:循环变量是 loop 内部自动声明的局部量,仅在 loop 内可见;不需要指定其变化方式。离散范围必须是可计算的整数范围:整数表达式 to 整数表达式整数表达式 downto 整数表达式 标号:for 循环变量 in 离散范围 loop顺序处理语句;end loop 标号;36例:用 for loop 语句描述的8位奇偶校验电路-奇校验37For Loops0A(0)GA(1)A(2)A(3)process (A, B)variable V: STD_LOGIC;beginV := 0;
5、for I in 0 to 3 loopF(I) f); S3: b(k+8);=0;k:=k+1;next loop L_Y;next loop L_X;465、 Exit 语句exit 语句将结束循环状态。格式: next语句与exit语句的格式与操作功能非常相似,区别是:next语句是跳向loop语句的起始点,而exit语句则是跳向loop语句的终点。exit 标号 when 条件表达式;47例: process(a)variable int_a: integer;beginint_a := a ;for i in 0 to max_limit loop if (int_a expres
6、sion, parameter_ name = expression) ;函数调用:function_name (parameter_name = expression, parameter_name = expression) ;583.4.5 return 语句return 语句只能用于子程序中,并用来终止一个子程序的执行。格式:分为:1)return ;用于过程,只是结束过程,不返回任何值 。2)return 表达式; 用于函数,并且必须返回一个值。return 表达式;59例:用于过程的return语句procedure rs (s, r : in std_logic;q, nq :
7、inout std_logic) isbeginif s=1 and r=1 thenreport “forbidden state: s and r are equal to 1 ”;return;elseqq q q q 表达式 ,参数名= 表达式)95例:并行过程调用与串行过程调用procedure adder( signal a, b: in std_logic;signal sum: out std_logic); adder(a1, b1, sum1);process(c1, c2)beginadder(c1, c2, s1);end process;963.5.5 VHDL的层次
8、化设计与元件声明 (component)及元件例化(instantiation)语句1、层次化设计972. 元件声明定义:对所调用的较低层次的实体模块(元件 )的名称、类属参数、端口类型、数据类型的声明。语法:元件声明类似实体声明(entity)component 元件名 isgeneric (类属声明);port (端口声明); end component 元件名 ;98例:元件声明99可在以下部分声明元件:结构体(Architecture)程序包(Package)块(Block)被声明元件的来源:VHDL设计实体;其它HDL设计实体;另外一种标准格式的文件,如EDIF或XNF;厂商提供的工
9、艺库中的元件、IP核。1003. 元件的例化定义:把低层元件安装(调用)到当前层次设计实体内部的过程。包括:类属参数传递、元件端口映射。例: u1:ADD generic map (N = 4)port map (x,y,z,carry);例化名称:元件名称 generic map ( 类属名称 = 表达式,类属名称 = 表达式 )port map ( 端口名称 = 表达式, 端口名称 = 表达式 );101端口映射方式:名称关联方式:低层次端口名 =当前层次端口名、信号名例:or2 port map(o = n6, i1 = n3, i2 = n1)位置关联方式:(当前层次端口名,当前层次端
10、口名,) 例:or2 port map( n3, n1,n6 )注:位置关联方式中,例化的端口表达式(信号 )必须与元件声明语句中的端口顺序一致。102一个低层次设计在被例化前必须有一个元件声明 。 ENTITY exam isPORT( ea, eb :IN STD_LOGIC_VECTOR(3 DOWNTO 0);ey : OUT STD_LOGIC); END exam ; ARCHITECTURE exam_arch OF exam ISCOMPONENT comparePORT( a : IN STD_LOGIC_VECTOR(3 DOWNTO 0);b : IN STD_LOGIC
11、_VECTOR(3 DOWNTO 0);y : OUT STD_LOGIC );END COMPONENT; -元件声明BEGINu1 : compare PORT MAP ( ea, eb, ey) ; -元件例化 END exam_arch ;103例:3 bit 计数器的电路组成:104此电路由 9个元件组成:3个D触发器、1个非 门、1个 2 输入或门、3个2输入与非门、1个2输入 异或非门。对应的元件例化(结构化)描述如下:105106107层次化设计的优点:n在一个设计组中,各个设计者可独立地以不 同的设计文件设计不同的模块元件。n各个模块可以被其他设计者共享,或备以后 使用。n层
12、次设计可使系统设计模块化,便于移植, 复用。n层次设计可使系统设计周期更短,更易实现 。1083.5.6 生成语句生成语句的作用:复制建立 0 个或多个备份。(并行结构)分为两类:for generate:采用一个离散的范围决定备份的数目。If generate:有条件地生成 0 个或 1 个备份。 1091、for generate 语句语法:范围:整数表达式 to 整数表达式整数表达式 downto 整数表达式 for - loop 语句与 for generate 的比较:标号:for 循环变量 in 范围 generate 并行语句 end generate 标号;110例:用生成语句
13、创建多个备份component compport (x : in bit ;y : out bit) ;end component ;signal a , b : bit_vector (0 to 7) ;gen : for I in arange generateu : comp port map (x = a( I ), y = b( I ) ;end generate gen ; 111例:4位移位寄存器 1124位移位寄存器的等效描述:1132、If generate 语句语法:if 语句与 If generate 的区别:1、If generate 没有类似于 if 语句的 else
14、 或 elsif 分支语句。2、if 语句是顺序语句, If generate 则为并行语句。标号:if 条件表达式 generate 并行语句 end generate 标号;114例:N bit 串并转换器7 6 5 4 3 2 1 0 115N bit 串并转换器(续)116N bit 串并转换器仿真结果:117子程序可在以下三个位置定义:PackageArchitectureProcess 子程序与进程语句的区别:子程序不能从结构体的其余部分直接读写信号。所有通信都是通过子程序的接口来完成的。进程可以直接读写结构体内的其它信号。3.6 子程序(SUBPROGRAM)118子程序与硬件规模:与普通软件中子程序调用的区别:普通软件子程序调用增加处理时间;VHDL中每调用一次子程序,其综合后都将对应一个相应的电路模块。子程序调用次数与综合后的电路规模成正比。设计中应严格控制子程序调用次数。119子程序的类型: 过程(Procedure):0 个或多个 in、inout、或 out 参数。可获得多个返回值。 函数(Function):0 个或多个 in 参数,一个 return 值。只能获得一个返回值。过程可作为一种独立的语句结构而单独存在 , 函数通常作为表达式的一部分来调用。子程序包含两部分:子程序声明和子程序主体。1203.