Quartus编译、Vavido编译、ModelSim等的一些报错的记录,方便日后查找,持续更。。。

🚀Quartus编译报错

Error (10028)

Error:
Error (10028): Can’t resolve multiple constant drivers for net “counter[5]” at Stopwatch_1.v(44)
Solve:
不能在多个模块中对同一个变量赋值

Error (10079)

Error:
Error (10079): Verilog HDL syntax error at DualPriorityEncoder.v(24): illegal character in binary number
请添加图片描述
Solve:
对于verilog中数字表示方法的误解,之前对 3’b7 的理解就是数据格式是3位二进制,数值是7;而实际上b是后面数值的进制表示。正确的表示方法是 3’b111 。

Error (10110)

Error:
Error (10110): Verilog HDL error at PWM.v(6): variable “counter1” has mixed blocking and nonblocking Procedural Assignments – must be all blocking or all nonblocking assignments

Solve:
意思就是说在这程序中,counter1即是阻塞赋值也是非阻塞赋值。全部改为阻塞赋值或全部改为非阻塞赋值即可。

Error (10137)

Error:
Error (10137): Verilog HDL Procedural Assignment error at bit2gray_2.v(11): object “l4” on left-hand side of assignment must have a variable data type
Solve:
将output的l4的类型由wire改为reg类型即可

Error (10170)

Error:
请添加图片描述
Error (10170): Verilog HDL syntax error at DualPriorityEncoder.v(11) near text “+”; expecting “=”

Solve:
将 i++ 改为 i=i+1 即可

Error (10170)

Error:
Error (10170): Verilog HDL syntax error at tb_DualPriorityEncoder.v(1) near text “'”; expecting a description
请添加图片描述
Solve:
timescale左侧符号错误,应该是这个 ` 而不是这个 ’

Error (10839)

Error:
Error (10839): Verilog HDL error at DualPriorityEncoder.v(1): declaring global objects is a SystemVerilog feature
请添加图片描述
Solve:
关键字拼写错误,mudule修改为module

🚀ModelSim报错

1、Declarations not allowed…

在这里插入图片描述

** Error: Y:/FPGA_Project/DualPriorityEncoder/DualPriorityEncoder.v(11): Declarations not allowed in unnamed block.

Solve:
给这个模块加上一个名称即可。
在这里插入图片描述

2、Illegal output port …

** Error (suppressible): (vopt-8884) Y:/FPGA_Project/DualPriorityEncoder/tb_DualPriorityEncoder.v(25): Illegal output port connection for ‘St_pri’ (2nd connection) to reg type.

Solve:
理论上,输入的类型必须是wire,输出的类型可以是wire,也可以是reg。在直接将程序烧录到芯片运行时,可以是reg;但是在ModelSim仿真中,如果输出是reg类型就会报这个错误。将输出的类型改为wire,并增加原本的寄存器同时用assign将寄存器和wire连接起来既可以解决问题。

🚀一些编译不报错但是无法实现预期功能的错误

1、无法生成RTL错误

俺作为小白经常犯的一个错误,编译的时候不会有语法报错,但是无法生成RTL图。
没有给输出参量标定位数,产生的RTL图如下:

在这里插入图片描述
在这里插入图片描述

标定输出参量的位数之后,产生的RTL图如下:

在这里插入图片描述
在这里插入图片描述

2、case语句输出错误

错误现象:在输入是1100,也就是case3的情况下,输出应该是01,实际输出是11。也就是说没有执行到这个case里面去。发现解决方法是修改case3的所有情况为default,有点玄学😂

在这里插入图片描述

在这里插入图片描述

修改为default,便成功得到预期的结果:

在这里插入图片描述

在这里插入图片描述

🚀Vivado编译报错

1、生成bit文件时报错

Error:
Bitstream Generation failed.

Solve:
参考这位大佬的文章:

将引脚处的 default(LVCMSO18) 改为 LVCMSO18 即可,再次Run Synthesis 和 Run Implementation后生成bit文件不再出错。

2、仿真时报错
ERROR: [USF-XSim-62]

Error:
ERROR: [USF-XSim-62] ‘elaborate’ step failed with error(s). Please check the Tcl console output or ‘F:/l666/XilinxFPGA/HDMI_timing/HDMI_timing.sim/sim_1/behav/xsim/elaborate.log’ file for more information.

Solve:
按照上面提到的地址打开【elaborate.log】文件,然后就知道错误是啥了。

该方法参考自这位大佬https://blog.csdn.net/qq_31806049/article/details/70842357

最后发现是IO口抄错了哈哈哈哈哈

ERROR: [VRFC 10-3236]

Error:
ERROR: [VRFC 10-3236] concurrent assignment to a non-net ‘uart_data’ is not permitted

我定义了一个uart的接收模块:
在这里插入图片描述
然后在仿真模块里,定义了两个reg类型的参数uart_data和uart_done_flag,打算实例化uart接收模块:
在这里插入图片描述
例化uart接收模块:
在这里插入图片描述

Solve:
而实际上,要有“本模块”的思维,就是我在写tb文件时,tb文件这个才是本模块,uart接收模块的输出其实是我的输入,所以在tb文件里,uart_data和uart_done_flag这两个参数应该要定义为wire类型。

(1)输入的类型只能是wire;而输出的类型可以是wire也可以是reg。
(2)reg类型可以实例化为wire;不是reg类型一点要实例化为reg类型,类型一点要实例化为wire类型。

3、Synthesis报错
ERROR:[Vivado 12-172]

Error:
[Vivado 12-172] File or Directory ‘F:/FPGA_Project/hdmi_test20231130/hdmi_test20231130.srcs/sources_1/new/colorbar1.v’ does not exist
Solve:
起因是我在【Tcl Console】窗口加入文件的命令行,然后文件不存在我就没管他,因为文件夹里真的就没有这个文件,但是Synthesis的时候还是会报错

在这里插入图片描述

再用命令去remove掉这个不存在的文件还是会报错

在这里插入图片描述
后来发现不影响Synthesis,就直接把它删掉了,眼不见心不烦😏

在这里插入图片描述

🚀紫光同创编译报错

E: Verilog-4086

Error:
E: Verilog-4086: [C:/Users/hp/uart/source/uart_send.v(line number: 33)] More than one always block assigned a value to the same variable txd_cnt

Solve:
有多个always模块将值负给了txd_cnt,不能在多个模块里对同一个参数进行赋值,需要修改一下代码。
但是可以在多个模块里将这个参数作为判断条件。

🚀Vivado小操作

1、如何编辑同一列

Ctrl + Shift + 选择所在列
像下面这样:
在这里插入图片描述

2、如何查看I/O Port

(1) 上方菜单栏【Window】→【I/O Ports】

在这里插入图片描述

(2) 如果菜单栏的【Window】下没有【I/O Ports】的话,

在这里插入图片描述
左侧菜单栏,【PROJECT MANAGER】→【IMPLEMENTATION】→【Open Implemented Design】→【Schematic】
在这里插入图片描述

点开上方的I/O Ports就可以了

在这里插入图片描述
这个时候【Window】下也会有【I/O Ports】了

3、如何测量某一段仿真信号的长度

【Add Marker】

在这里插入图片描述

就能测量所需要的间隔的时间长度

在这里插入图片描述

4、如何保存仿真信号波形
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐