FPGA学习系列:16. rom控制器设计.doc

上传人:白大夫 文档编号:3251720 上传时间:2019-08-06 格式:DOC 页数:5 大小:25KB
返回 下载 相关 举报
FPGA学习系列:16. rom控制器设计.doc_第1页
第1页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《FPGA学习系列:16. rom控制器设计.doc》由会员分享,可在线阅读,更多相关《FPGA学习系列:16. rom控制器设计.doc(5页珍藏版)》请在三一文库上搜索。

1、FPGA学习系列:16. rom控制器设计设计背景:ROM是只读存储器(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失。ROM是由英文Read only Memory的首字母构成的,意为只读存储器。顾名思义,就是这样的存储器只能读,不能像RAM一样可以随时读和写。它只允许在生产出来之后有一次写的机会,数据一旦写入则不可更改。它另外一个特点是存储器掉电后里面的数据不丢失,可以存放成百上千年。此类存储器多用来存放固件,比如计算机启动的引导程

2、序,手机、MP3、MP4、数码相机等一些电子产品的相应的程序代码。设计原理:我们的设计是读ROM的数据,然后读到最后一个数据的时候,然后又从最后的地址往回读数据,来实现循环读数。首先我们先创建一个.mif文件,然后给对应的地址中写如数据,然后设计一个IP核,之后通过读ROM的地址,来读出ROM中存在的数据,具体的操作如下面的操作。 下一步,建立一个深度256,位宽为8的 .mif。然后在第一个地址右键。填写开始地址以及结束地址,我们给每一位的地址位写上和地址一样的数据,那么就是数据从0开始,步进为1,如下,然后然后完成,保存。这样我们写好我们.mif文件,然后进行下面的步骤。选择我们所选的硬件

3、描述语言,我们都是verilog HDL,然后选择我们文件生成的路径,下一步。设置我们的输出的位宽,和深度,我们的深度256,位宽8,下一步。去掉输出是否有寄存器的对勾,如果选了输出会晚一拍,因为加了一个输出寄存器。然后出现下面的界面,点击,选择我们生成的.mif文件,添加进来,然后下一步,下一步完成。设计架构图:设计代码:顶层模块0modulerom(clk,rst_n,data);1 inputclk;2 inputrst_n;34 output7:0data;56 wire7:0address;78 rom_r rom_r ( /例化ROM控制器模块9 .clk(clk),10 .rst

4、_n(rst_n),11 .address(address)12 );1314 my_rom my_rom_inst (/例化IP核模块15 .address (address ),16 .clock (clk ),17 .q (data )18 );1920endmodule设计模块0modulerom_r(clk,rst_n,address);12 inputclk;3 inputrst_n;45 outputreg7:0address;67 reg1:0state;8 always(posedgeclk ornegedgerst_n)9 if(!rst_n)10 begin11 addr

5、ess 12 state 13 end14 else15 begin16 case(state)17 0:begin18 if(address 19 begin20 address 21 end22 else23 begin24 if(address =255)/判断是否读完25 begin26 address 27 state 28 end29 30 end31 end32 1:begin33 if(address 0)/读完就跳转一状态后让地址减134 begin35 address 36 end37 else38 begin39 address 40 state 41 end42 end

6、43 default:state 44 endcase45 end46endmodule测试模块0timescale1ns/1ps12modulerom_tb();34 regclk;5 regrst_n;67 wire7:0data;89 initialbegin10 clk =1b1;11 rst_n =1b0;1213 #100.1rst_n =1b1;1415 #20000$stop;/20000NS后停止仿真1617 end1819 always#10clk =clk;/产生50M时钟2021 rom rom_dut ( /例化顶层模块22 .clk(clk),23 .rst_n(rst_n),24 .data(data)25 );26endmodule仿真图:仿真中我们可以看到和我们的设计一样,我们先从0地址读数据,当读到最后一个数后,然后返回来从最后一个地址开始读数。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1