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