FPGA_学习_17_IP核_ROM(无延迟-立即输出)

由于项目中关于厂商提供的温度-偏压曲线数据已经被同事放在ROM表了,我这边可用直接调用。 今天在仿真的时候,发现他的ROM表用的IP核是及时输出的,就是你地址给进去,对应地址的ROM数据就立马输出,没有延迟。 我打开他的IP核配置一看,他用的是Distributed Memory Generator 。 我以前用的是Block Memory Generator是要延迟一拍的。所以,我立马进行了Distributed Memory Generator的测试。

1 ROM IP核配置 (Distributed Memory Generator)

|---------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------|
| IP核已生成 | 老规矩,查看如何例化 |

2 ModelSim仿真测试

源码

cpp 复制代码
`timescale 1ns / 1ps

module lab_rom(
        input   wire    clk,
        input   wire    rst_n
);


//==================================================================
//                        Parameter define
//==================================================================
parameter       MAX_ADDR       = 32 - 1;


//==================================================================
//                        Internal Signals
//==================================================================
(* MARK_DEBUG="true" *) reg     [4:0]   a;
(* MARK_DEBUG="true" *) wire    [15:0]  spo;

//----------------------------- addra自增 -----------------------------
always @(posedge clk or negedge rst_n) begin
        if (rst_n == 1'b0) begin
            a <= 'd0;        
        end
        else if(a == MAX_ADDR)begin
                a <= 'd0;
        end
        else begin
                a <= a + 1'b1;
        end
end


//----------------------------- s_rom_32x16b例化 -----------------------------
s_rom_32x16b u1_rom_32x16b (
  .a(a),      // input wire [4 : 0] a
  .spo(spo)  // output wire [15 : 0] spo
);

仿真代码

cpp 复制代码
`timescale 1ns/1ps
module tb_lab_rom (); /* this is automatically generated */

    // clock
    reg clk;
    initial begin
        clk = 1'b0;
        forever #(10) clk = ~clk;
    end

    // asynchronous reset
    reg rst_n;
    initial begin
        rst_n <= 1'b0;
        #10
        rst_n <= 1'b1;
    end

    // (*NOTE*) replace reset, clock, others
    parameter MAX_ADDR = 32 - 1;

    lab_rom #(.MAX_ADDR(MAX_ADDR)) inst_lab_rom (.clk(clk), .rst_n(rst_n));

endmodule

约束文件

cpp 复制代码
create_clock -period 20.000 [get_ports clk]

set_property PACKAGE_PIN N18 [get_ports clk]
set_property PACKAGE_PIN T12 [get_ports rst_n]

set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst_n]

仿真结果

从仿真来看,确实用Distributed Memory Generator生成的ROM IP核是无延迟的。

3 在线调试

在线调试的ILA步骤我这里就不赘述了。 我直接给出结果。

总得来讲,Distributed Memory Generator, 虽然深度必须是16的倍数 ,但其生成的ROM IP核输出是无延迟的,真香!

相关推荐
Young Doro8 小时前
独立性检测学习任务
人工智能·学习·数据挖掘
卡卡~~9 小时前
“101计划”核心课程实践教材《数据实验结构指导-C++语言版》题目集
开发语言·c++·学习·算法
lengxuenong10 小时前
树状数组 · 信息学学习手册1-求和3个模板
c++·学习·算法·青少年编程
lanxiaoqing0211 小时前
演讲训练的第一步:先敢说,再会说
人工智能·学习·学习方法·口才
星夜离尘5612 小时前
FPGA 小数据字如何纠错:完整实现并验证扩展 Hamming (13,8) SECDED
fpga开发
m4Rk_13 小时前
【论文阅读】Agent记忆机制(109):MemComposer——用强化学习学会选哪些记忆、选多少以及怎样排序
论文阅读·人工智能·学习·开源·github
zhangdaliangmvp13 小时前
快速排序的学习理解:从基础分治到三路划分优化
c++·学习·算法
叼烟扛炮13 小时前
Linux 学习笔记(四):文件检索与管道重定向
linux·笔记·学习
王夏奇13 小时前
AI工具学习
网络·学习
Warolitbos13 小时前
【数据库】SQL进阶15题,窗口函数/索引/事务一页速查
数据库·sql·学习·mysql·面试