本文档主要讲解实现一个16384(2^14)点的14位正弦波数据mif格式文件的生成,使用此文件,我们便可以在FPGA上基于直接数字合成(DDS)原理生成标准的正弦波,即实现信号发生器的功能。关于DDS原理的相关内容,请参考由北航出版社出版的《FPGA自学笔记——设计与验证》一书第六章第6.2节—— “双通道幅频相可调DDS信号发生器” 一节的内容。

  在很早之前,我曾编写过一个生成1024点16位正弦波mif文件的方法,不过那时候我的matlab技术还特别特别菜(现在也很菜),只是在matlab中简单的实现了正弦波数据的生成,关于四舍五入取整以及mif文件的最终生成,我用了excel和quartus两个软件经过了复杂的操作才最终完成。如今,自己都对那种方法没有了耐心,刚好新做的一个双通道14位高速DAC模块在做DDS实验时需要用到14位的mif数据,因此今天对matlab的脚本文件重新编写了下,实现了仅通过Matlab就可以一键生成mif文件的功能。

  首先,打开MATLAB软件,小梅哥这里使用的版本为MATLAB 2012b。新建一个Script文件,操作为File —>New—>Script。在该文件中输入以下内容:

F1=1; %信号的频率
Fs=2^14;%采样频率
P1=0;%信号初始相位
N=2^14;%采样点数为N
t=[0:1/Fs:(N-1)/Fs];%采样时刻
ADC=2^13 - 1;%直流分量
A=2^13;%信号幅度
s=A*sin(2*pi*F1*t + pi*P1/180) + ADC;%生成信号
plot(s);%绘制图形
fild = fopen('d:/sin14bit_16384.mif','wt');%创建mif文件
%写入mif文件文件头
fprintf(fild, '%s\n','WIDTH=14;');%位宽
fprintf(fild, '%s\n\n','DEPTH=16384;');%深度
fprintf(fild, '%s\n','ADDRESS_RADIX=UNS;');%地址格式
fprintf(fild, '%s\n\n','DATA_RADIX=HEX;');%数据格式
fprintf(fild, '%s\t','CONTENT');%地址
fprintf(fild, '%s\n','BEGIN');%
for i = 1:N
s2(i) = round(s(i)); %对小数四舍五入以取整
if s2(i) <0 %强制将负1置0,
s2(i) = 0
end
% addr : data;
fprintf(fild, '\t%g\t',i-1);%地址,从0开始编码
fprintf(fild, '%s\t',':');
fprintf(fild, '%x',s2(i));
fprintf(fild, '%s\n',';');
end

  

  用户如果想自己生成其他深度和位宽的数据,只需要对应修改采样频率(Fs)、采样点数(N)、直流分量(ADC)和信号幅度(A)即可。

  保存文件,点击运行按钮,即可生成我们所需要的正弦波数据,并在电脑的D盘根目录生成一个名为“sin14bit_16384 .mif”的文件。

  随后,会弹出如下图1所示的界面,该界面便是以我们生产的数据为值,t为时间轴绘制出来的波形,从波形可知为标准的正弦波,你也可以通过放大缩小来具体查看几个顶点的值,以确定数据是否在自己预期的范围内。这里,我们直接关掉该界面即可。

下图2为使用该文件配合我们的ACM9767模块设计的DDS信号发生器系统,输出频率为3.448Mhz(随机设置的一个值),通过示波器的FFT功能可以看到,谐波量并不大。

小梅哥

2018年3月31日星期六

使用MATLAB一键制作mif文件的更多相关文章

  1. 使用matlab生成sine波mif文件

    使用matlab生成sine波mif文件 作者:lee神 在使用altera 的FPGA中的rom过程中常常会使用到.mif文件或.hex文件.对于初学者,无论mif还是hex都是很令人疑惑的东西,这 ...

  2. 用matlab生成mif文件

    在FPGA中,rom模块的初始化文件分为两种,一种是hex文件,另外一种是mif文件,这两种文件都可以通过Quartus进行手工创建,进行手工输入数据,也可以借助于专用的文件编辑器完成编辑. 在此介绍 ...

  3. 生成mif文件的几种方法总结

    mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.生成QuartusII11.0可用的mif文件,有如下几种方式: 方法1:利用Q ...

  4. “一键制作启动u盘失败”的主要原因是什么?

    一键制作启动u盘失败的主要原因是什么?今天u启动小编就和大家一起来分析原因并寻求答案吧!     原因分析:   1.u盘内有文件正在运行或者是打开:   2.u盘自身的质量问题:   3.最主要的原 ...

  5. fpga rom 初始化mif文件生成

    mif文件的格式 width= depth= address_radix= data_radix= content begin 00:    ; 01:   ; 02:   ; .... end; 关 ...

  6. mif文件生成方法

    mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.常见生成方法: Quartus自带的mif编辑器生成 mif软件生成 高级编程语 ...

  7. S04_CH02_工程移植ubuntu并一键制作启动盘

    S04_CH02_工程移植ubuntu并一键制作启动盘 2.1概述 2.2搭建硬件系统 本章硬件工程还是使用<S04_CH01_搭建工程移植LINUX/测试EMMC/VGA>所搭建的VIV ...

  8. [转载]ISE中COE与MIF文件的联系与区别

    原文地址:ISE中COE与MIF文件的联系与区别作者:铁掌北京漂 在ISE中,当用Blcok Memory Generator 生成某个ROM模块时,经常要对ROM中的内容作初始化.这时,就需要我们另 ...

  9. MIF文件生成说明

    mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.生成QuartusII11.0可用的mif文件,有如下几种方式: 方法1:利用Q ...

随机推荐

  1. 堆排序算法-python实现

    #-*- coding: UTF-8 -*- import numpy as np def MakeHeap(a): for i in xrange(a.size / 2 - 1, -1, -1):# ...

  2. Nagios配置文件说明

    Lepus 安装配置:http://www.cnblogs.com/xuanzhi201111/p/5200757.html Nagios 各个目录用途说明如下:bin                ...

  3. 把XML保存为ANSI编码

    XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlText); //plu.xml 编码是ANSI的.否则称上品名是乱码 XmlEle ...

  4. Python 字串处理

    #!/usr/bin/python #-*- coding:utf-8 –*- import os import sys import re import shutil import xlrd imp ...

  5. Keil for ARM与C++

    1. 如果你的程序中使用了C++全局变量,那么*不要*使用MicroLIB,否则Keil会说某某Symbol找不到 2. 不使用MicroLIB带来的一个问题是KEIL会使用semihosting S ...

  6. configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/

    编译php出现错误: configure: error: Please reinstall the libcurl distribution - easy.h should be in <cur ...

  7. CentOS防火墙中端口的开启和关闭

    1.开启端口(以80端口为例) 方法一: /sbin/iptables -I INPUT -p tcp --dport -j ACCEPT 写入修改 /etc/init.d/iptables save ...

  8. 【POJ】1062 昂贵的聘礼 (最短路)

    题目 传送门:QWQ 分析 最短路显然,但不好搞地位等级..... 地位等级不好搞?那么就暴力.. 枚举我们允许的地位等级,跑最短路. 所以$ n^2logn $出100什么鬼啊,很有迷惑性啊 还有4 ...

  9. LoadXml载入Xhtml文件速度很慢

    如果有如下的Xhtml文字,在.Net中用XmlDocument.LoadXml载入的时候,速度很慢.   <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  10. cesium初始化参数

    var viewer = new Cesium.Viewer('cesiumContainer',{ animation:false, //动画控制不显示 //baseLayerPicker:fals ...