2013年10月7日

Verilog FPGA 2013/10/7

連續指定語法

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解碼器

沒有留言:

張貼留言

文章有誤或有問題麻煩您留言告知! 謝謝您~~