Verilog中的$readmem可综合吗?

8

我正在尝试在FPGA上实现微控制器,并且我需要为其程序提供ROM。如果我使用$readmemb,它是否会被正确地合成为ROM?如果不是,那么标准的做法是什么?

1个回答

18

是否可以合成$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用户指南指出:

$readmemb$readmemh 系统任务可用于初始化块 存储器。有关更多信息,请参见:

从外部文件初始化RAM 编码示例

使用 $readmemb 用于二进制和 $readmemh 用于十六进制 表示。为避免XST与模拟器行为之间的可能差异, Xilinx® 建议您在这些系统中使用索引参数 任务。请参见以下编码 示例。

$readmemb("rams_20c.data",ram, 0, 7);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接