您好,欢迎来到年旅网。
搜索
您的当前位置:首页VHDL及Verilog,遇到的各种编译错误及修改办法

VHDL及Verilog,遇到的各种编译错误及修改办法

来源:年旅网

1.type mismatch

signal a : std_ulogic;
signal b : std_ulogic;
signal c : std_ulogic;

a <= b and ( c = ‘1’);

编译报错:
and 左右两边类型不匹配。
b是std_ulogic,(c = ‘1’)返回值是bool类型。
所以报错。

另外,VHDL中的when ( ) else语句中,when后的条件,必须是bool类型的值,其他的值,比如std_logic等,不行!!
比如:
signal a : std_ulogic;
a<= 1;
when( a ) else…..
编译报错,类型错误。
修改:
when(a=’1’)else ….
正确。

2.VHDL代码引用函数(function)

如果文件a.vhdl需要引用b.vhdl中的某个函数(function),则需要在a.vhdl的开头先引用b.vhdl文件。

3.Verilog编译头文件报错: the type of file XXXX could not be determined
这种XXXX文件,一般是头文件,比如head.vh,或者库文件lib.vlib。
这些文件内部用verilog写的,但是文件的名称的后缀不是.v,而是.vh或.vlib等别的后缀,直接编译,并不能成功。

修改办法:
在编译的命令中加上
-vlog_ext +.vlib,.vh
这个命令的意思是,要编译器认识加了后缀的文件,比如.vlib和.vh。是的,这里是同时认识这两种文件,中间用“,”逗号隔开。
重新编译,通过!

4.Verilog编译报错:文件或module被重复编译。
这种问题容易出现在大型项目中。
因为,项目规模大,文件众多,当不同文件重复引用了同一个文件,就可能出现重复编译的情况。

解决办法:
在编译命令中添加 -ALLOWREDEFINITION
重新编译,通过!

5.SystemVerilog编译时报错:缺少endmodule。
这是个匪夷所思的错误,因为,代码最后是有endmodule的,这个错误提示的位置在代码中真正endmodule的前面。
而且,之前代码都可以正常仿真,添加了部分逻辑后,就不行了。仔细检查了添加的代码,没有逻辑问题。
最后检查发现,是前方添加的代码中某个begin漏写了end。
添加上end。
重新编译,通过!

教训:一定要先写好begin/end,再添加代码。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务