-1

128ビットレジスタを25の位置にシフトし、その最初の96ビットをRAMに格納するコードを記述しています(RAMのmem_bank幅= 16ビット)。最初のクロックサイクルでシフトを実行し、サブ値を格納するためにカウンタをクリアしようとします。次の6(96/16)サイクルの間RAMに。インデックス作成にカウンターを使用しますが、カウンターが一定ではないという問題があります。これがRAMのコードです

module RAM(clk,we,din,dout,address);
input clk,we,re;
input [15:0] din;
input [5:0] address;
output [15:0] dout;

reg [15:0] dout;
reg [15:0] mem_bank [0:51];
integer i;
initial 
begin
    for (i=0;i<52;i=i+1)
    mem_bank[i] <=0;
end

always @(posedge clk)
begin 
if(we)
    mem_bank[address] <= din;
dout <= mem_bank[address];
end
endmodule

これはシフトレジスタのコードです

module keygen(clk,load,data0,data1,data2,data3,out1,out0);
input clk,load;
input [31:0] data0,data1,data2,data3;
output [31:0] out1,out0;
reg [127:0] reg128;
integer adrs = 0;  //address of RAM from 0 to 51
integer count=0;
parameter KEYSIZE = 16;
integer lowindex=0;
integer highindex=0;

always @(posedge clk)
begin
if(load)
    reg128 <= {data3,data2,data1,data0};
else if(count < 1)
begin

    reg128 [127:25] <= reg128 [102:0];
    reg128 [24:0] <= reg128 [127:103];
    count =count + 1;       
end
else if(count <8 && adrs < 52)
begin 
//  lowindex= (count-2)*KEYSIZE;
//  highindex = (count-2)*KEYSIZE+KEYSIZE-1;
RAM ram(.clk(clk),.we(1),.din(reg128[(count-2)*KEYSIZE:(count-2)*KEYSIZE+KEYSIZE-1]),.address(adrs));
adrs=adrs+1;
if (count < 8)
count =count + 1;       
else
count = 0;
end
end
assign out0=reg128[31:0];
assign out1=reg128[63:32];
//assign out2=reg128[95:64];
//assign out3=reg128[127:96];

endmodule

これを修正するための助けがあれば

4

1 に答える 1

1

まず、alwaysブロック内に RAM のインスタンス化があります。これはまずい - 外に移動してください。また、カウンタの更新にはノンブロッキング割り当てを使用します ( <=)。

他の問題を解決するには、「インデックス付きパーツ選択」を使用してください。あなたの問題については、書き直してみます

reg128[(count-2)*KEYSIZE:(count-2)*KEYSIZE+KEYSIZE-1]

なので

reg128[(count-2)*KEYSIZE+KEYSIZE-1 -: KEYSIZE ];

従来、Verilog の部分選択 (たとえばreg_a[3:4]) では、制限は一定でなければなりません。Verilog の最近のバージョンでは、ディメンションの 1 つを変更できる新しい「インデックス パーツ選択」があります。その形式reg_a[START +: WIDTH]は であるため、インデックス 3 から始まる - 4 ビットreg_a[3 +: 4]と同じですreg_a[3:6]。START はここで変更できますが、幅は一定である必要があります。

別の変種reg_a[3 -: 4]は、あなたを与えるでしょうreg_a[3:0]

于 2012-11-13T18:21:45.053 に答える