恳请请各位指正
最近在学习FIR滤波器,通过quartus生成FIR的IP核,再调用modelsim进行仿真,报错如下:
系统版本:win10
quartus: 13.1(IP核已破解,如下图)
modelsim: ModelSim-Altera 10.1d
可能是工程中既有.v又有.vhd文件,可是.vhd文件明明是在生成IP核时产生的,但是在生成IP核时选了verilog.
1、主代码:
module fir_prj(
clk ,
rst_n ,
key ,
dac_mode ,
dac_sleep ,
dac_clka ,
dac_dat_a ,
dac_wra ,
dac_clkb ,
dac_dat_b ,
dac_wrb
);
input clk ;
input rst_n ;
input [7:0] key ;
output dac_mode ;
output dac_sleep ;
output dac_clka ;
output [7:0] dac_dat_a ;
output dac_wra ;
output dac_clkb ;
output [7:0] dac_dat_b ;
output dac_wrb ;
reg [7:0] sin_data ;
reg [31:0] cnt1 ;
wire add_cnt1 ;
wire end_cnt1 ;
wire [16:0] addr_temp ;
wire [6:0] addr ;
reg [11:0] x ;
reg [7:0] dac_dat_a ;
wire dac_sleep ;
wire dac_mode ;
wire dac_clka ;
reg [1:0] cnt0 ;
wire add_cnt0 ;
wire end_cnt0 ;
wire [7:0] fir_dout ;
wire fir_dout_vld;
reg [7:0] dac_dat_b ;
wire dac_clkb ;
wire dac_wrb ;
wire [7:0] fir_din ;
wire [7:0] fir_dout2 ;
always @(*) begin
case(addr)
0: sin_data = 8'h7F;
1: sin_data = 8'h85;
2: sin_data = 8'h8C;
3: sin_data = 8'h92;
4: sin_data = 8'h98;
5: sin_data = 8'h9E;
6: sin_data = 8'hA4;
7: sin_data = 8'hAA;
8: sin_data = 8'hB0;
9: sin_data = 8'hB6;
10: sin_data = 8'hBC;
11: sin_data = 8'hC1;
12: sin_data = 8'hC6;
13: sin_data = 8'hCB;
14: sin_data = 8'hD0;
15: sin_data = 8'hD5;
16: sin_data = 8'hDA;
17: sin_data = 8'hDE;
18: sin_data = 8'hE2;
19: sin_data = 8'hE6;
20: sin_data = 8'hEA;
21: sin_data = 8'hED;
22: sin_data = 8'hF0;
23: sin_data = 8'hF3;
24: sin_data = 8'hF5;
25: sin_data = 8'hF7;
26: sin_data = 8'hF9;
27: sin_data = 8'hFB;
28: sin_data = 8'hFC;
29: sin_data = 8'hFD;
30: sin_data = 8'hFE;
31: sin_data = 8'hFE;
32: sin_data = 8'hFE;
33: sin_data = 8'hFE;
34: sin_data = 8'hFE;
35: sin_data = 8'hFD;
36: sin_data = 8'hFC;
37: sin_data = 8'hFA;
38: sin_data = 8'hF8;
39: sin_data = 8'hF6;
40: sin_data = 8'hF4;
41: sin_data = 8'hF1;
42: sin_data = 8'hEF;
43: sin_data = 8'hEB;
44: sin_data = 8'hE8;
45: sin_data = 8'hE4;
46: sin_data = 8'hE0;
47: sin_data = 8'hDC;
48: sin_data = 8'hD8;
49: sin_data = 8'hD3;
50: sin_data = 8'hCE;
51: sin_data = 8'hC9;
52: sin_data = 8'hC4;
53: sin_data = 8'hBE;
54: sin_data = 8'hB9;
55: sin_data = 8'hB3;
56: sin_data = 8'hAD;
57: sin_data = 8'hA7;
58: sin_data = 8'hA1;
59: sin_data = 8'h9B;
60: sin_data = 8'h95;
61: sin_data = 8'h8F;
62: sin_data = 8'h89;
63: sin_data = 8'h82;
64: sin_data = 8'h7D;
65: sin_data = 8'h77;
66: sin_data = 8'h70;
67: sin_data = 8'h6A;
68: sin_data = 8'h64;
69: sin_data = 8'h5E;
70: sin_data = 8'h58;
71: sin_data = 8'h52;
72: sin_data = 8'h4C;
73: sin_data = 8'h46;
74: sin_data = 8'h41;
75: sin_data = 8'h3C;
76: sin_data = 8'h36;
77: sin_data = 8'h31;
78: sin_data = 8'h2C;
79: sin_data = 8'h28;
80: sin_data = 8'h23;
81: sin_data = 8'h1F;
82: sin_data = 8'h1B;
83: sin_data = 8'h17;
84: sin_data = 8'h14;
85: sin_data = 8'h11;
86: sin_data = 8'hE ;
87: sin_data = 8'hB ;
88: sin_data = 8'h9 ;
89: sin_data = 8'h7 ;
90: sin_data = 8'h5 ;
91: sin_data = 8'h3 ;
92: sin_data = 8'h2 ;
93: sin_data = 8'h1 ;
94: sin_data = 8'h1 ;
95: sin_data = 8'h1 ;
96: sin_data = 8'h1 ;
97: sin_data = 8'h1 ;
98: sin_data = 8'h2 ;
99: sin_data = 8'h3 ;
100: sin_data = 8'h4 ;
101: sin_data = 8'h6 ;
102: sin_data = 8'h7 ;
103: sin_data = 8'hA ;
104: sin_data = 8'hC ;
105: sin_data = 8'hF ;
106: sin_data = 8'h12;
107: sin_data = 8'h15;
108: sin_data = 8'h19;
109: sin_data = 8'h1D;
110: sin_data = 8'h21;
111: sin_data = 8'h25;
112: sin_data = 8'h2A;
113: sin_data = 8'h2E;
114: sin_data = 8'h33;
115: sin_data = 8'h38;
116: sin_data = 8'h3E;
117: sin_data = 8'h43;
118: sin_data = 8'h49;
119: sin_data = 8'h4E;
120: sin_data = 8'h54;
121: sin_data = 8'h5A;
122: sin_data = 8'h60;
123: sin_data = 8'h67;
124: sin_data = 8'h6D;
125: sin_data = 8'h73;
126: sin_data = 8'h79;
127: sin_data = 8'h7F;
endcase
end
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt1 <= 0;
end
else if(add_cnt1)begin
if(end_cnt1)
cnt1 <= 0;
else
cnt1 <= cnt1 + 1;
end
end
assign add_cnt1 = 1 ;
assign end_cnt1 = 0 ;
always @(*) begin
if(key == 0)
x = 262 ;
else if(key == 1)
x = 524 ;
else if(key == 2)
x = 786 ;
else if(key == 3)
x = 1029 ;
else if(key == 4)
x = 1311 ;
else if(key == 5)
x = 1573 ;
else if(key == 6)
x = 1835 ;
else
x = 2097 ;
end
assign addr_temp = cnt1 * x ;
assign addr = addr_temp >> 10 ;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
dac_dat_a <= 0 ;
end
else begin
dac_dat_a <= 255 - sin_data ;
end
end
assign dac_sleep = 0 ;
assign dac_mode = 1 ;
assign dac_wra = dac_clka ;
assign dac_clka = ~clk ;
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt0 <= 0;
end
else if(add_cnt0)begin
if(end_cnt0)
cnt0 <= 0;
else
cnt0 <= cnt0 + 1;
end
end
assign add_cnt0 = 1 ;
assign end_cnt0 = add_cnt0 && cnt0== 4 - 1 ;
assign fir_din = sin_data - 128 ;
my_fir u_fir(
.clk (clk ),
.reset_n (rst_n ),
.ast_sink_data (fir_din ),
.ast_sink_valid (end_cnt0 ),
.ast_sink_error (2'b00 ),
.ast_source_data (fir_dout ),
.ast_source_valid (fir_dout_vld ),
.ast_source_error ( )
);
assign fir_dout2 = fir_dout + 128 ;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
dac_dat_b <= 0 ;
end
else if(fir_dout_vld) begin
dac_dat_b <= 255 - fir_dout2 ;
end
end
assign dac_wrb = dac_clkb ;
assign dac_clkb = ~clk ;
endmodule
2、IP核代码:
`timescale 1 ps / 1 ps
module my_fir (
input wire clk, // clk.clk
input wire reset_n, // rst.reset_n
input wire [7:0] ast_sink_data, // avalon_streaming_sink.data
input wire ast_sink_valid, // .valid
input wire [1:0] ast_sink_error, // .error
output wire [7:0] ast_source_data, // avalon_streaming_source.data
output wire ast_source_valid, // .valid
output wire [1:0] ast_source_error // .error
);
my_fir_0002 my_fir_inst (
.clk (clk), // clk.clk
.reset_n (reset_n), // rst.reset_n
.ast_sink_data (ast_sink_data), // avalon_streaming_sink.data
.ast_sink_valid (ast_sink_valid), // .valid
.ast_sink_error (ast_sink_error), // .error
.ast_source_data (ast_source_data), // avalon_streaming_source.data
.ast_source_valid (ast_source_valid), // .valid
.ast_source_error (ast_source_error) // .error
);
endmodule
3、测试文件:
`timescale 1 ns/1 ns
module tb_fir_prj();
//时钟和复位
reg clk ;
reg rst_n;
//uut的输入信号
reg[7:0] key ;
//uut的输出信号
wire dac_mode ;
wire dac_sleep ;
wire dac_clka ;
wire [7:0] dac_dat_a ;
wire dac_wra ;
wire dac_clkb ;
wire [7:0] dac_dat_b ;
wire dac_wrb ;
//时钟周期,单位为ns,可在此修改时钟周期。
parameter CYCLE = 200;
//复位时间,此时表示复位3个时钟周期的时间。
parameter RST_TIME = 3 ;
//待测试的模块例化
fir_prj uut(
.clk (clk ),
.rst_n (rst_n ),
.key (key ),
.dac_mode (dac_mode ),
.dac_sleep (dac_sleep ),
.dac_clka (dac_clka ),
.dac_dat_a (dac_dat_a ),
.dac_wra (dac_wra ),
.dac_clkb (dac_clkb ),
.dac_dat_b (dac_dat_b ),
.dac_wrb (dac_wrb )
);
//生成本地时钟50M
initial begin
clk = 0;
forever
#(CYCLE/2)
clk=~clk;
end
//产生复位信号
initial begin
rst_n = 1;
#2;
rst_n = 0;
#(CYCLE*RST_TIME);
rst_n = 1;
end
//输入信号key赋值方式
initial begin
forever begin
#(10000*CYCLE);
//赋初值
key = 0;
#(10000*CYCLE);
key = 1;
#(10000*CYCLE);
key = 2;
#(10000*CYCLE);
key = 3;
#(10000*CYCLE);
key = 4;
#(10000*CYCLE);
key = 5;
#(10000*CYCLE);
key = 6;
#(10000*CYCLE);
key = 7;
end
end
endmodule
文件未添加到工程?
你这是加载过程出错,如果你使用的FIR IP核版本与ModelSim不兼容,可能会导致加载错误或者IP核文件可能损坏或不完整
modelsim仿真quartus软件IP核错误及解决办法
可以参考下
先检查 IP核接口,两种语言的模块实例化方式,以及仿真工程的设置
文件未添加到工程?
题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。
这个错误是因为工程中同时存在Verilog和VHDL文件,而且这些文件的命名不同步导致的。
在Quartus中生成FIR滤波器的IP核时,需要选择使用哪种语言进行描述,通常有两种选择:Verilog和VHDL。如果你选择了Verilog进行描述,那么生成的IP核文件也会是Verilog格式的;而如果你选择了VHDL进行描述,那么生成的IP核文件就是VHDL格式的。
那么在工程中同时出现Verilog和VHDL文件,你需要检查生成IP核时选择的是哪种语言,以及现有的文件是否与生成IP核时的语言相对应。如果生成IP核时选择的是Verilog,那么应该只会有Verilog格式的文件出现在工程中,如果生成时选择的是VHDL,那么应该只会有VHDL格式的文件出现在工程中。
如果你确定生成IP核时选用的是Verilog,但工程中却出现了VHDL格式的文件,那么你需要手动删除这些文件,并重新生成IP核。如果你不确定生成IP核时选用的是哪种语言,可以重复生成IP核,并检查生成的文件类型。
保你的设计文件存在并且路径正确。
设计文件可能被损坏或无法读取。尝试使用其他版本的控制台或工具打开该文件,看看是否可以解决问题。
你的仿真环境可能没有正确配置。请确保已经正确设置了ModelSim和相关的仿真库。
如果正在使用宏,可能是由于宏文件的问题。请检查宏文件,确保它没有语法错误或其他问题。
参考gpt
根据您提供的错误信息,这个问题可能是由于FIR IP核的设计与您使用的HDL语言不兼容所导致的。根据错误信息中的提示,ALTERA版本只支持单一的HDL语言。
要解决这个问题,您可以尝试以下几个步骤:
确认IP核的设计语言:检查FIR IP核的设计语言是否与您使用的HDL语言相匹配。如果您在Quartus中生成FIR IP核时选择了不同的HDL语言,可能会导致与您当前使用的HDL语言不兼容。
检查modelsim的设置:确保modelsim的设置与您使用的HDL语言相匹配。您可以在modelsim中的设置中检查HDL语言选项,并确保选择了正确的语言。
检查modelsim的版本:确保您使用的modelsim版本与您的设计工具(如Quartus)兼容。有时候,不同版本的设计工具和仿真工具之间可能存在兼容性问题。
尝试使用其他仿真工具:如果上述步骤都没有解决问题,您可以尝试使用其他的仿真工具,如Xilinx Vivado自带的仿真工具(如XSIM)或其他第三方仿真工具,来进行FIR IP核的仿真。
文件未加入工程
检查IP核生成的文件是否包含了所有必要的模块和子模块,在模块化设计中,如果某个模块没有被正确实例化或连接,会导致仿真错误
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:根据报错信息和提供的代码,可以看出存在以下问题和背景:报错是因为 仿真无法成功加载设计,导致程序中断。
【报错原因】根据报错信息,可以初步推测以下原因导致了错误:
1、 IP核实例化失败:报错信息中提到Instantiation of my_fir failed,表示在实例化FIR IP核时出现了问题。
2、 Quartus版本不支持:报错信息中提到ALTERA version supports only a single HDI,可能是因为你使用的Quartus版本不支持同时实例化多个HDI(Hierarchical Design Instance)。
【解决办法】要解决这个问题,可以尝试以下几个步骤:
1、 检查Quartus版本:确认你使用的Quartus版本是否支持同时实例化多个HDI。如果不支持,尝试升级到支持该功能的版本。
2、 检查IP核实例化:确保IP核的实例化部分代码正确无误,包括端口连接和信号命名。
3、 检查IP核文件路径:确认IP核文件的路径是否正确,并且在仿真环境中能够正确加载。
4、 检查依赖文件:确保所需的库文件和依赖文件已正确导入,并且在仿真环境中能够找到。
根据报错信息和问题的背景,需要对代码进行修改。以下是可能需要进行的更改:
1、 修改模块实例化部分:
将实例化模块的名称从my_fir_0002更改为my_fir,具体代码修改如下:
my_fir_0002 my_fir_inst (
.clk (clk), // clk.clk
.reset_n (reset_n), // rst.reset_n
.ast_sink_data (ast_sink_data), // avalon_streaming_sink.data
.ast_sink_valid (ast_sink_valid), // .valid
.ast_sink_error (ast_sink_error), // .error
.ast_source_data (ast_source_data), // avalon_streaming_source.data
.ast_source_valid (ast_source_valid), // .valid
.ast_source_error (ast_source_error) // .error
);
2、 修改测试模块实例化部分:确保实例化测试模块的名称与模块定义一致,具体修改如下:
fir_prj uut (
.clk (clk ),
.rst_n (rst_n ),
.key (key ),
.dac_mode (dac_mode ),
.dac_sleep (dac_sleep ),
.dac_clka (dac_clka ),
.dac_dat_a (dac_dat_a ),
.dac_wra (dac_wra ),
.dac_clkb (dac_clkb ),
.dac_dat_b (dac_dat_b ),
.dac_wrb (dac_wrb )
);
请注意,这些更改仅基于提供的代码片段和错误信息,并假设其他部分的代码是正确的。如果问题仍然存在,更详细的错误信息。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
引用 皆我百晓生 小程序回复内容作答:
根据你提供的信息,可能出现以下问题:
IP核的语言不匹配:你在生成IP核时选择了Verilog语言,但是在modelsim中调用时使用的是VHDL语言。确保IP核的语言与仿真环境中使用的语言一致。
IP核文件未添加到modelsim工程中:确保将IP核生成的Verilog文件(my_fir_0002.v)添加到modelsim工程中。
生成的IP核不完整或存在错误:检查生成的IP核是否包含所有必要的文件,并确保IP核的设置正确。
仿真文件中的路径错误:检查模块文件(fir_prj.v)和IP核文件(my_fir_0002.v)的路径是否正确,并确保在modelsim中正确加载了这些文件。
如果上述问题都没有解决你的问题,建议提供更多的详细信息,以便更好地帮助你解决问题。
提供参考实例:https://blog.csdn.net/Cthanta/article/details/122766018
结合GPT给出回答如下请题主参考
根据您提供的错误信息,可以看出是在模拟FIR IP核时出现问题,具体原因可能有多种。以下是一些可能的排查方向和建议:
确保IP核的设计正确性,包括信号连接、数据位宽、时钟频率等参数的设置与连线是否正确。可以在Quartus中进行综合和布局,在Quartus或Modelsim中观察波形来检查设计的正确性。
检查仿真文件的路径设置是否正确。在Modelsim中打开仿真文件时,需要指定正确的文件路径和文件名。如果路径或文件名错误,就会出现类似“Cannot open design file”这样的错误。
确保Modelsim版本与使用的Quartus版本兼容。不同版本的Quartus所使用的Modelsim可能会有差异,如果版本不兼容可能会导致错误。建议使用最新版本的Modelsim。
确保Modelsim中的库文件包含所需的IP核库。IP核一般包括Verilog或VHDL代码、仿真模型以及其他依赖库等文件。在Modelsim中需要将这些文件添加到库中才能正确地进行仿真。
希望以上建议能够帮助您解决问题,如有不明白的地方可以继续提问。