您的位置:首页 > 其它

[转]Verilog数字系统设计教程(大连理工一博士学习笔记)

2005-03-04 10:53 561 查看
写在前面
学习Verilog HDL有一些时间,大概一年前的的这个时候开始的吧,从一点都不懂开始学,主要还是看夏宇闻老师的这本书入的门——《Verilog数字系统设计教程》,书写的特别好。然后就是看网上的一些资料,学习语言,学习软件的使用方法。但是一年来基本没有做过什么东西,做了两块基础开发板,编了一些小程序,真正的应用还没有什么。不过从学习的过程中有很多的体会,觉得收获不小。
我觉得学习数字电路的设计,不光要学习语言,还应该有一定的硬件基础才行,比如说基本的电路设计啊,数字电路的基础知识啊什么的,反正涉及的面还是比较宽的。如果基础不好也不要紧,我也是一样,大学学的东西基本都忘记了,不过用起来的时候再去补习一下也就好了。
写下面的这些东西不是为了表现什么,也不是说自己有什么特长,本事有多高,我权当是自己的一个总结了。因为我觉得很多的高手不屑于给初学者提供这样的入门,我也体会到初学者的那种迫切需要入门的感受,所以才会有这个东西。由于我自身水平也很有限,不能提供出特别高深的理论和方法,所以希望大家看了之后不要骂我啊,而且我的时间也比较紧张,这个东西不知道能以什么进度来书写,希望有人关注,有人提供意见和建议,有人来帮助我。另外有些东西也是抄夏老师的,希望夏老师看到了不要为此起诉我啊,我可没有什么商业的目的,只是为了总结自我,为后来人提一些意见和建议而已。如果大家想要更好的学习,我觉得应该买本夏老师的书,我买的这本定价38元,北京航空航天大学出版社出版,夏宇闻编著,书名是《Verilog数字系统设计教程》。
在学习语言的同时,我觉得应该要学习硬件的使用,毕竟我们是为了设计硬件电路才学习语言的。我使用的是Altera的CPLD和FPGA,两者都做了一个基础开发板,也就是把下载口,晶振,复位按钮,电源这些东西做上去了,IO口全部用排针引出,可以插在别的用户板上,也可以用示波器、逻辑测试仪等设备观察,是最最基本的东西,如果有需要我可以为大家提供,大家也可以自己试着做一个。这个部分的东西等我哪天有空专门写一个东东吧。

第一章 基础知识
这一章主要介绍一些基本的知识,比如历史啊,优缺点什么的,可以不看,但建议还是阅读一下,有利于对这门语言有一个总体的认识。另外最后一节关于Verilog HDL的设计流程还是要好好看看,虽然可能我并没有写什么,但是要形成这样的一个概念,知道这个东西是怎么进行开发的。

第一节 硬件描述语言

硬件描述语言HDL(Hardware Description Language)是一种用形式化的方法来描述数字电路和系统的语言。数字电路系统的设计者利用这种语言可以从上层到下层(从抽象到具体),逐层描述自己的设计思想,用一系列分层次的模块来表示极为复杂的数字系统。然后利用EDA工具逐层进行仿真验证,再把其中需要变成具体物理电路的模块组合经由自动综合工具转换成门级电路网表。接下来用专用集成电路(ASIC)或现场可编程门阵列(FPGA)自动布局布线工具把网表转换成具体的电路布线结构。
硬件描述语言的发展至今已经有20多年的历史。现在主要的语言VHDL(Very High Speed Integerated Hardware Description Language)和Verilog HDL(Verilog Hardware Description Language)适应了历史发展的趋势和要求,先后成为IEEE标准。
由我看来,语言的出现就是用语言描述替代图形化(元件拼凑)设计,把我们要实现的功能和思想用语言的形式写出来,转换成实际电路的工作就交给EDA工具去做,从而简化了我们设计的工作,节约了开发的时间。也可以这么说,对于硬件不是特别明白的人也不必要去了解过多的关于电路的东西就可以开始做开发,对于科研人员可能更为有用。

第二节 Verilog HDL的历史

Verilog HDL是硬件描述语言的一种,用于数字电子系统设计。该语言是1983年由GDA(GateWay Design Automation)公司的Phil Moorby首创的。Phil Moorby后来成为Verilog-XL的主要设计者和Cadence公司(Cadence Design System)的第一个合伙人。在1984-1985年间,Phil Moorby设计出第一个名为Verilog-XL的仿真器;1986年,他对Verilog HDL的发展又一次作出了巨大贡献——提出了用于快速门级仿真的XL算法。
随着Verilog-XL算法的成功,Verilog HD语言得到迅速发展。1989年,Cadence公司收购GDA公司,Verilog HDL语言成为了Cadence公司的私有财产。1990年,Cadence公司决定公开Verilog HDL语言,并成立了OVI(Open Verilog International)组织,并负责促进Verilog HDL语言的发展。基于Verilog HDL的优越性,IEEE于1995年制定了Verilog HDL的IEEE标准,即Verilog HDL1364-1995;2001年发布了Verilog HDL1364-2001标准。这两个标准在网络上都能找到,夏老师书的后面也有中文版的标准。不要小看这两个标准,对于我们编程而言还是很有用的,在一些语法以及用法,综合性方面,都是一个速查手册,我就经常用到这个东西。

第三节 Verilog HDL和VHDL的比较

这个东西好像蛮重要的,因为刚开始就要选定用什么语言,要比较两种语言的优劣,使用的情况等等,以后才能更好的学习。我只会Verilog,所以不敢乱弹两者之间的优劣,想从另外一个角度来说一下。
这两种语言都是用于数字电子系统设计的硬件描述语言,而且都已经是IEEE的标准。VHDL 1987年成为标准,而Verilog是1995年才成为标准的。这个是因为VHDL是美国军方组织开发的,而Verilog是一个公司的私有财产转化而来的。为什么Verilog能成为IEEE标准呢?它一定有其优越性才行,所以说Verilog有更强的生命力。
这两者有其共同的特点:
1. 能形式化地抽象表示电路的行为和结构;
2. 支持逻辑设计中层次与范围地描述;
3. 可借用高级语言地精巧结构来简化电路行为和结构;具有电路仿真与验证机制以保证设计的正确性;
4. 支持电路描述由高层到低层的综合转换;
5. 硬件描述和实现工艺无关;
6. 便于文档管理;
7. 易于理解和设计重用——这点很重要啊!
但是两者也各有特点。Verilog HDL推出已经有20年了,拥有广泛的设计群体,成熟的资源也比VHDL丰富(但是好像我在找资料的时候都是VHDL的资料多一些,这个和现在的氛围有关)。Verilog更大的一个优势是:它非常容易掌握,只要有C语言的编程基础,通过比较短的时间,经过一些实际的操作,可以在2~3个月内掌握这种设计技术。而VHDL设计相对要难一点,这个是因为VHDL不是很直观,需要有Ada编程基础(我都不知道是什么,晕了),一般认为至少要半年以上的专业培训才能掌握。
目前版本的Verilog HDL和VHDL在行为级抽象建模的覆盖面范围方面有所不同。一般认为Verilog在系统级抽象方面要比VHDL略差一些,而在门级开关电路描述方面要强的多。
近10年来,EDA界一直在对数字逻辑设计中究竟用哪一种硬件描述语言争论不休,目前在美国,高层次数字系统设计领域中,应用Verilog和VHDL的比率是80%和20%;日本和台湾和美国差不多;而在欧洲VHDL发展的比较好。在中国很多集成电路设计公司都采用Verilog,但VHDL也有一定的市场。
夏老师推荐应该先学Verilog,然后再学习VHDL。我觉得也是,只会一门语言是不够的,否则在交流上会出现问题,而且用原理图的方法设计数字电路也是一个必备的能力,否则不能软硬通吃,达到大牛的水平啊。

第四节 用硬件描述语言设计复杂数字电路的优点

以前的数字逻辑电路及系统的规模的比较小而且简单,用电路原理图输入法基本足够了。但是一般工程师需要手工布线,需要熟悉器件的内部结构和外部引线特点,才能达到设计要求,这个工作量和设计周期都不是我们能想象的。现在设计要求的时间和周期都很短,用原理图这个方法显然就不符合实际了。
Verilog设计法与传统的电路原理图输入法的比较:一个是设计周期明显变短,另外硬件描述语言和工艺是无关的,这个就大大减小了工作量。和硬件相关的一些约束、对芯片的一些要求都可以交给EDA工具去做,大大的加快了设计速度,减少了工程师的工作量,从而提高了设计的××(不知道怎么描述了)。
下面提三个概念:软核、固核和硬核。
软核(Soft Core)是指功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的Verilog HDL模型。
固核(Firm Core)是指在某一种现场可编程门阵列(FPGA)器件上实现的,经验证是正确的,且门数在5000门以上的电路结构编码文件。
硬核(Hard Core)是指在某一种专用集成电路工艺(ASIC)器件上实现的,经验证是正确的,且门数在5000门以上的电路结构版图掩膜。
软核具有最大的灵活性,可以借助EDA工具与其他的设计结合起来作为一体,固核和硬核相对而言灵活性就要差很多了,所以我们需要着重发展软核的设计和推广软核的重用技术。另外,用软核构成的器件称为虚拟仪器,国际上专门一个组织叫“虚拟接口联盟”(Virtual Socket Interface Alliance)来协调软核以及虚拟仪器的重复利用方面的工作。

第五节 Verilog HDL的设计流程

现在的数字电路系统规模特别大,要设计这么大一个系统,要是中间有点点错误都会影响到正割系统。现在的系统设计,一般都是由总设计师把整个硬件设计任务划分成若干个部分,编出相应的模型(行为的或者结构的),通过仿真加以验证后,再把各个模块分配给下面的工程师。下面的工程师再细化手中的工作。这样可以把一个大的系统分成很多的小系统分开由多人设计,从而提高设计的速度和缩短开发周期。而且有的部分可以利用IP核(一些成熟的商业模块)的使用权,更为有效的开发。这样的一个设计概念叫做自顶向下(TOP-DOWN)。
自顶向下的设计就是从系统级开始,把系统分成若干个基本单元,然后把这些基本单元化分成下一层次的基本单元,一直这样下去,一直可以用EDA元件库中的基本元件实现。
实际上我理解的就是把一个项目一直细化,分成ABCD……等很多部分,每个部分继续细化,比如A下面有A1、A2、A3,A1下面又有A1¬_1,A1_2两个部分,A1¬_1可以由三个触发器和三个与非门组成,这样就可以比较方便的开发。
关于层次管理等等概念这里就不多讲了,总结一下用语言开的流程,一般是这样的:
1. 文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通常Verilog HDL文件保存为.v文件。
2. 功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只有在布线完成之后,才进行时序仿真)。
3. 逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式。逻辑综合软件会生成.edf(EDIF)的EDA工业标准文件。(最好不用MAX+PLUS II进行综合,因为只支持VHDL/Verilog HDL的子集)
4. 布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内。
5. 时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序(也叫后仿真)。

稀里糊涂把这一章写完了,好多东西都是抄夏老师的书上的,有点汗颜-_-!!!
希望下面写的东西能好一点,我发现我写的东西真的是够烂的,连抄都不会唉……

第二章 初识Verilog HDL

这一章里面我想简单介绍一下什么Verilog HDL,用实际的例子来说明一般的Verilog HDL程序的特点和结构。

第一节 概述

又要开始讲一些烂东西了……
简单一点讲一个Verilog HDL的程序就是一个电路模块,比如说一个多路选择器。这个从其程序的结构可以明显的看出来(好像还没有看到程序啊?!)。C语言的主程序都是一个主函数,然后有包含很多的子函数,主函数一般是包含在一对大括号中间的。

Void main()
{
//程序主题
}

而Verilog HDL的程序是包含在关键字 module和endmodule之间。module的意思就是模块,所以我刚才说得就没有错了,也方便记忆这两个关键字了。
在正式讲程序之前,我们先了解一下其描述的电路级别,书上说的是“Verilog模型可以是实际电路的不同级别的抽象”,简单一点讲就是按照和具体电路级别的关系的分类。
主要分为5大类:
1. 系统级(system-level)
2. 算法级(algorithm-level)
3. RTL级(register transfer level)
4. 门级(gate-level)
5. 开关级(switch-level)
前三种都是属于行为描述,其中只有RTL级才和逻辑电路有明确对应关系。第四种和逻辑电路也有明确的链接关系。第五种和具体的物理电路有关系。一般数字系统设计工程师都必须要掌握前面四种。
为什么要分这么一些类别呢?因为采用不同风格和结构编写的模块,最后需要通过综合工具综合成实际的电路,但是这些模块当中不是每个都需要去综合成电路的,有的只需要实现其逻辑功能,用在仿真当中,验证其他的模块的正确性,比如激励信号源等等。
这里面又提到一个综合的概念,综合我理解就是通过EDA工具把我们编写的模块转换成实际电路网表的过程。但是,不是每个模块、所有的语句都能综合的,所以在学习Verilog的同时要特别注意和理解可综合的编程风格。这个不是一句两句就能讲的清楚的,只有在学习的过程中慢慢去理解了。(关于这个网上有一个剑桥大学影印版的《可综合的Verilog语法》,有兴趣的朋友可以去找来看看。)

本来我是准备要写一个完整的教程的,但是精力和时间有限,而且夏老师的这本书本来也就不错,我写教程出来的意义就不是很大了,所以希望想学习数字系统设计,致力于FPGA/CPLD开发的朋友买这本好好啃一下,绝对会受益终身的。
我的Blog:http://Blog.April9th.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: