4947|12

9790

帖子

24

TA的资源

版主

楼主
 

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

 
 

因为参加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新手,怕代码写多了太多错误不好检查就先写点“编译”一下。

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

 

“编译”时提示“ERROR  (PA2050) : Module 'ads8598h' is instantiated but not defined”错误,没有具体的位置,也找不到具体原因。

 

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

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

 

最后发现如果ps_serial为网线类型,然后通过assign给它赋值而不是直接写output reg  ps_serial=1'b1时就会正常。

 

 是我的代码写错了吗?

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

 

 

编译时提示:

[DRC INBB-3] Black Box Instances: Cell 'ads8598h_ins' of type 'ads8598h' has undefined contents and is considered a black box.  The contents of this cell must be defined for opt_design to complete successfully.

 

 

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

所以现在是高云云源软件有问题吗?还是我写的代码不规范,只不过vivado忽视了我的错误?

 

 

最新回复

应该是这么回事,也就是不同厂家的IDE环境、不同的编译器,有可能对这种处理的方式不同。其实只要是正常功能模块的话,肯定会有输出,也会有适当的操作,里面不会是空的。   详情 回复 发表于 2022-1-13 00:55
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复
举报

664

帖子

108

TA的资源

纯净的硅(中级)

沙发
 

我是用VHDL的,Verilog略有了解。

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

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

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

点评

现在的情况是只要有一个output就会报错,无论它是wire还是reg。 [attachimg]583057[/attachimg] 而无论多少条output,只要有一个output使用assign赋值,无论它是哪个错误就会消失。 [attachimg]583060[/att  详情 回复 发表于 2022-1-11 23:13
 
 
 

回复

9790

帖子

24

TA的资源

版主

板凳
 
gs001588 发表于 2022-1-11 22:43 我是用VHDL的,Verilog略有了解。 所谓wire,就是指一条线直接连,只不过用了不同的网标,不占用宏单元 ...

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

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

 

  

或者任意一条output通过always赋值,而不是initial,这个错误也会消失。 

这种情况像是这个module里不允许所有output都“悬空”,必需保证至少有一条不是“悬空”的。 

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

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

1204

帖子

1

TA的资源

纯净的硅(初级)

4
 

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

点评

我试了一下,看是不是always为空的原因。后来发现写一个cnt不做任何处理报错也会消失。 [attachimg]583124[/attachimg]    详情 回复 发表于 2022-1-12 11:20
 
 
 

回复

9790

帖子

24

TA的资源

版主

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

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

 

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

664

帖子

108

TA的资源

纯净的硅(中级)

6
 

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

test_verilog.rar (12.22 KB, 下载次数: 3)


 

 

 

 

 

点评

不对,咱俩的版本好像是一样的。  详情 回复 发表于 2022-1-12 18:08
感谢帮忙测试,我下载你的工程直接编译也有错误。看样是版本的问题,一会下一个最新版本试试。 [attachimg]583228[/attachimg]    详情 回复 发表于 2022-1-12 18:05
 
 
 

回复

9790

帖子

24

TA的资源

版主

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

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

 

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

9790

帖子

24

TA的资源

版主

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

不对,咱俩的版本好像是一样的。

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

9790

帖子

24

TA的资源

版主

9
 

 

重装了一下,还是这个问题,奇怪了。

 

 

     

点评

明白你的意思了。 是在布局布线时出的问题,不是综合的问题。在模块里面不写点啥,相当于只有个框框没内容,把编译器都整得不会了,没想到会有这种用法。 只要里面随便写点,有意义的,就可以过了,加个reg、w  详情 回复 发表于 2022-1-12 20:06
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

664

帖子

108

TA的资源

纯净的硅(中级)

10
 
本帖最后由 gs001588 于 2022-1-12 20:08 编辑
littleshrimp 发表于 2022-1-12 18:16   重装了一下,还是这个问题,奇怪了。          

明白你的意思了。

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

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

点评

对,应该就是你说的问题。 比较奇怪的是如果只有input没有output,没有内容也不报错。 如果有output,always里只判断某个input比如我之前的rst_n,会报错。 像你说的那样,如果有output,不需要对这些驱动  详情 回复 发表于 2022-1-12 20:45
 
 
 

回复

9790

帖子

24

TA的资源

版主

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

对,应该就是你说的问题。

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

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

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

大概的意思就是如果有output,模块里就应该有“写”的动作,哪怕不是写对应的output信号。

点评

应该是这么回事,也就是不同厂家的IDE环境、不同的编译器,有可能对这种处理的方式不同。其实只要是正常功能模块的话,肯定会有输出,也会有适当的操作,里面不会是空的。  详情 回复 发表于 2022-1-13 00:55
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

664

帖子

108

TA的资源

纯净的硅(中级)

12
 
littleshrimp 发表于 2022-1-12 20:45 对,应该就是你说的问题。 比较奇怪的是如果只有input没有output,没有内容也不报错。 如果有outpu ...

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

点评

对,像是IDE把这部分他认为没有实质内容的模块给优化掉了,也许可以通过设置解决。文档里我没检索到,白天我再找找设置。不过写代码难免会有错误,尤其是新手,出错时能有一个比较清晰的提示会有利于快速定位问题。  详情 回复 发表于 2022-1-13 05:00
 
 
 

回复

9790

帖子

24

TA的资源

版主

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

对,像是IDE把这部分他认为没有实质内容的模块给优化掉了,也许可以通过设置解决。文档里我没检索到,白天我再找找设置。不过写代码难免会有错误,尤其是新手,出错时能有一个比较清晰的提示会有利于快速定位问题。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表