数字逻辑VHDL
信号与变量
- signal是全局的,在整个结构体中都有效,它的赋值是在进程结束, 也就是最后的赋值是有效的。
- variable是局部的,它的赋值是立即生效的。
- 一般变量是在进程的说明部分中定义的
PROCESS(a, b, c)
-- 在说明部分声明变量
VARIABLE vector: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
-- a <= '0' HEN b = '0' ELSE '1'; 在进行中只能使用顺序类型的语句, WHEN-ELSE是并行的, 不能写在PROCESS中, 这里应该换成IF-ELSE语句
IF b = '0' THEN
a <= '0';
ELSE
a <= '1';
END PROCESS;
- 一般信号定义在ARCHITECTURE和PROCESS之间, 在ENTITY的PORT中定义的也是信号, 可以直接在ARCHITECTURE中直接访问, 因为是全局的。
ARCHITECTURE JHArc OF JHEncoder IS
SIGNAL vector: STD_LOGIC_VECTOR(3 DOWNTO 2);
BEGIN
a <= '0' HEN b = '0' ELSE '1'; -- 并行语句
END JHArc;
进程
- process之间是并行的,但是在内部是按照顺序执行的。
标准头
```vhdl
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
```
-
定义ENTITY的注意点
ENTITY comp IS PORT( A1: IN STD_LOGIC; B1: IN STD_LOGIC; A0: IN STD_LOGIC; B0: IN STD_LOGIC; altb: OUT STD_LOGIC; agtb: OUT STD_LOGIC; aeqb: OUT STD_LOGIC -- 没有分号! ); END comp;
并行语句和顺序语句
-
并行语句
- WHEN-ELSE
- WITH-SELECT
-
顺序语句(可以在PROCESS中使用)
- IF-ELSE
- IF-ELSIF
- CASE-WHEN
-