1、第五章第五章2023-2-425.1 顺序描述语句顺序描述语句n执行的顺序:顺序描述语句同高级语言的执行执行的顺序:顺序描述语句同高级语言的执行一样,是一样,是按出现次序按出现次序加以执行的;加以执行的;n出现的场合:进程或子程序出现的场合:进程或子程序(过程过程/函数函数)中;中;wait语句语句 断言语句断言语句 信号代入语句信号代入语句 变量赋值语句变量赋值语句 过程调用语句过程调用语句 if语句语句 case语句语句 loop语句语句 next语句语句 exit语句语句 null语句语句2023-2-435.1.1 信号代入语句信号代入语句1)书写格式书写格式目的信号量目的信号量=敏感
2、信号量表达式;敏感信号量表达式;处于处于构造体中构造体中的信号代入语句的信号代入语句 z=a or(b nand c);有有3 个敏感量个敏感量 a、b、c,无论哪一个敏感量发生,无论哪一个敏感量发生变化,该代入语句将被执行。变化,该代入语句将被执行。2)举例举例2023-2-44na=b after 5 ns;表示当表示当b发生新的变化发生新的变化5ns后,才被代入到信后,才被代入到信号号a中;中;nc=a and b after 15 ns;表示当表示当a或或b发生新的变化发生新的变化15ns后,它们进行后,它们进行与逻辑操作的结果才被代入到信号与逻辑操作的结果才被代入到信号a中,可描述中
3、,可描述逻辑门的延时特性;逻辑门的延时特性;na=0 after 5 ns,1 after 10 ns,0 after 15 ns;该信号代入语句描述了怎样的波形呢?该信号代入语句描述了怎样的波形呢?2023-2-453)两类延时语句惯性延时、传输延时两类延时语句惯性延时、传输延时(1)惯性(惯性(Inertial)延时)延时n惯性延时:在惯性模型中,惯性延时:在惯性模型中,系统或器件系统或器件输出信号要发输出信号要发生变化,必须有一段时间的延时,这段延时时间,就生变化,必须有一段时间的延时,这段延时时间,就是系统或元件的惯性延时。是系统或元件的惯性延时。n特点:当一个系统或器件的输入信号周期
4、,小于系统特点:当一个系统或器件的输入信号周期,小于系统或器件的惯性延时,其输出将保持不变。或器件的惯性延时,其输出将保持不变。n如:在一个信号值维持期间,如果存在任何毛刺、脉如:在一个信号值维持期间,如果存在任何毛刺、脉冲等周期小于器件本身的惯性延时的情况,输出信号冲等周期小于器件本身的惯性延时的情况,输出信号的值将不变,否则将引起信号的变化。的值将不变,否则将引起信号的变化。2023-2-46惯性延时举例惯性延时举例假设某门电路的惯性延假设某门电路的惯性延时为时为20 nsb=inertial a after 20 ns;所有器件都存在惯性延时,所有器件都存在惯性延时,在代入语句中加上惯性
5、延在代入语句中加上惯性延时时间,可以仿真硬件电时时间,可以仿真硬件电路实际工作情况,如:路实际工作情况,如:b=a after 10 ns;或:或:b=inertial a after 10 ns;惯性延时说明只在惯性延时说明只在行为行为仿真仿真时才有意义,逻辑综时才有意义,逻辑综合时将被忽略。合时将被忽略。10ns2023-2-47(2)传输传输(Transport)延时延时n传输延时常用于描述传输延时常用于描述总线延迟、连接线总线延迟、连接线的延的延时,及时,及ASIC芯片的路径延时芯片的路径延时。n在在VHDL语言中,语言中,传输延时不能缺省传输延时不能缺省,必须在,必须在语句中使用传输
6、延时的前置词语句中使用传输延时的前置词transport明确明确说明。说明。n特点:输出端的信号在延时规定时间后,将特点:输出端的信号在延时规定时间后,将完全复现完全复现输入端的输入波形,而不管输入波输入端的输入波形,而不管输入波形的形状和宽窄如何。形的形状和宽窄如何。2023-2-48传输延时举例传输延时举例传输延时:不管多传输延时:不管多短的脉冲都根据指短的脉冲都根据指定的延时值,传给定的延时值,传给一个延时信号输出一个延时信号输出。2023-2-495.1.2 变量赋值语句变量赋值语句1)书写格式书写格式目的变量目的变量:表达式;表达式;2)举例举例 a:=2;-值;值;b:=d+e;-
7、表达式;表达式;c:=f;-可为信号、变量、常量;可为信号、变量、常量;2023-2-4105.1.3 断言(断言(assert)语句)语句n作用:主要用于程序的仿真、调试中的人机会话。作用:主要用于程序的仿真、调试中的人机会话。assert 条件条件 report 输出信息输出信息severity 级别级别;格式:格式:assert语句检查一个布尔表达式为真或假,如果值语句检查一个布尔表达式为真或假,如果值是是真真,则,则该语句任何事都不做该语句任何事都不做,如果值是如果值是假假,断言断言语句将输出一用户规定的字符串到标准输出终端语句将输出一用户规定的字符串到标准输出终端。2023-2-41
8、1assert 条件条件 report 输出信息输出信息severity 级别级别;设计者所写的文设计者所写的文字串,通常是说字串,通常是说明错误的原因,明错误的原因,文字串应用双引文字串应用双引号括起来。号括起来。错误严重程度的级别,错误严重程度的级别,分为分为4级别:级别:failure,error,waring,note布尔表达式布尔表达式 assert(sendb=1)report“sendb timed out at 1”severity error;2023-2-4125.1.4 wait语句语句n等待语句用于等待语句用于控制进程的执行时间控制进程的执行时间;n当进程执行到当进程执
9、行到wait语句时,将被语句时,将被挂起挂起,直到,直到wait语句的语句的条件满足条件满足,才继续,才继续执行执行后续语句;此时进后续语句;此时进程中该语句之前的信号赋值语句得到执行;程中该语句之前的信号赋值语句得到执行;n注意:注意:wait语句通常不存在具体电路对应,在电语句通常不存在具体电路对应,在电路综合时通常不产生影响;路综合时通常不产生影响;2023-2-413wait语句可设置的四种不同条件语句可设置的四种不同条件无限等待、时间到、条件满足以及敏感信号量变化。无限等待、时间到、条件满足以及敏感信号量变化。wait 无限等待无限等待wait for 时间到时间到wait unti
10、l 条件满足条件满足wait on 敏感信号变化敏感信号变化后三种条件可以单独使用也可以混合使用。后三种条件可以单独使用也可以混合使用。书写格式书写格式2023-2-4141.wait on 语句语句wait on语句后面可跟一个或多个信号量,语句后面可跟一个或多个信号量,等待等待所列举信号中任何一个发生变化所列举信号中任何一个发生变化。1)书写格式书写格式wait on 信号信号1 ,信号,信号2 ;2)举例举例wait on a,b;等待信号量等待信号量a或或b发生变化,发生变化,a或或b中只要有一个发生变化,中只要有一个发生变化,进程将结束挂起状态,继续执行进程将结束挂起状态,继续执行w
11、ait on语句后面的语句。语句后面的语句。2023-2-415例:判断以下三段程序的正误例:判断以下三段程序的正误process(a,b)begin y=a and b;end process;processbegin wait on a,b;y=a and b;end process;process(a,b)begin wait on a,b;y=a and b;end process;wait on 所起作用与进程的敏感信号量表相所起作用与进程的敏感信号量表相同,两者不能同时存在。同,两者不能同时存在。2023-2-4162.wait until 语句语句v利用表达式建立隐含的利用表达式
12、建立隐含的敏感信号量表敏感信号量表;v当任何一个涉及的信号发生变化时,就自动检测当任何一个涉及的信号发生变化时,就自动检测布尔表达式是否为真;布尔表达式是否为真;v如果为真,如果为真,则进程脱离等待状态则进程脱离等待状态,执行后续语句;执行后续语句;如果为假,则继续等待。如果为假,则继续等待。1)书写格式书写格式wait until 布尔表达式;布尔表达式;2023-2-417nwait until(x*10)100);a.当信号量当信号量x的值大于或等于的值大于或等于10时,进程执行到该时,进程执行到该语句,就被挂起;语句,就被挂起;b.当当x的值小于的值小于10时,进程再次被启动,继续执行
13、时,进程再次被启动,继续执行wait until语句的后继语句。语句的后继语句。2)举例)举例:利用表达式建立隐含的利用表达式建立隐含的敏感信号量表敏感信号量表2023-2-418library ieee;use ieee.std_logic_1164.all;entity kdec24 isport(a:in std_logic_vector(1 downto 0);en:in std_logic;f:out std_logic_vector(3 downto 0);end entity kdec24;例:例:architecture d of kdec24 isbegin process
14、begin wait until en=1;f(0)=not a(1)and not a(0);f(1)=not a(1)and a(0);f(2)=a(1)and not a(0);f(3)=a(1)and a(0);end process;end architecture d;2023-2-4193.wait for 语句语句 当进程执行到该语句时将被挂起,直到指当进程执行到该语句时将被挂起,直到指定的时间到了,进程再次开始执行定的时间到了,进程再次开始执行wait for 语句语句后继的语句。后继的语句。1)书写格式书写格式 wait for 时间表达式;时间表达式;2023-2-420
15、若若a=2,b=50ns,c=70ns,则执行到该语句时,就要等待则执行到该语句时,就要等待2*(50+70)=240ns后,后,再继续执行后续语句。再继续执行后续语句。wait for(a*(b+c););2)举例举例执行到该语句等待执行到该语句等待20ns以后,再继续执行下一条指令。以后,再继续执行下一条指令。wait for 20 ns;2023-2-421例:利用例:利用wait for构成输入信号波形构成输入信号波形entity inhibittestbench isend entity inhibittestbench;architecture beh of inhibittest
16、bench iscomponent inhibit isport(x,y:in bit;z:out bit);end component inhibit;signal xt,yt,zt:bit;begin u1:inhibit port map(xt,yt,zt);process begin xt=0;yt=0;wait for 10 ns;xt=0;yt=1;wait for 10 ns;xt=1;yt=0;wait for 10 ns;xt=1;yt=1;wait;-进入无限期等待,进入无限期等待,避免进入无限期循环;避免进入无限期循环;end process;end architectu
17、re beh;2023-2-422entity inhibit isport(x,y:in bit;z:out bit);end entity inhibit;architecture rtl of inhibit isbegin z=x and(not y);end architecture rtl;component inhibit is port(x,y:in bit;z:out bit);end component inhibit;2023-2-4234.多条件等待语句多条件等待语句上述语句等待的是上述语句等待的是3个条件:个条件:1)信号量信号量umi和和interrupt任何一个有
18、一次新的变化;任何一个有一次新的变化;2)信号量信号量umi或或interrupt 任何一个取值为任何一个取值为“真真”;3)该语句已等待该语句已等待5 us。前面所讲的三类前面所讲的三类wait 语句,等待的条件都是单一的,语句,等待的条件都是单一的,要么是信号量要么是信号量(wait on),要么是布尔量,要么是布尔量(wait until),要,要么是时间量么是时间量(wait for)。wait语句可同时使用多个等待条语句可同时使用多个等待条件件。例如例如wait on umi,interruptuntil(umi=true)or(interrupt=true)for 5 us;202
19、3-2-424 多条件等待中的表达式,至少应包含一个多条件等待中的表达式,至少应包含一个信号量,信号量,比如,比如,wait until(interrupt=true)or(old_clk=1););结论:在等待语句中结论:在等待语句中信号的变化信号的变化才能引起等待语句才能引起等待语句表达式的一次评价和计算。表达式的一次评价和计算。若上面语句中若上面语句中interrupt和和old_clk两个都是两个都是变量,变量,而没有一个信号量,那么,即使两个变量有变化,而没有一个信号量,那么,即使两个变量有变化,这条语句也不会对表达式进行评估和计算。这条语句也不会对表达式进行评估和计算。事实上,挂起
20、的两个变量的值是不可能改变的,事实上,挂起的两个变量的值是不可能改变的,这样,该语句将变成无限的等待语句,包含该等待这样,该语句将变成无限的等待语句,包含该等待语句的进程就不可能再次启动。语句的进程就不可能再次启动。2023-2-4255.超时等待超时等待 wait until(sendb=1)for 1 us;assert(sendb=1)report“sendb timed out at 1”severity.;等待语句加超时等待项的等待语句加超时等待项的目的目的:防止等待语句:防止等待语句进入无限期的等待状态。进入无限期的等待状态。for 1 us:作为超时等待项;:作为超时等待项;as
21、sert 语句:用于检测进程是否遇到等待条件,语句:用于检测进程是否遇到等待条件,还是因超时等待而执行后续语句。还是因超时等待而执行后续语句。2023-2-426例:可能进入死锁的进程通信例:可能进入死锁的进程通信architecture wait_example of wait_example issignal sendb,senda:std_logic;begin senda=0;a:process begin wait until sendb=1;senda=1 after 10 ns;wait until sendb=0;senda=0 after 10 ns;end process;
22、b:processbegin wait until senda=0;sendb=0 after 10 ns;wait until senda=1;sendb=1 after 10 ns;end process;end architecture wait_example;2023-2-4272023-2-428例:使用超时等待项的进程通信例:使用超时等待项的进程通信 senda=0;a:process begin wait until sendb=1 for 1 us;assert(sendb=1)report“sendb timed out at 1”severity error;senda=
23、1 after 10 ns;wait until sendb=0 for 1 us;assert(sendb=0)report“sendb timed out at 0”severity error;senda=0 after 10 ns;end process;b:process begin wait until senda=0 for 1 us;assert(senda=0)report“senda timed out at 0”severity error;sendb=0 after 10 ns;wait until senda=1 for 1 us;assert(senda=1)rep
24、ort“senda timed out at 1”severity error;sendb=1 after 10 ns;end process;end wait_example;2023-2-429wait until sendb=1 for 1 us;assert(sendb=1)report“sendb timed out at 1”severity error;senda=1 after 10 ns;程序解释:程序解释:1)如果等待时间超过了如果等待时间超过了1us进程则执行进程则执行assert语句。语句。2)assert语句判断条件(语句判断条件(sendb=1)为)为真真,则继续执
25、,则继续执行下一条语句行下一条语句senda=1 after 10 ns;3)若若assert语句判断条件为语句判断条件为假,假,则向操作人员提供错则向操作人员提供错误信息输出,误信息输出,report后的字符串后的字符串“sendb timed out at 1”以及以及severity后的错误等级。后的错误等级。2023-2-4305.1.5 if 语句语句 nif 语句根据所指定的条件来确定执行哪一些语语句根据所指定的条件来确定执行哪一些语句,书写格式通常可分成三种类型:句,书写格式通常可分成三种类型:qif 语句的门闩控制语句的门闩控制qif 语句的二选择控制语句的二选择控制qif 语
26、句的多选择控制语句的多选择控制2023-2-4311.if 语句的门闩控制语句的门闩控制if 布尔表达式布尔表达式 then 顺序处理语句;顺序处理语句;end if;当布尔表达式为当布尔表达式为true时,时,执行执行then后面的顺序语句;后面的顺序语句;为为false时,执行时,执行end if 以以后的语句。后的语句。1)书写格式书写格式2023-2-4322)举例举例n当当a=1时,时,c=b;n否则,将不进入该条件语句的内部执行信号代入否则,将不进入该条件语句的内部执行信号代入c=b,而执行,而执行end if之后的语句。之后的语句。if a=1 then c=b;end if;a
27、为门闩控制信号:为门闩控制信号:2023-2-433例例 D触发器描述触发器描述library ieee;use ieee.std_logic_1164.all;entity dff is port(clk,d0:in std_logic;q0:out std_logic);end entity dff;architecture rtl of dff is beginprocess(clk)is begin if(clkevent and clk=1)then q0=d0;end if;end process;end architecture rtl;2023-2-434RTL视图视图仿真波形
28、图仿真波形图DENAQPRECLRq0clkd0q0reg02023-2-435How Many Registers?LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;ENTITY reg1 ISPORT(d:in STD_LOGIC;clk:in STD_LOGIC;q:out STD_LOGIC);END ENTITY reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a,b:STD_LOGIC;BEGINPROCESS(clk)isBEGINIF(clkevent
29、 and clk=1)THENa=d;b=a;q=b;END IF;END PROCESS;END ARCHITECTURE reg1;2023-2-436How Many Registers?nSignal Assignments Inside the IF-THEN Statement That Checks the Clock Condition Infer RegistersQclkdclkCLRNENADclkqbCLRNENADaCLRNENADQQQ2023-2-437IF(clkevent and clk=1)THENa=d;b=a;q=b;END IF;QDENAQPRECL
30、RDENAQPRECLRDENAQPRECLRdclkqaqreg0b2023-2-438How Many Registers?LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;ENTITY reg1 ISPORT(d:in STD_LOGIC;clk:in STD_LOGIC;q:out STD_LOGIC);END ENTITY reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a,b:STD_LOGIC;BEGINPROCESS(clk)isBEGINIF ris
31、ing_edge(clk)THENa=d;b=a;END IF;END PROCESS;q=b;END ARCHITECTURE reg1;Signal Assignment Moved2023-2-439How Many Registers?nB to Q Assignment Is No Longer Edge-sensitive Because It Is Not Inside the If-then Statement That Checks the Clock ConditionqCLRNENADclkCLRNENADdclkaQQ2023-2-440DENAQPRECLRDENAQ
32、PRECLRbclkqdaARCHITECTURE reg1 OF reg1 ISSIGNAL a,b:STD_LOGIC;BEGINPROCESS(clk)isBEGINIF rising_edge(clk)THENa=d;b=a;END IF;END PROCESS;q=b;END ARCHITECTURE reg1;2023-2-441How Many Registers?LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;ENTITY reg2 ISPORT(d:in STD_LOGIC;cl
33、k:in STD_LOGIC;q:out STD_LOGIC);END reg2;ARCHITECTURE reg2 OF reg2 ISBEGINPROCESS(clk)VARIABLE a,b:STD_LOGIC;BEGINIF rising_edge(clk)THENa:=d;b:=a;q=b;END IF;END PROCESS;END reg2;Signals Changed to Variables2023-2-442How Many Registers?nVariable Assignments Are Updated ImmediatelynSignal Assignments
34、 Are Updated on Clock EdgeCLRNENADdclkqQ2023-2-443DENAQPRECLRdclkqqreg0IF(clkevent and clk=1)THENa:=d;b:=a;q=b;END IF;2023-2-4442.if 语句的二选择控制语句的二选择控制if 布尔表达式布尔表达式 then 顺序语句顺序语句1;else 顺序语句顺序语句2;end if;当布尔表达式为当布尔表达式为true时,执行时,执行then后面的顺序语句后面的顺序语句1;为为false时,执行时,执行else后面的顺序语句后面的顺序语句2。1)书写格式书写格式2023-2-44
35、52)举例举例 二选一电路二选一电路architecture rtl of mux2 is begin process(a,b,sel)is begin if(sel=1)then c=a;else c=b;end if;end process;end architecture rtl;01cc0absel2023-2-4463.if语句的多选择控制语句的多选择控制if 条件条件 then 顺序处理语句;顺序处理语句;elsif 条件条件 then 顺序处理语句;顺序处理语句;elsif 条件条件 then 顺序处理语句;顺序处理语句;else 顺序处理语句;顺序处理语句;end if;tur
36、e判断条件判断条件顺序语句后续语句顺序语句turefalsefalse判断条件判断条件判断条件判断条件顺序语句顺序语句后续语句后续语句顺序语句顺序语句turefalsefalse1)书写格式书写格式 可设置多个条件;可设置多个条件;满足某个条件满足某个条件,就执行该条件后的就执行该条件后的顺序处理语句;顺序处理语句;若所有设置的条件都不满足时若所有设置的条件都不满足时,就就执行最后一个执行最后一个else 和和end if之间的之间的顺序处理语句。顺序处理语句。2023-2-4472)举例举例 四选一电路四选一电路architecture rtl of ifmux isbeginprocess
37、(input,sel)isbegin if (sel=00)then y=input(0);elsif (sel=01)then y=input(1);elsif (sel=10)then y=input(2);else y=input(3);end if;end process;end architecture rtl;=A1.0B1.0EQUAL=A1.0B1.0EQUAL=A1.0B1.0EQUAL010101y0y1y2yinput3.0Equal12 h1-Equal22 h2-Equal02 h0-sel1.02023-2-448nif语句不仅可用于语句不仅可用于多路选择器多路选择
38、器设计,还可用于设计,还可用于比比较器、译码器较器、译码器等具有条件控制的逻辑电路设计。等具有条件控制的逻辑电路设计。nnote:nif语句的条件判断输出是隐式语句的条件判断输出是隐式布尔量,布尔量,所以在所以在if语句中的语句中的if条件表达式中,只能使用条件表达式中,只能使用关系运算操关系运算操作作及及逻辑运算操作逻辑运算操作的组合表达式。的组合表达式。2023-2-449练习:程序补充题,练习:程序补充题,if语句描述的质数检测器语句描述的质数检测器library ieee;use ieee.std_logic_1164.all;use(1 );entity prime is port(
39、n:in std_logic_vector(3 downto 0);f:out std_logic);end entity prime;architecture beh of prime isbegin1 ieee.std_logic_unsigned.all;process(n)is variable ni:(2 );begin ni:=conv_integer(n);if ni=1 or ni=2 then f=1;(3)ni=3 or ni=5 or ni=7 or ni=11 or ni=13 then f=1;else f=0;(4 );end process;end archite
40、cture beh;2 integer 3 elsif 4 end if2023-2-450练习练习n设计一个简单恒温加热器的行为模型。这个装置设计一个简单恒温加热器的行为模型。这个装置的实体模型有两个整数输入端,其中一个预先设的实体模型有两个整数输入端,其中一个预先设定温度定温度desired_temp,另一个连接到测温计,另一个连接到测温计actual_temp;还有一个控制加热器开关的布尔输;还有一个控制加热器开关的布尔输出端出端heater_on。如果测量的温度低于所设定的温。如果测量的温度低于所设定的温度度2度,恒温系统将打开加热器进行加热,而如果度,恒温系统将打开加热器进行加热,而
41、如果测量的温度高于设定温度测量的温度高于设定温度2度,则关闭加热器停止度,则关闭加热器停止加热。加热。2023-2-451entity thermostat isport(desired_temp,actual_temp:in integer;heater_on:out boolean);end entity thermostat;architecture beh of thermostat isbegin process(desired_temp,actual_temp)is begin if actual_temp=desired_temp-2 then heater_on=desired
42、_temp+2 then heater_on 顺序语句顺序语句1;when 选择值选择值2=顺序语句顺序语句2;when 选择值选择值n=顺序语句顺序语句3;when others=顺序语句顺序语句n;end case;“=”用来表明表达用来表明表达式的取值和执行语句式的取值和执行语句的对应关系;的对应关系;选择值应选择值应互斥互斥,并覆,并覆盖表达式所有的可能盖表达式所有的可能取值;取值;选择值须为选择值须为静态静态值。值。2023-2-4531)when 值值=顺序处理语句;顺序处理语句;2)when 值值|值值|值值|值值=顺序处理语句;顺序处理语句;3)when 值值 to 值值=顺序
43、处理语句;顺序处理语句;4)when others=顺序处理语句;顺序处理语句;多个值的多个值的“或或”关关系系值的取值范围值的取值范围所有的缺省值所有的缺省值选择值的四种不同书写形式选择值的四种不同书写形式表达式的一个取值表达式的一个取值2.举例举例 四选一多路数据选择电路四选一多路数据选择电路library ieee;use ieee.std_logic_1164.all;entity mux4 isport(input:in std_logic_vector(3 downto 0);sel:in std_logic_vector(1 downto 0);y:out std_logic);
44、end entity mux4;2023-2-454SEL1.0DATA3.0OUTMUXyinput3.0Mux0sel1.0architecture mux4_behave of mux4 isbeginprocess(sel,input)isbegin case sel is when 00=y y y y null;end case;end process;end architecture mux4_behave;使用使用when others包包含所有的缺省值含所有的缺省值2023-2-455if(sel=“00”)then y=input(0);elsif(sel=“01”)the
45、n y=input(1);elsif(sel=“10”)then y=input(2);else y y y y y null;end case;3.if 语句和语句和case语句的区别语句的区别if 语句首先处理最起始的条件,如果不满足,再处语句首先处理最起始的条件,如果不满足,再处理下一个条件;理下一个条件;case语句没有值的顺序号,所有的值都是并行处理语句没有值的顺序号,所有的值都是并行处理的,因此,值应互斥,不能重复使用。的,因此,值应互斥,不能重复使用。2023-2-456举例举例 优先级编码器的优先级编码器的VHDL描述描述 输入输入 输出输出b7b6b5b4b3b2b1b0y2
46、y1y0-0111-01110-011101-0111100-01111011-011111010-0111111001-1111111000表中表中“-”为为任意项,其任意项,其值可以为值可以为1,也可以为也可以为0。优先级编码器的真值表优先级编码器的真值表2023-2-457 优先级编码器的输入含有任意项,用优先级编码器的输入含有任意项,用case语句语句可以描述吗?可以描述吗?process(input)isbegin case input is when XXXXXXX0=y y y y y y y y=000;end case;end process;这样的描述这样的描述语句在语句在
47、VHDL语语言中还未定制出言中还未定制出来,此程序在编来,此程序在编译综合中含有不译综合中含有不确定值的程序行确定值的程序行被忽略,得不到被忽略,得不到正确的正确的rtl视图。视图。2023-2-458 多选择控制多选择控制if语句是从最起始的条件开始依次进行判断语句是从最起始的条件开始依次进行判断处理的,可处理的,可利用该语句条件判断的顺序性利用该语句条件判断的顺序性来描述优先编码器来描述优先编码器的最低位零优先编码的特点。的最低位零优先编码的特点。process(input)is begin if(input(0)=0)then y=111;elsif(input(1)=0)then y=
48、110;elsif(input(2)=0)then y=101;elsif(input(3)=0)then y=100;elsif(input(4)=0)then y=011;elsif(input(5)=0)then y=010;elsif(input(6)=0)then y=001;else y=000;end if;end process;end architecture rtl;2023-2-459n由上例可知:由上例可知:n利用利用if 语句条件判断的顺序性,可实现优先编码,语句条件判断的顺序性,可实现优先编码,要注意若是低位要注意若是低位0优先,则条件判断一定是从优先,则条件判断一
49、定是从input的最低位开始,否则从的最低位开始,否则从input的最高位开始。的最高位开始。ncase语句中,语句中,when语句的顺序可以颠倒,没有执语句的顺序可以颠倒,没有执行的先后次序的分别,不存在隐含的优先级,不行的先后次序的分别,不存在隐含的优先级,不可描述优先级编码器。可描述优先级编码器。2023-2-460练习:练习:将采用将采用if语句描述的质数检测器,改写成用语句描述的质数检测器,改写成用case语言语言描述的质数检测器描述的质数检测器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.a
50、ll;entity prime is port(n:in std_logic_vector(3 downto 0);f:out std_logic);end prime;architecture beh of prime isbeginprocess(n)variable ni:integer;begin ni:=conv_integer(n);if ni=1 or ni=2 then f=1;elsif ni=3 or ni=5 or ni=7 or ni=11 or ni=13 then f=1;else f f f f y N:=2;y y y y y x:=0;when 1|H=x:=