微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 请教 SystemVerilog 高手

请教 SystemVerilog 高手

时间:10-02 整理:3721RD 点击:
小弟想用SystemVerilog验证一个复杂数模混合系统,目前打算是把模拟模块写成SV模型,模拟信号用real型数据传递。
但是现在出现了一个麻烦的问题,例如以下代码:
module AnalogT(VOUT[1:0]);
outputVOUT[1:0];
realVOUT[1:0];

assignVOUT[1]= 0.5;
assignVOUT[0]= 0.8;
endmodule
module TEST;
timeunit 1ns;
regVSEL;
realVIN[1:0];
realVOUT;
AnalogT U1(VIN[1:0]);
initial #0VSEL = 0;
always#10VSEL = ~VSEL;
assignVOUT = VIN[VSEL];
endmodule
以上描述的是一个模拟的2选1信号选择器,这段代码在 modelsim6.3f 里编译通过,但是仿真的时候提示错误:
vsim -coverage -novopt work.TEST
# vsim -coverage -novopt work.TEST
# Loading sv_std.std
# Refreshing D:\ICProject\AnalogTest\work.TEST
# Loading work.TEST
# Refreshing D:\ICProject\AnalogTest\work.AnalogT
# ** Error: D:/ICProject/AnalogTest/AnalogTest.sv(13): Internal error: ../../../src/vlog/vgendecl.c(5943) typeof(d) != VAR_DECL || (var_typeOf(d) != t_real && var_typeOf(d) != t_event)
# ** Error: D:/ProgramFiles/Modelsim6.3f/win32/vlog failed.
# ** Error: Sub-invoking of D:\ProgramFiles\Modelsim6.3f\win32/vlog failed; return status = 1.
# ** Error: (vsim-3171) Could not find machine code for 'D:\ICProject\AnalogTest\work.AnalogT'.
# No such file or directory. (errno = ENOENT)
# Error loading design
这段代码我觉得特殊之处就是端口上使用了 real 型的非压缩数组,我本来也是想实现这么个功能。
以上例子只是一个简单模型,实际使用的时候数组宽度很大,所以把数组分开并不现实。
特此求助,希望高手们指点一二,或者给个好的建议避开real型数组用作端口。
先谢谢啦!

如果代码改成如下:
module AnalogT(VOUT1,VOUT0);
outputVOUT1,VOUT0;
realVOUT1,VOUT0;

assignVOUT1= 0.5;
assignVOUT0= 0.8;
endmodule
module TEST;
timeunit 1ns;
regVSEL;
realVIN1,VIN0;
realVOUT;
AnalogT U1(VIN1,VIN0);
initial #0VSEL = 0;
always#10VSEL = ~VSEL;
assignVOUT = (VSEL)? VIN1:VIN0;
endmodule
则可以仿真,而且结果正确(见图片附件)

这个问题已经解决,方法就是端口列表里面不把数组表示出来,如下:
module AnalogT(VOUT);
outputVOUT;
realVOUT[1:0];

assignVOUT[1]= 0.5;
assignVOUT[0]= 0.8;
endmodule
module TEST;
timeunit 1ns;
regVSEL;
realVIN[1:0];
realVOUT;
AnalogT U1(VIN);
initial #0VSEL = 0;
always#10VSEL = ~VSEL;
assignVOUT = VIN[VSEL];
endmodule
这样也可以仿真出来正确的结果
但是目前还有一个重要的问题,我要用传输门来传递模拟信号,当传输门关断的时候,输出应该处于高阻态,可是real型的怎么赋值为高阻呢?

分开验证不就可以了?

要是没有记错的话,real 型的变量应该是两值型的变量,默认值为0.0,你可以查查sv3.1
原文如下:
real1数据类型来自于Verilog-2001,与C语言中的double数据类型相同。shortreal数据类型是一个SystemVerilog数据类型,与C语言中的float数据类型相同。
既然这样的话,它应该是不可以置成高组态的

支持!呵呵。

这个仁兄,支持是什么意思啊?

real类型不能用来表示高阻。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top