背景
この LUT には、幅 32、深さ 256 が必要です。
そのため、IP コアによって作成された LUT があります。今度は、自分でインスタンス化して sim で動作させたいと思います (これは、すべてのパラメーターを自分で学習するのにも役立ちます)。FIFO に対してこれを何度も実行しましたが、これまで LUT を作成したことがないので、実行した内容が正しいかどうかを確認してください。値の LUT を作成し、それらを読み戻せるようにしたいだけです。これにはRAMのブロックを使用しました。
次の2つの異なるコンピューターで試しました:
QuestaSim-64 10.2c_5
ModelSim SE-64 10.1b
問題
だから私はコードをコンパイルすることができます。開こうとすると:
vsim work.top
IDE が開き、次の場所でフリーズします。
# Loading unisim.rb36_internal_vhdl(rb36_internal_vhdl_v)#1
私が削除した場合:
INIT_FILE => "lut.coe",
その後、正常にロードされます。だから私はその行がそれをクラッシュさせることを知っています。
LUT:
私は LUT を持っていますが、これは正しいように見えますか? .coe ファイルを使用して LUT をインスタンス化する他の方法はありますか?
lut : RAMB36E1
generic map(
INIT_FILE => "lut.coe",
READ_WIDTH_A => 36
)
port map
(
addrardaddr => addr_lut,
addrbwraddr => X"0000",
cascadeina => '0',
cascadeinb => '0',
clkardclk => clk_i,
clkbwrclk => clk_i,
diadi => X"00000000",
dibdi => X"00000000",
dipadip => X"0",
dipbdip => X"0",
doado => data_lut,
enarden => '1',
enbwren => '0',
injectdbiterr => '0',
injectsbiterr => '0' ,
regceb => '0',
regcearegce => '1',
rstramarstram => rst_i,
rstramb => rst_i,
rstregarstreg => rst_i ,
rstregb => rst_i,
wea => X"0",
webwe => X"00"
);
上記を 18kb RAM に交換しようとしましたが、同じエラーが発生しました:
# Loading unisim.rb18_internal_vhdl(rb18_internal_vhdl_v)#2
LUT:
lut : RAMB18E1 -- Simple Duel Port mode, 512 deep
generic map(
INIT_FILE => "lut.coe",
RAM_MODE => "SDP"
)
port map
(
addrardaddr => addr_lut,
addrbwraddr => "00000000000000",
clkardclk => clk_i,
clkbwrclk => clk_i,
diadi => X"0000",
dibdi => X"0000",
dipadip => "00",
dipbdip => "00",
doado => data_lut_b,
dobdo => data_lut_a,
enarden => '1',
enbwren => '0',
regceb => '0',
regcearegce => '1',
rstramarstram => rst_i,
rstramb => rst_i,
rstregarstreg => rst_i ,
rstregb => rst_i,
wea => "00",
webwe => X"0"
);