在这里提一下,在使用modelsim仿真时,之前出现一个错误导致无法仿真,问题类似于这样:
# Region: /buff_test/uut/mac_fir1_inst
# ** Error: (vsim-3389) mult.v(53): Port 'sclr' not found in the connected module (7th connection).
# Region: /buff_test/uut/mult_inst
# ** Fatal: (vsim-3365) mult.v(53): Too many port connections. Expected 6, found 7.
# Time: 0 ps Iteration: 0 Instance: /buff_test/uut/mac_fir1_inst File: mult.v
# FATAL ERROR while loading design
在网找到的问题的原因是:
Ip核载生成模块的时候注意不要将模块的名字起成和标准库中一样的,否则仿真的时候会出现类似上面的错误。
于是以为我IP核的名字不应该起mult的,于是改了名字,也改了例化乘法module中和TOP文件连接的接口名字,但是全部都改了之后,依然是相同的错误,最后不得已直接在mult.v中注释掉了53行的代码,结果如下
# ** Warning: (vsim-3017) F:/intel_FPGA/ceshiyong/chenfa.v(53): [TFMPC] - Too few port connections. Expected 5, found 4.
# Time: 0 ps Iteration: 0 Instance: /mult_ip_tb/i1/chenfa_inst/altsquare_component File: /build/swbuild/SJ/nightly/17.1std/590/l64/work/modelsim/eda/sim_lib/altera_mf.v
# ** Warning: (vsim-3722) F:/intel_FPGA/ceshiyong/chenfa.v(53): [TFMPC] - Missing connection for port 'aclr'.
问题解决了,虽然有警告但是可以仿真了。
——------------------------------------------------------------------------------------
接下来是仿真细节,如下图:
首先乘法器IP的参数选的是,dataa的平方,然后由流水线,延时一个时钟,有时钟使能信号,其他皆为默认,我在激励文件中写的是在3.21ns,也就是3210ps的时候,乘法器的时钟使能信号,也就是例化模块中的ena信号,由1变为0,此时我们可以看到,虽然en信号变0之前的一个时钟,输入data_n的值已经改变,但是由于输入和输出之间存在一个时钟信号的延时,所以在3.19ns输入的149的输出本该在3.21ns的时候输出22201,但是en信号使能,使输出一直都是148的平方。
这是加入了异步清零洗好aclr,高电平有效,从图中可以看出在输入变为150时,aclr由0变1,一个时钟周期后输出了150^2的值,150之前输出全部为0。