Quartus编译、ModelSim等的一些报错的记录,方便日后查找,持续更。。。
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:
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:
Error (10170): Verilog HDL syntax error at DualPriorityEncoder.v(11) near text “+”; expecting “=”
Solve:
将 i++ 改为 i=i+1 即可
Error:
Error (10170): Verilog HDL syntax error at tb_DualPriorityEncoder.v(1) near text “'”; expecting a description
Solve:
timescale左侧符号错误,应该是这个 ` 而不是这个 ’
Error:
Error (10839): Verilog HDL error at DualPriorityEncoder.v(1): declaring global objects is a SystemVerilog feature
Solve:
关键字拼写错误,mudule修改为module
** Error: Y:/FPGA_Project/DualPriorityEncoder/DualPriorityEncoder.v(11): Declarations not allowed in unnamed block.
** 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连接起来既可以解决问题。
俺作为小白经常犯的一个错误,编译的时候不会有语法报错,但是无法生成RTL图。
没有给输出参量标定位数,产生的RTL图如下:
标定输出参量的位数之后,产生的RTL图如下:
错误现象:在输入是1100,也就是case3的情况下,输出应该是01,实际输出是11。也就是说没有执行到这个case里面去。发现解决方法是修改case3的所有情况为default,有点玄学
修改为default,便成功得到预期的结果: