Quartus 2 使用错误集锦

1.Error: Top-level design entity "test" is undefined
原因:顶层模块的module名 没有和 工程名同名
解决方法:把顶层模块的 module名 改成 和工程名 同名
2.Error (10278): Verilog HDL Port Declaration error at test.v(4): input port "clk_in" cannot be declared with type "reg"
原因:输入变量不能定义成reg型,必须是wire型,我们做的一个芯片的输入引脚需要是实时采集输入数据的,所以必须是wire(导线),不能是寄存器型
解决方法:把输入信号定义成 线型 wire
3.Error (10137): Verilog HDL Procedural Assignment error at test.v(12): object "led" on left-hand side of assignment must have a variable data type
原因:数据类型定义错误 或者 赋值类型错误
解决方法: 在always 过程块中被赋值的变量必须是 reg (寄存器型),用 assign 连续赋值的对象 必须定义成 wire(线型)
4.Error: Can't place multiple pins assigned to pin location Pin_108 (IOC_X34_Y2_N0)
原因: PIN_108是一个多功能管脚,还有一个功能是nCEO,也是默认的功能。如果要用它当普通IO,需要提前设置一下
解决方法:assignments>device>device and pin options>dual-purpose pins里面把nCEO设置成use as regular i/o就可以了
5.Error (10028): Can't resolve multiple constant drivers for net "key_flag" at clock.v(33)
【Quartus 2 使用错误集锦】原因:一个变量不能同时被在两个 always 过程块中被赋值
解决方法:在两个always过程块中用两个不同的变量名,可以在module最后用 assign 把变量的值作最后的统一,但是注意wire型和reg型的变量类型定义
6.Warning (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 " 。
7.Warning: Found 8 output pins without output pin load capacitance assignment
原因:负载电容警告。load capacitance和IO输出结构有关的设置,用来控制波形的上升下降沿的控制,用于阻抗匹配防止产生过冲.低速电路一般不需要考虑。
解决方法:Assignments --> Assignment Editor 中的 Assignment Name 栏中进行设置。一般可以忽略此警告...
8.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
原因:赋值语句的逻辑混乱,由于条件判断语句采用了非阻塞赋值,容易产生逻辑混乱。
解决方法:将非阻塞赋值“<=”改成阻塞赋值“=”,并不是任何情况下都是用非阻塞赋值好,阻塞和非阻塞适用于不同环境,根据环境要求选择赋值方式
9.Error (10200): Verilog HDL Conditional Statement error at shumaguan.v(23): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct
原因:条件判断语句逻辑不匹配。always @ () 括号内的敏感信号,与begin end 块中的判断语句逻辑不匹配。
例如 always @ (negedge xxx)
begin
if(xxx)
....
end
敏感信号列表中判断的是xxx的下降沿,但是if语句判断的xxx是否为“1”,这样if语句将永远不可能执行,不符逻辑
解决方法:注意always @ 括号内的敏感信号列表,到底是上升沿还是下降沿,还是两个都要,根据不同场合选择合适的敏感信号
10.不能生成 .sof 文件,pof文件,无法下载程序到开发板
原因:licence没破解完全

解决方法:重新破解quartus2 或者 采用其他方式获得完全版的 license

    推荐阅读