当前位置: 首页 > news >正文

ROM-IP

1.原理

通过添加数据文件,使ROM看起来不是易失性存储器,

产生256个数据,每个数据的位宽是8

如果前面为x,后面就是x+256-1

2.单端口ROM配置

FPGA内部没有非易失性存储器。调用的ROM和RAM都是用RAM来生成的

3.双端口ROM配置

使用第一种单时钟

默认不选择使能信号

添加了寄存器,输入时钟可以选择更高的频率

对时钟的使能信号,默认不勾选

是否给寄存器添加清0信号。默认不勾选

4.实验代码

K1按下,给ROM写入一个随机的地址,读取这个地址的数据。K2同理。将读取数据和mif文件对比。

4.1 rom_ctrl.v

        

module rom_ctrl#(parameter CNT_MAX=24'd9_999_999
)
(input wire 			sys_clk		,input wire 			sys_rst_n	,input wire 			key1		,input wire 			key2		,output reg[7:0]	    addr		
);reg [23:0]cnt_200ms;   //10,000,000个时钟周期,0-9_999_999
reg key1_en		;
reg key2_en		;always@(sys_clk or negedge sys_rst_n)if(sys_rst_n==1'b0)cnt_200ms<=24'd0;else if((cnt_200ms==CNT_MAX)||(key1_en==1'b1)||(key2_en==1'b1))cnt_200ms<=24'd0;elsecnt_200ms<=cnt_200ms+1'b1;always@(sys_clk or negedge sys_rst_n)if(sys_rst_n==1'b0)key1_en<=1'b0;else if(key2==1'b1)key1_en<=1'b0;else if(key1==1'b1)key1_en<=~key1_en;else key1_en<=key1_en;always@(sys_clk or negedge sys_rst_n)if(sys_rst_n==1'b0)key2_en<=1'b0;else if(key2==1'b1)key2_en<=~key2_en;elsekey2_en<=key2_en;always@(sys_clk or negedge sys_rst_n)if(sys_rst_n==1'b0)addr<=8'd0;else if((cnt_200ms==CNT_MAX)&&(addr==8'd255))addr<=8'd0;else if(key1_en==1'b1)addr<=8'd99;else if(key2_en==1'b1)addr<=8'd199;else if(cnt_200ms==CNT_MAX)addr<=addr+1'b1;elseaddr<=addr;endmodule

4.2 tb_rom_ctrl.v

`timescale 1ns/1ns
module tb_rom_ctrl();reg sys_clk;
reg sys_rst_n;
reg key1;
reg key2;wire[7:0] addr;initial beginsys_clk=1'b1;sys_rst_n<=1'b0;key1<=1'b0;key2<=1'b0#20sys_rst_n<=1'b1;#7000     //让数码管完整显示0-255地址,因为一个地址200ns,250*200=500_000//key1key1<=1'b1;#20key1<=1'b0;#20000key1<=1'b1;#20key1<=1'b0;//key2key2<=1'b1;#20key2<=1'b0;#20000key2<=1'b1;#20key2<=1'b0;#600000endalways #10 sys_clk=~sys_clk;rom_ctrl#(CNT_MAX=24'd99
)
rom_ctrl_inst
(.sys_clk	(sys_clk	)	,.sys_rst_n	(sys_rst_n	),.key1		(key1		),.key2		(key2		),.addr		(addr		)
);endmodule

4.3

4.3 rom.v

module rom(input wire 			sys_clk     ,input wire 			sys_rst_n	,input wire 			key1		,input wire 			key2		,output reg 			ds			,output reg 			oe			,output reg 			shcp		,output reg 			stcp		
);wire key1_flag;
wire key2_flag;
wire [7:0] addr;
wire [7:0] data;
wire  [5:0]point				;
wire  sign	            ;
wire  seg_en    ;key_filter
#(.CNT_MAX(20'd999_999)
)
key_filter_inst
(.sys_clk	(sys_clk	)		,.sys_rst_n	(sys_rst_n	)	,.key_in		(key1	)	,.key_flag	(key1_flag	)	
);key_filter
#(.CNT_MAX(20'd999_999)
)
key_filter_inst
(.sys_clk	(sys_clk	)		,.sys_rst_n	(sys_rst_n	)	,.key_in		(key2	)	,.key_flag	(key2_flag	)	
);rom_ctrl#(.CNT_MAX(24'd9_999_999)
)
rom_ctrl_inst
(.sys_clk	(sys_clk	)	,.sys_rst_n	(sys_rst_n	),.key1		(key1_flag		),.key2		(key2_flag		),.addr		(addr		)
);rom_8x256 rom_8x256_inst
(.address (addr),.clock   (sys_clk),.q		  (data)
);seg_595_dynamic seg_595_dynamic_inst(.sys_clk	(sys_clk	)		,.sys_rst_n	(sys_rst_n	)	,.data		({12'b0,data}	,   .point		(6'b000_000		)	,.sign		(1'b0			)	,.seg_en		(1'b1			)	,.ds			(ds			)	,.oe			(oe			)	,.shcp		(shcp		)	,.stcp		(stcp		)
);endmodule

4.4 tb_rom.v

`timescale 1ns/1ns
module tb_rom();reg sys_clk     ;
reg sys_rst_n	;
reg key1		;
reg key2		;wire ds			;
wire oe			;
wire shcp		;
wire stcp		;initial beginsys_clk=1'b1;sys_rst_n<=1'b0;key1<=1'b1;key2<=1'b1;#20sys_rst_n<=1'b1;#7000     //让数码管完整显示0-255地址,因为一个地址200ns,250*200=500_000
//key1key1<=1'b0;#20key1<=1'b1;#20key1<=1'b0;#20key1<=1'b1;#20key1<=1'b0;#200key1<=1'b1;#20key1<=1'b0;#20key1<=1'b1;#20key1<=1'b0;#20key1<=1'b1;
//key2#2000key2<=1'b0;#20key2<=1'b1;#20key2<=1'b0;#20key2<=1'b1;#20key2<=1'b0;#200key2<=1'b1;#20key2<=1'b0;#20key2<=1'b1;#20key2<=1'b0;#20key2<=1'b1;
//key2#2000key2<=1'b0;#20key2<=1'b1;#20key2<=1'b0;#20key2<=1'b1;#20key2<=1'b0;#200key2<=1'b1;#20key2<=1'b0;#20key2<=1'b1;#20key2<=1'b0;#20key2<=1'b1;endalways #10 sys_clk=~sys_clk;rom rom_inst(.sys_clk    (sys_clk    ),.sys_rst_n	(sys_rst_n	),.key1		(key1		),.key2		(key2		),.ds			(ds			),.oe			(oe			),.shcp		(shcp		),.stcp		(stcp		)
);endmodule

相关文章:

  • Day48:WEB攻防-PHP应用文件上传中间件CVE解析第三方编辑器已知CMS漏洞
  • 一些常见的Docker问题和答案
  • CUDA学习笔记08: 原子规约/向量求和
  • MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误
  • 【idea快捷键】idea开发java过程中常用的快捷键
  • jupyter notebook导出含中文的pdf(LaTex安装和Pandoc、MiKTex安装)
  • 【分布式】——降级熔断限流
  • 3月25日,每日信息差
  • 【python】Jupyter Notebook 修改默认路径
  • 界面控件DevExpress WinForms/WPF v23.2 - 电子表格支持表单控件
  • DHCP snooping、DHCP安全及威胁防范
  • 力扣刷题31-33(力扣 0024/0070/0053)
  • Linux kernel高频技术面试题一
  • 解决错误LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to
  • 云原生周刊:Kubernetes v1.30 一瞥 | 2024.3.25
  • .pyc 想到的一些问题
  • 「面试题」如何实现一个圣杯布局?
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • express + mock 让前后台并行开发
  • express.js的介绍及使用
  • JSONP原理
  • k8s 面向应用开发者的基础命令
  • Kibana配置logstash,报表一体化
  • Next.js之基础概念(二)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • uva 10370 Above Average
  • Web Storage相关
  • 从重复到重用
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端面试题总结
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 小程序01:wepy框架整合iview webapp UI
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • #git 撤消对文件的更改
  • #宝哥教你#查看jquery绑定的事件函数
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (2022 CVPR) Unbiased Teacher v2
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (蓝桥杯每日一题)love
  • (论文阅读30/100)Convolutional Pose Machines
  • (论文阅读40-45)图像描述1
  • (转)jdk与jre的区别
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net操作Excel出错解决
  • .NET面试题(二)
  • @angular/cli项目构建--Dynamic.Form
  • @test注解_Spring 自定义注解你了解过吗?