$readmem是否可以在Verilog中合成?
我正在尝试在FPGA上实现一个微控制器,我需要为它的程序提供一个ROM。如果我使用$readmemb,它会正确地合成为ROM吗?如果不是,标准方法是什么?这取决于合成工具$readmem是否可以在Verilog中合成?,verilog,synthesis,Verilog,Synthesis,我正在尝试在FPGA上实现一个微控制器,我需要为它的程序提供一个ROM。如果我使用$readmemb,它会正确地合成为ROM吗?如果不是,标准方法是什么?这取决于合成工具$readmemb是否可合成 Altera的指南包括示例10-31(第10-38页),该示例演示了从$readmemb推断出的ROM(复制如下): 模块双端口只读存储器( 输入[(地址宽度-1):0]地址a,地址b, 输入时钟, 输出寄存器[(数据宽度-1):0]q\u a,q\u b ); 参数数据_宽度=8; 参数addr_
$readmemb
是否可合成
Altera的指南包括示例10-31(第10-38页),该示例演示了从$readmemb
推断出的ROM(复制如下):
模块双端口只读存储器(
输入[(地址宽度-1):0]地址a,地址b,
输入时钟,
输出寄存器[(数据宽度-1):0]q\u a,q\u b
);
参数数据_宽度=8;
参数addr_width=8;
reg[data_width-1:0]rom[2**addr_width-1:0];
初始//读取文件中的内存内容
//双端口rom初始化.txt。
开始
$readmemb(“双端口rom初始化.txt”,rom);
结束
始终@(posedge clk)
开始
q_a
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