2024年1月15日发(作者:)

Quartus常见错误

(10028): Can't resolve multiple constant drivers for net ……

解析:不能在两个以上always内对同一变量赋值,这个细节一般看书看资料会看到,但是编程时,就是没想到。

(10158): Verilog HDL Module Declaration error at clkseg.v(1): port

"XXXX" is not declared as port

解析:大意了,端口类型还没定义啊!

(10110): variable "en" has mixed blocking and nonblocking Procedural

Assignments -- must be all blocking or all nonblocking assignments

解析:en在程序中有时用非阻塞赋值,有时用阻塞赋值,这是禁止的。在初学的时候,可能分得不是很清楚,所以在检查时,一定要一步步观察慢慢来。

(10161): Verilog HDL error at clkseg.v(36): object "count" is not

declared

解析:这个错误应该很明显啦,只要能读得懂。

5.Error (10170): Verilog HDL syntax error at clkseg.v(37) near text "***";

expecting ";"

解析:意思应该也很简单,就是检查的时候要细心点。

(10171): Verilog HDL syntax error at ir_ctrl.v(149) near end of file ;

expecting an identifier, or "endmodule", or a parallel statement

解析:最后上了endmodule。一般编程的程序长了,到最后也就容易忘记。

(10278): Verilog HDL Port Declaration error at ir_ctrl.v(11): input port

"ir" cannot be declared with type ""

解析:在Altra官网中就有该解释

/support/kdb/solutions/rd03102006_ 官网上有很多东西值得我们发现学习。

(10137): Verilog HDL Procedural Assignment error at test.v(24): object

"check_9ms" on left-hand side of assignment must have a variable data type

解析:在Altra官网中就有该解释

/support/kdb/solutions/rd06232003_

(10219): Verilog HDL Continuous Assignment error at clk_div.v(26):

object "clkdiv_equ" on left-hand side of assignment must have a net type

解析:看得懂英语就懂了。

(10200): Verilog HDL Conditional Statement error at clk_div.v(22):

cannot match operand(s) in the condition to the corresponding edges in the enclosing event control

of the always construct

解析:看看官网的解释

/support/kdb/solutions/rd06242003_

条件判断语句逻辑不匹配。always @ () 括号内的敏感信号,与begin end 块中的判断语句逻辑不匹配。

例如 always @ (negedge xxx)

begin

if(xxx)

....

end

敏感信号列表中判断的是xxx的下降沿,但是if语句判断的xxx是否为“1”,这样if语句将永远不可能执行,不符逻辑

解决方法:注意always @ 括号内的敏感信号列表,到底是上升沿还是下降沿,还是两个都要,根据不同场合选择合适的敏感信号

(10231): Verilog HDL error at LCD1602.v(40): value cannot be

assigned to input "lcd_en"

解析:端口设置出错

(10137): Verilog HDL Procedural Assignment error at

LCD1602.v(49): object "lcd_rs" on left-hand side of assignment must have a variable data type

解析:/support/kdb/solutions/rd06232003_

(10170): Verilog HDL syntax error at test_vga.v(57) near text "<";

expecting "<=", or "="

即这里产生的错误。

解析:一个空格,不小心分开了,而且有人喜欢把<=分开来写,这个在QUANRUS是不允许的呃。。。

: Application nios2-terminal on 127.0.0.1 is using the target device

解析:这种情况出现在JTAG模式下,你在使用NIOS下的JTAG功能(比如利用BLASTER进行在线仿真),同时你又想下载*.sof文件(就是在JTAG模式下下载程序)。简单说就是你的JTAG已经被占用了。解决办法就是关闭你正在使用的JTAG功能,然后再下载*.sof文件。初学者经常会犯这样的错误,一定要注意。

这里有/kingst/archive/2010/05/04/

15.Error (10818): Can't infer register for "dis_data[0]" at key_down.v(56)

because it does not hold its value outside the clock edge

原因:赋值语句的逻辑混乱,由于条件判断语句采用了非阻塞赋值,容易产生逻辑混乱。

解决方法:将非阻塞赋值“<=”改成阻塞赋值“=”,并不是任何情况下都是用非阻塞赋值好,阻塞和非阻塞适用于不同环境,根据环境要求选择赋值方式

g (10230): Verilog HDL assignment warning at SMG_1S.v(21):

truncated value with size 32 to match size of target (8)

原因:赋值语句的等号两端数据的位宽不一致。例如:sec <= sec + 1; sec定义是8位的寄存器型,而表达式中的“1”,默认为32位的十进制数,等式右边是32位数据,等式左边是8位变量,所以赋值时会有警告。

解决方法:把 "sec <= sec + 1; " 规范化,改写成" sec <= sec + 1'd 1 " 。