mif文件C语言生成

1:正弦波

用函数 sin (x * π/180°)

 1 /**************************************************
 2
 3       正弦波 mif 生成
 4
 5 ***************************************************/
 6 #include <stdio.h>
 7 #include <math.h>
 8
 9 #define DEPTH 128     /*数据深度,即存储单元的个数,可更改*/
10 #define WIDTH 8       /*存储单元的宽度,可更改*/
11 #define PI 3.141592
12
13 int main(void)
14 {
15     int i,temp;
16     float s;
17
18     FILE *fp;
19     fp = fopen("SinPro.mif","w");   /*可更改,但扩展名必须为.mif*/
20     if(NULL == fp)
21         printf("Can not creat file!\r\n");
22     else
23     {
24         printf("File created successfully!\n");
25         /*
26         *    生成文件头:注意不要忘了“;”
27         */
28         fprintf (fp, "DEPTH = %d;\n",DEPTH);
29         fprintf (fp, "WIDTH = %d;\n",WIDTH);
30         fprintf (fp, "ADDRESS_RADIX = HEX;\n");
31         fprintf (fp, "DATA_RADIX = HEX;\n");
32         fprintf (fp, "CONTENT\n");
33         fprintf (fp, "BEGIN\n");
34
35         /*
36         * 以十六进制输出地址和数据
37         */
38         for(i = 0; i < DEPTH; i++)
39         {
40              /*周期为128个点的正弦波*/
41             s = sin( PI * i * 2 / DEPTH);   // sin (x * π/180°) 取值范围-1至1,注意 sin() 函数是 double 类型
42
43             /*将-1~1之间的正弦波的值扩展到0-255之间*/
44             temp = (int)( (s+1) * pow(2, WIDTH - 1) );  //正弦值扩展到 0 至 2 的 WIDTH次幂,注意 pow() 函数是 double 类型
45
46             /*以十六进制输出地址和数据*/
47             fprintf (fp, "%x \t : \t %x;\n", i, temp);
48         }//end for
49
50         fprintf (fp, "END;\n");
51         fclose (fp);
52     }
53 }

sin_pro.c

2:三角波

用斜率计算

 1 /**************************************************
 2
 3       三角波 mif 生成
 4
 5 ***************************************************/
 6 #include <stdio.h>
 7 #include <math.h>
 8
 9 #define DEPTH 128     /*数据深度,即存储单元的个数,可更改*/
10 #define WIDTH 8       /*存储单元的宽度,可更改*/
11
12 int main(void)
13 {
14     int i,temp = 0;
15
16
17     FILE *fp;
18     fp = fopen("TrianglePro.mif","w");   /*可更改,但扩展名必须为.mif*/
19     if(NULL == fp)
20         printf("Can not creat file!\r\n");
21     else
22     {
23         printf("File created successfully!\n");
24         /*
25         *    生成文件头:注意不要忘了“;”
26         */
27         fprintf (fp, "DEPTH = %d;\n",DEPTH);
28         fprintf (fp, "WIDTH = %d;\n",WIDTH);
29         fprintf (fp, "ADDRESS_RADIX = HEX;\n");
30         fprintf (fp, "DATA_RADIX = HEX;\n");
31         fprintf (fp, "CONTENT\n");
32         fprintf (fp, "BEGIN\n");
33
34         /*
35         * 以十六进制输出地址和数据
36         */
37         for(i = 0; i < DEPTH; i++)
38         {
39             if (i <= DEPTH / 2)
40                 //temp = (int)(i * (pow (2, WIDTH) - 1) * 2 / DEPTH);
41                 temp = (int)(((pow (2, WIDTH) - 1) * 2 / DEPTH) * i);  //斜率 * i
42             else
43                 //temp = (int)(temp - (pow (2, WIDTH) - 1) * 2 / DEPTH);
44                 temp = (int)(((pow (2, WIDTH) - 1) * 2 / DEPTH) * (DEPTH - 1 - i));  //斜率 * (depth-1 - i)
45             fprintf (fp, "%x \t : \t %x;\n", i, temp);
46         }//end for
47
48         fprintf (fp, "END;\n");
49         fclose (fp);
50     }
51 }

triangle_pro.c

3:锯齿波

用斜率计算

 1 /**************************************************
 2
 3       锯齿波 mif 生成
 4
 5 ***************************************************/
 6 #include <stdio.h>
 7 #include <math.h>
 8
 9 #define DEPTH 128     /*数据深度,即存储单元的个数,可更改*/
10 #define WIDTH 8       /*存储单元的宽度,可更改*/
11
12 int main(void)
13 {
14     int i,temp = 0;
15
16
17     FILE *fp;
18     fp = fopen("SawtoothPro.mif","w");   /*可更改,但扩展名必须为.mif*/
19     if(NULL == fp)
20         printf("Can not creat file!\r\n");
21     else
22     {
23         printf("File created successfully!\n");
24         /*
25         *    生成文件头:注意不要忘了“;”
26         */
27         fprintf (fp, "DEPTH = %d;\n",DEPTH);
28         fprintf (fp, "WIDTH = %d;\n",WIDTH);
29         fprintf (fp, "ADDRESS_RADIX = HEX;\n");
30         fprintf (fp, "DATA_RADIX = HEX;\n");
31         fprintf (fp, "CONTENT\n");
32         fprintf (fp, "BEGIN\n");
33
34         /*
35         * 以十六进制输出地址和数据
36         */
37         for(i = 0; i < DEPTH; i++)
38         {
39             temp = (int)(((pow (2, WIDTH) - 1) / (DEPTH - 1)) * i);  //斜率 * i
40             fprintf (fp, "%x \t : \t %x;\n", i, temp);
41         }//end for
42
43         fprintf (fp, "END;\n");
44         fclose (fp);
45     }
46 }

sawtooth_pro.c

4:方波

 1 /**************************************************
 2
 3       方波 mif 生成
 4
 5 ***************************************************/
 6 #include <stdio.h>
 7 #include <math.h>
 8
 9 #define DEPTH 128     /*数据深度,即存储单元的个数,可更改*/
10 #define WIDTH 8       /*存储单元的宽度,可更改*/
11
12 int main(void)
13 {
14     int i,temp;
15
16     FILE *fp;
17     fp = fopen("SquarePro.mif","w");   /*可更改,但扩展名必须为.mif*/
18     if(NULL == fp)
19         printf("Can not creat file!\r\n");
20     else
21     {
22         printf("File created successfully!\n");
23         /*
24         *    生成文件头:注意不要忘了“;”
25         */
26         fprintf (fp, "DEPTH = %d;\n",DEPTH);
27         fprintf (fp, "WIDTH = %d;\n",WIDTH);
28         fprintf (fp, "ADDRESS_RADIX = HEX;\n");
29         fprintf (fp, "DATA_RADIX = HEX;\n");
30         fprintf (fp, "CONTENT\n");
31         fprintf (fp, "BEGIN\n");
32
33         /*
34         * 以十六进制输出地址和数据
35         */
36         for(i = 0; i < DEPTH; i++)
37         {
38             if (i < DEPTH / 2)
39                 temp = 0;
40             else
41                 temp = (int)(pow (2, WIDTH) - 1);
42             fprintf (fp, "%x \t : \t %x;\n", i, temp);
43         }//end for
44
45         fprintf (fp, "END;\n");
46         fclose (fp);
47     }
48 }

square_pro.c

整合到一个函数里

 1  /**************************************************
 2
 3        mif 文件生成
 4
 5 ***************************************************/
 6
 7 #include <stdio.h>
 8 #include <math.h>
 9
10 /*-------------------------参数区------------------------*/
11
12 #define DEPTH 128     /* 数据深度,即存储单元的个数*/
13 #define WIDTH 8       /* 存储单元的宽度 */
14 #define MODE 4        /* 1:正弦波   2:三角波   3:锯齿波   4:方波 */
15
16 /*-------------------------参数区------------------------*/
17
18
19 #define PI 3.141592
20
21 int main(void)
22 {
23     int i,temp;
24
25     FILE *fp;
26     fp = fopen("yl.mif","w");   /*可更改,但扩展名必须为.mif*/
27     if(NULL == fp)
28         printf("Can not creat file!\r\n");
29     else
30     {
31         printf("File created successfully!\n");
32         /*
33         *    生成文件头:注意不要忘了“;”
34         */
35         fprintf (fp, "DEPTH = %d;\n",DEPTH);
36         fprintf (fp, "WIDTH = %d;\n",WIDTH);
37         fprintf (fp, "ADDRESS_RADIX = HEX;\n");
38         fprintf (fp, "DATA_RADIX = HEX;\n");
39         fprintf (fp, "CONTENT\n");
40         fprintf (fp, "BEGIN\n");
41
42         /*
43         * 以十六进制输出地址和数据
44         */
45
46         for(i = 0; i < DEPTH; i++)
47         {
48             switch(MODE)
49             {
50                 case 1 ://sine
51                 {
52                     temp = (int)( (sin( PI * i * 2 / DEPTH) + 1) * pow(2, WIDTH - 1) );
53                     break;
54                 }
55                 case 2 ://triangle
56                 {
57                     if (i <= DEPTH / 2)
58                         temp = (int)(((pow (2, WIDTH) - 1) * 2 / DEPTH) * i);  //斜率 * i
59                     else
60                         temp = (int)(((pow (2, WIDTH) - 1) * 2 / DEPTH) * (DEPTH - 1 - i));
61                     break;
62                 }
63                 case 3 ://sawtooth
64                 {
65                     temp = (int)(((pow (2, WIDTH) - 1) / (DEPTH - 1)) * i);
66                     break;
67                 }
68                 case 4 ://square
69                 {
70                     if (i < DEPTH / 2)
71                         temp = 0;
72                     else
73                         temp = (int)(pow (2, WIDTH) - 1);
74                     break;
75                 }
76                 default:
77                 {
78                     break;
79                 }
80             }
81             fprintf (fp, "%x \t : \t %x;\n", i, temp);
82         }//end for
83
84         fprintf (fp, "END;\n");
85         fclose (fp);
86     }
87 }

如有错误还请指出,如有侵权还请告知,如需转载请注明出处!

本人博客:http://www.cnblogs.com/yllinux/

原文地址:https://www.cnblogs.com/yllinux/p/8151383.html

时间: 2024-08-07 08:52:23

mif文件C语言生成的相关文章

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

mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.生成QuartusII11.0可用的mif文件,有如下几种方式: 方法1:利用Quartus自带的mif编辑器 优点:对于小容量RAM可以快速方便的完成mif文件的编辑工作,不需要第三方软件的编辑: 缺点:一旦数据量过大,一个一个的输入会使人崩溃: 使用方法:在quartus中,[file]/[new],选择Memory  Initialization file,弹出如下窗口:

mif文件生成方法

mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.常见生成方法: Quartus自带的mif编辑器生成 mif软件生成 高级编程语言生成 前两种方法都有一定的缺陷,主要介绍第三种方法,按照mif文件格式,使用高级编程语言(Matlab.C)编写生成. 注意: mif文件都是ASCⅡ码,负数应该是用补码处理,否则负数在mif文件中会变成0. Matlab参考代码如下: clc;clear;close all; width = 1

用matlab生成mif文件

module rom_ip( clk,data, rst_n ); input clk; input rst_n; output [7:0] data; reg [7:0] add; rom_ip_mif rom_ip_mif_inst ( .address ( add ), .clock ( clk ), .q ( data ) ); always @(posedge clk or negedge rst_n) if(!rst_n)begin add <= 8'd0; end else if(

FPGA学习笔记之mif文件生成方法总结

方法1:利用Quartus自带的mif编辑器 优点:对于小容量RAM可以快速方便的完成mif文件的编辑工作,不需要第三方软件的编辑: 缺点:一旦数据量过大,一个一个的输入会使人崩溃: 使用方法:在quartus中,[file]/[new],选择Memory  Initialization file,弹出如下窗口: Number of words:可寻址的存储单元数,对于8bit地址线,此处选择256: words size:存储单元宽度,8bit: 然后点击“OK”. 在表格中输入初始化数据:

如何生成各种mif文件,绝对经典!!!

mif文件生成模板,只需要5步,很简单!!!!! 先说明如何操作,1-2-3-4-5步,后面附上模板!!! 下面以汉字去模演示过程: 1.取模软件设置:注意这里是设置的输出数据的格式!!!!!!!!!! 2.生成字模,并保存 3.用Notepad++打开生成的txt文件,并去除干扰字符 4. 5. 6.附上模板 --MIF file template WIDTH=64; DEPTH=512; ADDRESS_RADIX=DEC; DATA_RADIX=HEX; CONTENT BEGIN 0 :

modelsim仿真rom.mif文件配置需要绝对路径

昨晚用modelsim仿真ROM,居然输出的数据全部都是000.这个在以前是没有过的.难道modelsim坏了?我试了一个以前的rom测试文件,居然显示正常.这就怪了.难道2个月没碰就这么生疏了? 然后开始找原因.最后看到一个帖子说,如果rom无输出,可能是IP核配置文件的,初始化文件需要使用绝对路径.然后我就把配置文件的初始化mif改成了绝对路径.居然就好了. 但是我查看了下以前的测试.也没有是绝对路径啊.唉~~~只能说modelsim还有待加强啊! modelsim仿真rom.mif文件配置

hex转mif文件 verilog

用FPGA来跑ARM M0核的时候,刚开始将Keil编译产生的hex文件拿来仿真下到板子上的时候,发现程序运行不正确.细细观察仿真波形发现,在Altera的ROM IP中直接调用Keil产生的hex文件,出来数据是不正确的.比较Quartus产生的HEX文件和标准的Hex文件,发现两者之间的格式不是完全一样.于是干脆直接将Keil产生的Hex文件转换成mif文件. 代码是用verilog写的,以调试通过,M0也运行正常.由于没有判断Extended LinearAddress Record,该程

MIF文件编写小技巧

教大家一个简单的向MIF文件中导入数据的办法. 以2048点8位正弦波数据为例(最小值0,最大值200). 1.打开MATLAB,键入公式 clearx = 1:2048;y = floor(100*(sin(2*pi*x/2048)+1)); 2.打开工作区变量y 3.复制工作区数据 4.在Quartus II中新建mif文件 5.选择字数为2048 6.全选后粘贴 7.Ctrl+S保存

fpga rom 初始化mif文件生成

mif文件的格式 width= depth= address_radix= data_radix= content begin 00:    ; 01:   ; 02:   ; .... end; 所以只需要用matlab生成中间部分的数,然后添加头尾格式就可以了,当然文件后缀一定得是.mif matlab例子 clcclear alln=[1:1000];ratio=0.125;%ratio means fo/fs;sintemp=sin(2*pi*ratio*n);sinround=roun