VHDL语言入门


语言描述法

1. 结构描述法

这种方法的前提是知道逻辑函数的表达式。下面以2位比较器为例子来进一步说明。

AeqB<=NOT((a(0) XOR b(0)) OR (a(1) XOR b(1)) OR(a(2) XOR b(2)) OR (a(3) XOR b(3)));

2. 行为描述法

这种方法从功能上进行编程,效率非常高。

AeqB<='1' WHEN a=b ELSE '0'

数据类型

  1. BIT:位类型,其值只能为‘0’或‘1’。
  2. Std_Logic标准逻辑类型。

(1).可以代替BIT和BIT_VECTOR(多位)。

(2).电路中存在三态逻辑必须用STD_LOGIC和STD_LOGIC_VECTOR。

(3)在使用Std_Logic数据类型时必须声明库和程序包说明语句:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

算术运算符

运算符 功能 运算符 功能
+ SLL 逻辑左移
- SRL 逻辑右移
* SLA 算术左移
/ SRA 算术右移
** 乘方 ROL 逻辑循环左移
MOD 取模 ROR 逻辑循环右移
REM 取余 ABS 取绝对值

逻辑运算符

运算符 功能
AND
OR
NAND 与非
NOR 或非
XOR 亦或
XNOR 亦或非
NOT

其他运算符

运算符 功能
+
-
& 并置

VHDL程序基本结构

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;    --库说明

ENTITY mux21 IS                 --实体说明
    PORT(A, B, SEL:IN STD_LOGIC;
        Y:OUT STD_LOGIC);
END mux21;

ARCHITECTURE one OF mux21 IS     --结构体说明
    BEGIN
Y<=(A AND NOT SEL) OR (B AND SEL);
END;

并行语句

  1. 布尔表达式
    Y<=(A AND (NOT S)) OR (B AND S);
  2. 条件信号赋值语句
    X<= a when(s=="00") else
        b when(s=="01") else
        c when(s=="10") else
        d;
  3. 选择信号赋值语句
    WITH s SELECT
    X<= a WHEN"00",
        b WHEN"01",
        c WHEN"10",
        d WHEN OTHERS;
  4. 进程语句
    --D触发器上升沿触发
    ARCHITECTURE one OF dff IS
     BEGIN
      PROCESS(clk)
       BEGIN
        IF clk'event AND clk='1' THEN
            q<=d;
        END IF;
      END PROCESS;
    END;
    --D锁存器
    PROCESS(oe,a)
    BEGIN
        IF oe='1' THEN
            y<=a;
        END IF;
    END PROCESS;
  5. 顺序语句

每一条顺序语句的执行顺序是和它们的书写顺序是一致的。它只能出现在进程,函数和过程中。

(1)顺序赋值语句

变量赋值目标:=赋值源

信号赋值目标:<=赋值源

(2)IF语句

IF 条件句 THEN
    顺序语句
ELSE
    顺序语句
END IF
----------------------------
IF 条件句 THEN
    顺序语句
   ELSIF 条件句 THEN
    顺序语句
   ELSE
    顺序语句
END IF

(3)CASE_WHEN语句
CASE 表达式 IS
    WHEN 选择值=>顺序语句;
    ………
    WHEN 选择值=>顺序语句;
    [WHEN OTHERS=>顺序语句;]
END CASE;

下面以四选一数据选择器为例:
mux4_1:PROCESS(a,b,c,d,s)
    BEGIN
        CASE s IS
            WHEN"00"=> x<=a;
            WHEN"01"=> x<=b;
            WHEN"10"=> x<=c;
            WHEN OTHERS=> x<=d;
        END CASE;
    END PROCESS mux4_1;

变量

---变量声明
VARIABLE tmp: Bit;
---整体赋值
temp:="1010101010";
temp:=x"AA";
---逐位赋值
temp(7):='1';
---多位赋值
temp(7 downto 4) :="1010";

信号

IBRARY ieee;
USE ieee.std_logic_1164.ALL;   

ENTITY zuhe IS                 
    PORT(a,b,c,d:IN STD_LOGIC;
        g:OUT STD_LOGIC);
END zuhe;

ARCHITECTURE one OF zuhe IS    
 SIGNAL e,f:Std_Logic;      --信号全局声明
 BEGIN
    e<=a OR b;
    f<=NOT(c OR d);
    g<=e AND f;
END;

文章作者: Peyton
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Peyton !
  目录