语言描述法
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'
数据类型
- BIT:位类型,其值只能为‘0’或‘1’。
- 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;
并行语句
- 布尔表达式
Y<=(A AND (NOT S)) OR (B AND S);
- 条件信号赋值语句
X<= a when(s=="00") else b when(s=="01") else c when(s=="10") else d;
- 选择信号赋值语句
WITH s SELECT X<= a WHEN"00", b WHEN"01", c WHEN"10", d WHEN OTHERS;
- 进程语句
--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;
- 顺序语句
每一条顺序语句的执行顺序是和它们的书写顺序是一致的。它只能出现在进程,函数和过程中。
(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;