Verilog matlab与FPGA文件的输入输出_向fpga输入数据-程序员宅基地

技术标签: verilog程序设计  

1、产生FPGA仿真需要使用到的正弦波采样数据,10bit量化,以二进制形式写入文本,以分号(;)结尾:

%设置参数
fi=5000;
L=1024;
N=10;
fs=20000;

%产生信号
t=0:1/fs:(L-1)/fs;
theta=rand()*2*pi;
si=sin(2*pi*fi*t+theta);

f_s=si/max(abs(si));     %归一化
Q_s=round(f_s*(2^(N-1)-1));  %10bit量化

fid=fopen('C:\Users\HLPC\Desktop\Sin.txt','w');
for k=1:length(Q_s)
    B_s=dec2bin(Q_s(k)+(Q_s(k)<0)*2^N,N);
    for j=1:N
        if B_s(j)=='1'
            tb=1;
        else
            tb=0;
        end
        fprintf(fid,'%d',tb);
    end
    fprintf(fid,'\r\n');
end
fprintf(fid,';');
fclose(fid);

生成的TXT文件如图:在这里插入图片描述

2、从外部txt文件读入一定数据长度的10bit二进制数据作为测试激励:

integer cnt;  
reg [9:0]stimulus[1:data_num];  //data_num仿真数据长度
initial begin
    $readmemb("Sin.txt",stimulus);
    cnt = 0;
    repeat(data_num)begin
        cnt = cnt + 1;
        din = stimulus[cnt];
        #clk_period;
    end
end

3、将FPGA仿真的数据写入txt文件,可通过改变waveform style修改输出数据格式:

integer file_out;
initial 
begin
   //文件放置在"工程目录\simulation\modelsim"路径下                                                  
	file_out = $fopen("out.txt");
	if(!file_out)
		begin
			$display("could not open file!");
			$finish;
		end
end

wire signed [31:0] dout_s;
assign dout_s = data_o;           //将dout转换成有符号数据

always @(posedge clk)begin    
    if(m_axis_data_tvalid)
	   $fdisplay(file_out,"%d",dout_s);
end

在这里插入图片描述
4、Matlab对十进制仿真数据进行读取分析

Fs=20000; %采样频率
L=256;  %数据长度

%从文本文件中读取数据
fid=fopen('C:\Users\HLPC\Desktop\Sin.txt');
[FpgaOut,count]=fscanf(fid,'%d',inf);
fclose(fid);

%取出一段数据进行计算
FpgaOut=FpgaOut(1:L)';    %读出的数据为列向量,转换成行向量
Fout=abs(fft(FpgaOut,L));  %求FFT变换的幅度值

FpgaOut=FpgaOut/max(abs(FpgaOut));%归一化处理
Fout=Fout/max(Fout);

Fout=[Fout(L/2+1:L),Fout(1:L/2)]; %转换成相对于原点对称的信号

%画图
t=[0:L-1];                        %生成时间坐标轴,单位为ms 
t=t*(1/Fs)*(10^3);
m=[-L/2:1:(L/2-1)]*Fs/L*(10^(-3));%生成频率坐标轴,单位为KHz

subplot(211);plot(t(1:32),FpgaOut(1:32));
xlabel('时间(ms)','fontsize',10); ylabel('幅度','fontsize',10);
title('FPGA输出信号','fontsize',10);

subplot(212);plot(m,Fout);
xlabel('频率(KHz)','fontsize',10); ylabel('幅度','fontsize',10);
title('FPGA输出信号的幅频响应','fontsize',10);

5、Matlab读取二进制文件,转化为十进制

cstr = textread('C:\Users\HLPC\Desktop\Sin.txt','%s');
m = length(cstr{1});
n = length(cstr);
d = zeros(n,1);
for i=1:n
    s = bin2dec( cstr{i}(1) ); % 符号
    if s==1
        d(i)=bin2dec(cstr{i})-2^m;
    else
        d(i) = bin2dec( cstr{i} ) ;
    end
end

注意:
二进制文本必须由字符 0 和 1 组成,文本结尾不能有分号(;)。

6、Vivido中ROM IP核的使用

在这里插入图片描述
在这里插入图片描述
生成位宽为16bit,深度为1024的rom生成初始化文件:

width=16;   %rom的位宽
depth=1024; %rom的深度
x=linspace(0,2*pi,depth);  %在一个周期内产生1024个采样点
y_cos=cos(x);   %生成余弦数据
y_cos=round(y_cos*(2^(width-1)-1))+2^(width-1)-1;  %将余弦数据全部转换为整数

fid=fopen('C:\Users\Administrator\Desktop\cos_coe.coe','w');  %创建.coe文件
fprintf(fid,'%d,\n',y_cos);  %向.coe文件中写入数据
fclose(fid);  %关闭.coe文件

注意:
1、在前两行添加:

memory_initialization_radix=10;
memory_initialization_vector =

2、将最后一行的逗号改为分号.

在Vivado中,对rom进行初始化的文件是.coe文件.它的格式如下:

memory_initialization_radix=10;
memory_initialization_vector =
65534,
65533,
...,
60211;

其中,*memory_initialization_radix=10;*表示文件存储数据的进制,10即为10进制,
memory_initialization_vector是数据向量,等号后面的数字就是数据向量,使用逗号隔开数据,分号表示结束.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39005414/article/details/109552835

智能推荐

[OpenBMC] 简单解析 smbios-mdr_bmc entity manager configuration-程序员宅基地

文章浏览阅读2.2k次。(*如果之后架构有变,这边不会更新)smbios-mdrGitHub - openbmc/smbios-mdrhttps://github.com/openbmc/smbios-mdrMDR(Managed Data Region) 是 OpenBMC中取得SMBIOS Table并解析其內容的一个功能,目前网上(在没有特别帐号权限下)能找到的资料蛮少的,所以这边会尽量用公开资料做个分析 如果還不認識SMBIOS 可以先看之前寫的文章非专业的SMBIOS笔记-程序员宅基地https://.._bmc entity manager configuration

利用 hadoop 的 FileSystem copyFromLocalFile 方法实现文件上传HDFS中 Hadoop 版本 2.7.0_filesystem.copyfromlocalfile-程序员宅基地

文章浏览阅读3.8k次。利用 hadoop 的 FileSystem copyFromLocalFile 方法实现文件上传HDFS中 Hadoop 版本 2.7.0另外说明:远程调用机器 需要 liunx 修改 /etc/hosts 添加 10.11.12.4 master_filesystem.copyfromlocalfile

计算机硬件操作-程序员宅基地

文章浏览阅读59次。2.2 Operations of the computer HardwareEvery computer must be able to perform arithmetic. 每台计算机必须能够执行运算。The MIPS assembly language notation  add   a,  b,  cinstructs a computer to add var...

CodeVS 4228 小猫爬山 - DFS-程序员宅基地

文章浏览阅读73次。传送门本题为简单的DFS,但需要一些小剪枝。我们遍历的状态有3个:当前需安放的第i只小猫now、已经花费的钱数cnt、各矿车剩余的空间rst[]。我们把rst[]作为回溯的状态,把now和cnt作为转移的参数。先遍历不新建矿车的情况:枚举每个矿车,若能安放,则继续遍历该情况。再遍历新建矿车的情况。还要加上一些剪枝:1.最优性剪枝:若当前cnt已经>=an..._小猫爬山codev

lru cache和ttl cache缓存写法,装饰器写法-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏2次。lru cache 缓存def lru_cache(maxsize): cache = {} keys = [] def inner(func): def wrapper(*arg, **kwd): key = arg for item in kwd.items(): key += item if key in keys: keys_ttl cache

IP Qos 技术详解 -程序员宅基地

文章浏览阅读1.2k次。 随着INTERNET和IP网络的迅猛发展,越来越多的应用业务开始通过IP网络来实现传输。但是,IP网络提供的是“尽力而为(BestEffort)”的服务,没有QoS(Quality ofService)的保证。因此,业务流量在传输过程中很容易由于网络的拥塞而产生延迟、丢包等现象。而实时性业务对延迟是相当敏感的,如:VoIP、视频会议、视频监控等,如果一旦网络发生拥塞,这些业务就_ip qos

随便推点

Ceph集群搭建系列(二):Ceph 集群扩容_ceph集群动态扩容-程序员宅基地

文章浏览阅读3.3k次。本文是基于Ceph集群搭建系列(一):Ceph 集群搭建 来做扩容,集群拓扑结构如下:1. 添加OSD在 node1 上添加一个 osd.2。1) 创建目录$ ssh node1$ sudo mkdir /var/local/osd2$ sudo chmod 777 /var/local/osd2/$ exit2) 准备OSD$ ceph-deploy osd..._ceph集群动态扩容

ssh和http的端口修改_克隆 http及ssh端口修改-程序员宅基地

文章浏览阅读628次。版本:RH6.5ssh:默认端口22 http:默认端口80Question:为什么进行端口修改?Aanswer:因为如果在工作环境中使用默认的端口进行访问所需要的端口,会增加被攻击的机会,更改为非默认端口可以大大降低被攻击的次数和提高安全性。但是暴露在公网中的服务,就只能使用默认端口,因为提供公共服务,客户并不知道其默认端口被修改了。Way: ssh===> vim /et_克隆 http及ssh端口修改

java如何连接MySQL数据库?_java如何创建mysql数据库连接-程序员宅基地

文章浏览阅读523次,点赞14次,收藏2次。其实连接MySQL与SQLserver大同小异,说明一下,MySQL默认端口号是3306,如果你自己改了,记得把代码中的改一下.别忘了用户名和密码也得改成和你自己数据库的一样.废话不多说,具体代码如下:import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java...._java如何创建mysql数据库连接

Halcon 基础知识(一)_halcon 判断区域矩形度-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏9次。项目流程总结:采集-预处理-定位-特征提取-识别-显示1.图像预处理按作用域划分 空间域包括有中值(median_image)、均值(mean_image)、高斯滤波; 频域:模板滑动;按功能划分 增强对比度:线性变换(scale_image )、直方图均衡化(equ_histo_image)、灰度形态学(gray_)、emphasize..._halcon 判断区域矩形度

Linux TCP reneging判断图解-程序员宅基地

文章浏览阅读8.1k次。SACK是TCP的一个特性,用来更加有效地实施拥塞控制,这是对标准TCP的增强。当接收端收到乱序的数据包时,在内存足够的情况下会保存这些数据包,但这并不是必须的,比如当接收端内存吃紧时,它有权力丢弃任何乱序暂存的数据包,然而这件事并不会告诉发送端,于是发送端必须要可以自行判断接收端丢掉乱序数据包这件事。图解如下:如果接收端没有丢掉图示中SACKed的段,为啥不用una覆盖呢?所以…浙江温州皮鞋湿,下雨进水不会胖。..._tcp reneging

GridView显示图片_gridview怎么显示图片-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏11次。 与图片的二进制数据库存储和显示 1.将图片以二进制存入数据库2.读取二进制图片在页面显示3.设置Image控件显示从数据库中读出的二进制图片4.GridView中ImageField以URL方式显示图片5.GridView显示读出的二进制图片====================1.将图片以二进制存入数据库//保存图片到数据库protected v_gridview怎么显示图片

推荐文章

热门文章

相关标签