VHDL主要描述语句――CASE语句
第6章 VHDL语言的主要描述语句
1、IF语句的门闩控制
格式: IF 条件 THEN
顺序处理语句; END IF;
当程序执行到该 IF 语句时,就要判断 IF 语句所指定 的条件是否成立。如果条件成立,则执行顺序处理 语句;不成立则跳过 IF 语句所包含的顺序处理语句, 而向下执行 IF 语句的后续语句。这里的条件起到门 闩的控制作用。
wait until clk'event and clk='1';
q <= d; end process; end rtl;
3、WAIT FOR
WAIT FOR 语句的完整书写格式为: WAIT FOR 时间表达式; WAIT FOR 语句后面跟着的是时间表达式,当进程执 行到该语句时将被挂起,直到指定的等待时间到时, 进程再开始执行WAIT FOR 语句后继的语句。 例如: WAIT FOR 20ns; 这个语句中时间表达式是一个常数值20ns,当进程执行 到该语句时将等待20ns。一旦20ns时间到,进程将执行 WAIT FOR 语句的后继语句。
6.1 顺序描述语句
执行顺序与书写顺序一致,与传统软件设计语言的特 点相似。顺序语句只能用在进程与子程序中。 在VHDL语言中顺序描述语句有以下几种: * WAIT语句; * 变量赋值语句; * LOOP语句; * 过程调用语句; * 断言语句; * 信号代入语句; * IF语句; * CASE语句; * NEXT语句; * EXIT 语句; * NULL语句
2、WAIT UNTIL
WAIT UNTIL 语句的完整书写格式为:
WAIT UNTIL 表达式; 当表达式的值为“真”时,进程被启动,否则进 程被挂起。 该语句在表达式中将建立一个隐式的敏感信号量 表,当表中的任何一个信号量发生变化时,就立即对 表达式进行一次评估。如果评估结果使表达式返回一 个“真”值,则进程脱离等待状态,继续执行下一个 语句。例如:
VHDL语言的主要描述语句
VHDL语言的主要描述语句按照语句的执行顺序对VHDL语言进行分类,包含两类语句:●并行描述语句该语句的执行与书写顺序无关,总是同时被执行●顺序描述语句从仿真的角度,该语句是顺序执行的进程语句(PROCESS)是最典型的并行语句,一个构造体可以有几个进程语句同时存在,而且并发执行。
但是进程部的所有语句都是顺序语句。
一、顺序描述语句顺序描述语句只能用在进程和子程序中,它和其他高级语言一样,其语句是按照语句的出现的顺序加以执行的。
如下分别介绍有关的顺序描述语句.1.WAIT语句进程在执行过程中总是处于两种状态:执行或挂起,进程的状态变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进程.等待语句的格式:*WAIT 无限等待*WAIT ON 敏感信号变化*WAIT UNTIL 条件满足*WAIT FOR 时间到(1)WAIT ON格式:WAIT ON 信号[,信号]例5-1PROCESS(a,b)BEGINy<=a AND b;END PROCESS;该例中的进程与下例中进程相同:例5-1PROCESSBEGINy<=a AND b;WAIT ON a,b;END PROCESS;例5-2PROCESS(a,b)BEGINy<=a AND b;WAIT ON a,b;END PROCESS;(2)WAIT UNTIL 直到条件满足格式: WAIT UNTIL 布尔表达式当进程执行到该语句时,被挂起;若布尔表达式为真时,进程将被启动.例: WAIT UNTIL ((x*10)<100)(3)WAIT FOR 等到时间到格式: WAIT FOR 时间表达式当进程执行到该语句时,被挂起;等待一定的时间后,进程将被启动.例: WAIT FOR 20 ns;WAIT FOR (a*(b+c);(4)多条件WAIT 语句例: WAIT ON nmi,interrupt UNTIL ((nmi=TRUE) OR (interrupt=TRUE)) FOR 5 us 该等待有三个条件:第一,信号nmi和interrupt 任何一个有一次刷新动作第二, 信号nmi和interrupt 任何一个为真第三, 已等待5 us只要一个以上的条件被满足,进程就被启动.*注意:多条件等待时,表达式的值至少应包含一个信号量的值。
chap6VHDL语言的主要描述语句
〈EDA技术教程〉第6章
VHDL语言构造体的描述方法
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41 IS PORT (s4,s3, s2,s1 : IN STD_LOGIC; z4,z3, z2,z1 : OUT STD_LOGIC); END mux41; ARCHITECTURE activ OF mux41 IS SIGNAL sel : INTEGER RANGE 0 TO 15; BEGIN PROCESS (sel ,s4,s3,s2,s1 ) BEGIN sel<= 0 ; -- 输入初始值 IF (s1 ='1') THEN sel <= sel+1 ; ELSIF (s2 ='1') THEN sel <= sel+2 ; ELSIF (s3 ='1') THEN sel <= sel+4 ; ELSIF (s4 ='1') THEN sel <= sel+8 ; ELSE NULL; -- 注意,这里使用了空操作语句 END IF ; z1<='0' ; z2<='0'; z3<='0'; z4<='0'; --输入初始值 CASE sel IS WHEN 0 => z1<='1' ; -- 当sel=0时选中
--若清零端有效,则输出清零
ELSIF clk'event AND clk='1' THEN qout<=d ; --清零端无效,则时钟上升沿时输出为d END IF;
第17讲VHDL主要描述语句case语句
END PROCESS;
END rtl;
练习:
用多选择结构实现如下问题: 1.求三个数中的最大数。 输入:整数a,b,c 输出:最大数max
2. Y= 1(X>0)
0 (X=0) -1 (X<0)
CASE语句
CASE语句根据满足的条件直接选择多项顺序语句中的一项执行。
CASE语句的结构为: CASE 表达式 IS WHEN 条件选择值 => 顺序语句, ┇
WHEN 条件选择值 => 顺序语句,
END CASE; 功能:先计算表达式的值,然后根据条件句中的选择值 执行相对应的顺序语句。 注意:条件句中的“=>”不是操作符,它相当于THEN作用。
其中WHEN条件选择值可以有四种表达方式;
① 单个普通数值,如:5; ② 数值选择范围,如:(1 TO 3); ③ 并列值,如:4 | 6,表示取值为4或6; ④ WHEN OTHERS => 顺序语句
例[A] PROCESS
BEGIN
y <= a AND b; WAIT ON a,b; END PROCESS; 例[B]PROCESS(a,b)
BEGIN
y <= a AND b; END PROCESS; 在例[A]中执行所有语句后,进程将在WAIT语句处被挂起,
直到a或b中任何一个信号发生变化,进程才重新开始。例 [A]与例[B]是等价的。
用二选一结构实现求两数中的较大数。 输入:整数a,b; 输出:较大数C
3.多选择控制语句
这种语句的书写格式为:
IF 条件 THEN 顺序语句 ELSIF 顺序语句
ELSIF
顺序语句 ┇ ELSE 顺序语句
END IF;
第5章VHDL基本描述语句
多个赋值源
SVEC(0) <= V1; --将V1在上面的赋值1,赋给SVEC(0)
SVEC(1) <= V2;
SVEC(2) <= S1; SVEC(3) <= S2;
--将V2在上面的赋值1,赋给SVEC(1)
--将S1在上面的赋值1,赋给SVEC(2) --将最下面的赋予S2的值‘0’,赋给SVEC(3)
FOR LOOP循环主要用在规定数目的重复情况;
WHILE LOOP则根据控制条件执行循环直到条件为
FALSE。
FOR LOOP语句
FOR LOOP格式:
[标号:] FOR 循环变量 IN 循环次数范围 LOOP
顺序处理语句;
END LOOP [标号];
循环变量:属于LOOP语句的局部变量,不需要事先定义,也不能 被赋值,它的值从循环次数范围的初值开始,执行一次顺序语句 自动加一,当其值超出循环次数范围时,则退出循环语句。
5.1.1赋值语句
语句格式: 变量赋值目标:= 赋值源;
信号赋值目标<= 赋值源;
比较: (1)信号赋值有一定的延时,在时序电路中,在时 钟信号触发下的信号赋值,目标信号要比源信号延迟 一个时钟周期;变量赋值语句立即执行,没有延时。 (2)进程中同一变量多次赋值时按顺序立即执行, 而信号多次赋值时,只有进程结束前最后一个赋值被 执行。
不完整IF语句
作用:形成锁存,用于构成时序电路,而组合电路只能
使用完整的IF语句。
例5-6: IF (clk’event and clk=’1’) then
Q<=d;
End if;
二选一IF语句
语句格式:
IF 条件 THEN 顺序执行语句1;
第五章 VHDL语言的主要描述语句
component inhibit is port (x,y:in bit;z: out bit); end component inhibit;
2013-5-20
24
4. 多条件等待语句
前面所讲的三类wait 语句,等待的条件都是单一的, 要么是信号量(wait on),要么是布尔量(wait until),要 么是时间量(wait for)。wait语句可同时使用多个等待条 件。 例如
c <= a and b after 15 ns;
--表示当a或b发生新的变化15ns后,它们进行 与逻辑操作的结果才被代入到信号a中,可描述 逻辑门的延时特性;
a<=‗0‘ after 5 ns,‗1‘ after 10 ns, ‗0‘ after 15 ns;
--该信号代入语句描述了怎样的波形呢?
2013-5-20 6
3) 两类延时语句--惯性延时、传输延时
(1) 惯性(Inertial)延时
惯性延时:在惯性模型中,系统或器件输出信号要发 生变化,必须有一段时间的延时,这段延时时间,就 是系统或元件的惯性延时。 特点:当一个系统或器件的输入信号周期,小于系统 或器件的惯性延时,其输出将保持不变。 如:在一个信号值维持期间,如果存在任何毛刺、脉 冲等周期小于器件本身的惯性延时的情况,输出信号 的值将不变,否则将引起信号的变化。
wait on umi,interrupt until ( (umi=true) or (interrupt=true) ) for 5 us;
上述语句等待的是3个条件:
1) 信号量umi和interrupt任何一个有一次新的变化;
2) 信号量umi或interrupt 任何一个取值为“真”; 3) 该语句已等待5 us。
第五VHDL语言的主要描述语句剖析
wait on 所起作用与进程的敏感信号量表相同, 两者不能同时存在。
2020/11/11
15
2. wait until 语句
1) 书写格式 wait until 布尔表达式;
❖ 利生变化时,就自动检测
布尔表达式是否为真; ❖ 如果为真,则进程脱离等待状态,执行后续语句;
assert语句检查一个布尔表达式为真或假,如果值 是真,则该语句任何事都不做,如果值是假,断言 语句将输出一用户规定的字符串到标准输出终端。
2020/11/11
10
设计者所写的文 字串,通常是说 明错误的原因, 文字串应用双引 号括起来。
错误严重程度的级别,
分为4级别:failure, error,waring,
如:在一个信号值维持期间,如果存在任何毛刺、脉 冲等周期小于器件本身的惯性延时的情况,输出信号 的值将不变,否则将引起信号的变化。
2020/11/11
5
惯性延时举例
假设某门电路的惯性延 时为20 ns
b<=inertial a after 20 ns;
10ns
所有器件都存在惯性延时, 在代入语句中加上惯性延 时时间,可以仿真硬件电 路实际工作情况,如:
2020/11/11
2
5.1.1 信号代入语句
1) 书写格式
目的信号量<= 敏感信号量表达式;
2) 举例
处于构造体中的信号代入语句 z <= a or (b nand c);
有3 个敏感量 a、b、 c,无论哪一个敏感量发生 变化,该代入语句将被执行。
2020/11/11
3
a <= b after 5 ns; --表示当b发生新的变化5ns后,才被代入到信
VHDL程序的主要描述语句
端口方向(端口类型)
结构体的语法格式:
• architecture 结构体名称 of 实体 名称 is • 说明语句 • 内部信号、常数、数据类型、子程序 (函数、过程)、元件等的说明; • begin • 功能描述语句; • end [architecture] 结构体名称;
vhdl中的主要描述语句分为两 类:描述行为和描述结构。
• (1)赋值情况:当被选择的信号发生变化时, 启动执行,满足哪一个条件,就将其对应的表 达式代入目标信号。 • (2)选择型语句中各行结尾均未“,”,只 有最后一行用“;”,不能有重叠的条件分支, 最后条件可为 others,若最后条件不为 others,则其它条件必须包含表达式的所有 可能值。 • (3)执行:选择型信号赋值语句无优先级顺 序,与进程中的 case 语句等价。
例:用选择型语句设计一个四 选一的数据选择器
例:用选择型语句设计一个四 选一的数据选择器
练习:用选择型语句设计一个 八选一的数据选择器
三种并行信号赋值语句的共同特点:
• (1)赋值目标必须时信号,与其他并行 语句同时执行,与书写顺序无关; • (2)每一个信号赋值语句等效于一个进 程语句,所有输入信号的变化都将启动 该语句的执行。 • c<= a xor b;
(1)基本型
• • • • • • 格式: 信号名<=敏感信号量表达式 after 时间表达式 例:s<=x xor y; sum<=s xor cin after 1ns; 说明:若未注明延时表示延时很小,δ延时。 延时可分为两类:传输延时与惯性延时
• 传输延时:模拟信号在连线(或传输线) 上的延时。 • 格式:b<=transport a after 20ns;
第十二讲 VHDL语言语言主要描述语句
➢用来描述复杂的逻辑关系及逻辑运算。
常用的顺序处理语句有: 信号代入语句 变量赋值语句 CASE语句 IF语句 LOOP语句
VHDL顺序语句
1、信号代入语句
格式:
目的信号量<=信号量表达式; 目的信号量<=信号量表达式 AFTER N ns;
避免出错。 进程结束时,变量的结果只能由信号带出。
VHDL顺序语句
注意变 量定义 的位置
例:
architecture abc of example is begin
PROCESS(a,b) variable tmp:std_logic;
begin tmp:=a and b; out<=tmp;
end process; end abc;
VHDL并行语句
例:
4选1数据选择器 architecture abc of example is begin
sel<=a & b; with sel select
f <=i0 when “00”, i1 when “01”, i2 when “10”, i3 when “11”, ‘x’ when others;
VHDL并行语句
3、条件信号代入语句
格式: 目的信号量<=表达式1 WHEN 条件1 ELSE 表达式 2 WHEN 条件2 ELSE …… 表达式n;
注意: 条件信号代入语句的功能与进程中的IF语句相同; ELSE不能省略,只有最后语句才有分号; 有优先级关系,第一句优先级最高; 允许有重叠现象。
begin tmp:=‘0’; i:=0; WHILE (i<8) LOOP tmp:=tmp XOR a(i); i:=i+1; END LOOP; Y<=tmp;
VHDL语言的主要描述语句
VHDL语言的主要描述语句按照语句的执行顺序对VHDL语言进行分类,包含两类语句:并行描述语句该语句的执行与书写顺序无关,总是同时被执行顺序描述语句从仿真的角度,该语句是顺序执行的进程语句(PROCESS)是最典型的并行语句,一个构造体内可以有几个进程语句同时存在,而且并发执行。
但是进程内部的所有语句都是顺序语句。
一、顺序描述语句顺序描述语句只能用在进程和子程序中,它和其他高级语言一样,其语句是按照语句的出现的顺序加以执行的。
如下分别介绍有关的顺序描述语句.1.WAIT语句进程在执行过程中总是处于两种状态:执行或挂起,进程的状态变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进程.等待语句的格式:*WAIT 无限等待*WAIT ON 敏感信号变化*WAIT UNTIL 条件满足*WAIT FOR 时间到(1)WAIT ON格式:WAIT ON 信号[,信号]例5-1PROCESS(a,b)BEGINy<=a AND b;END PROCESS;该例中的进程与下例中进程相同:例5-1PROCESSBEGINy<=a AND b;WAIT ON a,b;END PROCESS;例5-2PROCESS(a,b)BEGINy<=a AND b;WAIT ON a,b;END PROCESS;(2)WAIT UNTIL 直到条件满足格式: WAIT UNTIL 布尔表达式当进程执行到该语句时,被挂起;若布尔表达式为真时,进程将被启动.例: WAIT UNTIL ((x*10)<100)(3)WAIT FOR等到时间到格式: WAIT FOR 时间表达式当进程执行到该语句时,被挂起;等待一定的时间后,进程将被启动.例: WAIT FOR 20 ns;WAIT FOR (a*(b+c);(4)多条件WAIT 语句例: WAIT ON nmi,interrupt UNTIL ((nmi=TRUE) OR (interrupt=TRUE)) FOR 5 us 该等待有三个条件:第一,信号nmi和interrupt 任何一个有一次刷新动作第二, 信号nmi和interrupt 任何一个为真第三, 已等待5 us只要一个以上的条件被满足,进程就被启动.*注意:多条件等待时,表达式的值至少应包含一个信号量的值。
第五章(VHDL主要描述语句)
(4) CASE语句执行中必须选中,且只能选中所列条件语
句中一条。这表明CASE语句中至少要包含一个条件语句。
CASE语句常用来描写总线行为、编码器和译码器的结构。CASE语句 与IF语句功能相似但CASE语句的可读性好,非常简洁。
CASE语句的误用:
SIGNAL value : INTEGER RANGE 0 TO 15 ; SIGNAL out_1 : BIT ; CASE value IS -- 缺少 WHEN条件语句 END CASE ; -- 分支条件不包含2到15 CASE value IS WHEN 0 => out_1 <= „1‟; WHEN 1 => out_1 <=„0‟; END CASE ; -- 在5到10上发生重叠 CASE value IS WHEN 0 TO 10 => out_1 <= „1‟; WHEN 5 TO 15 => out_1 <= „0‟; END CASE ;
IF语句不仅可用于选择器设计,还可用于比较 器,译码器等进行条件控制的逻辑设计。IF语句 中至少应有一个条件句,条件句必须由布尔表达 式构成,条件表达式中能使用关系运算操作及逻 辑运算操作的组合表达式。 IF语句颠倒条件判别次序,会引起在综合时逻辑 功能的变化,即IF语句判别条件不可颠倒。 IF语句中,先处理最起始的条件;如果不满足, 再处理下一个条件。一般把条件约束最多的作为 起始条件。
例
用IF语句描述一个二位等值比较器
ARCHITECTURE a OF compare IS LIBRARY IEEE; BEGIN PROCESS(a,b) USE IEEE.STD_LOGIC_1164.ALL; BEGIN ENTITY compare IS IF(a>b) THEN eater<='1';equal<='0';less<='0'; generic(n:natural:=2); ELSIF (a=b) THEN PORT( greater<='0';equal<='1';less<='0'; ELSE a,b:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); greater<='0';equal<='0';less<='1'; greater,equal,less:OUT STD_LOGIC); END IF; END PROCESS; END; END;
vhdl中if语句和case语句的综合_不同
VHDL中 If语句和Case语句的综合If 和case语句是VHDL里边两个非常重要的语句,如何用好她们来描述逻辑电路和时序电路是学会VHDL编程重要的一步。
if 和case语句有一定的相关性,也有一定的区别。
相同的地方是他们可以实现几乎一样的功能。
下面主要介绍一下她们之间的区别。
If 语句每个分支之间是有优先级的,综合得到的电路是类似级联的结构。
Case语句每个分支是平等的,综合得到的电路则是一个多路选择器。
因此,多个if elseif语句综合得到的逻辑电路延时往往比case语句要大。
一些初学者在一开始往往喜欢用if elsif语句,因为这种语法表达起来更加直接,但是在运行速度比较关键的项目中,使用case语句的效果会更好。
下面的例子给出了if语句和case语句的综合结果If 语句综合结果Case语句综合结果有关if, case语句另外一个值得一提的东西是在用if或者case语句做逻辑电路的时候,必须为信号设置默认值。
有两种方法,第一种方法是在if, case 语句之前对目标信号进行赋值,采用这种方法,就不必专门写else或者when others语句对信号进行默认赋值。
第二种方法就是在else或者when others语句中对信号进行默认条件下的赋值。
如果违反了上述规则,那么会在综合电路的时候形成一个transparent latch(锁存器),也就是电平触发的锁存器,这对电路的时序分析等会造成很大的麻烦。
在时序电路中,如果没有在else语句或者when others语句中对信号赋值,那么综合工具会认为寄存器保持当前输入。
从电路图上看,即把寄存器的输出接回寄存器的输入。
有兴趣的朋友可以用综合工具试一下面的代码,鉴于篇幅,时序电路部分的代码就不贴了,有需要的朋友可以给我留言。
library ieee;useuse CaseComb isport(aSel : in std_logic_vector(3 downto 0);aDin : in std_logic_vector(3 downto 0);aDout : out std_logic);end CaseComb;architecture rtl of CaseComb isbeginprocess(aSel, aDin)begincase aSel iswhen "1000" =>aDout <= aDin(3);when "0100" =>aDout <= aDin(2);when "0010" =>aDout <= aDin(1);when "0001" =>aDout <= aDin(0);when others =>--aDout <= '0';end case;end process;end rtl;library ieee;useuse IfComb isport(aSel : in std_logic_vector(3 downto 0);aDin : in std_logic_vector(3 downto 0);aDout : out std_logic);end IfComb;architecture rtl of IfComb isbeginprocess(aSel, aDin)beginif aSel(3)='1' thenaDout <= aDin(3);elsif aSel(2)='1' thenaDout <= aDin(2);elsif aSel(1)='1' thenaDout <= aDin(1);elsif aSel(0)='1' thenaDout <= aDin(0);--else-- aDout <= '0';end if;end process;end rtl;。
第10章VHDL基本语句
END LOOP L2; ...
11
11
10.1.4 LOOP语句
(2) FOR_LOOP语句,语法格式如下: [LOOP标号:] FOR 循环变量 IN 循环次数范围 顺序语句
LOOP
END LOOP [LOOP标号];
SIGNAL tmp :STD_LOGIC ;
BEGIN
奇校验就是看2进制数旳1旳个数为奇数
PROCESS(a)
就在校验位填0 偶数就填1 使1旳个数
BEGIN
变成奇数个. 偶校验相反 把1旳个数变
tmp <='0';
成偶数.
FOR n IN 0 TO 7 LOOP 然后传送数据,接受后在做相应旳奇偶
FOR后旳”循环变量”是一种临时变量,属LOOP语句旳局 部变量,不必事先定义. 这个变量只能作为赋值源,不能被赋值,它 由LOOP语句自动定义. 使用时应该注意,在LOOP语句范围内不 要再使用其他与此循环变量同名旳标识符.
“循环次数范围”要求LOOP语句中旳顺序语句被执行次数. 循环变量从范围初值开始,每执行完一次顺序增1,直至最大值.
第 10 章 VHDL基本语句
1
1
10.1 顺序语句
VHDL有6种基本顺序语句:赋值语句、流程控制语句、等待 语句、子程序调用语句、返回语句、空操作语句.
10.1.1 赋值语句
信号赋值语句
10.1.2 IF语句
10.1.3 CASE语句
变量赋值语句
多条件选择
值体现式旳 4种形式
单个一般数值,如6。
数值选择范围,如(2 TO 4)。
VHDL的基本描述语句
接下页
case indata is when "000" => y <= "11111110"; when "001" => y <= "11111101"; when "010" => y <= "11111011"; when "011" => y <= "11110111"; when "100" => y <= "11101111"; when "101" => y <= "11011111"; when "110" => y <= "10111111"; when "111" => y <= "01111111"; when others => y <= "XXXXXXXX"; end case; else y <= "11111111"; end if; end process; end architecture ex;
6.1.4 LOOP语句 语句
语句, (3)WHILE LOOP语句,语法格式如下: ) 语句 语法格式如下: [LOOP标号: [LOOP标号:] WHILE 条件 LOOP 标号 顺序语句 END LOOP [LOOP标号 ; 标号]; 标号
6.1.5 NEXT语句 语句
NEXT语句主要用在 语句主要用在LOOP语句执行中进行有条件的或无条件的转向控制。 语句执行中进行有条件的或无条件的转向控制。 语句主要用在 语句执行中进行有条件的或无条件的转向控制 NEXT; ; -- 第一种语句格式 无条件终止当前循环,跳到本次循环的LOOP语句处,开始下一次循环) 语句处, (无条件终止当前循环,跳到本次循环的 语句处 开始下一次循环) NEXT LOOP标号; 标号; -- 第二种语句格式 标号 NEXT LOOP标号 WHEN 条件表达式; 条件表达式; -- 第三种语句格式 标号 【例】 【例】 ... L1 : FOR cnt_value IN 1 TO 8 LOOP s1:a(cnt_value) := '0'; NEXT WHEN (b=c); s2:a(cnt_value + 8 ):= '0'; END LOOP L1; ... L_x: FOR cnt_value IN 1 TO 8 LOOP s1: a(cnt_value):= '0'; k := 0; L_y: LOOP s2: b(k) := '0'; NEXT L_x WHEN (e>f); s3: b(k+8) := '0'; k := k+1; NEXT LOOP L_y ; NEXT LOOP L_x ; ...
EDA教程之第四章VHDL语言的主要描述语句
Y <= tmp;
END Process P1;
LOOP语句
循环变量(i)在信号说明、变量说明中不能出现,信号、 变量不能代入到循环变量中。
局部变量(tmp)仅能在进程中出现。 全局变量、信号可以将局部变量的值带ential statement
BEGIN
Indata <= S3 & S2 & S1 & S0;
P1:PROCESS (Indata, G1,G2)
IF( G1='0' AND G2='0') THEN
CASE indata IS
WHEN "0000"=> y <="01 11 11 11 11 11 11 11";
WHEN "0001"=> y <="10 11 11 11 11 11 11 11";
功能wait语句使系统暂时挂起(等同于end process),此时,信号值开始更新。条件满足后, 系统将继续运行。
顺序执行语句sequential statement
顺序执行语句sequential statement
顺序执行语句sequential statement
顺序执行语句sequential statement
并行处理语句concurrent statement
并行处理语句concurrent statement
并行处理语句concurrent statement
顺序执行语句和并行处理语句总结
1、顺序执行语句wait、assert、if -else 、 case、for-loop、while语句只能用在 process、function 和procedure 中; 2、并行处理语句(条件信号带入和选择信 号带入)只能用在architecture、block中;
第六章VHDL中的语句
当选择值不能完整覆盖表达式取值时,最后必须加上WHEN OTHERS
WHEN OTHERS只能出现一次,作为最后一种条件取值
library ieee; use ieee.std_logic_1164.all; entity mux21a is port(a,b,c,d: in std_logic; ctl : in std_logic_vector(1 downto 0); 例1: q : out std_logic); end; architecture one of mux21a is begin process(a,b,c,d,ctl) begin case ctl is 功能:4选1多 when "00" =>q<=a; 路选择器 when "01" =>q<=b; when "10" =>q<=c; when "11" =>q<=d; end case; end process; end;
一、顺序语句(续15)
例1:单个loop语句
循环标号,用于 多个循环语句
L2 : LOOP a := a+1; EXIT L2 WHEN a>10; NEXT L2 WHEN END LOOP L2;
a<10;
EXIIT语句格式: 跳出循环,跳转 EXIT; 直接跳出循环 EXIT LOOP 语句; 到循环结束处 条件为真时, EXIT LOOP 标号 WHEN 条件表达式; 跳出循环语句 跳出循环,跳转 到循环开始处
cnt<=q; end process; end;
一、顺序语句(续17)
仿真波形
第17讲 VHDL主要描述语句_case语句
例[A] PROCESS BEGIN y <= a AND b; WAIT ON a,b; END PROCESS;
例[B]PROCESS(a,b) BEGIN y <= a AND b; END PROCESS;
在例[A]中执行所有语句后,进程将在WAIT语句处被挂起, 直到a或b中任何一个信号发生变化,进程才重新开始。例 [A]与例[B]是等价的。
这种形式的WAIT语句使进程暂停,直到预期的条件为真。 WAIT UNTIL后面跟的是布尔表达式,在布尔表达式中隐式地 建立一个敏感信号量表,当表中任何一个信号量发生变化时, 就立即对表达式进行一次测评。如果其结果使表达式返回一个 “真”值,则进程脱离挂起状态,继续执行下面的语句。即 WAIT UNTIL语句需满足以下条件:
变量赋值语句
变量赋值语句语法格式为: 变量赋值目标 := 赋值表达式
例:
PROCESS(s)
VARIABLE count:INTEGER := 0 --变量说明
BEGIN
count := s+1
--变量赋值
END PROCESS;
对于数组赋值,可采用下列格式:
VARIABLE x,y: STD_LOGIC_VECTOR ( 0 TO 3 );
语句中重复出现; ④ 除非所有选择值能完全覆盖CASE语句中的表
达式的取值,否则最后一个条件句的选择值 必须用“OTHERS”表示。 ⑤ 选择值可以颠倒次序,但OTHERS必须放在最后; ⑥“=>”不是操作符,相当于THEN语句的作用。
例[1] CASE语句使用 CASE command IS
WHEN “00”=> c <= a; WHEN “01”=> c <= b; WHEN “10”=> c <= e; WHEN “11”=> c <= f; WHEN OTHERS => NULL; END CASE; 例[2] CASE语句使用 CASE sel IS WHEN 1TO 9 => c <= 1; WHEN 11/12 => c <= 2; WHEN OTHERS => c <= 3; END CASE;
VHDL主要描述语句――CASE语句
三、例题(试分析如下程序可以实现什么功能)
LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL;
ENTITY 2AND IS PORT ( A,B: IN STD-LOGIC ; C:OUT STD-LOGIC ) ; END 2AND;
A 0 0 1
B 0 1 0
C 0 0 0
ENTITY 2AND IS
PORT ( A,B: IN STD-LOGIC ; C:OUT STD-LOGIC ) ; END 2AND; ARCHITECTURE A OF 2AND IS SIGNAL D:STD-LOGIC-VECTOR(2 DOWNTO 0); D<=A & B ; PROCESS( D ) IF D=“00” THEN C<= “0” ELSEIF D=“01” THEN C<= “0” ; ELSEIF D=“10” THEN C<= “0” ;
信号选择控制端AB
LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL; ENTITY 4SEL IS PORT ( I0,I1,I2,I3: IN STD-LOGIC ; A,B:IN STD-LOGIC ; Q:OUT STD-LOGIC ) ; END 4SEL ; ARCHITECTURE A OF 4SEL IS SIGNAL D : STD-LOGIC-VECTOR(2 DOWNTO 0); D<=A & B ; PROCESS( D ) CASE D IS WHEN “00” => Q <= I0 ; WHEN “01” => Q <= I1 ; WHEN “10” => Q <= I2 ; WHEN “11” => Q <= I3 ; WHEN OTHER => NULL ; END CASE ; END A;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使能端G 使能端
I0 I1 I2 I3
四 选 一 数 据 选 择 器
Q
公共通道
(同一时间内只可允许一个信号通过)
信 号 传 输 目 的 地
信号选择控制端AB 信号选择控制端
VHDL主要描述语句 主要描述语句――CASE语句 主要描述语句 语句
一、复习 1.IF语句的三种书写格式: 语句的三种书写格式: 语句的三种书写格式 IF 条件 THEN 顺序处理语句 ; END IF ;
IF 条件 THEN 顺序处理语句1 ; ELSE 顺序处理语句2 ; END IF ;
IF 条件1 THEN 顺序处理语句1 ; ELSIF 条件2 THEN 顺序处理语句2 ; …… ELSIF 条件N THEN 顺序处理语句N ; ELSE 顺序处理语句0 ; END IF ;
(同一时间内只可允许一个信号通过)
信 号 传 输 目 的 地
信号选择控制端AB 信号选择控制端
LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL; ENTITY 4SEL IS PORT ( I0,I1,I2,I3: IN STD-LOGIC ; , , , A,B:IN STD-LOGIC ; , : Q:OUT STD-LOGIC ) ; END 4SEL ; ARCHITECTURE A OF 4SEL IS SIGNAL D : STD-LOGIC-VECTOR(2 DOWNTO 0); D<=A & B ; PROCESS( D ) CASE D IS WHEN “00” => Q <= I0 ; WHEN “01” => Q <= I1 ; WHEN “10” => Q <= I2 ; WHEN “11” => Q <= I3 ; WHEN OTHER => NULL ; END CASE ; END A;
A 0 0 1 1
B 0 1 0 1
Q I0 I1 I2 I3
五、思考题 请在上程序基础上加入一个使能端G。 请在上程序基础上加入一个使能端 。当G=0时,选择器不工作,不进行 时 选择器不工作, 任何选择;只有G=1时,选择器才开始工作,按照信号选择控制端的要 任何选择;只有 时 选择器才开始工作, 求选择信号进行传输。 求选择信号进行传输。
1 1 1 ARCHITECTURE A OF 2AND IS SIGNAL D : STD-LOGIC-VECTOR(2 DOWNTO 0); D<=A & B ; PROCESS( D ) CASE D IS NULL 表示 WHEN “00” => C<= “0” ; 无任何赋值 WHEN “01” => C<= “0” ; 操作 WHEN “10” => C<= “0” ; WHEN “11” => C<= “0” ; WHEN OTHER => NULL ; 该程序可以实现二输入与门的 功能. 功能 END CASE ; END A;
语句设计一个四选一数据选择器) 四、练习(用CASE 语句设计一个四选一数据选择器) 练习( 什么是数据选择器,它什么功能? 数据选择器是经过选择,把多个通道的数据传送到唯一的公共数据通道上进 行传输。它的作用相当于一个多输入的单刀多掷开关。
I0 I1 I2 I3
四 选 一 数 据 选 择 器
Q
公共通道
对比总结:以上两个程序表明,一些功能相同的描述 可以用IF语句实现 一些功能相同的描述,可以用 语句实现,也可以用 对比总结 以上两个程序表明 一些功能相同的描述 可以用 语句实现 也可以用
CASE语句实现 但是两者还是有区别的 首先 在IF语句中 先处理最起始 语句实现.但是两者还是有区别的 首先,在 语句中 语句中,先处理最起始 语句实现 但是两者还是有区别的.首先 的条件,如果不满足才会处理下一个条件 而在 语句中,没有值的顺 的条件 如果不满足才会处理下一个条件.而在 如果不满足才会处理下一个条件 而在CASE语句中 没有值的顺 语句中 序号,所有的值是并行处理的 因此 项中已用过的值,如果在后面 序号 所有的值是并行处理的.因此 所有的值是并行处理的 因此WHEN项中已用过的值 如果在后面 项中已用过的值 WHEN项中再次使用 那在语法上错误的 也就是说 表达式的值不能重 项中再次使用,那在语法上错误的 也就是说,表达式的值不能重 项中再次使用 那在语法上错误的.也就是说 复使用.如下列程序 复使用 如下列程序: 如下列程序 CASE SEL IS WHEN 0 => Q <= I1 ; WHEN 1 TO 3 => Q <= I1 ; WHEN 2 TO 5 => Q <= I2 ; WHEN 5 TO 7 => Q <= I3 ; WHEN OTHER => Q <= I4 ; END CASE ;
2.试修改如下程序中出现的错误并分析其可以实现的功能 试修改如下程序中出现的错误并分析其可以实现的功能. 试修改如下程序中出现的错误并分析其可以实现的功能
LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL; ENTITY 2AND IS PORT ( A,B: IN STD-LOGIC ; C:OUT STD-LOGIC ) ; END 2AND; ARCHITECTURE A OF 2AND IS SIGNAL D:STD-LOGIC-VECTOR(2 DOWNTO ) IF D=“00” THEN C<= “0” ELSEIF D=“01” THEN C<= “0” ; ELSEIF D=“10” THEN C<= “0” ; ELSE C<= “1” ; END PROCESS ; END A;
之间的表达式的取值满足指定的条件表达式时,程序将执行 当CASE 和 IS 之间的表达式的取值满足指定的条件表达式时 程序将执行 对应的由=>所指的顺序处理语句 所指的顺序处理语句. 对应的由 所指的顺序处理语句
试分析如下程序可以实现什么功能) 三、例题(试分析如下程序可以实现什么功能 例题 试分析如下程序可以实现什么功能 LIBRARY IEEE; USE IEEE.STD-LOGIC-1164.ALL; ENTITY 2AND IS PORT ( A,B: IN STD-LOGIC ; C:OUT STD-LOGIC ) ; END 2AND; A 0 0 1 B 0 1 0 C 0 0 0
A 0 0 1 1
B 0 1 0 1
C 0 0 0 1
;
该程序可以实现二输入与 门的功能
ELSIF
END IF ;
二、新授 在用VHDL语言进行逻辑设计时 有些操作是根据某表达式的值来进行的 这时常 语言进行逻辑设计时,有些操作是根据某表达式的值来进行的 在用 语言进行逻辑设计时 有些操作是根据某表达式的值来进行的,这时常 常会用到CASE语句 语句. 常会用到 语句 CASE 条件表达式 WHEN 条件表达式的值 => 顺序处理语句 ; 条件表达式的值1 顺序处理语句1 WHEN 条件表达式的值 => 顺序处理语句 ; 条件表达式的值2 顺序处理语句2 ...... WHEN 条件表达式的值 => 顺序处理语句N ; 条件表达式的值N 顺序处理语句 WHEN OTHERS => 顺序处理语句 0 ; END CASE ;