目录
1.顺序语句
顺序语句仅出现在进程和子程序中。顺序语句综合后 , 映射为实际的门电路,系统一上电, 门电路开始工作 。电路可实现逻辑上 的顺序执行,实际上所有门电路是并行工作的。
赋值语句要点:
- 赋值语句
- 流程控制语句
- 空操作语句
- 等待语句
- 子程序调用语句
- 返回语句
1.1赋值语句:
例子:
程序如下所示:
library ieee;
use ieee.std_logic_1164.all;
entity test_signal is
port
(Reset,Clock :in std_logic;
NumA,NumB :out integer range 0 to 255);
end test_signal;
architecture test of test_signal is
signal A,B:integer range 0 to 255;
begin
process(Reset,Clock)
variable C: integer range 0 to 255;
begin
if Reset='1' THEN
A<=0;B<=2;C:=0;
elsif rising_edge(Clock) THEN
C:=C+1;A<=C+1;B<=A+2;
end if;
end process;
NumA<=A;NumB<=B;
end test;
进行仿真测试:
1.2 .流程控制语句
-
IF语句
方式一:
IF 条件式 THEN
顺序语句
END IF;方式二:
IF 条件式 THEN
顺序语句
ELSE
顺序语句
END IF;方式三:有优先级
IF 条件式 THEN
顺序语句
ELSEIF 条件式2 THEN
顺序语句
ELSE
顺序语句
END IF;注意:用 IF 语句描述组合逻辑电路时 , 务必涵盖所有的情况 , 否则综合后将引入锁存器 !
例子1:使用IF语句实现8-3译码器
代码如下:
library ieee;
use ieee.std_logic_1164.all;
entity Encoder8_3 is
port
(En :in std_logic;
I :in std_logic_vector(7 downto 0);
A :out std_logic_vector(2 downto 0);
Idel:out std_logic
);
end Encoder8_3;
architecture EncoderBhv of Encoder8_3 is
begin
process(En,I)
begin
if En='1' THEN
if I="10000000" THEN
A<="111";Idel<='0';
elsif I="01000000" THEN
A<="110";Idel<='0';
elsif I="00100000" THEN
A<="101";Idel<='0';
elsif I="00010000" THEN
A<="100";Idel<='0';
elsif I="00001000" THEN
A<="011";Idel<='0';
elsif I="00000100" THEN
A<="010";Idel<='0';
elsif I="00000010" THEN
A<="001";Idel<='0';
elsif I="00000001" THEN
A<="000";Idel<='0';
else
A<="000";Idel<='1';
end if;
end if;
end process;
end EncoderBhv;
解释:En为使能位,只有当使能位为1时,才会根据输入改变输出的值,I是输入的为,宽度为8为,Idel检测状态是否正确,如果输入不正确,Idel位置1.
仿真波形如下:
例子2:不完整条件语句时序电路
程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity comp_bad is
port
(a1 :in bit;
b1 :in bit;
q1 :out bit
);
end comp_bad;
architecture oneBhv of comp_bad is
begin
process(a1,b1)
begin
if a1>b1 THEN q1<='1';
elsif a1<b1 THEN q1<='0'; --这里少了一种情况,a1 = b1
end if;
end process;
end oneBhv;
那么综合的结果就会有锁存器:
例子三:完整条件语句
程序如下:
library ieee;
use ieee.std_logic_1164.all;
entity comp_bad is
port
(a1 :in bit;
b1 :in bit;
q1 :out bit
);
end comp_bad;
architecture oneBhv of comp_bad is
begin
process(a1,b1)
begin
if a1>b1 THEN q1<='1';
else
q1<='0'; --涵盖所有的情况
end if;
end process;
end oneBhv;
综合结果是:
-
CASE语句
语法
CASE 表达式 IS
WHEN 选择值 [ 选择值 ]=>顺序语句;
WHEN 选择值 [ 选择值 ]=>顺序语句;
WHEN OTHERS=>顺序语句;
END CASE;注意:
1.选择值不可重复或重叠;
2.当CASE 语句的选择值无法覆盖所有的情况时情况时,要用OTHERS指定未能列出的其他所有情况的输出值。
例子:使用CASE实现4选1四路选择器
代码如下:
library ieee;
use ieee.std_logic_1164.all;
entity mux is
port
(Data0,Data1,Data2,Data3 :in std_logic_vector(7 downto 0);
Sel :in std_logic_vector(1 downto 0);
Dout :out std_logic_vector(7 downto 0)
);
end mux;
architecture DataFlow of mux is
begin
process(Sel)
begin
case Sel is
WHEN"00"=>Dout<=Data0;
WHEN"01"=>Dout<=Data1;
WHEN"10"=>Dout<=Data2;
WHEN"11"=>Dout<=Data3;
WHEN OTHERS=>Dout<="00000000";
end case;
end process;
end DataFlow;
仿真结果如下:
-
LOOP语句
语法:
[LOOP 标号:] FOR 循环变量 IN 循环次数范围 LOOP
顺序语句
END LOOP [LOOP 标号];注意:
1.循环变量是一个临时变量。
2.….TO….….DOWNTO…..从初值开始 , 每执行完一次后递增(递减), 直到终值为止 。
例子1:
Sum:=0;
FOR i IN 0 TO 9 LOOP
Sum:=Sum+i;
END LOOP;
例子2:
VARIABLE Length :Integer RANGE 0 TO 15;
.
.
FOR i IN 0 TO Length LOOP.
.
END LOOP;
-
NEXT语句
NEXT语句主要用在LOOP 语句执行中有条件或无条件转向控制, 跳向LOOP语句的起点。
使用方式:
NEXT [循环标号] [WHEN 条件];
① NEXT ; --无条件终止当前循环 , 跳回到本次循环LOOP语句处 , 开始下一次循环 。
② NEXT LOOP 标号; --当有多重LOOP 语句嵌套时 , 跳转到指定标号LOOP 语句处 , 重新开始执行循环操作 。
③ NEXT LOOP 标号 WHEN 条件表达式; --条件表达式为TRUE, 执行NEXT 语句,进入跳转操作 , 否则向下执行。
-
EXIT语句
EXIT语句主要用在LOOP 语句执行中有条件或无条件内部转向控制, 跳向LOOP 语句的终点,用于退 出循环 。 当程序需要
处理保护 、 出错和警告状态时 ,语句能提供 一个快捷 、 简便的方法 。
使用方法:
EXIT [循环标号] [WHEN 条件];
① EXIT ; -- 无条件从当前循环中退 出 。
② EXIT LOOP 标号; --程序执行退出动作无条件从循环标号所标明的循环中退出 。
③ EXIT LOOP 标号 WHEN 条件表达式; --条件表达式为TRUE,程序从当前循环中退出
-
NULL语句
NULL为空操作语句,一 般用于CASE中, 表示在某些情况下对输出不作任何改 变 , 隐含锁存信号 。不能用于纯组合逻辑电路。
例子:
-
WAIT语句
在进程或过程中执行到WAIT语句时 ,程序将被挂起 , 并设置好再次执行的条件 。
语法:
WAIT [ON 信号表][UNTIL 条件表达式][FOR 时间表达式];
① WAIT; --未设置停止挂起的条件 , 表示永远挂 起 。
② WAIT ON 信号表; --敏感信号等待语句, 敏感信号的变化将结束挂 起 , 再次启动进程。
③ WAIT UNTIL 条表达式; --条件表达式为中所含的信号发生变化 , 且满足WAIT 语句所设条件 , 则结束挂起 , 再次启 动进程。
④ WAIT FOR 时间表达式; --超时等待语句, 从执行当前的WAIT语句开始 ,在此时间段 内 ,进程处于挂起状态, 超过 这一时间段后 ,程序自动恢复执行。
2.配置语句
功能:配置主要为顶层设计实体指定结构体 ,或为参与例化的元件实体指定所希望的结构体 ,以层次方式来对元件例化做结构
配置。
方式:
Configuration 配置名 of 实体名 is
配 置 说明
End 配置名;