微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 请教FPGA上一个很诡异的问题

请教FPGA上一个很诡异的问题

时间:12-12 整理:3721RD 点击:
如例子所示
wire  a = 1'b1;
test test(
     .a   (a    ),
     ...
在quartus里面综合后
用signalTap看波形
发现test模块里面的a竟然是0
如果改成      
      .a   (1'b1   ),
就对了
想请教各位这种问题的原因
谢谢!
PS:之前综合都没问题
这次是把频率提高后,加了更严格的约束后才出的问题
按理说这个直接设为1应该更频率无关的啊
难道是约束加严格了综合出问题了?

弱爆了,,,虽然哥是做验证的,但是一眼就看出来
请把 a 定义成 reg型

我没觉得有啥问题
你把wire和a=1分两行写写看
还有你的声明在调用后还是前面?
如果a的声明在调用后好像会有问题
试试看吧
仔细看看warning

这没问题吧,a显然是test的输入,用wire没问题的吧

第一次见到wire后面直接跟赋值。。。这样的风格在软件代码中很常见啊。。。你定义a的这一行莫非出现在test例化后了?

直观理解上是这样的。。之前还真没见过。。。

net declaration assignment
ieee1364-2005 6.1.1

把整个代码贴出来才好分析,这么一点信息没法分析。

查查是不是综合优化了,对a端口相关的逻辑加过反相器

貌似FPGA厂商的综合工具有的不支持wire a=1这样的语法,刚听synopsys的AE说过。改成wire a;assign a=1;试试吧。

检查综合工具或PAR工具生成的netlist,看工具是不是出于优化逻辑的需要把test的a端口取反了。
说实在的,一般综合工具都不会犯这么简单的错误的,应该是为了优化逻辑,也就是工具认为将a取反了能省资源。

这么简单的逻辑看什么信号?应该是优化掉了吧。

1, 由于你已经定义了a == 1,所以在test内部的逻辑,已经对a==1的情况进行了优化。
2,但是你定义了a是test的输入信号,在某些优化条件下,工具会保留电路层次结构和IO信号。因此a得以保留。但是这个a,在test内部对于原来的逻辑没有任何用处。你可以不用关心。

lz来通报一下结果
果然改成先声明后assign就可以了
另外,其实我之前用的是systemverilog的语法
logic a = 1;
现在改为logic a;
assign a = 1;
就可以了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top