MATLAB制作mif文件——正弦信号发生器1

正弦信号发生器:需要按一定脉冲发送采样的正弦数据。我们需要把数据存入ROM中,之后按一定脉冲频率把数据输出。

信号发生器可以用一个存储器实现,根据不同的地址信号,输出不同的信号值即可。配置RAM或ROM中的数据可以用mif文件,mif文件是存储器初始化文件,即memory initialization file,生成mif文件可用QuartusII自带的mif编辑器,但是这种方法必须一个个的确定每个点的值(自己手动输入),不适合大规模存储器。因此可以用高级语言编程生成mif文件。

常见生成方法:

  1. Quartus自带的mif编辑器生成
  2. mif软件生成
  3. 高级编程语言生成

 主要介绍第三中方法,按照mif文件格式,使用高级编程语言(Matlab、C)编写生成

depth  =64;%采样深度,即采样个数
widths =8 ;%采样数据位宽
N=0:63;%采样时刻,采样频率为1;0:1:64的简写
s= sin(2*pi*N/64);%信号生成

fidc = fopen('E:\Quartus-Projec\fpgarom\sine.mif','wt')      %创建mif文件
%写入mif文件的开头
fprintf(fidc,'depth=%d\n',depth);
fprintf(fidc,'width=%d\n',widths);
fprintf(fidc,'address_radix=UNS;\n');%地址格式,UNS表示保持现有格式
fprintf(fidc,'data_radix=UNS;\n');%数据格式
fprintf(fidc,'content begin\n');
%采样数据的输出
for(x =1:depth)
    fprintf(fidc,'%d:%d;\n',x-1,round(31*sin(2*pi*(x-1)/32)+32));
end;%round(A)将A中的元素按最近的整数取整,即四舍五入;数据为x-1:round(A(x)),其中x-1为采样时刻,A(x)为采样数据。
fprintf(fidc,'end;');%对应fprintf(fidc,'content begin\n')
fclose(fidc);

L=31*sin(2*pi*(N-1)/32)+32;
plot(L);

下面是生成后的sine.mif文件的内容,有助于理解上面的程序,应用于ROM时,sine.mif文件里的第一和第二行后面要加“;”

depth=64
width=8

address_radix=UNS;
data_radix=UNS;
content begin
0:32;
1:38;
2:44;
3:49;
4:54;
5:58;
6:61;
7:62;
8:63;
9:62;
10:61;
11:58;
12:54;
13:49;
14:44;
15:38;
16:32;
17:26;
18:20;
19:15;
20:10;
21:6;
22:3;
23:2;
24:1;
25:2;
26:3;
27:6;
28:10;
29:15;
30:20;
31:26;
32:32;
33:38;
34:44;
35:49;
36:54;
37:58;
38:61;
39:62;
40:63;
41:62;
42:61;
43:58;
44:54;
45:49;
46:44;
47:38;
48:32;
49:26;
50:20;
51:15;
52:10;
53:6;
54:3;
55:2;
56:1;
57:2;
58:3;
59:6;
60:10;
61:15;
62:20;
63:26;
end;

遇到的难点:就是理解程序中的每一步骤。主要是采样点、采样时刻、采样数据的个数及位宽等。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值