PDS联合modelsim仿真报错问题解决记录:GTP_DRM9K.v(771): (vopt-7063) Failed to find ‘GRS_INST‘ in hierarchical name
本文解决了紫光同创PDS联合Modelsim仿真ROM IP核生成正弦波时出现的GRS_INST文件缺失问题。关键解决方案是在测试文件中添加原语GTP_GRS GRS_INST(.GRS_N (1'b1));。同时强调ROM的dat数据文件需严格遵循官方模板格式,并提供了正弦波ROM的顶层模块实现代码,包括时钟控制、地址生成和ROM实例化。测试文件模板展示了如何驱动时钟、复位信号并观测输出波形,确
项目场景:
紫光同创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
更多推荐


所有评论(0)