littleshrimp 发表于 2022-1-11 20:52

关于高云云源软件出现ERROR (PA2050) : Module 'xx' is instantiated but n...的测试

<p>因为参加GW1N这个FPGA的评测,当时的计划是使用GW1N采集LTC2380-24这颗24位ADC数据然后进行分析,但是LTC2380-24这个板子不知道放哪找不到了。正好手里还有一个ADS8958H这个18位500KSPS 8通道的ADC板子,因为之前用LTC2325-16那个16位4通道5MSPS的板子实现了我想要的功能,就没再用ADS8958H这个板子做相关测试。这个板子支持+-10V的输入电压和1M的输入阻抗,前段时间出现电容拉低电源电压的问题,当时就想要是这个板子能直接用就好了。所以这次就准备用GW1N驱一下。今天把板子的连线焊好,接上GW1N的板子后开始写程序。因为我是FPGA新手,怕代码写多了太多错误不好检查就先写点&ldquo;编译&rdquo;一下。</p>

<p>开始的时候我只是简单写了一些端口,一个初始化和always块,然后在top里做了例化。&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</p>

<p> &nbsp;</p>

<p></p>

<p>&ldquo;编译&rdquo;时提示&ldquo;ERROR&nbsp;&nbsp;(PA2050)&nbsp;:&nbsp;Module&nbsp;&#39;ads8598h&#39;&nbsp;is&nbsp;instantiated&nbsp;but&nbsp;not&nbsp;defined&rdquo;错误,没有具体的位置,也找不到具体原因。</p>

<p> &nbsp;</p>

<p>于是我就一一对照各端口的拼写和符号是否为中文字符,再一行代码一行代码的去注释掉,花了很长时间最后发现例化时把下边这几行去掉就可以正常&quot;编译&rdquo;</p>

<p></p>

<p>再仔细分析发现这些必需注释掉才能正常编译的端口都是output类型,因为我是新手,这方面我有点懵,开始怀疑我的这种写法是否有问题,包括下边这种直接初始化。</p>

<p>&nbsp;</p>

<p>最后发现如果ps_serial为网线类型,然后通过assign给它赋值而不是直接写output reg&nbsp; ps_serial=1&#39;b1时就会正常。</p>

<p> &nbsp;</p>

<p>&nbsp;是我的代码写错了吗?</p>

<p>为了验证我的想法,我使用vivado粘贴了类似的代码测试,开始的时候ads8598h没写初始化和always,其它还有top内容完全相同。</p>

<p></p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p>编译时提示:</p>

<p> Black Box Instances: Cell &#39;ads8598h_ins&#39; of type &#39;ads8598h&#39; has undefined contents and is considered a black box. &nbsp;The contents of this cell must be defined for opt_design to complete successfully.</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>然后我把初始化和always的注释去掉,这时和高云云源软件里出问题的代码一样,再编译竟然可以正常通过。</p>

<p></p>

<p><strong><span style="font-size:16px;">所以现在是高云云源软件有问题吗?还是我写的代码不规范,只不过vivado忽视了我的错误?</span></strong></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

gs001588 发表于 2022-1-11 22:43

<p>我是用VHDL的,Verilog略有了解。</p>

<p>所谓wire,就是指一条线直接连,只不过用了不同的网标,不占用宏单元;</p>

<p>reg就是寄存器,是实实在在要生成触发器或锁存器的,是要占用宏单元的。</p>

<p>不同的综合器,也许会有不同的优化。如果定义了reg,有可能综合器发现实际只用作wire,可能会自动优化成wire,看一下RTL图是什么样的。</p>

littleshrimp 发表于 2022-1-11 23:13

gs001588 发表于 2022-1-11 22:43
我是用VHDL的,Verilog略有了解。

所谓wire,就是指一条线直接连,只不过用了不同的网标,不占用宏单元 ...

<p>现在的情况是只要有一个output就会报错,无论它是wire还是reg。</p>

<p></p>

<p>而无论多少条output,只要有一个output使用assign赋值,无论它是哪个错误就会消失。</p>

<p> &nbsp;</p>

<p>&nbsp;&nbsp;</p>

<p>或者任意一条output通过always赋值,而不是initial,这个错误也会消失。&nbsp;</p>

<p>这种情况像是这个module里不允许所有output都&ldquo;悬空&rdquo;,必需保证至少有一条不是&ldquo;悬空&rdquo;的。&nbsp;</p>

<p>但是不清楚为什么initial或output reg rst = 1&lsquo;b1,这样的方式不行,也许是被优化掉了?或者不符合某些规则?</p>

不足论 发表于 2022-1-12 09:35

<p>写得不规范,begin end里面空了,其次,initial这种语法少写一点,很看编译软件</p>

littleshrimp 发表于 2022-1-12 11:20

不足论 发表于 2022-1-12 09:35
写得不规范,begin end里面空了,其次,initial这种语法少写一点,很看编译软件

<p>我试了一下,看是不是always为空的原因。后来发现写一个cnt不做任何处理报错也会消失。</p>

<p> &nbsp;</p>

gs001588 发表于 2022-1-12 17:31

<p>会不会跟版本有关系呢,我用的1.9.8.01,试了没发现有问题呀</p>

<p></p>

<p><br />
</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p>&nbsp;</p>

littleshrimp 发表于 2022-1-12 18:05

gs001588 发表于 2022-1-12 17:31
会不会跟版本有关系呢,我用的1.9.8.01,试了没发现有问题呀






&nbsp;



&nbsp;



&n ...

<p>感谢帮忙测试,我下载你的工程直接编译也有错误。看样是版本的问题,一会下一个最新版本试试。</p>

<p> &nbsp;</p>

littleshrimp 发表于 2022-1-12 18:08

gs001588 发表于 2022-1-12 17:31
会不会跟版本有关系呢,我用的1.9.8.01,试了没发现有问题呀






&nbsp;



&nbsp;



&n ...

<p>不对,咱俩的版本好像是一样的。</p>

littleshrimp 发表于 2022-1-12 18:16

<p>&nbsp;</p>

<p>重装了一下,还是这个问题,奇怪了。</p>

<p></p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p> &nbsp; &nbsp; &nbsp;</p>

gs001588 发表于 2022-1-12 20:06

本帖最后由 gs001588 于 2022-1-12 20:08 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3116782&amp;ptid=1191765" target="_blank"><font color="#999999">littleshrimp 发表于 2022-1-12 18:16</font></a></font> &nbsp; 重装了一下,还是这个问题,奇怪了。 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</blockquote>
</div>

<p>明白你的意思了。</p>

<p>是在布局布线时出的问题,不是综合的问题。在模块里面不写点啥,相当于只有个框框没内容,猝不及防把编译器都整得不会了,没想到会有这种用法。</p>

<p>只要里面随便写点有意义的,就可以过了,加个reg、wire都可以。这也就是verilog比较灵活,只要加点东西从语法上该的有都有了,要是VHDL的话可能综合都不给你过。</p>

<p></p>

littleshrimp 发表于 2022-1-12 20:45

gs001588 发表于 2022-1-12 20:06
littleshrimp 发表于 2022-1-12 18:16 &nbsp; 重装了一下,还是这个问题,奇怪了。 &nbsp; &nbsp; &nbsp; ...

<p>对,应该就是你说的问题。</p>

<p>比较奇怪的是如果只有input没有output,没有内容也不报错。</p>

<p>如果有output,always里只判断某个input比如我之前的rst_n,会报错。</p>

<p>像你说的那样,如果有output,不需要对这些驱动这些信号,只需要操作一个内部寄存器也可以正常。</p>

<p>大概的意思就是如果有output,模块里就应该有&ldquo;写&rdquo;的动作,哪怕不是写对应的output信号。</p>

gs001588 发表于 2022-1-13 00:55

littleshrimp 发表于 2022-1-12 20:45
对,应该就是你说的问题。

比较奇怪的是如果只有input没有output,没有内容也不报错。

如果有outpu ...

<p>应该是这么回事,也就是不同厂家的IDE环境、不同的编译器,有可能对这种处理的方式不同。其实只要是正常功能模块的话,肯定会有输出,也会有适当的操作,里面不会是空的。</p>

littleshrimp 发表于 2022-1-13 05:00

gs001588 发表于 2022-1-13 00:55
应该是这么回事,也就是不同厂家的IDE环境、不同的编译器,有可能对这种处理的方式不同。其实只要是正常 ...

<p>对,像是IDE把这部分他认为没有实质内容的模块给优化掉了,也许可以通过设置解决。文档里我没检索到,白天我再找找设置。不过写代码难免会有错误,尤其是新手,出错时能有一个比较清晰的提示会有利于快速定位问题。</p>
页: [1]
查看完整版本: 关于高云云源软件出现ERROR (PA2050) : Module 'xx' is instantiated but n...的测试