Ch4 資料流層次 Dataflow Level

4.1 assign敘述

  • 驅動某值至net ( 等號左式只能是net,右式可以是 net 或 reg )
  • 資料流層次的描述方式,只能敘述組合邏輯電路( 不含有記憶性電路 )
  • 但輸出不可以包含輸入( EX : a = a + b; → 隱含有記憶性 → 錯誤 )

範例:

assign 輸入 = 輸出 ( 可包含運算子 )

4.2 運算子

4.2.1 條件運算子

範例:

/* 若A>B, Out = A 反之 若A<=B, Out = B */
Out = ( A>B ) ? A : B;

/* 使用if-else */
If( A>B )
    Out = A;
else
    Out = B;

4.2.2 連結運算子

範例:

A = { 1’b0, 1’b1 };         // A = 2’b01
A = { B[1:0], C[0], D[2] }; // A = B[1], B[0], C[0], D[2]
A = { 2{2’b01} };           // A = 4’b0101
A = { 3’b101, 2{1’b0} }     // A = 5’b10100

4.3 實際範例

一位元全加器程式碼:

module Full_Adder( A, B, Cin, Sum, Cout );

    input A, B, Cin;
    output Sum, Cout;

    wire W1, W2, W3;

    assign W1 = A^B;
    assign W2 = W1&Cin;
    assign W3 = A&B;
    assign Sum = W1^Cin;
    assign Cout = W2|W3;

endmodule