6

iCE40HX-8K ブレークアウト ボードでブロック RAM を使用する方法を見つけようとしています。ドキュメントからわかる限り、プロジェクト IceStorm でサポートされている 512x8 構成でアクセスしたいのですが、期待どおりに動作させることができませんでした。

私の理解が正しければ、READ_MODE パラメータを 1 に設定して SB_RAM40_4K プリミティブを初期化すると、ブロックが 512x8 読み取りモードに設定され、9 ビットの読み取りアドレスが使用され、各アドレスで 8 ビットのデータが読み取られるはずです。

これが私が考えることができる最も簡単な例です。事前に初期化されたメモリを使用して SB_RAM40_4K をセットアップし、オンボード LED のピンを直接読み取ります。

hx8kboard.pcf

set_io leds[0] B5
set_io leds[1] B4
set_io leds[2] A2
set_io leds[3] A1
set_io leds[4] C5
set_io leds[5] C4
set_io leds[6] B3
set_io leds[7] C3
set_io clk J3

トップ.v

module top (
  output [7:0] leds,
  input clk
);

//reg [8:0] raddr = 8'd0;
reg [8:0] raddr = 8'd1;

SB_RAM40_4K #(
  .INIT_0(256'h00000000000000000000000000000000000000000000000000000000_44_33_22_11),
  .WRITE_MODE(1),
  .READ_MODE(1)
) ram40_4k_512x8 (
  .RDATA(leds),
  .RADDR(raddr),
  .RCLK(clk),
  .RCLKE(1'b1),
  .RE(1'b1),
  .WADDR(8'b0),
  .WCLK(1'b0),
  .WCLKE(1'b0),
  .WDATA(8'b0),
  .WE(1'b0)
);

endmodule

raddr == 0 の場合の LED 出力

           \|/             \|/
O   O   O   O   O   O   O   O 

raddr == 1 の場合の LED 出力

       \|/ \|/         \|/ \|/
O   O   O   O   O   O   O   O 

512x8 モードのアドレス 1 は、RAM からの 2 番目の 8 ビットであると思い8'h22ます8'b0010010。代わりに、8'h33またはを取得し8'b00110011ます。少し実験した後、これは 16 ビット読み取りの下位 8 ビットのようです。

どこで間違ったのかわかりません。ここで何が起こっているのかを理解する助けがあれば幸いです。ありがとう!

4

1 に答える 1