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 ビットのようです。
どこで間違ったのかわかりません。ここで何が起こっているのかを理解する助けがあれば幸いです。ありがとう!