Lattice HX8K FPGA için kod sentezlemek için Yosys > NextPnr > IcePack
açık kaynaklı araç zincirini kullanıyorum. İşte 1Kb RAM'in genel bir sürümü (bir VGA modülü için Video RAM olarak kullanıyorum):
modül text_ram # (
parametre A = 10,
parametre D = 8
) (
giriş clk,
girdi biz,
giriş [A-1: 0] adres,
giriş [D-1: 0] din,
çıkış reg [D-1: 0] dout
);
reg [D-1: 0] vram [0: (1<<A) -1]; // 2 ^ D bitlik bir bellek alanı
ilk
$ readmemh ("lib / video.hex", vram, 0, 1024);
her zaman @ (posedge clk) başla
eğer (biz) vram [addr] < = din;
dout < = vram [addr];
son
son modül
Kaynakları icebox_stat
ile analiz ettiğimde (sahip olduğum diğer tüm mantığın yanı sıra; üzgünüm, ancak tek bir bileşenin istatistiklerini nasıl izole edeceğimi bilmiyorum), rapor:
DFF'ler: 21
LUT sayısı: 204
TAŞIMA SAYISI: 26
BRAM'lar: 3
IOB'ler: 4
PLL'ler: 0
GLB sayısı: 3
Şimdi, bu basit değişiklikle (verilen, dout
'u farklı kılar, ancak amacım için uygun):
her zaman @ (posedge clk)
eğer (biz) vram [addr] < = din;
her zaman @(*)
dout < = vram [addr];
Raporlar:
DFF'ler: 21
LUT sayısı: 151
TAŞIMA SAYISI: 26
BRAM'lar: 0
IOB'ler: 4
PLL'ler: 0
GLB sayısı: 1
Sadece 53 daha az LUT değil, aynı zamanda gerçekten beni şaşırtan şey BRAM kullanımının gitmiş gibi görünmesi! Lütfen birisi bana nedenini açıklayabilir mi? Ayrıca, Yosys ve NextPnr'ın temel kararlarını anladığımdan emin olmak için bu tür vakaları nasıl inceleyebilirim ?