2017-03-29 6 views
0

における32x64レジスタファイルを実装レジスタファイルの仕様は次のとおりここVerilogの

  • バスA、B、及びWは64ビット幅です。

    RegWrを1に設定すると、負の(立ち下がり)クロックエッジでバスWのデータがRwで指定された レジスタに格納されます。

    レジスタ31は常にゼロを読み取る必要があります。

    レジスタからのデータ(RaおよびRbによって指定される)は、2チックの遅延の後、それぞれバスAおよびバス バスBに送信されます。

    レジスタファイルへの書き込みには、3ティックの遅延が必要です。

    ここ
    module RegisterFile(BusA, BusB, BusW, RA, RB, RW, RegWr, Clk); 
    

    が私の現在のプログラムIがゼロにRAとRBを初期化する方法を疑問に思って

    module RegisterFile(BusA, BusB, BusW, RA, RB, RW, RegWr, Clk); 
    output [63:0] BusA; 
    output [63:0] BusB; 
    output [63:0] BusW; 
    input RA; 
    input RB; 
    input RW; 
    input RegWr; 
    input Clk; 
    reg [31:0] registers [31:0]; 
    
    assign #2 BusA = registers [0]; 
    assign #2 BusB = registers [1]; 
    
    always @ (negedge Clk) begin 
        if(RegWr & RW !=0) 
        registers[RW] <= #3 BusW; 
    end 
    endmodule 
    

    あり、そして:

レジスタファイルモジュールには、以下のインタフェースを持っている必要がありますRAとRBのデータをBusAとBusBに正しく送信する方法が不思議です

答えて

0

コードに変更する必要が初

  1. BUSA、BusBとBusW広い各64ビットデータバスです。 BusWは入力バスとして使用され、BusAおよびBusBは出力バスとして使用されます。したがって、ポートの宣言は

    input [63:0] BusW; 
    output [63:0] BusA, BusB; 
    
  2. ように変更する必要がレジスタファイル32の深さを有しており、RA、RBとRWは、アドレスバスです。これらのアドレスは5ビット幅である必要があります。

    input [4:0] RA,RB,RW; 
    
  3. 完全なコードは、

    module RegisterFile(BusA, BusB, BusW, RA, RB, RW, RegWr, Clk); 
        output [63:0] BusA, BusB; 
        input [63:0] BusW; 
        input [4:0] RA, RB, RW; 
        input RegWr; 
        input Clk; 
    
        reg [63:0] registers [31:0]; 
    
        assign #2 BusA = registers[RA]; 
        assign #2 BusB = registers[RB]; 
    
        always @ (negedge Clk) 
        begin 
        if(RegWr) 
         if (RW != 4'd31) 
         registers[RW] <= #3 BusW; 
         else 
         // This is done to allow the user to reset the 0th location to a zero value. 
         registers[0] <= #3 'd0; 
        end 
    endmodule 
    

として再記述することができ、私はedaplaygroundにこのコードをシミュレートしても、それをテストするために小さなテストベンチを作成しました。ここにコードとテストベンチへのリンクがあります https://www.edaplayground.com/x/5DXC