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

相关推荐
星幻元宇VR11 小时前
公共安全实训展厅设备【人防知识学习系统】
科技·学习·安全
心中有国也有家14 小时前
AtomGit Flutter 鸿蒙客户端:情绪日记的时间线实现
学习·flutter·华为·harmonyos
百里香酚兰15 小时前
【python学习笔记】pyttsx3库疑似只播报一次语音
笔记·python·学习
恣逍信点16 小时前
《凌微经》助读:本体论根基——“无之自悖”与“形性一体”
人工智能·科技·学习·程序人生·生活·交友·哲学
chh56317 小时前
C++--string
java·开发语言·网络·c++·学习
尤老师FPGA18 小时前
HDMI数据的接收发送实验(十八)
fpga开发
浩瀚地学18 小时前
【Java基础复习】IO流(四)
java·开发语言·经验分享·笔记·学习
心中有国也有家19 小时前
AtomGit Flutter 鸿蒙客户端:一键记录情绪的极致体验
学习·flutter·华为·harmonyos
lauo19 小时前
从52起融资看教育科技新范式:PopLang引擎与Token节点经济如何重塑AI学习终端
人工智能·科技·学习
心中有国也有家19 小时前
AtomGit Flutter 鸿蒙客户端: 周情绪柱状图
学习·flutter·华为·harmonyos