8

我正在尝试在 FPGA 上实现微控制器,我需要为其程序提供 ROM。如果我使用 $readmemb,它会被正确合成到 ROM 中吗?如果不是,那么执行此操作的标准方法是什么?

4

1 回答 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 回答