連續指定語法
assign 強度 延遲 運算式;
連續無時間或時機之限制
一旦 assign後其邏輯閘關係,就不能再改變
ex
wire A,B,C;
assign #1 A=B&C;
assign #1 A=B|C;
以上是不合法的
運算式(expression)
輸出 = 運算元 與 運算子 之關係式
(operand) (operator)
ex: A=B&C;
運算子 +-*/%
邏輯運算子 ! && || //與& | 差在一個為邏輯閘之 AND與OR(可多於一位元),兩個為條件式的邏輯,只用於邏輯判斷式內(通常為一位元)
ex
!(A==B) 同 (A!=B) //A不等於B
(A==B)&&(B==C)
(A==B)||(B==C)
&可用於一般邏輯閘之 AND運算,亦可用於邏輯判斷式之AND
&&只可以用於邏輯判斷式之AND
若B=3 C=7
assign A=B&C //=>A=3
assign A=B&&C //=>A=1
關係運算子
>
<
>=
<=
==
!=
下面用於訊號或變數含有x(未知)或z(高組抗)之狀況
===
!==
ex
A=3'bZ10 A=3'bx10
B=3'b1Z0 B=3'b1x0
C=(A===B)=0?? C=(A===B)=1
x:未知,don't care 可視為1或0
z高阻抗,不等於0亦不等於1
逐位元(表一個位元一個位元)運算子(邏輯閘)
~ NOT
& AND
| OR
^ XOR
~^ 反XOR
S=A⊕B <=> S=A'B+AB'
ex
C[1:0]=A[1:0]&B[1:0];
=>C[0]=A[0]&B[0];
=>C[1]=A[1]&B[1];
=>逐位元運算
ex
b= 10; //=>(1010)
c= 5; //=>(0101)
a=b&c; //=0
移位運算
<< 左移 //=>乘二
>> 右移 //=>除二
b=10;//(1010)
a=b<<1;//b左移一位元=(10100)
=(14)h
=20
b=10;//(1010)
a=b>>1;//(0101)
=5
條件式(多工器)
?:
(判斷式)?成立時之值:不成立之值
連結(合併)concatenation
{ }
將訊號合併成向量
ex
wire a0,a1,a2,a3; //合併成四位元的向量
wire[3:0];
assign a={a0,a1,a2,a3};
旋轉位元
wire [7:0] a;
wire [7:0] lroata;//lroat往左旋
a[7] a[6] a[5] a[4] a[3] a[2] a[1] a[0]
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
左旋 a[6] a[5] a[4] a[3] a[2] a[1] a[0] a[7]
assign lroata={a[6:0],a[7]};
a[7:0]除以8之商//=>移位移三次
module div_8(a,q);
input [7:0] a;
output [4:0] a;
assign #1 q=a>>3;//或assign #1 q=a[7:3];
endmodule
合併之範例
見p.5-19
3對8解碼器 decoder
p.5-22
一位元減法器 半減法器 全減法器
3對8解碼器
沒有留言:
張貼留言
文章有誤或有問題麻煩您留言告知! 謝謝您~~