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

matlab和FPGA联合仿真时读写.txt文件数据的方法

在FPGA开发过程中,往往需要将MATLAB生成的数据作为原始激励灌入FPGA进行仿真。为了验证FPGA计算是否正确,又需要将FPGA计算结果导入MATLAB绘图与MATLAB计算结果对比。

下面是MATLAB“写.txt”、“读.txt”,Verilog“读.txt”、“写.txt”的代码。.txt中的数据是二进制的。

1.MATLAB导出数据生成.txt文件:

function Write_data(filename,n,data)%filename:存储地址。n:二进制位宽。data:数据
    data=round(data);
    for i=1:length(data)
        if(data(i)<0)
            data(i)=data(i)+2^n;
        end
    end
    bin_data=dec2bin(data,n);

    fid=fopen(filename,'wt');
    for j=1:size(bin_data,1)%size(array,1)表示矩阵array的行数。size(array,2)表示列数
        fprintf(fid,'%s\n',bin_data(j,:));%array(i,:)表示提取矩阵array的第i行的所有元素
    end
    fclose(fid);
end

2.MATLAB读取.txt文件导入数据:

function [data_bin2dec]=Read_Data(filename,T)%T表示.txt中的二进制位宽
    data_bin_txt=textread(filename,'%s');
    MAX_DATA=2^(T-1);%判断正负的阈值
    data_bin2dec=zeros(length(data_bin_txt),1);%一个列向量
    for i=1:length(data_bin_txt)
        if(convert_bin2dec(data_bin_txt(i),0)>MAX_DATA)
            data_bin2dec(i)=convert_bin2dec(data_bin_txt(i),1)-2^T;
        else
            data_bin2dec(i)=convert_bin2dec(data_bin_txt(i),0);
        end
    end
end
%%
function [x]=convert_bin2dec(bintring,sign)
    if sign==0
        x=bin2dec(bintring);
    else
        x=num2cell(bin2dec(bintring));
        bin_size=size(bintring,2);
        y=x;
        y=cellfun(@(y,bin_size)cal_sign_y(y,bin_size),y,num2cell(ones(size(y,1),1)*bin_size));
        x=y;
    end
end
%%
function y_i=cal_sign_y(y_i,bin_size)
    if y_i>=2^(bin_size-1)
        y_i=y_i-2^bin_size;
    end
end

3.FPGA读取.txt文件导入数据:

reg [WIDTH-1:0] mem_a[DEPTH:0];
initial $readmemb("C:/xxx/xxx/xxx.txt",mem_a);//将.txt文件读到数组mem_a中

task data_stream();//生成数据流,用于RTL仿真
	integer i;
	for(i=0;i<DEPTH;i=i+1)begin
		din_valid=1;
		din=mem_a[i];
		#20;
		din_valid=0;
		din=din;
		#80;
	end
endtask

 Verilog在读.txt文件时,只能识别16进制、二进制。不要求每个数据单独占一行,但要有空格。

4.FPGA导出数据保存到.txt文件中:

integer bt;
initial begin
	bt=$fopen("C:/xxx/xxx/fpga_out.txt"","wb");
end

always@(posedge clk)begin
	if(dout_valid)
		$fdisplay(bt,"%b",data_out);
end

$fdisplay(bt,存储形式,想要存的数据);

生成的fpga_out.txt会自动换行;

另外.FPGA读.txt,并串行输出模仿串行通信总线时:

 

相关文章:

  • nvm安装与使用
  • 【时时三省】(C语言基础)赋值语句
  • typedef 和 using 有什么区别?
  • 前端打包优化相关 Webpack
  • 使用vue3.0+electron搭建桌面应用并打包exe
  • 互信息: 揭示变量间“心有灵犀“程度的度量器
  • 链表算法题目
  • <script setup>和export default { setup() { ... } }区别
  • Express + MongoDB 实现登录验证码
  • 如何在 JavaScript 中冻结对象:深入理解 Object.freeze() 和深冻结
  • 基于信息化技术的农业大学教师人事管理系统的构建与应用
  • C语言中的选择结构:决策的艺术
  • doris:ClickHouse
  • VAD入门(基于Python)
  • 提升数据库性能与可靠性:深入解析MySQL主从复制
  • 使用 Prim 算法生成了最小生成树, 使用 Fleury 算法生成了欧拉回路,尝试找到了一个简单的哈密尔顿圈。
  • 用友 U8出入库查询SQL 连接UNION ALL
  • 1.12.信息系统的分类【ES】
  • C#编译自动增加文件的版本号
  • Ubuntu 下 nginx-1.24.0 源码分析 - conf_ctx
  • wordpress 百度经验主题/上海高端seo公司
  • 广州网站建设360元/seo整站优化费用
  • 淘宝网站都是怎么做的吗/优化服务
  • 做网站找雷鸣/万能搜索引擎网站
  • 网站建设开发有什么好处/域名注册后怎么使用
  • 可以做调查问卷的网站/挖掘关键词工具