购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第三回
实现语所见非真 Verilog语言与其可综合性

古人有诗赞道:

“道德三皇五帝,语言二V相争,五霸七雄闹春秋,功过兴亡过手,设计几人操心,公司无数白首,前人播种后人收,都是硬件描述。”

练家子:古人?Verilog语言是由Gateway设计自动化公司的工程师于1983年年末创立的;VHDL语言诞生于1983年,1987年被美国国防部和IEEE确定为标准的硬件描述语言。这个古人也“古”不到哪里去。上板砖!

前排的:哎呦,砸到我了!谁家熊孩子乱扔垃圾……

1.二V相争龙虎斗

却说某日,上海张江路上来了一位帅小伙,但见他:二十四五岁,穿青挂皂,长得眉清目秀,面白如玉,干净利落,傲骨迎风,鼻梁上颤巍巍,一副深度大眼镜。挽着袖面,右手上一张明晃晃硬件设计聘用书。书中暗表,怀里揣着某著名大学硕士毕业证。此人就是江湖人称作妙手编程无人敌,百变代码无人懂的新大虾,道号小新。

但见此人沿路缓缓前行,忽然遇到一双阳岔道。

只见,左边树立一块路标,上书:“Verilog,人见人爱,花见花开”,下面几行小字“通用HDL,易学易用;与C语言类似;允许对同一个电路进行不同抽象层次的描述,包括开关级、门级、RTL级或者行为级描述电路;既可以设计电路,也可以描述电路的激励,用于电路的验证;IEEE标准,得到绝大多数EDA工具的支持;设计的工艺无关性,支持综合……”。

右侧那个路牌式样一般无二,金灿灿几个大字:“VHDL,有些事一旦错过就不在”,再向下也是介绍“用来描述逻辑设计的结构;采用类似高级语言的语句格式完成对硬件行为的描述,具备更强的模块化能力;VHDL调试过程灵活……”。

新少侠正在犹豫之间,看到路边有一茶馆,名曰“有间茶社”。茶馆内端坐一位掌柜,五短身材,满脸肥肉,一双小眼睛四处放电,一看便是包打听之类的人物。少侠忙进店,要了一壶上好的猴魁,顺便打探道:“敢问掌柜的,门前两条道,哪条方为正途?”

那掌柜微微一笑,说道:“少侠莫急,带我慢慢道来。前几日,我店来一大汉,手持哨棒,要了一十八碗好酒,一饮而尽,兴冲冲向着左边道路而去。又有一客官,坐定时浑如虎相,走动时有若狼形。在我壁上题诗一首,后面两句小的还记得是:‘他时若遂凌云志,敢笑武平不丈夫!’。此人向右边走了。”

“那后来呢?”

“后来?后来,都在H公司加班呢!”

“为何不同的方向都到一起了?此中有何蹊跷?”

“说来简单,君不知古语有云:殊途同归。”

这段书就叫:新手侠问道,胖掌柜戏说。

在业界两种语言孰优孰劣的争论由来已久,但是最终还是没有一个大家都接受的结论。贫僧总和稀泥:这种争论,就像魔兽游戏里面讨论部落和联盟哪个好一样。在看得见的未来,估计是永远没有尽头的。

这两者,有其共同的特点:

(1)能形式化地抽象表示电路的行为和结构;

(2)支持逻辑设计中层次与范围的描述;

(3)可借用高级语言的精巧结构来简化电路行为和结构,具有电路仿真与验证机制以保证设计的正确性;

(4)支持电路描述由高层到低层的综合转换;

(5)硬件描述和实现工艺无关;

(6)便于文档管理;

(7)易于理解和设计重用。

VHDL是由美国国防部主持研发的硬件描述语言,成为了第一个电气电子工程师学会标准的硬件描述语言,美国政府相关的项目都是基于VHDL。同时,Verilog则是由民间商业公司的私有产品发展为IEEE(Institute of Electrical and Electronics Engineers,电气电子工程师协会)标准的。因此,在商用领域的市场占有量更大,设计人员和支持资源比VHDL更广。在美国大约有10万设计人员、200所大学教授采用Verilog硬件描述语言。

Verilog和VHDL都是业界广泛认可的、同为电气电子工程师学会标准的硬件描述语言。他们分别有各自的特点。

两种语言都能够在多个抽象层次对数字电路建模,并且可以与验证、仿真、综合工具协同工作。其中,Verilog的逻辑门级、晶体管级电路描述能力更强,VHDL不具备这样低级的描述能力;但是,另一方面,VHDL的系统级抽象描述能力则比Verilog强。

另外,由于Verilog与C语言在语法上有相似之处,因此具有C语言基础的设计人员更容易掌握它(这个特点是一个灾难,按照在下的个人观点。贫僧名言:“C语言程序设计工程师能看懂的 Verilog 代码,绝对不是好代码。”)。而 VHDL 设计人员需要具有Ada语言编程基础,并且学习周期比Verilog更长。

随着Verilog-A被合并到Verilog标准之中,而该部分后来成为了Verilog-AMS的一部分,该语言增加了对模拟电子系统的描述能力,因此它在混合信号集成电路中有着更广泛的应用。

我承认,以上都是贫僧兼职开茶馆的期间听来的,给大伙儿道听途说一下子,多多包涵。(台下:我说怎么越看越像那个胖掌柜……)

2.Verilog的前世今生

画外音:因为在下从事数字逻辑设计都是使用的Verilog,写起来顺手一些,所以以后例子什么的都用Verilog描述。子曾经说过:“说书的一张嘴,表不来两家事”。敬请各位VHDL高手见谅,不要口诛笔伐了,都是出来混的,相煎何太急啊。

先看几个历史性的瞬间,这些说法摘自《英雄Verilog编年史》。

1983 年年末,Verilog 是由 Gateway 设计自动化公司的工程师创立的。该公司的菲尔·莫比(Phil Moorby)完成了Verilog的主要设计工作。1990年,Gateway设计自动化被Cadence公司收购。

1990年代初,开放Verilog国际(Open Verilog International,OVI)组织(即现在的Accellera)成立,Verilog面向公有领域开放。

1992年,该组织寻求将Verilog纳入电气电子工程师学会标准。最终,Verilog成为了电气电子工程师学会1364—1995标准,即通常所说的Verilog—95。

2001年,对于Verilog-95扩展后的版本后来成为了电气电子工程师学会1364—2001标准,即通常所说的Verilog-2001。Verilog-2001是对Verilog-95的一个重大改进版本,它具备一些新的实用功能,例如敏感列表、多维数组、生成语句块、命名端口连接等。目前,Verilog-2001 是 Verilog 的最主流版本,被大多数商业电子设计自动化软件包支持。

2005年,Verilog再次进行了更新,即电气电子工程师学会1364—2005标准。该版本除了对上一版本进行了细微修正,还包括了一个相对独立的新部分,即Verilog-AMS。这个扩展使得传统的Verilog可以对集成的模拟和混合信号系统进行建模。容易与电气电子工程师学会1364—2005标准混淆的是加强硬件验证语言特性的System Verilog(电气电子工程师学会1800—2005标准)。它是Verilog-2005的一个超集,是硬件描述语言、硬件验证语言(针对验证的需求,特别加强了面向对象特性)的一个集成。

2009年,IEEE 1364—2005和IEEE 1800—2005两个部分合并为IEEE 1800-2009,成为了一个新的、统一的 System Verilog 硬件描述验证语言(Hardware Description and Verification Language,HDVL)。

历史课上完了,下一节课是《窝里烙革(Verilog)国家地理》。

就像日本国京都照搬大唐的长安一样,Verilog 基本都可以在数字电路设计里面找到对应。

数字电路里面有各种芯片,Verilog 里面有模块(Module);数字电路里面有组合逻辑和时序逻辑,Verilog里面有线型变量(Wire)和寄存器变量(Reg);数字电路里面有选择器,Verilog里面有if语句……

当年胖老板对新大虾说得好:

"……

新少侠汇了茶钱,抬腿便要向左行去,却被掌柜拦住去路。

‘少侠莫急,某家拦你并非为了剪径打劫。只是觉得与客官投缘,免费指路则个。左边一路下去,三山五关并一江。

三山是:‘寄存器传输级描述’峰、‘逻辑门级描述'山和‘晶体管级描述'岭,一山更比一山高。

五关为:数据关,主司数据类型定义;流程关,主司数据流向;运算关,主司数学运算;任务关,主司程序输入输出;编译关,主司文件替换。

一江就是时延河,无比宽广。

……"

限于时间,这种比绪论还绪论的讲座就不多说了。关于Verilog语言的书籍可谓汗牛充栋,大家不妨找本经典的自己瞧瞧。

3.言“芯”不一致的Verilog

(说书的正想把台下,小二传来老板的话:接着说,老板叫你接着说。唉,到底是资本家啊,狠。所谓浮动工时,我们这行没加班费的……)

不知各位在看书还有写程序的时候,是否想过:这句话如何实现啊?例如:看到 if语句,小脑瓜儿里面出现一个选择器。如果想过,那么恭喜你,你已经不是菜鸟了。如果还没有,那么恳切地建议你试着想一想,绝对有好处。

贫僧在学Verilog的时候,还是一个小沙弥。当时,想破了我的大头,也没想明白那个时延10 ps(#10)在电路里面是如何严格控制的。直到一天,我遇到了Synopsys的烧火头陀,才被告知不是每个语句都会被实现。

于是,发一宏愿,要把所有Verilog语言关键字列成一个表记录其可综合性(可否在器件里实现)。佛主说“我不入地狱谁入地狱”,老僧说“我不做列表谁做列表”。结果呢,现在还在这里加班,没有成佛。给了自己一个偷懒的借口:HDL语言这个东西的掌握,在于精而不在于广,符合“一招鲜,吃遍天”的精髓。

这里给个小例子,假设仿真时间单位是ps:

在仿真里面,B信号变化10 ps之后,A变成与B一致。

实现后,就成了:

实现工具会自动忽略不可实现部分。

现在要写书了,没法偷懒了,命苦呗。只得不情愿地总结出了下面的表格。表 1.1里面给出了Verilog语言所有关键字的介绍,希望诸位笑纳。有心的人,可以裱了供起来,绝对有用。

表1.1 Verilog语言可综合性列表

表里“可综合”和“不可综合”的关键字自然无须细表,就是“与综合软件有关”比较令人费解。笔者认为,为了避免因为开发环境的变化而引起重新设计的工作量,还是不采用的为妙。再加播一条广告,下一讲里面会一点点讲解“可综合”关键字与数字电路的对应关系,大家可以前去观赏。

“假如综合器欺骗了你,不要抱怨不要生气;只能怪你学艺不精,或者说你中了仿真器的蛊毒”。在大伙的代码通过综合器进行综合的时候,会有一些东西被忽略掉。由于可综合性的要求以及数字电路自身的特点,有意无意地,综合器会对一些语句视而不见。这个不是问题,问题是大多数的综合器不去报警。因此,这就需要我们工程师自己好好把握了。

“不可综合”的关键字,被忽略,这个毋庸置疑;“与综合软件有关”关键字到底是保留还是忽略,就需要细心参考综合器的手册了;“可综合”的部分,也有被忽略的,这有点令人发指。没办法,其原因这里给大伙儿娓娓道来。

前面例子里面说了,所有时延信息会被忽略,书不重叙。

很多资料里面,都会毫不吝啬篇幅地介绍“阻塞赋值”与“非阻塞赋值”,搞得好像不了解这两个的区别都不好意思在业界混的感觉。有哪位大师能够告诉我这个后进:“阻塞赋值”在真实器件里面的实现原理?其实,综合后所有的赋值都是“非阻塞赋值”。这个还不是“忽略”,是故意“偷梁换柱”了。这个,初学者经常有“被愚弄”的感觉,可以说是罪大恶极,贻害万年。

实际上,即便在某家这些年的设计生涯中,在“可综合”的关键字里面常用到的也就一半多一点点。很多表1.1中“可综合”的关键字,都是“他认识我,我不认识他”。网友“eeleader”说得好:“30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持。在程序移植或者更换软件平台时,容易产生兼容性问题,也不利于其他人阅读和修改。建议多用心钻研常用语句,理解这些语句的硬件含义,这比多掌握几个新语法要有用得多。”

说完收工,回家抱娃,谁拦我,我和谁急。

等等,先请等等。贫僧这里还有一句话儿要交代。(“路边的野花不要采”?您顺便采,这个贫僧管不着。)还有一个疑问没有讲清楚,某家会睡不好的。这就叫:劳碌命。

那些不能综合以及尽量不要使用的关键字,是不是就没用了呢?当然不是,别以为以前设计这个语言的不是大牛。那些语句会在仿真里面有大用场。这里先提一句,后面有关仿真的一讲里面会详细介绍。

这正是:“描述语言两高峰,粉丝相争乱纷纷。说书贫僧辩分明,某家说与有缘人。组合时序是根本,谁言设计筋一根?综合与否须分辨,逻辑设计方入门。” KKa2RaR0EFv2ZP0gD5++HhNkS4rwD6EO5vU77ntaHLxRkx0EVSWadK1xXX1B7sOQ

点击中间区域
呼出菜单
上一章
目录
下一章
×