99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Verilog 連續(xù)賦值

2022-05-17 10:20 更新

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

連續(xù)賦值語(yǔ)句是 Verilog 數(shù)據(jù)流建模的基本語(yǔ)句,用于對(duì) 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ù)賦值語(yǔ)句都是以 ?assign ?開(kāi)頭,例如:

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

需要說(shuō)明的是:

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

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

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

全加器

下面采用數(shù)據(jù)流描述方式,來(lái)設(shè)計(jì)一個(gè) 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é)果如下:


點(diǎn)擊這里下載源碼


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)