C语言与Verilog(转载)

1)选择C语言与Verilog的配合使用
首先,C 语言很灵活,查错功能强,还可以通过 PLI(编程语言接口)编写自己的系统任务直接与硬件仿真器(如 Verilog-XL)结合使用。C 语言是目前世界上应用最为广泛的一种编程语言,因而 C 程序的设计环境比 Verilog HDL 的完整。此外,C 语言可应用于许多领域,有可靠的编译环境,语法完备,缺陷较少。 比较起来, Verilog 语言只是针对硬件描述的,在别处使用(如用于算法表达等)并不方便。而且 Verilog 的仿真、综合、查错工具等大部分软件都是商业软件,与 C 语言相比缺乏长期大量的使用,可靠性较差,亦有很多缺陷。所以,只有在 C 语言的配合使用下,Verilog 才能更好地发挥作用。面对上述问题,最好的方法是 C 语言与 Verilog 语言相辅相成,互相配合使用。这就是既要利用 C 语言的完整性,又要结合 Verilog 对硬件描述的精确性,来更快更好地设计出符合性能要求的硬件电路系统。利用 C 语言完善的查错和编译环境,设计者可以先设计出一个功能正确的设计单元,以此作为设计比较的标准。然后,把 C 程序一段一段地改写成用并型结构(类似于 Verilog)描述的 C 程序,此时还是在 C 的环境里,使用的依然是 C 语言。如果运行结果都正确,就将 C 语言关键字用 Verilog 相应的关键字替换,进入 Verilog 的环境。将测试输入同时加到 C 与 Verilog 两个单元,将其输出做比较。这样很容易发现问题的所在,然后更正,再做测试,直至正确无误。剩下的工作就交给后面的设计工程师继续做。
2)C 语言与 Verilog 语言互相转换中存在的问题
这样的混合语言设计流程往往会在两种语言的转换中会遇到许多难题。例如, 怎样把C 程序转换成类似 Verilog 结构的 C 程序,来增加并行度,以保证用硬件实现时运行速度达到设计要求;又如怎样不使用 C 中较抽象的语法:例如迭代,指针,不确定次数的循环等等,也能来表示算法(因为转换的目的是要用可综合的 Verilog 语句来代替 C程序中的语句,而可用于综合的 Verilog 语法是相当有限的,往往找不到相应的关键字来替换)。
C 程序是一行接一行依次执行的,属于顺序结构,而 Verilog 描述的硬件是可以在同一时间同时运行的,属于并行结构。这两者之间有很大的冲突。而 Verilog 的仿真软件也是顺序执行的,在时间关系上同实际的硬件是有差异的,可能会出现一些无法发现的问题。
Verilog 可用的输出输入函数很少。C 语言的花样则很多,转换过程中会遇到一些困难。C 语言的函数调用与 Verilog 中模块的调用也有区别。C 程序调用函数是没有延时特性的,一个函数是唯一确定的,对同一个函数的不同调用是一样的。而 Verilog 中对模块的不同调用是不同的,即使调用的是同一个模块,必须用不同的名字来指定。Verilog的语法规则很死,限制很多,能用的判断语句有限。仿真速度较慢,查错功能差,错误信息不完整。仿真软件通常也很昂贵,而且不一定可靠。C 语言没有时间关系,转换后的 Verilog 程序必须要能做到没有任何外加的人工延时信号,也就是必须表达为有限状态机,即 RTL 级的 Verilog,否则将无法使用综合工具把Verilog 源代码转化为门级逻辑。
3) 如何利用 C 语言来加快硬件的设计和查错
从上面的讨论我们可以总结如下:
C 语言与 Verilog 硬件描述语言可以配合使用,辅助设计硬件
C 语言与 Verilog 硬件描述语言很象,只要稍加限制,C 语言的程序很容易转成 Verilog
的程序
美国和中国台湾地区逻辑电路设计和制造厂家大都以 Verilog HDL 为主,中国大陆地区目前学习使用 VHDL 的较多。到底选用 VHDL 或是 Verilog HDL 来配合 C 一起用,就留給各位自行去決定。但从学习的角度来看Verilog HDL比较简单,也與 C 语言较接近,容易掌握。从使用的角度,支持 Verilog 硬件描述语言的半导体厂家也较支持 VHDL 的多。

 
 
posted @ 2020-08-19 16:33  甜呀  阅读(851)  评论(0编辑  收藏  举报