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核输出是无延迟的,真香!

相关推荐
Larry_Yanan1 小时前
QML学习笔记(三十一)QML的Flow定位器
java·前端·javascript·笔记·qt·学习·ui
与己斗其乐无穷1 小时前
C++学习记录(17)红黑树简单实现map和set
学习
杰瑞学AI1 小时前
我的全栈学习之旅:FastAPI (持续更新!!!)
后端·python·websocket·学习·http·restful·fastapi
The_Killer.1 小时前
近世代数(抽象代数)详细笔记--环(也有域的相关内容)
笔记·学习·抽象代数·
Larry_Yanan2 小时前
QML学习笔记(三十)QML的布局器(Layouts)
c++·笔记·qt·学习·ui
li星野2 小时前
打工人日报#20251009
fpga开发
cycf2 小时前
Vivado 时序约束的完整作战地图(二)
fpga开发
cycf3 小时前
时钟周期约束(三)
fpga开发
szxinmai主板定制专家3 小时前
RK3588+AI算力卡替代英伟达jetson方案,大算力,支持FPGA自定义扩展
arm开发·人工智能·分布式·fpga开发
_李小白4 小时前
【OPENGL ES 3.0 学习笔记】第一天:认识渲染管道
笔记·学习