在通过编写Verilog代码实现ram功能时,需要自己先计算寄存器的位数和深度再编写代码。

而如果需要在编写的ram中预置值的话,就需要使用Verilog语言编写程序读写文件,来将相应的数据赋给寄存器。

这里给出Verilog实现ram的代码:

module dpram(
rclk,
raddr,
dout, wclk,
we,
waddr,
din
); parameter aw = ; //address widtth
parameter dw = ; //data address input rclk; //read clock
input [aw-:] raddr; //read address
output [dw-:] dout; //data output input wclk; //write clock
input we; //write enable
input [aw-:] waddr; //write address
input [dw-:] din; //data input reg [dw-:] mem[(<<aw)-:]; //block-ram
reg [aw-:] ra; //register read address always @(posedge rclk)
begin
ra <= # raddr;
end assign dout = mem[ra]; always @(posedge wclk)
begin
if(we)
mem[waddr] <= # din;
end //读取mem文件存取程序中的mem寄存器
initial $readmemh("bmp_64K.mem",mem); endmodule

下面的程序定义了ram中寄存器的位数和深度,决定了ram的大小:

reg [dw-:] mem[(<<aw)-:];    //block-ram

整段程序不是很复杂,其他部分主要是用于实现ram的读写控制功能,这里不做赘述。

Verilog实现读写文件功能的部分代码如下:

//读取mem文件存取程序中的mem寄存器
initial $readmemh("bmp_64K.mem",mem);

这段程序的功能是从文件名是“bmp_64K.mem”的文件中读取其中的数据并置入前面定义的mem寄存器,即将数据置入ram中。

$readmemh("file_name.xxx",data)

就是将file_name.xxx中的数据读入到data数组中。

使用格式有6种:

) $readmemb("<数据文件名>",<存贮器名>);
) $readmemb("<数据文件名>",<存贮器名>,<起始地址>);
) $readmemb("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>);
) $readmemh("<数据文件名>",<存贮器名>);
) $readmemh("<数据文件名>",<存贮器名>,<起始地址>);
) $readmemh("<数据文件名>",<存贮器名>,<起始地址>,<结束地址>);

$readmemb要求数据格式必须是二进制形式,$readmemh则要求数据格式必须是16进制格式。

下面一些用法格式:(摘自https://wenku.baidu.com/view/81075c1f964bcf84b9d57b57.html)

1,打开文件

integer file_id;
file_id = fopen("file_path/file_name");

2,写入文件

//$fmonitor只要有变化就一直记录
$fmonitor(file_id, "%format_char", parameter);
eg:$fmonitor(file_id, "%m: %t in1=%d o1=%h", $time, in1, o1);
//$fwrite需要触发条件才记录
$fwrite(file_id, "%format_char", parameter);
//$fdisplay需要触发条件才记录
$fdisplay(file_id, "%format_char", parameter);
$fstrobe();

3,读取文件

integer file_id;
file_id = $fread("file_path/file_name", "r");

4,关闭文件

$fclose(fjile_id);

5,由文件设定存储器初值

$readmemh("file_name", memory_name"); //初始化数据为十六进制
$readmemb("file_name", memory_name"); //初始化数据为二进制

Verilog读写文件的更多相关文章

  1. Verilog 读写文件

    Verilog 读写文件 在数字设计验证中,有时我们需要大量的数据,这时可以通过文件输入,有时我们需要保存数据,可以通过写文件保存. 读写文件testbench module file_rw_tb() ...

  2. Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  3. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  4. Python读写文件

    Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('t ...

  5. php中并发读写文件冲突的解决方案

    在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...

  6. C#读写文件的方法汇总_C#教程_脚本之家

    C#读写文件的方法汇总_C#教程_脚本之家 http://www.jb51.net/article/34936.htm

  7. Inno Setup 如何读写文件

    软件安装的实质就是拷贝,对于简单的打包当然不需要考虑修改某(配置)文件.通过inno修改文件的目的在于把安装时相关信息写入文件中,提供其它应用的读取,而这些信息也只能在安装时才能确定,比如安装用户选择 ...

  8. java使用IO读写文件总结

    每次用到IO的读写文件都老忘记写法,都要翻过往笔记,今天总结下,省的以后老忘.java读写文件的IO流分两大类,字节流和字符流,基类分别是字符:Reader和Writer:字节:InputStream ...

  9. python读写文件时中文的转码问题

    读写文件都要将中文转为unicode字符. 读文件: u = unicode(s, 'gbk') 这里不能使用encode 写文件: u = encode('utf')

随机推荐

  1. 关于AR,你想要的全在这儿了

    定义 增强现实(Augmented Reality,简称AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术估计由19 ...

  2. [2017.02.21] 《Haskell趣学指南 —— Learning You a Haskell for Great Good!》

    {- 2017.02.21 <Haskell趣学指南 -- Learning You a Haskell for Great Good!> [官网](http://learnyouahas ...

  3. Python爬虫爬取qq视频等动态网页全代码

    环境:py3.4.4 32位 需要插件:selenium BeautifulSoup xlwt # coding = utf-8 from selenium import webdriverfrom ...

  4. 安装grub

    安装windows后,grub不见了 先安装Neo进入Linux 两条命令搞定. 在root用户下输入: update-grub grub-install /dev/sda

  5. HTML学习笔记四

    今日学习内容为: 1.文本域操作 <html> <head> <meta charset="utf-8"/> <title>Java ...

  6. 令人费解的java泛型

         对于我们java中的泛型,可能很多人知道怎么使用并且使用的还不错,但是我认为想要恰到好处的使用泛型,还是需要深入的了解一下它的各种概念和内部原理.本文将尽可能的囊括java泛型中的重要的概念 ...

  7. mvc路由

    一.路由常规设置 1.URL模式     路由系统用一组路由来实现它的功能.这些路由共同组成了应用程序的URL架构或方案. URL的两个关键行为:     a.URL模式是保守的,因而只匹配与模式具有 ...

  8. Linux下修改系统时区

    使用 /etc/localtime 文件修改时区 先查看一下当前的时区,下面这个例子中使用 UTC 即世界统一标准时区.假设你可能需要改为美国西部标准时间,即太平洋时间. # date Thu Aug ...

  9. 用GDB调试程序

    转自:http://blog.csdn.net/haoel/article/details/2879 是一篇从基础讲gdb的博文 用GDB调试程序 GDB概述---- GDB是GNU开源组织发布的一个 ...

  10. 给 Qt 添加模块

    添加 Qt 模块 QtCanvas3D 由于需要使用 Qt Quick 进行 3D 绘图,因此在网上找了一些资料. JS 绘制 3D 的有 ThreeJS 库,应该可以用于 QML.继续搜索,发现Qt ...