最近的EDA实训在做波形发生器 想问下写正弦波程序时怎样用quartus设置一个ROM存储那二百多个采样数据, 然后再用一个读ROM的程序大数据读出来
类似单片机C51程序从数组取里数据的操作 verilog里面好像没见有,我又不想用200多个case一个个写那些采样值太麻烦 呵呵!
就是我看别人写的这一段:
rom_sine rom_sine(
.address(Addr),
.clock(clk_d),
.q(temp1));
rom_tri roms_tri(
.address(Addr),
.clock(clk_d),
.q(temp2));
rom_pulse roms_pulse(
.address(Addr),
.clock(clk_d),
.q(temp3));
此帖出自
小平头技术问答
另外的方法,自己写一个程序,生成你说的那堆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
一周热门 更多>