设计背景:
rom是只读存储器(read-only memory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失。
rom是由英文read only memory的首字母构成的,意为只读存储器。顾名思义,就是这样的存储器只能读,不能像ram一样可以随时读和写。它只允许在生产出来之后有一次写的机会,数据一旦写入则不可更改。它另外一个特点是存储器掉电后里面的数据不丢失,可以存放成百上千年。此类存储器多用来存放固件,比如计算机启动的引导程序,手机、mp3、mp4、数码相机等一些电子产品的相应的程序代码。
设计原理:
我们的设计是读rom的数据,然后读到最后一个数据的时候,然后又从最后的地址往回读数据,来实现循环读数。
首先我们先创建一个.mif文件,然后给对应的地址中写如数据,然后设计一个ip核,之后通过读rom的地址,来读出rom中存在的数据,具体的操作如下面的操作。
下一步,建立一个深度256,位宽为8的 .mif。
然后在第一个地址右键。
填写开始地址以及结束地址,我们给每一位的地址位写上和地址一样的数据,那么就是数据从0开始,步进为1,如下,然后然后完成,保存。
这样我们写好我们.mif文件,然后进行下面的步骤。
选择我们所选的硬件描述语言,我们都是verilog hdl,然后选择我们文件生成的路径,下一步。
设置我们的输出的位宽,和深度,我们的深度256,位宽8,下一步。
去掉输出是否有寄存器的对勾,如果选了输出会晚一拍,因为加了一个输出寄存器。
然后出现下面的界面,点击,选择我们生成的.mif文件,添加进来,然后下一步,下一步完成。
设计架构图:
设计代码:
顶层模块
0modulerom(clk,rst_n,data);
1 inputclk;
2 inputrst_n;
3
4 output[7:0]data;
5
6 wire[7:0]address;
7
8 rom_r rom_r ( //例化rom控制器模块
9 .clk(clk),
10 .rst_n(rst_n),
11 .address(address)
12 );
13
14 my_rom my_rom_inst (//例化ip核模块
15 .address (address ),
16 .clock (clk ),
17 .q (data )
18 );
19
20endmodule
设计模块
0modulerom_r(clk,rst_n,address);
1
2 inputclk;
3 inputrst_n;
4
5 outputreg[7:0]address;
6
7 reg[1:0]state;
8 always@(posedgeclk ornegedgerst_n)
9 if(!rst_n)
10 begin
11 address <=1'b0;
12 state <=1'b0;
13 end
14 else
15 begin
16 case(state)
17 0:begin
18 if(address <255)//判断地址
19 begin
20 address <=address +1'b1;//地址激增
21 end
22 else
23 begin
24 if(address ==255)//判断是否读完
25 begin
26 address <=address -1'b1;
27 state 0)//读完就跳转一状态后让地址减1
34 begin
35 address <=address -1'b1;
36 end
37 else
38 begin
39 address <=address +1'b1;
40 state <=0;
41 end
42 end
43 default:state <=0;
44 endcase
45 end
46endmodule
测试模块
0`timescale1ns/1ps
1
2modulerom_tb();
3
4 regclk;
5 regrst_n;
6
7 wire[7:0]data;
8
9 initialbegin
10 clk =1'b1;
11 rst_n =1'b0;
12
13 #100.1rst_n =1'b1;
14
15 #20000$stop;//20000ns后停止仿真
16
17 end
18
19 always#10clk =~clk;//产生50m时钟
20
21 rom rom_dut ( //例化顶层模块
22 .clk(clk),
23 .rst_n(rst_n),
24 .data(data)
25 );
26endmodule
仿真图:
仿真中我们可以看到和我们的设计一样,我们先从0地址读数据,当读到最后一个数后,然后返回来从最后一个地址开始读数。
5G创新应用达百项以上,已覆盖15大领域
中国电信IPv6的改造进展良好骨干网全面支持并开启IPv6
2010年内存市场预测:价格走高 产能不足
开关电源与线性电源有哪些区别?
JEETW1s蓝牙耳机评测 各方面都无可挑剔
FPGA学习系列:16. rom控制器设计
解析半导体蚀刻过程中的光学监测
水处理行业电能质量监测与治理系统解决方案
华为p50e配置参数详情 华为p50e什么时候上市
揭秘FACEBOOK未来的机器学习平台
第38届香港秋季电子产品展览中斯威普科技新品亮相
三星S8mini什么时候出?三星S8mini最新消息:三星S8mini较三星S8性能提升,2K屏+骁龙835+全面屏售价良心
ADXL345和MPU6050的区别
无人机能改变整个保险业吗
!销售/回收MS2711A MS2711A手持频谱仪MS27
基于USB总线的嵌入式CCD图像数据采集系统的设计
空气产品公司将为三星电子西安第二座3D V-NAND芯片厂供气
运营商加速推进5G普及_中国联通部分地区月费39.9元
有了逆天的魅族Flyme6系统:魅族Pro6s和Por6Plus哪个更值得买?
S32K通用demo板上接口与以太网通用节点解决方案