在VHDL中,逻辑运算符是 and/or/nand/not/xor/xnor,其操作是按位操作;在Verilog中,按位操作符~/&/|/^/~^与VHDL中上述效果相同;Verilog中逻辑运算符是针对整体的,比如对于一个4位reg型的变量,只要其中一位不为零,则视为逻辑1,a=4'b0010,则!a=4'b0000。
Verilog中and/or/not等属于门级描述,一般不使用。
在VHDL中,移位操作(sll,srl,sla,sralrol,ror)只针对bit_vector进行操作EDA中国门户网站&u%P"z
e$HzX9Q
逻辑移位和算术移位:逻辑左移与算术左移相同,主要区别在于右移时,逻辑右移是左边补0,而算术右移是根据符号位来补。EDA中国门户网站)j
ArS'A-GDNSC
逻辑移位(不管是左移位还是右移位) 都是空缺处补0
/F;dK%Ef8DV8SE0
x2D,ye.w*?0 例如: mov ax , 1100_0111_0110_1000B
2Q_$V*f;E7y5M4EI$Lc0 mov cl , 3
U!} k|:u3v0 shl ax , cl ; 结果 ax = 0011_1011_0100_0000
tk5sd ~0
x%d*VE-U)a5S"p0 mov ax , 1100_0111_0110_1000B EDA中国门户网站 [1Dd3{(L,a5{8l@:T_
mov cl , 3
[1UU(]dD0 shr ax , cl ; 结果 ax = 0001_1000_1110_1101
e6ce \{-Vu,B0 EDA中国门户网站3kVh'yLN2z
算术移位要保证符号位的不改变(左移位补0, 右移位看符号位)
,f%N7t*c{q M'p;sE0
f4u"kM)XMsl0 例如: mov ax , 1100_0111_0110_1000B EDA中国门户网站v
T"s:|#qyE+G
mov cl , 3 EDA中国门户网站kB3a'w8[
|)vsL d
sal ax , cl ; 结果 ax = 0011_1011_0100_0000 EDA中国门户网站'Zdn@0?)vx3tt
4r*k;o;Q}1i%_ZN0 mov ax , 1100_0111_0110_1000B
QO%m'ts*n| r8k0 mov cl , 3 EDA中国门户网站8~IUVd#i }5Td
sar ax , cl ; 结果 ax = 1111_1000_1110_1101
PReqh$}6N0
(f:yc1s9N3pY i0 mov ax , 0100_0111_0110_1000B EDA中国门户网站#X Rf5A:p.\4X
mov cl , 3 EDA中国门户网站@)P Y`7~G(Cz#g o
sar ax , cl ; 结果 ax = 0000_1000_1110_1101 EDA中国门户网站e HVE `:bJ
EDA中国门户网站 L%s.u\ ss
M%W(H7D;]d;W_5XF0
在VHDL中,变量赋值:=,相当于verilog中的阻塞赋值=,立即生效;信号赋值<=,相当于Verilog中的非阻塞赋值语句<=。
例子1:
f'l
@@&\G] An0LIBRARY IEEE;EDA中国门户网站C QdU%jm{fy R
USE IEEE.STD_LOGIC_1164.ALL;EDA中国门户网站cz6j;|c l8h } _
@
ENTITY DFF3 IS
'{`M!uQ0PORT(CLK,D1:IN STD_LOGIC;
#sHM!b-v(V$P4FU P3W:{0 Q1:OUT STD_LOGIC);
q/RJ%`cUu5M6]0END;
H[
@ew&o/i7a
YN0ARCHITECTURE bhv OF DFF3 ISEDA中国门户网站Ve2z
|%Ga b"f
SIGNAL A,B:STD_LOGIC;
6Ix(rXi!d+v0 BEGINEDA中国门户网站q5I!?_m([I
bG"C
PROCESS(CLK) BEGINEDA中国门户网站jW1Zd1x H
IF CLK’EVENT AND CLK =’1’ THENEDA中国门户网站]u2c)Wvv.i7ZD.Hr
A<=D1;
W SU
T/a1`Rw0 B<=A;
goy)I4x0 Q1<=B;
m0e`iw;In0 END IF
| rW~M'WB0 END PROCESS;
9HQEBN5o'`Y0 END;
X}A0|j(E3N+om0END bhvEDA中国门户网站}p(C*lC;r E
R [C ^$^
EDA中国门户网站 MGo_g&[3JR @*LXD
注:三个赋值语句(A<=D1; B<=A;Q1<=B;)都必须在遇到END PROCCESS后的δ时刻内执行,A被更新的值是第一个时钟上升沿的D1,B被更新的值是第二个时钟上升沿的A,Q1被更新的值是第三个时钟上升沿的B 。

EDA中国门户网站)Z b-SUu#vV)Yel;Zw
例子2:
;v;\vVV'e:`1~N
u6R$I0LIBRARY IEEE;EDA中国门户网站 ?a*oO%fF.b,R
USE IEEE.STD_LOGIC_1164.ALL;
|6Vt,g8|9J0ENTITY DFF3 ISEDA中国门户网站ng-}J7V2B&k
PORT(CLK,D1:IN STD_LOGIC;EDA中国门户网站G3w1{La+a+}
Q1:OUT STD_LOGIC);EDA中国门户网站+h/^%bi5n.T{
END;EDA中国门户网站1K}^$E8D}y\8z
ARCHITECTURE bhv OF DFF3 IS
j
U{&Se-?d(A0 BEGIN
&Mvp*Tp,|0 PROCES(CLK)
$[Q9?"r'O D I$M(g#T0 VARIABLE A,B:STD_LOGIC;
hD2bHn\&t,eSa0 BEGINEDA中国门户网站#L?I,r-{)k/WK
IF CLK’EVENT AND CLK=’1’ THENEDA中国门户网站\ bNOTA@
w.`
A:=D1;
:N6Q6c4Zp;M z!L F9rR0 B:=A;EDA中国门户网站
M Zs(E}M^y
Q1<=B;EDA中国门户网站dJ0k,{:sc7bS5~a
END IF;EDA中国门户网站1Il0b:H YS!FD
END PROCESS;EDA中国门户网站6u9n(k~^}7m?S
END;
3Z3Gghi*jU0END bhv
&y.jp `t;@&Ss0
y-tU8OC+ga;B0注:A、B是变量,担当了D1数据的暂存单元,它们的赋值更新是立即发生的。