项目场景:

紫光同创pds联合modelsim仿真 调用 ROM ip核生成正弦波波形,modelsim仿真出现报错,报错问题如下:

** Error (suppressible): G:/PDS_setup/arch/vendor/pango/verilog/simulation/GTP_DRM9K.v(771):
(vopt-7063) Failed to find ‘GRS_INST’ in hierarchical name
‘GRS_INST.GRSNET’.
Region:sin_wave_tb.u_sin_wave.u_sin.U_ipml_rom_rom.U_ipml_spram_rom.ADDR_LOOP[0].DATA_LOOP[0].U_GTP_DRM9K
Optimization failed

原因分析:

这个错误的意思就是找不到GRS_INST这个.v文件。

解决方案:

这是我ROM ip核的配置,dat文件就是正弦波数据,dat文件是需要一定的模版的,具体模版如下:而且官方给了标准模版,要按照模版数据进行编写。
在这里插入图片描述
dat文件保准格式:
在这里插入图片描述
顶层:

module sin_wave(
    input    clk,
    input    rst_n,
    output wire [7:0] sin_data
   );

reg    [7:0]    addr;

always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)begin
        addr<=8'd0;
    end
    else begin
        addr<=addr + 8'd1;
    end
end


rom u_sin (
  .addr(addr),          // input [7:0]
  .clk(clk),            // input
  .rst(~rst_n),            // input
  .rd_data(sin_data)     // output [7:0]
);

endmodule

解决办法就是:在tb测试文件中添加一句原语:GTP_GRS GRS_INST(.GRS_N (1’b1));

测试文件:

`timescale 1ns / 1ps

module sin_wave_tb;

// 输入信号(reg类型,测试端驱动)
reg         clk;
reg         rst_n;

// 输出信号(wire类型,观测模块输出)
wire [7:0]  sin_data;

// 例化待测试模块
sin_wave u_sin_wave(
    .clk      (clk),
    .rst_n    (rst_n),
    .sin_data (sin_data)
);

// 生成时钟(50MHz,周期20ns,占空比50%)
initial begin
    clk = 1'b0;
    forever #10 clk = ~clk;  // 每10ns翻转一次,周期20ns
end

// 复位与测试流程
initial begin
    // 初始复位状态
    rst_n = 1'b0;
    #20;  // 保持复位20ns(1个时钟周期)
    
    // 释放复位,开始正常工作
    rst_n = 1'b1;
    #10000;  // 持续仿真10000ns,覆盖多个ROM地址循环(256个地址为1个周期)
    
    
end

GTP_GRS GRS_INST(.GRS_N (1'b1));

endmodule
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐