Verilog读写文件

Verilog读写文件一.读写文件相关的系统任务  在进行FPGA模块的开发过程中,常常需要对数据的处理过程进行行为仿真,以验证FPGA的功能逻辑是否正确,因此需要将FPGA行为仿真的结果与MATLAB或C/C++的处理结果进行对比验证。但需要对比的数据量比较大时,将输入输出结果数据存入文件进行对比是非常常用的方法。  Verilog中读写文件常用到的系统任务主要有以下几个:1.文件打开、关闭与定位操作:$fo…

大家好,又见面了,我是你们的朋友全栈君。

一.读写文件相关的系统任务

    在进行FPGA模块的开发过程中,常常需要对数据的处理过程进行行为仿真,以验证FPGA的功能逻辑是否正确,因此需要将FPGA行为仿真的结果与MATLAB或C/C++的处理结果进行对比验证。但需要对比的数据量比较大时,将输入输出结果数据存入文件进行对比是非常常用的方法。

    Verilog中读写文件常用到的系统任务主要有以下几个:

1.文件打开、关闭与定位操作:$fopen(file_name)、$fclose(file_name)、$fseek();

2.文件读取:$fscanf和 $​readmemh,其中$​readmemh的作用是件文件中的数据一次性的读入某个数组中,然后依次从数组中取出1个数据进行处理;而$fscanf的作用是从文件中读出一行的数据。两个系统任务的常见用法如下:

$​readmemh:

reg  [15:0] data_mem [0:1023] ;//定义一个位宽为16bit,深度为1024的mem

$​readmemh(“path/data.txt”,data_src_mem);

$fscanf:

reg [15:0] reg1, reg2, reg3;  //定义三个位宽为16bit的寄存器

cnt = $fscanf(fp, “%d %d %d”, reg1, reg2, reg3);//从数据文件中以十进制的方式读出一行中的三个数

3.数据写入文件:$fwrite(file_handle,”%d\n”,reg1) ;

二.调用示例

1.利用Matlab生成数据文件

    在Matlab中生成一正弦波信号,并将其定点化后存入.txt文件。Matlab代码如下所示:

%% 实验在vivado中通过verilog读取txt文件数据
%% DJason 2018.04
clc;
close all;
clear all;
%% 生产一个正弦波信号
fs = 100;   %采样率100
t0 = 5;     %采样时间5s
N = fs*t0;  %采样点数
f0 = 2;    %信号频率
t = (0:N-1)/fs;
s = cos(2*pi*f0*t);

%% 将信号定点化,转为int16型数据
S = int16(s.*2^15*0.8);
%% 将定点后的数据写入文件
fp = fopen('data.txt','wt');
for i =1 : length(S)
    fprintf(fp, '%d\n', S(i));
end
fclose(fp);

生成的正弦波下图

Verilog读写文件

2.在Vivado中读入数据文件

    将生成的data.txt文件放到vivado工程目录下的\XXX_project.sim\sim_1\behav目录下,然后编写TestBench对该文件进行读取,同时将读取的数据存放到另一个文件中,verilog代码如下所示

module test( );

integer fp_r,fp_w;  
integer count;   
reg clk;
reg [15:0] reg1;

initial  
begin 
    clk = 0; 
    reg1 = 0;
    count = 0;
    fp_r=$fopen("data.txt","r");//以读的方式打开文件  
    fp_w=$fopen("data_out.txt","w");//以写的方式打开文件  
end 

always@(posedge clk)
begin
    if(count < 500)
    begin
        $fscanf(fp_r,"%d" ,reg1) ;//每次读一行 
        count <= count + 1; 
        $fwrite(fp_w,"%d\n",reg1) ;//写入文件
    end
    else
    begin
         $fclose(fp_r);//关闭已打开的文件
         $fclose(fp_w);
    end  
end

然后利用vivado自带的仿真器进行仿真,得到结果如下图所示

Verilog读写文件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141625.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • JAVA数据库课程设计—简易网上银行管理系统-java图形用户界面

    JAVA数据库课程设计—简易网上银行管理系统-java图形用户界面@数据库课程设计—简易网上银行管理系统-java图形用户界面所使用数据库版本—mysql5.7所使用java编译器—idea2019效果实现图:登录界面功能界面:注册界面:管理员界面:数据库表设计:函数图:代码过多:如有需要在评论下留下qq,会加的!!!…

  • Java中的FileInputStream与FileOutputStream的基本使用详解[通俗易懂]

    Java中的FileInputStream与FileOutputStream的基本使用详解[通俗易懂]Javav中的FileInputStream与FileOutputStream的使用

  • keil如何生成bin文件_ccs6如何生成bin文件

    keil如何生成bin文件_ccs6如何生成bin文件在RVMDK中,默认情况下生成*.hex的可执行文件,但是当我们要生成*.bin的可执行文件时怎么办呢?答案是可以使用RVCT的fromelf.exe工具进行转换。也就是说首先将源文件编译链接成*.axf的文件,然后使用fromelf.exe工具将*.axf格式的文件转换成*.bin格式的文件。         下面将具体说明这个操作步骤:

    2022年10月20日
  • 基于Chrome浏览器的HackBar_v2.2.6插件的安装与注册「建议收藏」

    基于Chrome浏览器的HackBar_v2.2.6插件的安装与注册「建议收藏」Hackbar是一款基于浏览器的简单的安全审计或者说是渗透测试工具,能够帮助您测试sql注入,XSS漏洞和站点安全性,帮助开发人员对其代码进行安全审计。本篇博客介绍的是基于Chrome浏览器的hackbar插件的安装与注册,在Firebox浏览器与Chrome浏览器上的安装类似,对在firebox的安装本篇博客不再做说明。 HackBar_v2.2.6下载和安装 1、打开Chrome…

  • JAVA分布式架构设计实例

    JAVA分布式架构设计实例一款Java语言基于SpringCloud、Vue、ElementUI、MySQL等框架精心打造的一款前后端分离框架,致力于实现模块化、组件化、可插拔的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,目前框架已集成了完整的RBAC权限架构和常规基础模块,前端Vue端支持多主题切换,可以根据自己喜欢的风格选择想一个的主题的个性化呈现的需

  • javaweb分页显示_java分页查询原理思路

    javaweb分页显示_java分页查询原理思路效果图如下:实现步骤:1.创建实体User.class,参考代码如下:publicclassUser{ privateStringname; privateintage; privateStringgender; publicStringgetName(){ returnname; } publicvoidsetName(Stri…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号