7647|3

265

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

用quartus设置ROM的问题 [复制链接]

最近的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));
此帖出自FPGA/CPLD论坛

最新回复

楼上的回复好用不  如果好用,就真的谢谢啦    详情 回复 发表于 2010-9-14 10:46
点赞 关注
 

回复
举报

40

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
简单的方法,用现成的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
此帖出自FPGA/CPLD论坛
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
DING!!!!!!!!!!!!!!!!!!!!!!!!!!
此帖出自FPGA/CPLD论坛
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(初级)

4
 

楼上的回复好用不

 如果好用,就真的谢谢啦

 

此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表