1

問題が発生しました。私は Verilog 初心者で、カウンター ベースのメモリ アレイを作成する必要があります。基本的に、私の配列は 16 x 8 ビット (16 x 1 バイト) です。メモリに 8 ビット データが 16 回入っています。そこで、メモリ ブロックと、クロックのポジティブ エッジでインクリメントすることによってこのメモリ ブロックにアドレスを供給するカウンターを作成しました (実際には、ポジティブ エッジごとに 8 ビット データがメモリに供給されるため、カウンターをインクリメントします)。このプロセスを 16 回実行した結果、メモリ ブロックに 128 ビットのデータが格納され、提供されるようになりました。しかし今、カウンターをリセットし、少し遅れてプロセス全体をもう一度繰り返したいと思います。私はこれをどのように行うかについて混乱しています。私のコードを見て、アドバイスしてください。

よろしくお願いします。

// creation of counter & a dummy variable
wire cnt;
wire cnt_next;
reg [3:0] counter;
  always @(posedge clock)
    assign cnt_next=cnt+1'b1;   
        counter <= cnt_next
        wire [3:0] write_address  = counter;


//creation of ram function
module single_port_ram
(   
    input [7:0] data,
    input [3:0] addr,
    input wr, clk, rd
    output [127:0] q
);

reg [15:0] ram[0:7];

always @ (posedge clk or posedge reset)
    begin
    // Code for writing the data
        if (wr)
        {
          addr <= write_address 
          case {addr}
                4'b0000: ram[0] <= data
            4'b0001: ram[1] <= data
            4'b0010: ram[2] <= data
            4'b0011: ram[3] <= data
            4'b0100: ram[4] <= data
            4'b0101: ram[5] <= data
            4'b0110: ram[6] <= data
            4'b0111: ram[7] <= data
            4'b1000: ram[8] <= data
            4'b1001: ram[8] <= data
            4'b1010: ram[10] <= data
            4'b1011: ram[11] <= data
            4'b1100: ram[12] <= data
            4'b1101: ram[13] <= data
            4'b1110: ram[14] <= data
            4'b1111: ram[15] <= data
         end

always @ (posedge clk or posedge reset)
    begin
    //Code for reading the data
        if (rd)
        {
        q <= {ram[15],ram[14],ram[13],ram[12],ram[11],ram[10],ram[9],ram[8],ram[7],ram[6],ram[5],ram[4],ram [3],ram[2],ram[1],ram[0]}   
        }
4

2 に答える 2

-1

16 x 8 ビット (16 x 1 バイト) を持つ

最初に RAM 幅のサイズを宣言し、次に RAM の実際の深さを宣言します。たとえば、512 個の reg 変数 (深さ) の配列が必要で、それぞれが 8 ビット (幅) の場合、次のように記述されます。

reg [7:0] ram[511:0];

したがって、コードは次のようになります。

reg [7:0] ram[15:0];
于 2014-11-05T16:38:38.043 に答える
-1

カウンターを少し大きくして、たとえば 15 ではなく 31 にします。最初の 16 クロックでは、あなたが行っているようにメモリ アドレスを書き込みます。カウンターが 31 に達したら、カウンターを 0 にリセットします。その後、プロセスを再開する必要があります。

于 2013-03-23T18:35:29.670 に答える