FPGA学习笔记01-VHDL语法基础-顺序语句

 

一、IF语句

  1. 用于门闩控制的IF语句;
if 条件 then
    q <= d;
end if;

当门闩条件成立时,输出端口再现输入端口的值,当条件不成立时,输出值不变化;

  2. 用于二选一的IF控制语句;

if (sel = '1') then
    c <= a;
else
    c <= b;
end if;

当二选一控制条件成立时,输出端C等于输入端a;当条件不成立时,输出端C等于输入端a;

  3. 用于多选择控制的IF语句;

if 条件1 then
    <顺序语句1>
elsif 条件2 then
    <顺序语句2>
 ...
elsif 条件n then
    <顺序语句n>
else
    <顺序语句n+1>
end if;

当条件1成立,执行顺序语句1;当条件2成立,执行顺序语句2;当条件n成立,执行顺序语句;当所有条件都不成立,执行顺序语句n+1;

  • IF语句指明的条件是布尔量,所有IF语句的条件表达式中只能用逻辑运算符和关系运算符;
  • IF判断条件不可以随便颠倒顺序(例,优先级编码器);

二、CASE语句

CASE 条件表达式 IS
WHEN 条件表达式 => 顺序处理语句;
END CASE

与IF语句有序处理不同的是,CASE语句的所有表达式是无序处理的;

三、LOOP语句

  1. FOR-LOOP语句
FOR 循环变量 IN 0 TO N LOOP
    <顺序语句>
END LOOP

  关于FOR-LOOP语句需要注意的地方是:

  •    循环变量i只能出现在进程中,不能出现在进程之间;
  •         FOR-LOOP语句常用于迭代电路当中;
  •         按位操作,移位赋值,奇偶校验等应用;
  •         在满足条件执行语句的条件下,顺序语句被执行N次,只不过每次顺序语句当中的循环变量被赋予不同的值;

例子1:使用FOR-LOOP语句仿真迭代电路:<modelsim>

 1 library ieee;
 2 use ieee.std_logic_1164.all;
 3 use ieee.std_logic_arith.all;
 4 use ieee.std_logic_unsigned.all;
 5 
 6 entity sim_loop is
 7     port(
 8         sysclk : in std_logic;
 9         rst_n  : in std_logic;
10 
11         result : out std_logic_vector(7 downto 0)
12     );
13 end entity;
14 
15 architecture a1 of sim_loop is
16 
17 constant b : std_logic_vector(7 downto 0):= "10101010";
18 
19 begin
20 
21 process(sysclk,rst_n)
22 variable tmp : std_logic_vector(7 downto 0):= (others =>'0');    
23 begin
24     if rst_n = '0' then
25         
26     elsif rising_Edge(sysclk) then
27 
28         for i in 0 to 6 loop
29             tmp(i+1) := tmp(i) xor b(i);
30         end loop;
31         result <= tmp;
32 
33     end if;
34 end process;
35 
36 end a1;

例子2:FOR-LOOP 语句也通常用于奇偶校验位的判断:b = 10101010

 1 process(sysclk)
 2 variable tmp : std_logic;    
 3 begin
 4         if  rising_edge(sysclk) then
 5         tmp:='0';
 6         for i in 0 to 7 loop
 7             tmp := tmp xor b(i);
 8         end loop;
 9         result <= tmp;
10         end if;
11 end process;

result = 偶校验位 = ’0‘;

posted @ 2021-04-27 11:50  伊可的博客  阅读(1036)  评论(0编辑  收藏  举报