Vivado ROM生成正弦波(简单易懂)

使用软件: Vivado   (需要使用.coe文件)

1  :(1)  生成.coe文件  

      新建一个txt文档,后缀名改成.coe. (注意文件名一定要英文开头,不能出现中文和中文的字母和特殊符号)

        Vivado ROM生成正弦波(简单易懂)_第1张图片

     (2)    文档格式如下:

         .COE文件格式如下. 

memory_initialization_radix=10;
memory_initialization_vector=
127,
130,
133,
136,
139,
142,
145,
148,
151,
154,
157,
160,
163,
166,
169,
172,
175,
178,
181,
184,
186,
189,
192,
194,
197,
200,
202,
205,
207,
209,
212,
214,
216,
218,
221,
223,
225,
227,
229,
230,
232,
234,
235,
237,
239,
240,
241,
243,
244,
245,
246,
247,
248,
249,
250,
250,
251,
252,
252,
253,
253,
253,
253,
253,
254,
253,
253,
253,
253,
253,
252,
252,
251,
250,
250,
249,
248,
247,
246,
245,
244,
243,
241,
240,
239,
237,
235,
234,
232,
230,
229,
227,
225,
223,
221,
218,
216,
214,
212,
209,
207,
205,
202,
200,
197,
194,
192,
189,
186,
184,
181,
178,
175,
172,
169,
166,
163,
160,
157,
154,
151,
148,
145,
142,
139,
136,
133,
130,
127,
123,
120,
117,
114,
111,
108,
105,
102,
99,
96,
93,
90,
87,
84,
81,
78,
75,
72,
69,
67,
64,
61,
59,
56,
53,
51,
48,
46,
44,
41,
39,
37,
35,
32,
30,
28,
26,
24,
23,
21,
19,
18,
16,
14,
13,
12,
10,
9,
8,
7,
6,
5,
4,
3,
3,
2,
1,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
1,
2,
3,
3,
4,
5,
6,
7,
8,
9,
10,
12,
13,
14,
16,
18,
19,
21,
23,
24,
26,
28,
30,
32,
35,
37,
39,
41,
44,
46,
48,
51,
53,
56,
59,
61,
64,
67,
69,
72,
75,
78,
81,
84,
87,
90,
93,
96,
99,
102,
105,
108,
111,
114,
117,
120,
123;

 

        建完直接保存即可使用。

 

 2   : (1)   添加rom核

           Vivado ROM生成正弦波(简单易懂)_第2张图片

 

        (2)    调试rom IP核    (我们写的正弦波是 8位宽 256个深度的)

          Vivado ROM生成正弦波(简单易懂)_第3张图片

 

   (3)    选择寄存数据 (这样可以让输入或输出的数据更加稳定,但是需要延迟一个时钟周期)

                       Vivado ROM生成正弦波(简单易懂)_第4张图片

 

          (4)   现在就来添加我们生成的 .coe文件 。

      Vivado ROM生成正弦波(简单易懂)_第5张图片

 

     3     :     (1)    编写代码程序部分  

  

module rom(                     
input clk,                          //50M时钟
input rst,                          //复位
output [7:0] data                   //rom 输出的数据
);

 

reg [7:0] addr;                            //rom 数据地址
always@ (posedge clk or negedge rst) begin 
if (!rst)
addr <= 0;                                  //复位地址清零
else 
addr <= addr + 1;                           //地址自增
end 

dist_mem_gen_0 your_instance_name (         //例化的ROM
.a(addr), // input wire [7 : 0] a
.clk(clk), // input wire clk
.qspo(data) // output wire [7 : 0] qspo
);

 

endmodule

     (2)    编写tb仿真文件

      

`timescale 1ns / 1ps        // 时间单位1ns,时间精度1ps

 

module tb();
reg clk;                    //50M时钟
reg rst;                    //复位
wire [7:0] data;            //rom数据

initial begin               //初始化
clk = 0;
rst = 0;
#10 rst = 1; 
end

always #10 clk = ~clk;      //每10ps 反转一次.     因为我们上面定义的仿真精度就是1ps

rom inst_rom(               //例化底层文件
.clk (clk) ,
.rst (rst) ,
.data (data) 
);
endmodule

    (3) :   看仿真图,验证程序.

  (简单程序:编程完成)

生产波形数据软件网站 : https://download.csdn.net/download/weixin_46062412/16295009?spm=1001.2014.3001.5501

          这款软件生成的波形数据是.MIF文件大家可以根据我上面给出的波形数据.COE文件的格式自行修改即可.(如果不会使用可以在下方留言不超2小时就会回复,半夜三更除外)

你可能感兴趣的:(FPGA,经验分享,程序人生,小程序)