【FPGA】Robei EDA常见问题解决 (4)——— 包含include文件和quartus综合的问题

#悬崖的花,越芬芳越无偿

每次用Robei EDA出问题的时候,我都会怀疑一下到底是我脑子傻了还是EDA脑残了;但是每次等我解决了这个问题,我又觉得是我学傻了才会有这种问题。妙~
————————————正文的分割线——————————————
在robei EDA 里添加了.v文件后,进行系统的 综合,robei 自动生成的代码里,是不包含我们平常在Verilog代码里的include格式。

·include''sdram_para.v''

robei 自动生成的代码不会有这个语句,如果直接拿robei生成的.v文件在quartus 上进行综合的话,就会出现错误,告知缺少 include 包含的文件。(这就很狗)
后来询问了工程师,被工程师告知,直接生成的代码文件是不会自动生成include这个代码的。Robei通过另一种方式包含了这个代码。

在Robei综合文件的时候,生成了一个叫做fpgafiles.vf的文件,这个文件里通过include将所有的文件包含了起来,包括用于“define” 的sdram_para。按Robei工程师的讲法是只用导入这一个文件就可以进行综合了。 BUT!我和一位来自广华的同学,都发现了综合出现了问题,而且还挺麻烦的。
问题是:
1、只导入fpgafiles这个文件进行编译,Quartus会报错说找不到顶层文件。
2、如果把Robei 生成的所以的Verilog代码和这个fpgafiles导入到工程中,Quartus会报错说找不到这个sdram_para.v文件,一共会产生44个错误,这点经过我和广华那位姐妹的认证。
我们彼此在同一个星期的不同时间段出现了这个问题,并获得了对方的嘲讽(噗嗤)
在这里插入图片描述
在这里插入图片描述
(对方的问题都一样,不仅错误相同,连出错的点都一样)

这个问题后来是怎么解决的呢?
(在此声明,Robei工程师说的未必就是错的,但是我们这样确实没法整,只能自己用自己的办法解决,仅做参考)

操作流程如下

  1. 新建Quartus工程
  2. 在添加文件的时候,先仅添加 sdram_para.v 一个文件,系统所有的文件都不要添加。
  3. 对这个只有一个文件的工程编译(一定会报错的,这个不用说)
  4. 报错完之后,把剩下的所有系统的Verilog代码文件添加进这个工程文件里,并设置自己的系统顶层文件。(拿我自己的工程举例子,大概是这样,这个sdram_para.v在最顶上)
    在这里插入图片描述
  5. 重新编译这个添加过系统文件的工程,如果不出什么别的编译错误,那么你的工程大约也成功了,然后就配置管脚或者烧录啥的就OK啦。

————————————————————————————————————————————
提一个醒,我在写代码的时候注意到了一个比较麻烦的问题,Robei 的Verilog代码编译使用的编译器是一个叫做:Icarus Verilog 的编译器。(如图)
在这里插入图片描述
这个编译器我不知道是新是旧(相对于Quartus里的Verilog编译器来说),但是我在Robei里写的一些代码,Robei本身不报错,但是在Quartus里编译错误,这个就有点尴尬,但是我也没有能力去评判它具体是一个怎样的情况。不过在这里告知一下我出现过的情况,方便大家查看。

  1. for循环里的语法。C语言写多了,很容易把自增写成i++,但是在Quartus里这个会报错的,Robei不会。
  2. 一个信号被重复赋值。我在做摄像头调试的时候,给了一个图像输出数据信号有好几种赋值,每次想测试的时候就注释掉不需要的。这个在Robei模块综合的时候并没有被我删掉,但是Robei里用连线代替了例化,就导致了一个变量我既直接输出给高层模块,又通过assign 赋了一次值 ,于是我在Quartus里的综合就出错了。
  3. 信号线例化时忘了接。因为robei EDA在例化模块的时候,采用的是直接接线和通过Connect来连接内部信号,有时候就稍不注意就连少了线,就不容易发现。但是Robei在编译的时候,并不会对不连信号线而保错,反而是用Warning 用的多一些。这些warning在Quartus里就会变成error,其实robei几乎所有的warning都是实际必须改正的错误。Quartus里的warning大部分都是那根信号线没用,哪个变量定义了却没有使用这样无关痛痒的问题(相对而言),Robei是把除了基础语法以外的错误都算成error,这样其实不太好,因为出了是很容易让人忽略以外,还有个问题就是,不容易养成良好的代码规范。

对于Verilog来说,编程规范其实是比任何一门语言都严格的,因为 Verilog HDL相对其他语言来说,它并不是真的拿来编程的,它是拿来做硬件电路描述的。每一句Verilog代码在FPGA中都会对应成实际的数字电路,它会真的因为写法的不同,用法的不同而对实际的应用造成非常大的影响,在入门之初就意识到如何规范的描述硬件电路的重要性。
这是我的学长给我讲的道理,从流水灯开始就应该有意识的去设计硬件电路,比如信号的优先级,并行模块之间的优先级,如何通过寄存器来延时时钟,如何通过if-else 来减少毛刺,如何使用好状态机,保证电路状态稳定。
所以说,想学Verilog太简单了,想学好Verilog太困难了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章