0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

三种种创建ROM的方法解析

454398 来源:csdn 作者:ferast 2020-11-23 14:13 次阅读

ROM是只读型存储器,写入数据之后就不能在对数据进行更改。下面提供3种创建ROM的方法:
一、自己动手通过readmemh或readmemb函数来将自己写的文件与ROM进行关联;有几点需要注意的地方:寄存器rom的大小(位宽和深度)如下面的代码中位宽为8,深度为1024

// An highlighted block
module myrom(
	clk,
	addr,
	q
);
input clk;
input [9:0] addr;
output reg[9:0] q;
reg [7:0] rom [1023:0];
initial begin 
	$readmemh("./xxx.txt",rom,0,1023);
	//读16进制的数据
	//格式$readmemh("file_name",memory_name[,start_addr[,finish_addr]]);
	//file_name:文件名;memory_name:ROM名;start_addr:开始地址;finish_addr:结束地址
	//[]的内容为可选内容,
	//readmemb 读2进制的数据
end
always(posedge clk)
	q<=rom[addr];
endmodule

二、第二中方法是通过ip核创建rom。选择菜单栏中的Tools下的ip核配置工具,搜索rom,选着Verilog语言,并命名文件。点击下一步

可以看到,在配置工具中依然需要设置位宽和深度。

在mem init中的文件名,这里需要注意的是文件必须是.mif和.hex文件。

三、第三中方法是直接生成代码,在代码段上进行修改。

生成的代码段如下:这里需要修改的是两个参数DATA_WIDTH、ADDR_WIDTH。然后将对应的文件名修改了就可以了。

// Quartus II Verilog Template
// Single Port ROM

module single_port_rom
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=8)
(
	input [(ADDR_WIDTH-1):0] addr,
	input clk, 
	output reg [(DATA_WIDTH-1):0] q
);

	// Declare the ROM variable
	reg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0];

	// Initialize the ROM with $readmemb.  Put the memory contents
	// in the file single_port_rom_init.txt.  Without this file,
	// this design will not compile.

	// See Verilog LRM 1364-2001 Section 17.2.8 for details on the
	// format of this file, or see the "Using $readmemb and $readmemh"
	// template later in this section.

	initial
	begin
		$readmemb("single_port_rom_init.txt", rom);
	end

	always @ (posedge clk)
	begin
		q <= rom[addr];
	end

endmodule

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161984
  • ROM
    ROM
    +关注

    关注

    4

    文章

    524

    浏览量

    84812
收藏 人收藏

    评论

    相关推荐

    三种常见的光刻技术方法

    三种常见的光刻技术方法根据暴光方法的不同,可以划分为接触式光刻,接近式光刻和投影式光刻三种光刻技术。 ◆投影式暴光是利用透镜或反射镜将掩膜版上的图形投影到衬底上的暴光
    发表于 01-12 10:56

    数字信号的三种纠错方法

    数字信号的三种纠错方法
    发表于 08-20 12:49

    labview查看本机ip的三种方法

    做TCP通讯的时候,有时候需要知道自己的IP虽然知道自己电脑ip可以不用这么麻烦,但是有时候就想用自己所学来获得自己所需,职业病 咳咳这里给出得到本地IP的三种方法。源程序,在附件里。
    发表于 11-27 17:17

    pcb板的三种敷铜方法解析

    中,喜欢这么整。处理无线信号的时候,地线内部用第一加上网格式覆铜。处理电源信号的时候,选择第二加全覆铜。处理电源层的时候,选第三种加全覆铜。处理大功率电源地线的时候,我会选择在铜箔层第二加全覆铜
    发表于 01-21 16:28

    Altium Designer的三种画元器件封装方法

    下面跟大家分享Altium Designer画元器件封装的三种方法。如有错误,望大家指正。
    发表于 07-22 06:47

    启动Redis的三种方法

    Redis笔记(1)——安装、卸载、三种方法启动Redis,Redis命令使用(干货十足),Redis两种方法设置密码,时间复杂度(更完善哦~)
    发表于 06-08 16:09

    三种调整处理器系统功耗的方法分享

    Teledyne e2v为系统设计师提供的定制方案处理器功耗的背景知识三种调整处理器系统功耗的方法
    发表于 01-01 06:04

    启动Spring Boot项目应用的三种方法

    基础。我们知道了Spring Boot是个什么了,那么我们又该如何启动Spring Boot应用呢?这里小编给大家推荐常用的三种方法。分别是IDEA编辑器启动、命令启动、java命令jar文件启动。下面
    发表于 01-14 17:33

    一灯双控的三种接线方法有哪些利弊

    一灯双控的三种接线方法有哪些利弊
    发表于 03-11 07:10

    关于TFT-LCD的三种广视角技术解析,不看肯定后悔

    关于TFT-LCD的三种广视角技术解析,不看肯定后悔
    发表于 06-04 06:09

    LwIP协议栈开发嵌入式网络的三种方法有何关系

    LwIP协议栈开发嵌入式网络的三种方法分析 轻量级的TCP/IP协议栈LwIP,提供了三种应用程序设计方法,且很容易被移植到多任务的操作系统中。本文结合μC/OS-II这一实时操作系统,以建立TCP
    发表于 08-05 07:55

    STM32的三种boot模式介绍

    浅识STM32的三种boot模式文章目录浅识STM32的三种boot模式任务摘要一、认识boot1.三种BOOT模式介绍2.开发BOOT模式选择3.STM32三种启动模式4.
    发表于 12-10 07:46

    如何使用三种方式进行文件的创建

    新建文件在GUI的桌面环境中,创建文件是很简单的,例如Windows平台中,大多数情况下只需要点击右键,就可以新建文本文档等各类文件。在终端中创建文件,大体有这么三种方式,使用touch命令进行
    发表于 12-15 08:42

    STM32的三种Boot模式的差异

    如有错误,欢迎指正,谢谢!目录一、STM32的三种Boot模式的差异二、创建基于MDK创建纯汇编语言的STM32工程模板、汇编基本语法的学习四、编程练习一、STM32的
    发表于 12-20 07:54

    记录一下MCU存在ROM中的bootloader的三种方法

    网上查到的直接进入TIVA系列MCU存在ROM中的bootloader的三种方法,记录一下。使用 TM4C ROM bootloader 的種方式:Flash Empty當 MCU
    发表于 02-14 06:45