Verilog 連續(xù)賦值

2022-05-17 10:20 更新

關(guān)鍵詞:assign, 全加器

連續(xù)賦值語句是 Verilog 數(shù)據(jù)流建模的基本語句,用于對 wire 型變量進(jìn)行賦值。

格式如下:

assign     LHS_target = RHS_expression  ;

LHS(left hand side) 指賦值操作的左側(cè),RHS(right hand side)指賦值操作的右側(cè)。

?assign ?為關(guān)鍵詞,任何已經(jīng)聲明 wire 變量的連續(xù)賦值語句都是以 ?assign ?開頭,例如:

wire      Cout, A, B ;
assign    Cout  = A & B ;     //實現(xiàn)計算A與B的功能

需要說明的是:

  • ?LHS_target? 必須是一個標(biāo)量或者線型向量,而不能是寄存器類型。
  • ?RHS_expression的類型沒有要求,可以是標(biāo)量或線型或存器向量,也可以是函數(shù)調(diào)用。
  • 只要 ?RHS_expression表達(dá)式的操作數(shù)有事件發(fā)生(值的變化)時,?RHS_expression就會立刻重新計算,同時賦值給 ?LHS_target?。

Verilog 還提供了另一種對 wire 型賦值的簡單方法,即在 wire 型變量聲明的時候同時對其賦值。wire 型變量只能被賦值一次,因此該種連續(xù)賦值方式也只能有一次。例如下面賦值方式和上面的賦值例子的賦值方式,效果都是一致的。

wire      A, B ;
wire      Cout = A & B ;

全加器

下面采用數(shù)據(jù)流描述方式,來設(shè)計一個 1bit 全加器。

設(shè) Ai,Bi,Ci 分別為被加數(shù)、加數(shù)和相鄰低位的進(jìn)位數(shù),So, Co 分別為本位和與向相鄰高位的進(jìn)位數(shù)。

真值表如下:

Input     Output  
Ci Ai Bi So Co
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1

全加器的表達(dá)式為:

So = Ai ⊕ Bi ⊕ Ci ;
Co = AiBi + Ci(Ai+Bi)

rtl 代碼(full_adder1.v)如下:

module full_adder1(
    input    Ai, Bi, Ci,
    output   So, Co);
 
    assign So = Ai ^ Bi ^ Ci ;
    assign Co = (Ai & Bi) | (Ci & (Ai | Bi));
endmodule

當(dāng)然,更為貼近加法器的代碼描述可以為:

module full_adder1(
    input    Ai, Bi, Ci
    output   So, Co);
 
    assign {Co, So} = Ai + Bi + Ci ;
endmodule

testbench(test.sv)參考如下:

`timescale 1ns/1ns
 
module test ;
    reg Ai, Bi, Ci ;
    wire So, Co ;
 
    initial begin
        {Ai, Bi, Ci}      = 3'b0;
        forever begin
            #10 ;
            {Ai, Bi, Ci}      = {Ai, Bi, Ci} + 1'b1;
        end
    end
 
    full_adder1  u_adder(
        .Ai      (Ai),
        .Bi      (Bi),
        .Ci      (Ci),
        .So      (So),
        .Co      (Co));
 
    initial begin
        forever begin
            #100;
            //$display("---gyc---%d", $time);
            if ($time >= 1000) begin
            $finish ;
            end
        end
    end
 
 endmodule

仿真結(jié)果如下:


點擊這里下載源碼


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號