Xilinx的ROM的IP核使用(以vivado为例)

        利用 ROM可以进行DDS(直接频率合成),也可以产生需要的信号,可以存入低频率的正弦波形文件,然后通过改变频率控制字来改变输出频率。

        以产生线性调频信号为例,把线性调频信号存入ROM中,然后周期性产生线性调频信号。

        这里主要是说明一下ROM的用法,实际产生线性调频信号是通过存正弦波形,然后控制频率控制字来实现。


ROM IP核的配置:

首先添加ROM IP核,如下所示,找到Block Memory Generator,双击打开 

然后后修改IP核的名字,将存储器的类型改为"Single Port ROM"

         配置数据的位宽和数据的深度,数据的位宽是存储数据的定点数有多少个比特表示,深度是数据的数量。使能类型改为"Always Enabled"

        接下来就导入存储波形数据coe文件,选中"Load lnit File" ,然后导入coe文件。至于coe文件的产生可以 参考这篇文章。

用matlab产生FPGA(Xilinx)下产生ROM所需数据的.coe文件icon-default.png?t=M276https://blog.csdn.net/QUACK_G/article/details/124132014?spm=1001.2014.3001.5502

 下面是对配置的总结,首先是资源利用,然后是延迟时间,延迟了两个时钟,最后表示用了8根地址线。

 

导入coe文件成功后就可以点击OK,产生ip核。 

 IP核的例化

在IP Sources中可以看到生成的IP核,打开.veo文件

 在打开的.veo文件的最下方可以看到IP核的例化例子,可以按照这个例子来进行例化IP核

 

         然后按照上述的例子进行例化IP核,这里的数据位宽为14位,深度为256。

module lfm_i_out(
    input          clk,
    input          reset,     //高电平复位
    output  [13:0] singal_out

    );

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


    lmf_i  your_lmf_i (
        .clka(clk),    // input wire clka
        .addra(addr),  // input wire [7 : 0] addra
        .douta(singal_out)  // output wire [13 : 0] douta
        );
 
endmodule

进行仿真后,得到如下的仿真图,周期性产生线性调频信号。

同时与ROM内的数据比较可以看出,数据延时了两个时钟产生,

Vado ROM IP核是一种在Xilinx Vivado开发环境中使用IP核,用于实现只读存储器(ROM)功能。ROM IP核可以从事先存储的数据中读取信息,并在设计中使用这些数据。该IP核可以配置为具有不同的位宽和深度,以满足设计需求。例如,可以使用MATLAB生成的coe文件作为输入,其中包含了不同波形(正弦、方波、三角波)和组合采样文件的数据。 在使用Vivado进行ROM IP核设计时,您需要编写仿真文件,其中定义了时钟、复位和数据地址信号,并将ROM IP核例化到仿真设计中。通过仿真文件的代码,您可以验证ROM IP核的功能和正确性。 下面是一个关于如何使用Vivado ROM IP核的例子,其中包含了时钟、复位和数据地址信号的定义,并将ROM IP核例化到仿真设计中: ```verilog `timescale 1ns / 1ps module tb_rom(); reg sys_clk; reg sys_rst_n; reg [7:0 addra; wire [7:0 douta; // Initialize sys_clk initial begin sys_clk = 1'b1; sys_rst_n <= 1'b0; #20; sys_rst_n <= 1'b1; end // Change sys_clk always #10 sys_clk = ~sys_clk; // Increment addra always @(posedge sys_clk or negedge sys_rst_n) begin if (sys_rst_n == 1'b0) begin addra <= 8'b0; end else if (addra == 8'd255) begin addra <= 8'b0; end else begin addra <= addra + 1'b1; end end // Instantiate ROM IP核 rom tb_rom( .addra(addra), .douta(douta), .sys_clk(sys_clk) ); endmodule ``` 这是一个简单的仿真文件示例,其中定义了sys_clk时钟信号、sys_rst_n复位信号和addra数据地址信号,并将这些信号与ROM IP核实例中的相应端口连接起来。通过仿真文件,您可以验证ROM IP核在仿真级别中的功能和行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值