第四章VHDL主要描述语句_第1页
第四章VHDL主要描述语句_第2页
第四章VHDL主要描述语句_第3页
第四章VHDL主要描述语句_第4页
第四章VHDL主要描述语句_第5页
已阅读5页,还剩123页未读 继续免费阅读

下载本文档

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

文档简介

1、1第四章第四章 VHDL的主要描述语句的主要描述语句2顺序(顺序(Sequential)描述语句)描述语句并发(并发(Concurrent)描述语句)描述语句硬件执行:并发执行(硬件执行:并发执行(VHDL本质)本质)仿真执行:顺序执行、并发执行仿真执行:顺序执行、并发执行 ARCHITECTURE Process ProcessENTITYSequentialProcessCombinational Processportsportscomponent本章主要内容本章主要内容35.1 顺序语句顺序语句 顺序描述语句顺序描述语句: 执行顺序与执行顺序与书写顺序书写顺序一致,与传统软件设一致,与

2、传统软件设计语言的特点相似。计语言的特点相似。 顺序语句只能用在顺序语句只能用在进程进程与与子程序子程序中。中。 可描述可描述组合组合逻辑、逻辑、时序时序逻辑。逻辑。4 常用的顺序描述语句常用的顺序描述语句 赋值语句;赋值语句; ifif语句;语句; casecase语句;语句; looploop语句;语句; nextnext语句;语句; waitwait语句;语句; exitexit语句;语句; 子程序;子程序; returnreturn语句;语句; nullnull语句。语句。5一、对象与赋值语句一、对象与赋值语句 1 1、VHDLVHDL中常用的中常用的 5 5 种赋值对象种赋值对象 1

3、 1)简单名称,如)简单名称,如 my_var;my_var; 2 2)索引名称,如)索引名称,如 my_array_var(3);my_array_var(3); 3 3)片断名称,如)片断名称,如 my_array_var(3 to 6);my_array_var(3 to 6); 4 4)记录域名,如)记录域名,如 my_record.a_field;my_record.a_field; 5 5)集合,如)集合,如(my_var1, my_var2)(my_var1, my_var2)。 所有对象均分为:所有对象均分为:变量和信号变量和信号 对象对象 := = 表达式;表达式; - -

4、变量赋值变量赋值 对象对象 = = 表达式;表达式; - - 信号赋值信号赋值 要求要求:表达式的值必须与对象的类型、宽度一:表达式的值必须与对象的类型、宽度一 致。致。62、变量赋值与信号赋值、变量赋值与信号赋值 变量与信号的差异变量与信号的差异: 1 1)赋值方式的不同:)赋值方式的不同: 变量:变量:= = 表达式;表达式; 信号信号 = = 表达式;表达式; 2 2)硬件实现的功能不同:)硬件实现的功能不同: 信号信号代表电路单元、功能模块间的互代表电路单元、功能模块间的互联,代表实际的硬件连线;联,代表实际的硬件连线; 变量变量代表电路单元内部的操作,代表代表电路单元内部的操作,代表

5、暂暂 存的临时数据。存的临时数据。73 3)有效范围不同:)有效范围不同: 信号信号:程序包、实体、结构体:程序包、实体、结构体-全局量。全局量。 变量变量:进程、子程序:进程、子程序-局部量。局部量。 ARCHITECTURE SIGNAL Declarationslabel1: PROCESSVARIABLE Declarationslabel2: PROCESSVARIABLE Declarations84 4)赋值行为的不同:)赋值行为的不同: 信号赋值延迟更新数值、时序电路;信号赋值延迟更新数值、时序电路; 变量赋值立即更新数值、组合电路。变量赋值立即更新数值、组合电路。5 5)信号

6、的多次赋值)信号的多次赋值 a. a. 一个进程:最后一次赋值有效一个进程:最后一次赋值有效 b. b. 多个进程:多源驱动多个进程:多源驱动 线与、线或、三态线与、线或、三态9例:信号的多次赋值例:信号的多次赋值 architecture rtl of ex is signal a : std_logic;begin process() begin a = b; a = c; end process;end rtl;architecture rtl of ex is signal a : std_logic;begin process() begin a = b; end process;

7、process() begin a = c; . end process;end ex;10例:信号赋值与变量赋值的比较例:信号赋值与变量赋值的比较 信号赋值信号赋值: architecture rtl of sig isarchitecture rtl of sig is signal a,b : std_logic; - signal a,b : std_logic; - 定义信号定义信号 begin begin process(a, b) process(a, b) begin begin a = b ; a = b ; b = a ; b = a ; end process ; end

8、 process ; end rtl ; - end rtl ; - 结果是结果是 a a 和和 b b 的的值互换值互换11 变量赋值变量赋值: architecture rtl of var isarchitecture rtl of var is begin begin process process variable a,b:std_logic; - variable a,b:std_logic; - 定义变量定义变量 begin begin a := b ; a := b ; b := a ; b := a ; end process ; end process ; end rtl;

9、 end rtl; - - 结果是结果是a a和和b b的值都等于的值都等于b b的初值的初值 12二、转向控制语句二、转向控制语句 转向控制语句通过转向控制语句通过条件控制开关条件控制开关决定是否执决定是否执行一条或几条语句,或重复执行一条或几条语句,行一条或几条语句,或重复执行一条或几条语句,或跳过一条或几条语句。或跳过一条或几条语句。 分为五种:分为五种: if if 语句语句 case case 语句语句 loop loop 语句语句 next next 语句语句 exit exit 语句语句131、if 语句语句 if if 语句执行一序列的语句,其次序依赖于一语句执行一序列的语句,

10、其次序依赖于一个或多个条件的值。个或多个条件的值。 1 1)if if 语句的门闩控制语句的门闩控制 例:例:if (ena = 1) thenif (ena = 1) then q = d q = d; end if end if; 综合后生成锁存器(综合后生成锁存器(latchlatch)if 条件条件 then 顺序处理语句;顺序处理语句;end if ;14条件改为时钟沿,则生成条件改为时钟沿,则生成 D D触发器触发器:152 2)if if 语句的二选择控制语句的二选择控制 格式:格式: 用条件来选择两条不同程序执行的路径。用条件来选择两条不同程序执行的路径。if 条件条件 the

11、n 顺序处理语句;顺序处理语句;else 顺序处理语句;顺序处理语句;end if ;16举例:典型二选一电路举例:典型二选一电路 architecture rtl of mux2 isarchitecture rtl of mux2 is begin begin process(a, b, sel) process(a, b, sel) begin begin if (sel = 1) then if (sel = 1) then y = a ; y = a ; else else y = b ; y = b ; end if ; end if ; end process ; end pro

12、cess ; end rtl ; end rtl ;173 3)if if 语句的多选择控制语句的多选择控制 if if 语句的多选择控制又称为语句的多选择控制又称为 if if 语句的语句的嵌套嵌套。 格式:格式: if 条件条件 then 顺序处理语句;顺序处理语句;elsif 条件条件 then 顺序处理语句;顺序处理语句; elsif 条件条件 then 顺序处理语句;顺序处理语句;else 顺序处理语句;顺序处理语句;end if; 18举例:典型多选一举例:典型多选一( (四选一四选一) )电路。电路。19说明说明: if_then_elsif if_then_elsif 语句中隐

13、含了语句中隐含了优先级别优先级别的判断,的判断,最先出现的条件优先级最高,可用于设计具有优先最先出现的条件优先级最高,可用于设计具有优先级的电路。如级的电路。如8-38-3优先级编码器。优先级编码器。 library ieee; use ieee.std_logic_1164.all; entity coder is port(input: in std_logic_vector(7 downto 0); output: out std_logic_vector(2 downto 0); end coder;(待续)20 architecture art of coder is begin p

14、rocess(input) begin if input(7)=0 then output=“000”; elsif input(6)=0 then output=“001”; elsif input(5)=0 then output=“010”; elsif input(4)=0 then output=“011”; (待续) 21 elsif input(3)=0 then output=“100”; elsif input(2)=0 then output=“101”; elsif input(1)=0 then output=“110”; else output 顺序处理语句顺序处理语

15、句1; when 分支条件分支条件 = 顺序处理语句顺序处理语句2; when 分支条件分支条件 = 顺序处理语句顺序处理语句n; end case;23分支条件的形式分支条件的形式: when when 值值 = = 顺序处理语句;顺序处理语句; when when 值值 to to 值值 = = 顺序处理语句;顺序处理语句; when when 值值| |值值| |值值|值值 = = 顺序处理语句;顺序处理语句;以上三种方式的混合;以上三种方式的混合; when others = when others = 顺序处理语句;顺序处理语句;24Case Case 语句使用注意语句使用注意: 1

16、 1)分支)分支条件的值条件的值必须在表达式的取值范围内。必须在表达式的取值范围内。 2 2)两个分支条件)两个分支条件不能重叠不能重叠。 3 3)CASECASE语句执行时必须选中,且只能语句执行时必须选中,且只能选中一选中一 个个分支条件。分支条件。 4 4)如果没有)如果没有othersothers分支条件分支条件存在,则分支条存在,则分支条 件必须覆盖表达式所有可能的值。件必须覆盖表达式所有可能的值。 对对std_logic, std_logic_vectorstd_logic, std_logic_vector数据类型数据类型要特别注意使用要特别注意使用othersothers分支条

17、件。分支条件。2526举例:举例:case case 语句的误用语句的误用 signal value:integer range 0 to 15; signal value:integer range 0 to 15; signal out_1 : bit ; signal out_1 : bit ;case value is - 缺少缺少 when条件语句条件语句end case ;case value is - 分支条件不包含分支条件不包含2到到15 when 0 = out_1 out_1 out_1 out_1 = 0 ;end case ;27举例:根据输入确定输出值举例:根据输入确

18、定输出值 library ieee;library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_1164.all; entity mux41 is entity mux41 is port(s4,s3,s2,s1: in std_logic; port(s4,s3,s2,s1: in std_logic; z4,z3,z2,z1: out std_logic); z4,z3,z2,z1: out std_logic); end mux41; end mux41; architecture art of mux41 is archi

19、tecture art of mux41 is begin begin process(s4, s3, s2, s1) process(s4, s3, s2, s1) variable sel: integer range 0to15; variable sel: integer range 0to15; begin begin sel:=0; sel:=0; (待续)28 if s1=1 then sel:=sel+1; end if s1=1 then sel:=sel+1; end if;if; if s2=1 then sel:=sel+2; end if s2=1 then sel:

20、=sel+2; end if;if; if s3=1 then sel:=sel+4; end if s3=1 then sel:=sel+4; end if;if; if s4=1 then sel:=sel+8; end if s4=1 then sel:=sel+8; end if;if; z1=0; z2=0; z3=0; z1=0; z2=0; z3=0; z4=0;z4z1z1z2z2z3z3z4z410; exit L2 when a 10; end loop L2; end loop L2; 312 2)for loop for loop 语句语句特点:特点: 循环变量是循环变

21、量是 loop loop 内部内部自动声明自动声明的局部量,的局部量, 仅在仅在 loop loop 内可见;不需要指定其变化方式。内可见;不需要指定其变化方式。 离散范围必须是可计算的离散范围必须是可计算的整数范围整数范围: 整数表达式整数表达式 to to 整数表达式整数表达式 整数表达式整数表达式 downto downto 整数表达式整数表达式 标号标号:for 循环变量循环变量 in 离散范围离散范围 loop 顺序处理语句;顺序处理语句; end loop 标号标号;32举例:举例:8 8位奇偶校验电路(位奇偶校验电路(forfor循环语句)循环语句)-奇校验338 8位奇校验电路

22、仿真结果:位奇校验电路仿真结果:34将变量将变量tmptmp的初值改为的初值改为00,则为偶校验电路:,则为偶校验电路:353 3)while loop while loop 语句语句 例:例:sum:=0;sum:=0; i:=0; i:=0; abcd: while (i10) loop abcd: while (i10) loop sum:=sum+i; sum:=sum+i; i:=i+1; i:=i+1; end loop abcd; end loop abcd; 注:注:循环变量循环变量 i i 需事先定义、赋初值,并指定需事先定义、赋初值,并指定 其变化方式其变化方式。一般综合工

23、具。一般综合工具不支持不支持 while while loop loop 语句。语句。标号标号:while 循环条件循环条件 loop 顺序处理语句;顺序处理语句; end loop 标号标号;36举例:举例:8 8位奇偶校验电路(位奇偶校验电路(whilewhile语句)语句)374、Next 语句语句 在在loop loop 语句中语句中 next next语句用来跳出本次循环。语句用来跳出本次循环。 格式:格式: 分三种情况:分三种情况: 1 1) 无条件终止当前的循环,跳回到本次循环无条件终止当前的循环,跳回到本次循环 LOOP LOOP语句开始处,开始下次循环。语句开始处,开始下次循

24、环。next 标号标号 when 条件表达式条件表达式;next ;382 2) 无条件终止当前的循环,跳转到指定标号无条件终止当前的循环,跳转到指定标号的的LOOPLOOP语句开始处,重新开始执行循环操作。语句开始处,重新开始执行循环操作。3 3) 当条件表达式的值为当条件表达式的值为truetrue,则执行,则执行nextnext语句,进入跳转操作,否则继续向下执行。语句,进入跳转操作,否则继续向下执行。next 标号标号 ; next 标号标号 when 条件表达式条件表达式;39 举例:举例: L1: while i10 loop L2: while j20 loop next L1

25、when i=j; end loop L2; end loop L1;405、 Exit 语句语句 exit exit 语句将结束循环状态。语句将结束循环状态。格式:格式: next next语句与语句与exitexit语句的格式与操作功能语句的格式与操作功能非常相似,区别是:非常相似,区别是:nextnext语句是跳向语句是跳向looploop语句语句的的起始点起始点,而,而exitexit语句则是跳向语句则是跳向looploop语句的语句的终终点点。exit 标号标号 when 条件表达式条件表达式;41举例:举例: process(a) variable int_a: integer;

26、begin int_a := a ; for i in 0 to max_limit loop if (int_a = 0 ) then exit; else int_a := int_a - 1 ; end if ; end loop ; end process ;42三、三、wait 语句语句 进程在仿真时的进程在仿真时的两个状态两个状态:执行或挂起。:执行或挂起。 进程状态的变化进程状态的变化受受wait wait 语句或敏感信号量变语句或敏感信号量变 化的控制。化的控制。 4 4种不同的条件种不同的条件: wait - wait - 无限等待无限等待 wait on - wait on

27、 - 敏感信号量变化敏感信号量变化 wait until - wait until - 条件满足(可综合)条件满足(可综合) wait for - wait for - 时间到时间到431、wait on 语句语句 格式:格式: 例:以下两种描述是完全等价的例:以下两种描述是完全等价的 敏感信号量列表和敏感信号量列表和 wait wait 语句只能选其一,语句只能选其一,两者不能同时使用。两者不能同时使用。wait on 信号信号,信号,信号;process(a, b) begin y= a and b;end process; processbegin y= a and b; wait on

28、 a, b; end process;442、wait until 语句语句(可综合)(可综合) 格式:格式: 当表达式的值为当表达式的值为“真真”时,进程被启动,否时,进程被启动,否则进程被挂起。则进程被挂起。 wait until wait until 语句的语句的三种表达方式三种表达方式: wait until wait until 信号信号 = value;= value; wait until wait until 信号信号event and event and 信号信号 = value;= value; wait until not( wait until not(信号信号stab

29、le) and stable) and 信号信号= = value;value;wait until 表达式;表达式;45时钟信号时钟信号 clk clk 的上升沿的描述的上升沿的描述: wait until clk = 1;wait until clk = 1; wait until rising_edge(clk); wait until rising_edge(clk); wait until clkevent and clk = 1; wait until clkevent and clk = 1; wait until not(clkstable) and clk=1; wait u

30、ntil not(clkstable) and clk=1;由以上描述可实现相同的硬件电路结构。由以上描述可实现相同的硬件电路结构。 时钟信号下降沿的描述时钟信号下降沿的描述? ?(自己思考)(自己思考)46举例:用举例:用wait untilwait until语句实现语句实现D D触发器触发器 architecture rtl of d isarchitecture rtl of d is begin begin process process begin begin wait until clkevent and clk=1; wait until clkevent and clk=1;

31、 q = d; q = d; end process; end process; end rtl; end rtl; 47举例:同步复位功能电路举例:同步复位功能电路 processprocess begin begin rst_loop: loop rst_loop: loop wait until clkevent and wait until clkevent and clk=1;clk=1; if rst=1 then if rst=1 then x=0; x=0; else else x=a; x expression parameter_ name = expression , p

32、arameter_ name = expression) ; , parameter_ name = expression) ;函数调用:函数调用: function_name (function_name ( parameter_name = expression parameter_name = expression , parameter_name = expression) ; , parameter_name = expression) ;50五、五、return 语句语句 return return 语句只能用于子程序中,并用来终止语句只能用于子程序中,并用来终止一个子程序的执行。

33、一个子程序的执行。格式:格式:分为:分为:1 1)return return ; 用于过程,只是结束过程,不返回任何值。用于过程,只是结束过程,不返回任何值。 2 2)return return 表达式;表达式; 用于函数,并且必须返回一个值。用于函数,并且必须返回一个值。 return 表达式表达式;51举例:举例:用于过程用于过程的的returnreturn语句语句 procedure rs (s,r: in std_logic;procedure rs (s,r: in std_logic; q, nq : inout std_logic) is q, nq : inout std_lo

34、gic) is begin begin if s=1 and r=1 then if s=1 and r=1 then report “forbidden state: s and r report “forbidden state: s and r are equal to 1 ”; are equal to 1 ”; return; return; else else q=s and nq after 5 ns; q=s and nq after 5 ns; nq= a and q after 5 ns; nq= a and q after 5 ns; end if; end if; en

35、d procedure rs; end procedure rs;52举例:举例:用于函数用于函数的的returnreturn语句语句 function opt (a,b,sel: std_logic )function opt (a,b,sel: std_logic ) return std_logic is return std_logic is begin begin if sel = 1 then if sel = 1 then return ( a and b ); return ( a and b ); else else return (a or b ); return (a o

36、r b ); end if; end if; end function opt; end function opt;53六六 null 语句语句 nullnull为空语句,不作任何操作。格式:为空语句,不作任何操作。格式: null;54七、其它语句和说明七、其它语句和说明 属性(属性(attributeattribute)描述:)描述: 属性是某一对象的特征表示,是一个内属性是某一对象的特征表示,是一个内 部预定义函数。格式为:部预定义函数。格式为: 综合器支持的属性有:综合器支持的属性有: leftleft、 rightright、 highhigh、 lowlow、 rangerange

37、、 rverse_rangerverse_range、 lengthlength、 eventevent、 stablestable对象名对象名属性标识符属性标识符55属性属性 eventevent 对在当前的一个极小的时间段对在当前的一个极小的时间段内发生的事件内发生的事件的情况进行检测。如发生事件,则返回的情况进行检测。如发生事件,则返回 truetrue,否,否则返回则返回 falsefalse。 发生事件:信号电平发生变化。发生事件:信号电平发生变化。 clockeventclockeventclock=1clockeventclock=0clockevent56时钟信号的上升沿描述:

38、时钟信号的上升沿描述: clockevent and clock = 1clockevent and clock = 1时钟信号的下降沿描述:时钟信号的下降沿描述: clockevent and clock = 0clockevent and clock = 0上升沿触发器描述:上升沿触发器描述: process(clock)process(clock) begin begin if clockevent and clock = 1 if clockevent and clock = 1 thenthen q = data ; q = data ; end if ; end if ; end

39、process; end process;57属性属性 stablestable 属性属性 stable stable 的测试功能与的测试功能与 eventevent刚好相刚好相反,反,信号在信号在时间段内无事件发生,则返回时间段内无事件发生,则返回 truetrue,否,否则返回则返回 falsefalse。 以下两语句的功能相同:以下两语句的功能相同: clockevent and clock = 1clockevent and clock = 1 not ( clockstable ) and clock = not ( clockstable ) and clock = 1158第第4

40、 4章章 习题一习题一 1 1、信号与变量的区别有哪些?信号可以用来描、信号与变量的区别有哪些?信号可以用来描 述哪些硬件特性?述哪些硬件特性? 2 2、if if 语句可分为哪几种类型?如何用嵌套式语句可分为哪几种类型?如何用嵌套式 ifif语句描述具有优先级的电路?语句描述具有优先级的电路? 3 3、case case 语句有什么特点?其分支条件使用时有语句有什么特点?其分支条件使用时有 哪些注意事项?哪些注意事项? 4 4、loop loop 语句的类型有哪些?其循环变量有什么语句的类型有哪些?其循环变量有什么 特点?特点? 5 5、next next 语句与语句与 exit exit

41、语句的区别是什么?语句的区别是什么? 6 6、wait wait 语句有哪些类型?语句有哪些类型?wait wait 语句在进程中语句在进程中 的作用是什么?与敏感信号表有什么关系?的作用是什么?与敏感信号表有什么关系?59 5.2 VHDL并发语句并发语句(ConcurrentConcurrent) Architecture并发语句并发语句并发语句并发语句并发语句并发语句信号信号信号信号信号信号60 常用的并发描述语句有:常用的并发描述语句有: 并行信号赋值语句并行信号赋值语句 进程(进程(processprocess)语句)语句 块(块(blockblock)语句)语句 并行过程调用语句并

42、行过程调用语句 元件例化语句元件例化语句 生成语句生成语句 断言语句断言语句61一、一、 并行信号赋值语句并行信号赋值语句包括三种:包括三种: 简单并行信号赋值;简单并行信号赋值; 条件信号赋值;条件信号赋值; 选择信号赋值。选择信号赋值。共同特点:共同特点: (1 1)赋值目标赋值目标必须是信号,与其它并行语句同必须是信号,与其它并行语句同时执行,与书写顺序及是否在块语句中无关。时执行,与书写顺序及是否在块语句中无关。 (2 2)每一信号赋值语句)每一信号赋值语句等效等效于一个进程语句。于一个进程语句。所有输入信号的变化都将启动该语句的执行。所有输入信号的变化都将启动该语句的执行。621、简

43、单并行信号赋值语句、简单并行信号赋值语句 即:即:信号信号 = = 表达式表达式例:以下两种描述等价例:以下两种描述等价architecture behav of a_var is begin output=a(i);end behav;architecture behav of a_var is begin process(a, i) begin output=a(i); end process; end behav;一个简单并行信号赋值语句是一个一个简单并行信号赋值语句是一个进程的缩写进程的缩写。63等效:等效:LIBRARY ieee;USE ieee.std_logic_1164.al

44、l;ENTITY ex1 IS PORT(a, b : IN STD_LOGIC; y : OUT STD_LOGIC);END ex1;ARCHITECTURE rtl OF ex1 IS SIGNAL c : STD_LOGIC;BEGIN c = a and b; y = c;END rtl;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY ex2 IS PORT(a,b : IN STD_LOGIC; y : OUT STD_LOGIC);END ex2;ARCHITECTURE rtl OF ex2 IS SIGNAL c : STD_L

45、OGIC;BEGIN process1: PROCESS(a, b) BEGIN c = a and b; END PROCESS process1; process2: PROCESS(c) BEGIN y = c; END PROCESS process2;END rtl;64不等效:不等效:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY ex1 IS PORT(a, b : IN STD_LOGIC; y : OUT STD_LOGIC);END ex1;ARCHITECTURE rtl OF ex1 IS SIGNAL c : STD_L

46、OGIC;BEGIN c = a and b; y = c;END rtl;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY ex2 IS PORT(a,b : IN STD_LOGIC; y : OUT STD_LOGIC);END ex2;ARCHITECTURE rtl OF ex2 IS SIGNAL c : STD_LOGIC;BEGIN PROCESS(a, b, c) BEGIN c = a and b; y = c; END PROCESS;END rtl;652、条件信号赋值语句、条件信号赋值语句 格式格式: : 目的信号量目的信

47、号量 = 表达式表达式1 when 条件条件1 else 表达式表达式2 when 条件条件2 else 表达式表达式3 when 条件条件3 else 表达式表达式n;66举例:用条件信号赋值语句描述举例:用条件信号赋值语句描述四选一电路四选一电路 entity mux4 isentity mux4 is port(i0, i1, i2, i3, a, b : in std_logic; port(i0, i1, i2, i3, a, b : in std_logic; q : out std_logic); q : out std_logic); end mux4; end mux4; a

48、rchitecture rtl of mux4 is architecture rtl of mux4 is signal sel : std_logic_vector (1 downto 0); signal sel : std_logic_vector (1 downto 0); begin begin sel=b & a; sel=b & a; q=i0 when sel = “00” else q=i0 when sel = “00” else i1 when sel = “01” else i1 when sel = “01” else i2 when sel = “

49、10” else i2 when sel = “10” else i3 when sel = “11”; i3 when sel = “11”; end rtl; end rtl; 67条件信号赋值语句与进程中的多选择条件信号赋值语句与进程中的多选择 if if 语句等价:语句等价:q = a WHEN sela = 1 ELSE b WHEN selb = 1 ELSE c;PROCESS(sela, selb, a, b, c)BEGIN IF sela=1 THEN q = a; ELSIF selb=1 THEN q = b; ELSE q = c; END IF;END PROCES

50、S;683、选择信号赋值语句、选择信号赋值语句 格式:格式:with 表达式表达式 select 目的信号量目的信号量 = 表达式表达式1 when 条件条件1, 表达式表达式2 when 条件条件2, 表达式表达式n when 条件条件n;注:注:1 1)不能有重叠的条件分支。)不能有重叠的条件分支。 2 2)最后条件可为)最后条件可为 others others。否则,其它条件。否则,其它条件 必须能包含表达式的所有可能值。必须能包含表达式的所有可能值。 3 3)选择信号赋值语句与进程中的)选择信号赋值语句与进程中的 case case 语语 句等价。句等价。69例:用例:用选择信号赋值选

51、择信号赋值语句描述四选一电路语句描述四选一电路 entity mux4 is port(i0, i1, i2, i3, a, b : in std_logic; q : out std_logic); end mux4; architecture rtl of mux4 is signal sel : std_logic_vector (1 downto 0); begin sel=b & a; with sel select q q q q q = d; END CASE;END PROCESS;WITH sel SELECT q = a WHEN “00”, b WHEN “01”

52、, c WHEN “10”, d WHEN OTHERS;71二、进程(二、进程(process)语句)语句 进程进程(processprocess)语句最具)语句最具VHDLVHDL语言特色。提语言特色。提供了一种用算法描述硬件行为的方法。供了一种用算法描述硬件行为的方法。 特点特点: (1 1)进程与进程,或其它并发语句之间的并发)进程与进程,或其它并发语句之间的并发性;性; (2 2)进程内部的顺序性;)进程内部的顺序性; (3 3)进程的启动与挂起;)进程的启动与挂起; (4 4)进程与进程,或其它并发语句之间的通信。)进程与进程,或其它并发语句之间的通信。72信号信号 进程语句进程语

53、句 process 进程语句进程语句 process信号信号信号信号 进程语句进程语句 process73敏感信号表敏感信号表:进程内要读取的所有敏感信号:进程内要读取的所有敏感信号(包括端口)的列表。每一个敏感信号的变化,(包括端口)的列表。每一个敏感信号的变化,都将启动进程。都将启动进程。 格式:格式:标记:标记: process ( 敏感信号表敏感信号表) 进程说明项进程说明项 begin 顺序描述语句顺序描述语句 end process 标记标记;信号名称信号名称 ,信号名称,信号名称 74敏感信号表的特点敏感信号表的特点: (1 1)同步进程同步进程的敏感信号表中只有时钟信号。的敏感

54、信号表中只有时钟信号。 如:如:process(clk)process(clk) begin begin if(clkevent and clk = 1) if(clkevent and clk = 1) thenthen if reset = 1 thenif reset = 1 then data = “00”; data = “00”; else else data = in_data; data = in_data; end if; end if; end if; end if; end process; end process;75 (2 2)异步进程异步进程敏感信号表中除时钟信号外

55、,还敏感信号表中除时钟信号外,还有其它信号。有其它信号。例:例:process(clkprocess(clk,reset)reset) begin begin if reset = 1 thenif reset = 1 then data = “00”; data = “00”; elsif(clkevent and clk = 1) elsif(clkevent and clk = 1) thenthen data = in_data; data = in_data; end if; end if; end process; end process; 76(3 3)如果有)如果有 wait

56、wait 语句,则不允许有敏感信号表。语句,则不允许有敏感信号表。 PROCESS (a,b) BEGIN -sequential statements END PROCESS; PROCESS BEGIN - sequential statements WAIT ON (a,b) ; END PROCESS;77定义:给一个信号赋值,即为该信号创建一个驱动定义:给一个信号赋值,即为该信号创建一个驱动 器(驱动信号)。多个进程或并发语句给同器(驱动信号)。多个进程或并发语句给同 一个信号赋值,则该信号为一个信号赋值,则该信号为多信号源驱动多信号源驱动。例:例: a_out = a when e

57、nable_a else a_out = a when enable_a else Z ;Z ; b_out = b when enable_b else b_out = b when enable_b else Z ;Z ; process ( a_out) process ( a_out) begin begin sig = a_out ; sig = a_out ; end process ; end process ; process ( b_out ) process ( b_out ) begin begin sig = b_out ; sig = b_out ; end proc

58、ess ; end process ;三态缓冲器总线结构与多驱动信号三态缓冲器总线结构与多驱动信号78三、块语句三、块语句 块语句将一系列块语句将一系列并行描述语句进行组合并行描述语句进行组合,目,目的是改善并行语句及其结构的可读性。可使结构的是改善并行语句及其结构的可读性。可使结构体层次鲜明,结构明确。体层次鲜明,结构明确。语法如下:语法如下: 标记:标记:block ( 块保护表达式块保护表达式 ) 块说明项块说明项 begin 并行语句并行语句 end block 标记标记 ;791、块语句的使用、块语句的使用 以下两种描述结果相同:以下两种描述结果相同: 描述一:描述一: a1: ou

59、t1=1 after 2 ns;a1: out1=1 after 2 ns; a2: out2=1 after 2 ns; a2: out2=1 after 2 ns; a3: out3=1 after 2 ns; a3: out3=1 after 2 ns; 描述二:描述二: a1: out1=1 after 2 ns;a1: out1=1 after 2 ns; blk1: block blk1: block begin begin a2: out2=1 after 2 ns; a2: out2=1 after 2 ns; a3: out3=1 after 2 ns; a3: out3 =

60、 表达式表达式 , 参数名参数名= = 表达式表达式)83例:并行过程调用与串行过程调用例:并行过程调用与串行过程调用 procedure adder( signal a, b: in std_logic; signal sum: out std_logic); adder(a1, b1, sum1); process(c1, c2) begin adder(c1, c2, s1); end process;84五、元件声明及元件例化五、元件声明及元件例化 1. 层次化设计层次化设计852. 元件声明元件声明 定义定义:对所调用的较低层次的实体模块:对所调用的较低层次的实体模块 (元件)的名称、类属参数、端口(元件

温馨提示

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

评论

0/150

提交评论