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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/780802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大学 Python 程序设计实验报告:判断密码是否符合要求

目录&#xff1a; 利用 string 模块判断使用正则表达式判断 密码强度判断&#xff0c;输入一个密码&#xff0c;判断密码是否符合要求。 要求密码长度8-12位&#xff0c;密码中必须包含大写字母、小写字母和数字&#xff0c;不能含有其他符号。 如果符合要求输出"密码符合…

Dubbo 几种方式来传递和使用隐式参数

在 Dubbo 中&#xff0c;隐式参数通常指的是那些不直接作为 RPC 方法参数传递&#xff0c;但需要在 RPC 调用过程中共享或传递的信息。这些信息可能包括用户身份、请求标识、认证令牌等。Dubbo 提供了几种方式来传递和使用这些隐式参数。 以下是使用 Dubbo 隐式参数的一些常见…

马斯克旗下xAI发布Grok-1.5,相比较开源的Grok-1,各项性能大幅提升,接近GPT-4!

本文原文来自DataLearnerAI官方网站&#xff1a;马斯克旗下xAI发布Grok-1.5&#xff0c;相比较开源的Grok-1&#xff0c;各项性能大幅提升&#xff0c;接近GPT-4&#xff01; | 数据学习者官方网站(Datalearner) 继Grok-1开源之后&#xff0c;xAI宣布了Grok-1.5的内测消息&…

C#热门技术应用:跨平台、异步编程与云原生

C#热门技术应用&#xff1a;跨平台、异步编程与云原生 C#&#xff0c;作为微软主导的编程语言&#xff0c;近年来在跨平台应用开发、异步编程以及云原生应用等领域展现出了强大的生命力。这些热门技术的应用&#xff0c;使得C#成为了现代软件开发中不可或缺的一部分。 一、跨平…

手撕算法-跳跃游戏

描述 分析 如果某一个作为 起跳点 的格子可以跳跃的距离是 3&#xff0c;那么表示后面 3 个格子都可以作为 起跳点可以对每一个能作为 起跳点 的格子都尝试跳一次&#xff0c;把 能跳到最远的距离 不断更新如果可以一直跳到最后&#xff0c;就成功了 代码 class Solution {…

07-JavaScript DOM事件

1. 事件 1.1 事件概述 JavaScript 使我们有能力创建动态页面&#xff0c;而事件是可以被 JavaScript 侦测到的行为。 简单理解&#xff1a; 触发--- 响应机制。 网页中的每个元素都可以产生某些可以触发 JavaScript 的事件&#xff0c;例如&#xff0c;我们可以在用户点击某…

【漏洞潜在风险】弹框干扰类风险

弹框干扰风险定义: 游戏过程中&#xff0c;客户端经常会以文字类形式对玩家进行说明和指引&#xff0c;而对于一些更为重要的信息&#xff0c;便会用游戏中的弹框进行强调。由玩家主动触发对其他玩家造成重复弹框进而干扰到正常游戏的都可以称之为弹框干扰类风险。弹框干扰风险…

C++项目——集群聊天服务器项目(六)MySQL模块

Hello&#xff0c;大家好啊&#xff0c;最近比较忙&#xff0c;没来得及更新项目&#xff0c;实在抱歉~今天就恢复更新拉~ 在验证完网络模块与业务模块代码可以正常使用后&#xff0c;需完成的操作是与底层数据库进行交互&#xff0c;为实现各类用户查询、增删业务奠定良好的基…

【笔记】Android U RILJ 中与运营商名称SPN显示相关的日志分析

源码阅读&#xff1a;AOSPXRef 常用日志关键字 Note&#xff1a;">"下发MD&#xff0c;"<"MD上报&#xff0c;[]中的id有请求和返回的对应关系 KEYComment> OPERATOR下发MD&#xff0c;请求运营商信息< OPERATORMD上报运营商注册信息> DA…

Java--队列

无界队列 public class Task implements Runnable, Comparable<Task>{private int priority; // 优先级别public Task(int priority) {this.priority priority;}// 当前对象和其他对象作比较, 当前优先级大就返回-1, 优先级小就返回1, 值越小, 优先级越高.Overridepubl…

【群晖】白群晖如何公网访问

【群晖】白群晖如何公网访问 ——> 点击查看原文 在使用默认配置搭建好的群晖NAS后&#xff0c;我们可以通过内网访问所有的服务。但是&#xff0c;当我们出差或者不在家的时候也想要使用应该怎么办呢&#xff1f; 目前白群提供了两种比较快捷的方式&#xff0c;一种是直接注…

【Python系列】合并配置文件的最佳实践

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

python实现两个Excel表格数据对比、补充、交叉验证

业务背景 业务中需要用到类似企查查一类的数据平台进行数据导出&#xff0c;但企查查数据不一定精准&#xff0c;所以想采用另一个官方数据平台进行数据对比核验&#xff0c;企查查数据缺少的则补充&#xff0c;数据一致的保留企查查数据&#xff0c;不一致的进行颜色标注。 …

脱壳之常用的加固样本特征

梆梆加固样本特征 清单文件入口 android:name“com.SecShell.SecShell.ApplicationWrapper” 特征 免费版 meta-data meta-data总结 assets/secData0.jar lib/armeabi/libSecShell.so lib/armeabi/libSecShell-x86.so 梆梆企业版 assets/classes0.jar lib/armeabi-v7a/libD…

第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片

人工智能时代&#xff0c;最需要学习的编程语言是&#xff1a;python 。笔者是个 python 小白&#xff0c;昨天花了两个小时&#xff0c;第一次成功运行起来 python 项目 。 项目是 powerpoint-extractor &#xff0c;可以将 ppt 文件中的图片提取出来&#xff0c;并输出到固定…

Date的Invalid Date

使用Date()构造日期对象&#xff0c;如果传入非日期格式或者错误的日期格式的字符串&#xff0c;仍然能构造出Date对象。 var date new Date("dream"); console.log(date:, date); //Invalid Date console.log(date:, typeof date); //“object” console.log(da…

js 拼接HTML时 onclick方法和传参报错[onject Object] 和 unexpected end of input`

Vue js拼接onclick事件 1.onclick 方法函数找不到2.方法中传参2.1 int 类型传参&#xff08;直接传参&#xff09;2.2 字符串类型&#xff08;需要加引号&#xff09;2.3 对象&#xff08;对象是不能直接拼接的。拼接的必须是字符串。因此需要将对象转成字符串。&#xff09; 1…

全量知识系统 之“程序”详细设计 之 “絮”---开端“元素周期表”表示的一个“打地鼠”游戏

全量知识系统 之“程序”详细设计 概述-概要和纪要 序 絮&#xff08;一个极简的开场白--“全量知识系统”自我介绍&#xff09; 将整个“人生”的三个阶段 比作“幼稚园”三班 &#xff1a; 第一步【想】-- “感性”思维游戏&#xff1a;打地鼠 。学前教育-新生期&#x…

js的Number对象和全局对象

文章目录 1. Number 对象1.1. 含义1.2. 属性1.3. 方法 2. 全局对象2.1. 含义2.2. 特点2.3. 属性2.4. 方法 3. 函数的本质 1. Number 对象 1.1. 含义 Number 对象是原始数值的包装对象。 const num 2.334; const obj new Number(num); console.log(obj); //Number console.…

Windows安装tomcat,以服务的方式管理,如何设置虚拟内存

之前工作中&#xff0c;部署tomcat都是使用Linux服务器&#xff0c;最近遇到个客户&#xff0c;提供的服务器是Windows server&#xff0c;并且需要通过服务的方式管理tomcat&#xff1b;以自己多年的码农经验&#xff0c;感觉应该没有问题&#xff0c;结果啪啪打脸了&#xf…