写在前面:仅为个人代码/总结,未必标准,仅供参考!如有错误,还望指出交流,共同进步!

波形MIF文件生成代码

函数一、生成正弦波mif文件

/*-—---功能:正弦波------*/
int sine_wave(FILE* p, int maxwords,int depth)
{int i,j;for(i=0;i<depth;i++){j=(int)((maxwords/2-1)*sin(2*M_PI*i/depth) + maxwords/2);fprintf(p,"\t%-6x:%x;\n",i,j);}return 1;
}

函数二、生成余弦波mif文件

/* -----功能:余弦波----- */
int cosine_wave (FILE *p,int maxwords, int depth)
{int i, j;for(i=0; i<depth; i++){j=(int)((maxwords/2-1)*cos(2*M_PI*i/depth)+maxwords/2);fprintf(p,"\t%-6x:%x;\n",i,j);}return 1;
}

函数三、生成方波mif文件

/*-----功能:方波-----*/
int square_wave(FILE * p,int maxwords, int depth)
{fprintf(p,"\t[%d..%d]:%x;\n",0,depth/2,0);fprintf(p,"\t[%d..%d]:%x;\n",depth/2+1,depth-1,maxwords - 1);return 1;
}

函数四、生成三角波mif文件

/*-----功能:三角波------*/
int triangle_wave(FILE *p,int maxwords,int depth)
{int i=0,j=0,k=0;k=2*(maxwords)/depth;for(i=0,j=0;i<depth;i++){fprintf(p,"\t%-6x:%x;\n",i,j);if(i<depth/2){j+=k;}else j-=k;if(j>=maxwords){j = maxwords-1;}}return 1;
}

函数五、生成锯齿波mif文件

/*-----功能:锯齿波----*/
int sawtooth_wave(FILE*p,int maxwords,int depth)
{int i=0,j=0,k=0;k=(maxwords-1)/(depth-1);for(i=0,j=0;i<depth;i++){fprintf(p,"\t%-6x:%x;\n",i,j);j+=k;if(j>=maxwords){j=maxwords-1;}}return 1;
}

六、main函数

int main(int argc,char*argv[])
{int width=8;//字位宽int depth=256;//字深度int maxwords = 0;//最大值int choice =0;//波类型FILE *fp;char filename[128]={0};char mif_name[128]={0};printf( "Input filename:\n");scanf("%s",filename);sprintf(mif_name, "%s.mif",filename);if (!(fp=fopen(mif_name,"w+"))){printf("open file error!\n");return -1;}printf("\nInput word width:\n");//输入字位宽scanf("%d", &width);printf("Input word depth:\n");//输人字深度scanf("%d" ,&depth);printf("\nInput .mif mode\n [0] sine wave\n [1] cosine wave\n [2] square wave\n [3] triangle wave\n [4] sawtooth wave\n Your choice:");scanf("%d",&choice) ;//选择产生波的类型maxwords=1<<width;fprintf(fp,"WIDTH=%d; \nDEPTH=%d; \n\nADRESS_ RADIX = HEX; \nDATA_ RADIX = HEX;\n\nCONTENT BEGIN\n",width,depth);//格式为十六进制switch(choice){case 1:cosine_wave(fp,maxwords,depth); break;case 2:square_wave(fp,maxwords,depth); break;case 3:triangle_wave(fp,maxwords,depth); break;case 4:sawtooth_wave(fp,maxwords,depth); break;default:sine_wave(fp,maxwords,depth);}fprintf(fp,"END;\n");fclose(fp);printf(".mif generated successfully!\n");return 0;
}

注:以上代码主要参考了《计算机硬件技术基础实验教程》(方恺晴主编)里面的代码,但有所改进,主要是对于数据的输出改进为十六进制格式的输出,适用于Quatus 工程的直接调用。

七、代码改进
由于不同的芯片中存储器的字长宽度、存储单元的数量是不一样的,即width可能是8位、16位等,最大的depth也可能不一样。运行原程序时,当输入“width=8,depth=1024”时,生成的mif文件中的数据会是全为0,因为“k=2*(maxwords)/depth”这个语句已经限制了相邻数据之间的差值,这是源代码可以改进的地方,可以根据需求在生成mif文件时对以上代码进行个性化修改设计。以生成三角波、锯齿波mif文件为例,需要生成一个适用于“width=8,depth=1024”存储器的mif文件,可将在以上代码的基础上修改如下:

/*-----功能:三角波------*/
int triangle_wave(FILE *p,int maxwords,int depth)
{int i=0,j=0,k=1;//自行设计k,即j自增/自减的步长//k=2*(maxwords)/depth;for(i=0,j=0;i<depth;i++){fprintf(p,"\t%-6x:%x;\n",i,j);//可根据自身输入的depth设定自增/自减条件,保证j小于256,即满足width=8此条件if((i<depth/4)||(i>=depth/2&&i<3*depth/4)){j+=k;}else if((i>=depth/4&&i<depth/2)||(i>=3*depth/4)){j-=k;}if(j>=maxwords){j = maxwords-1;}if(j<=0){j=0;}}return 1;
}
/*-----功能:锯齿波----*/
int sawtooth_wave(FILE*p,int maxwords,int depth)
{int i=0,j=0,k=1;//k=(maxwords-1)/(depth-1);for(i=0,j=0;i<depth;i++){fprintf(p,"\t%-6x:%x;\n",i,j);j+=k;//设计数据增加的步长if(j>=maxwords){j=0;//j=maxwords-1;}}return 1;
}

波形MIF文件生成器(C语言)相关推荐

  1. 用c语言写生成 mif文件的软件,MIF文件生成(.MIF File Generator Utility)

    .MI文件是当你实例化一个ROM或RAM中的示意图或AHDL文件,你必须与一些默认的数据预加载的EAB选项来指定.MIF文件. .MIF File Generator Utility将生成MIF文件正 ...

  2. 用c语言写生成 mif文件的软件,生成mif文件的几种方法总结

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

  3. c语言正弦波的mif文件,【原创】ROM的初始化文件-mif文件

    1.mif文件 1).mif文件的概念 mif文件,是FPGA中ROM的初始化文件(Memory Initialization File),用来配置RAM或者ROM.因为FPGA是基于SRAM存储的, ...

  4. matlab生成mif图像文件,matlab 生成mif文件导入quartus rom中

    用Quartus II创建并仿真ROM的步骤:1.在Quatus工程下生成一个ROM2.编写.mif文件,作为ROM的初始化文件3.将.mif文件拷贝到Modelsim工程下4.进行Modelsim仿 ...

  5. matlab如何写mif文件,matlab产生mif文件

    MIF 文件是 MapInfo 通用数据交换格式,这种格式是 ASCⅡ码,可以编辑,容易生成,且可以工作 在 MapInfo 支持的所有平台上. 它将 MapInfo 数据保存在两个文件中: .... ...

  6. matlab生产正弦mif文件

    离散化采集点 离散化采样点,将连续的正弦波信号进行离散化:应用matlab软件进行实现: 将离散化后的正弦波一个周期存储到Ram中. 3.1 将离散后的数据进行定点化,Ram的规格是256x8,数据规 ...

  7. 快速的CSV文件生成器

    介绍 在某些应用程序中,往往需要将数据库表中的数据取出来存为CSV文件.看起来是很容易的一件事情,但是如果要做到灵活,而且要在取大数据量的表时保证足够的性能,却需要认真考虑.本CSV文件生成器的设计考 ...

  8. MATLAB绘制正弦波、方波、三角波、锯齿波的mif文件

    MATLAB绘制正弦波.方波.三角波.锯齿波的mif文件 % 对波形进行等间隔采样,以采样次数作为 ROM 存储 % 地址,将采集的波形幅值数据做为存储数据写入存储地址对应的存储空间 % 采样次数为 ...

  9. verilog将像素数据写入txt_FPGA仿真必备(1)——Matlab生成.mif文件/.txt文件

    1. mif 文件 MIF(Memory Initialization File),内存初始化文件,用于 Altera / Intel 的 FPGA 器件的 RAM 或 ROM 配置. 例如: (1) ...

最新文章

  1. [Android学习笔记]理解焦点处理原理的相关记录
  2. php用户登录后跳转到主页,phpmyadmin登录后跳到首页的问题
  3. 关于Notepad++环境的搭建以及代码的编译工具mingw
  4. java计算两地距离(公里)
  5. 福特新CEO“泼冷水”,给自动驾驶设立商业化节点是否真的有必要?
  6. java项目怎么使用js插件_Intro.js 分步向导插件使用方法 Web程序 - 贪吃蛇学院-专业IT技术平台...
  7. Tomcat下载安装及配置
  8. 内核的解压缩过程详解
  9. D5渲染器 2.0 全新升级|天气系统、路径动画、草地材质,内置海量正版素材库
  10. mtk刷机工具sp flash tool_qpst刷机(翻到高中刷机时的记录,想来qpst对现在玩机的人也有用吧...
  11. Arduino 控制的双足机器人
  12. 计数排序CountingSort
  13. Peekaboo—站立式会议+alpha冲刺:Day1冲刺随笔
  14. 服务器 ftp查询文件是否存在,ftp查看远程服务器文件是否存在
  15. 通过Teamview后台去除限制
  16. android常用的存储方式,Android 常见数据存储方式
  17. MATLAB牛拉法计算潮流,matlab潮流计算
  18. MySQL之MYISAM和INODB
  19. ***基础___探测技术
  20. 随机变量独立和随机事件独立

热门文章

  1. 4.5G引爆企业通信,电力行业首当其冲
  2. AVERAGEX函数丨移动平均
  3. 瓦罐香沸快餐 特色盈利项目
  4. 外贸业务员应该具备的条件
  5. 【云南】2021年下半年软考报考时间及通知
  6. 【C/C++基础】C语言转义字符表
  7. JSP住宅小区物业管理系统(源代码+开题报告+论文+答辩PPT)
  8. 静态时序分析(一):基本概念
  9. Python 使用dpkt提取五元组
  10. 50个使用标点符号设计的创意LOGO设计欣赏(上篇)