8
我正試圖在FPGA上實現一個微控制器,並且我需要爲它的程序提供一個ROM。如果我使用$ readmemb,是否會正確合成到ROM?如果不是,那麼標準的做法是什麼?
我正試圖在FPGA上實現一個微控制器,並且我需要爲它的程序提供一個ROM。如果我使用$ readmemb,是否會正確合成到ROM?如果不是,那麼標準的做法是什麼?
我會修改喬治的答案,說它取決於綜合工具$readmemb
是否可綜合。
Altera的Recommended HDL Coding Styles指南包括例如10-31(10-38頁),這表明從$readmemb
推斷一個ROM(下面再現):
module dual_port_rom (
input [(addr_width-1):0] addr_a, addr_b,
input clk,
output reg [(data_width-1):0] q_a, q_b
);
parameter data_width = 8;
parameter addr_width = 8;
reg [data_width-1:0] rom[2**addr_width-1:0];
initial // Read the memory contents in the file
// dual_port_rom_init.txt.
begin
$readmemb("dual_port_rom_init.txt", rom);
end
always @ (posedge clk)
begin
q_a <= rom[addr_a];
q_b <= rom[addr_b];
end
endmodule
同樣,Xilinx公司的XST User Guide指出:
$readmemb
和$readmemh
系統 任務可用於初始化塊 回憶。欲瞭解更多信息,請參見:初始化RAM從外部文件 代碼示例
使用
$readmemb
爲 二進制和$readmemh
十六進制 表示。爲避免XST與模擬器 行爲之間可能的差異,賽靈思建議您使用 這些系統中的索引參數 任務。請參閱以下編碼 示例。
$readmemb("rams_20c.data",ram, 0, 7);
mrkj的答案是比我好得多。我已經刪除它。 – George 2011-02-15 11:31:50