$ readmem是否可以在Verilog中合成?

问题描述 投票:8回答:1

我正在尝试在FPGA上实现微控制器,我需要为其程序提供ROM。如果使用$ readmemb,是否可以将其正确合成到ROM?如果没有,执行此操作的标准方法是什么?

verilog synthesis
1个回答
19
投票

$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和模拟器之间的区别行为,Xilinx®建议您在这些系统中使用索引参数任务。请参阅以下编码例如。

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

© www.soinside.com 2019 - 2024. All rights reserved.