|
发表于 2009-12-28 17:23:40
|
显示全部楼层
简单的方法,用现成的ROM Core,主流的厂商都会支持,但是坏处是初始化内容的方法各不相同;
另外的方法,自己写一个程序,生成你说的那堆case语句,很简单的,随便一个语言都可以做到,
只要写得得当,一般的综合工具都会发现是ROM并且用FPGA里面的RAM资源来综合它。
其实,更简单的办法是,因为FPGA里面没有真正的ROM,直接写个RAM,加上这样的初始化语句即可:
reg [7:0] mem [0:31];
initial begin
$readmemh("ram.txt", mem);
end
然后ram.txt里面写十六进制的内容,空格/换行分开。
注意,你mem变量有多少个位置,你的ram.txt里面就得有同样多的数据,否则初始化会不成功。
给个完整的例子,这里综合出的是RAM,你可以去掉写的部分,然后就是ROM了:
module ram_with_init(
output reg [7:0] q,
input [7:0] d,
input [2:0] write_address, read_address,
input we, clk
);
reg [7:0] mem [0:7];
initial begin
$readmemh("ram.txt", mem);
end
always @ (posedge clk) begin
if (we)
mem[write_address] <= d;
q <= mem[read_address];
end
endmodule |
|