quartusⅡ中出现的警告及原因(不断收集中....)

部分参考:https://wenku.baidu.com/view/505edd8026fff705cc170ac8.html

1.

Warning(13012): Latch has unsafe behavior

解释:出现latch问题一般是case或者if没写全;即case没写default,if没写else。case中直接写

defaul:;

也是不行的。

2.

Warning (10235): Verilog HDL Always Construct warning at Verilog1.v(234): variable "ADD_data_n" is read inside the Always Construct but isn't in the Always Contruct‘s Event control

 

解释:在Always结构中对一个变量进行了读写,但是Always的敏感列表中不包含这个变量。它不影响QuartusII的综合工具,但是可能引起仿真结果与综合逻辑行为的不符。

解决1:把always @(dela_temp or mod_unsign)改成边沿触发 ,修改敏感信号。

解决2:如果把always @(state_rxd)改成always @(negedge sclk)或 always @(posedge sclk)是没有警告但是data_rxd 得到的数据会延时一个时钟周期或半个时钟周期。

解决3:这个warning就是说你第二个always块是纯组合逻辑,但mosi作为输入没有被包含在敏感列表中,这样的话你的mosi变化不会影响你这段组合逻辑的输出,一定会生成锁存器,也就是latch 。

3.

Warning (10230): Verilog HDL assignment warning at num_one.v(173): truncated value with size 32 to match size of target (10)

解释:数值不指定位宽的话,系统会默认为使32位的,即cnt=cnt+1的话,系统默认是cnt=cnt+32'b1,浪费资源,改为

        cnt=cnt+1'b1即可。

4.

Error (12014): Net "S2_again_TOP", which fans out to "S2_again_a", cannot be assigned more than one value

    

   解决方法:输入的某些引脚同时给了两个值,大概不是重复定义管脚就是重复赋值了。(这是网上找到的解决方法)

    但是我关于S2_again_TOP的所有赋值都已经贴出来,里面完全没有给S2_again_TOP重复赋值或者在两个always块中赋值,所以很奇怪,S2_again_TOP信号是另外一个.v文件模块中输出到这个TOP模块中的,所以觉得是外部模块输入进来的数据给个input类型定义也应该没有错,但是最后我把这个S2_again_TOP 由原来的input S2_again_TOP,改为wire S2_again_TOP,就不报错了,问题解决。具体原因还是不清楚,怀疑是在TOP文件中其他子模块送来的数据给内部线网类型即可,不能给外部输入类型  。

    

5.  Warning (18236): Number of processors has not been specified which may cause overloading on shared machines.  Set the global assignment NUM_PARALLEL_PROCESSORS in your QSF to an appropriate value for best performance.
   这是一个关于影响编译速度的警告,没什么大问题。
如下图所示:

这个窗口内部有三个选项:
(1)Use global parallel compilation setting from option dialog box -Use all available processors。从选择对话窗口中设置成全局并行编译设置汇总----Use all available processors
(2)Use all available processors  这个设置是直接写进qsf文件了
(3)Maximum processors allowed 这个是让你选择几核

 

 

6.   Error (10200): Verilog HDL Conditional Statement error at IIRDirect.v(47): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct

大概意思就是不能匹配操作条件中的边沿事件和always语句中的控制事件。删除掉 ''||''后面的address_rom_n==11‘d1000后不再报错,在网上找到原因说是:本质应该是在FPGA的底层FF中没有你描述的单元与之对应:
always中用的是negedge rst 即此处rst 信号对应与底层FF异步复位端且低电平有较,而在下面if 中rst虽然是低电平有效没错,但是包含另外一个判断条件。首先这很明确要描述的是一个时序模块电路(这里仅讨论带posedge or negedge 的时序模块),敏感信号列表里有clk和rst两个信号,但是边沿敏感时钟信号只能有一个,如何区分哪个是时钟信号?规定是这样的,如果把a定义为时钟信号,那么在always过程结构中不能再出现a信号了,如上面例子就可以看出a是作为时钟信号的。这也满足要求似乎不应该编译出错啊,还有一点就是剩余的b了,这个rst在这里是一个异步控制信号(或者是异步输入信号),这个rst除了在敏感信号表中给出对应的表述外(即always后的negedge rst)在always过程语句中必须给予说明(经实践是always结构中带if语句的,不带if语句也可不说明),简单的说就是在always语句中加入有if语句则必须把rst放在if的()中作为判定条件。另一个address_rom_n==11‘d1000并不属于两个判断里面不能和rst或。移到下面加个else if即可。

 

7.  Error (171172):Detected confilicting assignments for the following nodes.
Error (171173):Node mosi1_io from partition Top cannot preserve previous placement at PIN 191 and honor the location
 

解决方式:

原因是软件的问题,

修改引脚配置的时候top文件没有修改就默认为冲突,只需要在top文件任意修改一个地方,加一个空格之类,然后保存然后再编译就可以通过。

以上是转载中说明的方法,我刚开始没看懂,现在按我实际操作说明如何解决该错误。

   如果top文件中的output和input等,其他代码都没有修改,而直接修改了引脚设置,此时顶层文件没有※号,即没有改变过,此时编译就会出现上面的问题,只需在顶层文件中随便加点上面,空格、注释,让文件出现'※'号就可以了,就是让软件知道文件发送改变了就行。

8.  Error (10170): Verilog HDL syntax error at DATA_norma.v(93) near text: Â. Check for and fix any syntax errors that appear immediately before or at the specified keyword. The Intel FPGA Knowledge Database contains many articles with specific details on how to resolve this error. Visit the Knowledge Database at https://www.altera.com/support/support-resources/knowledge-base/search.html and search for this specific error message number.
 

        具体原因没有找到,这和网上找到ERROR(10170)问题和解决方法不太一样,这是我在网上复制的代码,看似没有问题,但是一直报这个错误。

        解决方法是,把这个错误的代码全部删掉,自己重新输入一遍就可以解决问题了。

 

9.    quartusII出现fatal error: stack overflow module:quartus_map.exp,

     最近在编译过程中出现这个错误,在网上没能找到相关的情况,能通过modelsim仿真代码,说明没有语法错误,自己判断是映射出现错误。最后发现是代码中,一个状态机的一个状态嵌入了一个小状态机,但是小状态机我没有写全,比如说是这样

Q1-->Q2(f1-->f2-->f1-->f2....)-->Q3,也就是小状态机陷入了循环,虽然我觉得Q2跳到Q3后,f 的状态就不重要了,但是我修改完后就没有再出现错误,Q1-->Q2(f1-->f2-->f1-->f2....-->f3)-->Q3, 也就是说出现这个错误,可能是代码语法没错,但在硬件映射中并不能实现,需要重新整理自己的逻辑然后修改。

 

10.  quartusII 编译出错显示Error 12152: Can't elaborate user hierarchy "lock:inst16"

     意思是无法详细说明用户层次结构 ,这种情况是该例化模块中always出现问题,但是无法准确定位到哪个always块,往往是always块中的if和else 或者else if 出现问题,要么排列有问题要么是敏感信号和判断条件出现问题,找到出问题的always块好比较好解决问题。以下是别人给出的解决办法:

always @(posedge clk or negedge reset)
        if(!reset || CH_stop)
如果把敏感量列表里的 or negedge reset 去掉后就没有这个情况,问题就出在这个异步复位信号上。

 

  • 12
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值