我正在尝试在 FPGA 上实现微控制器,我需要为其程序提供 ROM。如果我使用 $readmemb,它会被正确合成到 ROM 中吗?如果不是,那么执行此操作的标准方法是什么?
问问题
14287 次
1 回答
18
是否$readmemb
可合成取决于合成工具。
Altera 的推荐 HDL 编码风格指南包括示例 10-31(第 10-38 页),该示例演示了一个从中推断出的 ROM $readmemb
(转载如下):
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 用户指南指出:
和系统任务
$readmemb
可$readmemh
用于初始化块存储器。有关更多信息,请参阅:从外部文件编码示例初始化 RAM
用于
$readmemb
二进制和$readmemh
十六进制表示。为避免 XST 和仿真器行为之间可能存在的差异,Xilinx® 建议您在这些系统任务中使用索引参数。请参阅以下编码示例。
$readmemb("rams_20c.data",ram, 0, 7);
于 2010-12-22T17:05:06.493 回答