请选择 进入手机版 | 继续访问电脑版

fpga论坛|fpga设计论坛

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 11412|回复: 212

跟李凡老师学FPGA之D02:EDA建模、HDL描述语言(20160424课堂笔记)

[复制链接]
lcytms 发表于 2016-12-4 21:47:09 | 显示全部楼层 |阅读模式
本帖最后由 lcytms 于 2017-1-17 22:26 编辑

李凡老师学FPGA之D02:EDA建模、HDL描述语言(20160424课堂笔记)

用笨笔头整理课堂笔记,用以备忘,温故而知新。
整理文稿的细节处未能一一体现李凡老师的讲课精髓和独特风采,有待下一步补充完善。
感谢李凡老师博大精深的学识、孜孜不倦的教诲,并敬请李凡老师原谅本人拙劣的课堂笔记。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2016-12-4 21:52:57 | 显示全部楼层
0902
        按照计划,我们今天会讨论米德体系下面非常经典的建模理论,就是数据流、行为、结构化。
        EDA要理解人的意图,设计者的思想通过一种约定的语言格式描述出来。
        你用这种方式约定,用这种约定的方式描述,那么EDA就按这种约定的方式理解。
        如果这两者一致了,那么EDA就能高效率地实现原本人工来完成的很繁琐的工作。
        说到底,还是一个人机交互。
        但是在这个里面,我们可以看到一些问题,就是在EDA和算法语言的相同之处和不同之处。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2016-12-4 22:02:16 | 显示全部楼层
本帖最后由 lcytms 于 2016-12-4 22:10 编辑

0903
        我们昨天的课程讨论了,由于集成度的提高,迅速的提高,摩尔周期,以及电子设计任务的繁重,以往用人工方式的设计,已经不堪重负。
        因此引入了计算机辅助设计,在电子这个领域就是EDA,电子设计自动化。
        那么EDA这个领域里面,我们引入了,就是在米德体系下面,引入了人机交互的语言,使得计算机能够理解人的意图。
        问题是这种交互的语言,我们现在要说到它本身了。
        昨天把这个过程试做了。
        这种人机交互的语言,米德体系下面提出来了以后,很快被美国军方认可。
        因为当时正好是冷战末期,美国有大量武器研发的项目,就受限于这些方面,受限于建模理论方面。
        那么这个时候,自然而然就运用了在米德体系下面的VHDL语言体系。
0904
        所以说这是一个官方的标准。
        之后呢,还有另外一个工程师,这个人他本身跟米德并没有直接的联系。
        大家都知道,Gateway这家公司的创始人菲尔•莫比(Phil Moorby)。
        莫比呢,他本身是一个C程序员。
        从60年代末到70年代中后期这段期间,全世界在没有专门的EDA语言来进行人机交互之前,大量的工程师用C语言来写EDA,他就是这个C语言团队中间的一个程序员。
        那么,由于莫比的体系下面,莫比他是站在C语言的体系下面来写的。
0905
        当时世界上已经有了很多这样的例子,用C语言来写,但是莫比他是站在另外一个角度。
        他是站在商业化运作的角度上,他希望他所构建的这套语言系统,他认为用C语言来写的话呢,不足以完全描述硬件描述语言的这种特点。
        因此,他认为应该有一种特殊的语言,专用于硬件设计的语言,由此创建了他的Verilog。
        但是呢,Verilog仍然是站在C语言的平台上,并且是商业化的运作模式,完全没有米德的那种经典的学术思想。
        所以说,早期Verilog在出现的时候呢,并没有受到世界上的重视。
        美国的大多数的高校,在早期,就是从60年代末到70年代中后期这段期间,以至于米德体系VHDL推出来以后的若干年,美国的大部分高校都是VHDL。
 楼主| lcytms 发表于 2016-12-4 22:08:05 | 显示全部楼层
本帖最后由 lcytms 于 2016-12-4 22:09 编辑

0906
        因为美国高校是VHDL,以至于影响到全世界,甚至我们中国。
        我们中国的高校用VHDL很自然,因为美国讲,我们中国也就讲VHDL。
        Verilog呢,相对而言的话,那个时候关注的人比较少。
        莫比他是一个商业化的公司,他不能就这么善罢甘休,为什么?
        因为他不像学术团队,你放弃了就放弃了,如果这个世界放弃了Verilog,这个Gateway就要破产。
        所以说他不能让自己的公司倒闭,因此他想了一个办法,正是由于这个办法才挽救了Gateway,挽救了Verilog,就是OVI(Open Verilog International)组织。
0907
        当时他就想,要做一个开源的平台,在网络上,有点像马云了,利用网络的力量,挽救他自己,来推广他的Verilog。
        他在网络上做了一个OVI,在网络上注册了的工程师,你可以把你写的代码,上传到这个平台,全世界的工程师都可以共享。
        正是由于这一招,这是由于开源的这种代码,免费共享的代码,确实是吸引了很多工程师。
        有些大学生,有些独立思考的EDA的创业者,把他们的代码上传到了OVI的这个网站上面。
        而全世界其他的一些工程师,慢慢地也就来接近。
        因为VHDL它虽然很严谨,但是它得不到啊,我需要一个代码的话,OVI是免费的,是很容易进入的,这样的话呢,就吸引了眼球。
0908
        并有越来越多的工程师关注。
        可见没有OVI,就没有Verilog。
        这句话有一定的道理,因为Verilog早期在当时确实有很多天生的缺陷,用中国话来讲,就是有很多硬伤,确实是如此。
        在有这么多硬伤的基础上,让人家去买他的这个软件,用他的软件,这是不现实的。
        但是OVI则不然,OVI让大家认识到了,原来可以这么方便地用。
        因为VHDL它虽然严谨,虽然是一个正宗的学术体系,但是它却没有像Verilog那么开放,那么自由。
        直到今天,这个世界才看清楚这件事的庐山真面目。
0909
        VHDL虽然很严谨,虽然是正宗的学术体系,但是今天,2012年以后,全世界已经把目光放在System Verilog上了。
        System Verilog完全继承的是Verilog 2005,并没有继承VHDL,说明全世界的工程师已经注意到,严谨虽然需要,但是在严谨和灵活两者之间,大部分人还是选择了灵活,选择了方便,选择了自由。
        这两种语言体系,最后导致了System Verilog的产生。
        System Verilog是从VHDL和Verilog这两大主流的流派出现了以后,深刻地影响了世界,但是这两种语言都各有缺陷。
        VHDL是过于严谨,以后我们会来讨论,它的学术思想非常浓重,但是呢它却非常麻烦,非常严谨。
0910
        同样的一段建模,VHDL的代码量是两倍、三倍于Verilog,这么大的代码量,令人望而生畏。
        其次呢,VHDL它是一个强数据类型的语言,强数据类型我们知道,有点像C语言的强制类型。
        强数据类型,它的赋值号,操作符两边的称之为软件Object对象呢,它的属性property要完全一致,如果不一致,它就直接报错。
        正是这一点呢,导致了Verilog程序编制的灵活,因为赋值号的两边,程序员不必考虑过多的细节,程序总能完整地执行,完整地实现,编译也好,综合也好,但VHDL则不然。
 楼主| lcytms 发表于 2016-12-4 22:09:01 | 显示全部楼层
本帖最后由 lcytms 于 2016-12-4 22:10 编辑

0911
        VHDL它过于严谨,这方面我们后面重点来讨论,就是它的数据类型,是VHDL的一个大的绊脚石。
        这两种语言出现了以后,深刻地影响了世界。
        可是到2000年以后,建模的规模越来越大,速度越来越高,这个时候就出现了一个问题,而且还有SOC系统,还有模数混合系统,都出现了,使得建模出现了一个新的问题,或者说一个新的契机。
        是什么呢?
        就是验证,Verification。
        由于建模的规模越来越大,特别是SOC,就是片上系统,还有SOPC,可以编制的一个片上系统,片上系统的验证就越加复杂。
0912
        这样的话,就使得验证的理论,2000年以后,就特别地受到世界的关注。
        因此西方的学者,主要还是在美国,当然还是有很多来自全世界各地的人。
        美国这个国家吸收了全世界各地的精英,在那诞生了很多新的验证的思想,验证方法学,高级验证方法学等,可是我们的语言体系并没有得到支持。
        其中验证方法学里面最重要的一个应用的理论基础,称为Assertion,断言系统,这个翻译有点牵强。
        Assertion它讲的是assert、deassert的关系,这个站在英语的角度很好理解,assert是将布尔量设置为真值,这个动作是assert,它的名词是assertion。
0913
        如果是正逻辑,1就是真的,0就是假的,负逻辑应该0是真的,1是假的。
        把这个布尔量设置为真值的动作,是assert,它的名词是assertion。
        把这个布尔量设置为假值的动作,是deassert,它的名词是deassertion。
        这一点是断言里面的一个基础。翻译成断言有点绕,不好理解,就是把一个逻辑布尔量设置为真值和假值。
0914
        那么这件事情就导致了验证方法学的进步。
        验证方法学出现了以后,但是并没有语言支持它,于是呢,有一家公司就研发了这么一个新的语言系统,称之为System Verilog。
        System Verilog诞生了以后,因为它支持验证方法学,并且结合了这两种语言的优点,就是VHDL和Verilog的优点。
        避免了这两种语言的缺点,扬其所长,避其所短,所以说System Verilog是当时最有前途、使用效率最高的语言。
        有一种说法,2012年以后,因为2012年的标准就是2011的,美国硅谷的公司,新上马的项目,维护性的项目另当别论,就是非System Verilog莫属,一定是它。
0915
        因为它本身就是从Verilog上发展的,继承的,所以说有些Verilog 2005的语法可以直接用在System Verilog上。
        可是这个时候带来一个新的问题,就是我们说的,我们在EDA语言的发展历史上,有一段是为了建模。
        建模是为了什么呢?
        建模是为了电路,就是为了综合,综合就是为了把语言变成电路的一个过程,就是说为了综合的目的,诞生了HDL语言。
        可是现在呢,2012年以后呢,System Verilog导致了人们的另外一种倾向,就是这个HDL语言原本是面向综合的,现在是更多的面向验证了,说更多一点也不过分。
        这两者是截然不同的。
 楼主| lcytms 发表于 2016-12-4 22:17:20 | 显示全部楼层
0916
        因为综合的时候,这两种语言所描述的是电路,也就是说它真正具有描述的意义,而没有执行的概念。
        算法语言和HDL语言的区别呢,是非常明显的,为什么呢?
        因为算法语言是执行的,一定是一个执行的概念,在软件里面,它是一条指令一条指令,一个程序行一个程序行地被CPU执行,它一定有执行的概念。
        在执行的过程中,我们就知道,这里面有并发一说,顺序一说,但是对于电路而言,如果综合成电路了,有没有并发和顺序呢?
        所以说早期的EDA教材里呢,谈到这一点都觉得很可笑,把软件的CAS、SAS,也就是并发和顺序的概念嘛,HDL语言的解释上,先执行哪一段,先执行第一行,再执行第二行。
        可是硬件电路会这样做吗?
        不会啊。
0917
        如果我们有两个硬件电路块,我们把它并联在一起,你会说上面这个电路是先做,后面这个电路是后做吗?
        不是这样的,瞬间它就同时做了,所以说执行这个概念,只有在软件上才会体现,而在硬件上却没有这种概念。
        在硬件上一定是并行串行,或者说并联串联,它们的拓扑关系就是一个完全物理的概念,这点是它们的区别,就是综合,面向综合目的的语言,和非综合目的的语言,也就是算法语言和HDL语言的区别。
        面向综合的时候,这两种语言的区别非常之大,大到什么程度呢?
        大到在2000年之前,EDA工程师,用C语言的工程师,用行为来描述代码。
        这个时候,这些C语言的工程师,他可能完全没有硬件背景,他只是一个非常熟练的C程序员,他可以没有硬件的背景,用这样的方法来描述一段电路可不可能呢?
0918
        2000年之前,他真的有,而且还非常多,还做成了。
        可是2000年之后,有的时候我们说,2000年是个分水岭。
        对集成电路来讲,是亚微米与纳米的分水岭,对EDA软件的平台上也是这么说,这是综合、非综合的一个分水岭。
        但是2000年以后就会发现这个问题,光有行为意识,就是只会用行为语言来写代码的话,而没有硬件电路的基础,就会导致综合效率低下,甚至不可综合。
        这种情况越来越明显,以至于美国的学者,在EDA教学理念上,直接提出这个口号,就是synthesis friendly,就是综合友好。
        不写一个综合友好的代码的话,就做不出来。
        综合友好的前提是什么呢?
        就是设计者你得知道,你的代码会得到什么样的电路。
0919
        而不是仅仅是一段行为,像软件那样的叙述而已,它不是执行,它是描述。
        这个意义就是,面向综合的时候,算法语言,和HDL语言的分歧,面向综合和非综合的这种分歧,一直维持到System Verilog出现,就是2012年以后,这个世界风向逆转。
        很奇怪,本来HDL语言它是面向综合,代码里面并没有执行的概念,可是我们的语言主要的目的是面向验证呢?
        那就不然了。
0920
        因为验证不是在实现物理电路,验证这段代码仍然是在电脑上执行的,Verification嘛,这个时候啊,原本算法语言的特征要完整地体现。
        所以说九九归一,到了System Verilog的时候,要合了,分久必合合久必分,像三国演义那样。
        这个HDL语言和算法语言,在综合的时候,2000年以后,2012年以前,强调的是分,就是要分开来。
        它们的不同之处,就是一个是面向综合目的的,是描述的结果,另外一个,算法语言是执行的结果,要强调他们的区分点。
        2012年以后呢,反过来了,它又合了,EDA语言和算法语言,它又合二为一,它要回到软件的特点上,回到执行的概念上。
 楼主| lcytms 发表于 2016-12-4 22:22:36 | 显示全部楼层
0921
        验证要在电脑上做嘛,所以说仍然要执行。
        所以说在这个意义上,System Verilog以后,人们就要想到这一点,就是我们现在的EDA工程师就要有这个意识。
        当你面向综合的时候,要有区分的概念,两种语言的不同之处,算法语言和HDL语言的不同之处,一定要把它们区分开来。
        一定要有这个意识,否则你写不好这个代码,做不成综合友好。
        但是验证的时候呢,你得合,你的的思想观念要转一下。
        要验证的时候,你得想到它是在电脑上,无论怎么做,它的这个系统是在电脑上,这个时候只有执行,没有物理的概念了。
        这一点是很有意思的。
        以至于我们现在的语言体系以及工具,都受到这个思想的影响。
        就是一个分,一个合。
0922
        我们现在所讨论的建模也好,或者说Testbench的构成也好,它都是在验证的基础上。
        但是验证呢,我们现在还没有看到一件非常有意思的事情,就是Verilog,它居然在验证的领域里面战胜了VHDL。
        由于Verilog是一个民间的体系,在它的语言创世之初,它就有一些非常不严谨。
        站在今天的角度上,正好是它的优点了,也是称之为反转。
        它走的不是米德的正宗的体系,它走的是商业化行为,带有自由、随意的很多的一些色彩。
        我们知道,一个非常典型的,有的说Verilog四大怪,有的说十大怪。
0923
        四大怪,其中其中有一点,现在学Verilog的都知道,一开始我们就说很不习惯,任何一个语言系统,它的分号一定是打在一个结构的最末尾。
        世界上只有一种语言,就是Verilog,它有的时候打在上面,有的时候打在下面,这和它的编译团队的随意性是有关系的。
        另外还有一些非常随意的行为,由于这个很随意的商业化的运作行为呢,使得它的学术的严谨性不强,以至于早期有人对它嗤之以鼻,对它是有评价的。
        可是今天站在验证的角度上,却大不然,它又大放光彩了。
        正是由于VHDL走的是正宗的米德体系,强调是综合,米德呢那个时候提出来的是人设计的瓶颈的问题,所以它主要是强调综合的,很严谨的一个综合的概念。
        所以VHDL并不适合做验证。
        另外呢因为它没有这个思想的束缚,所以说它既可以做综合,也可以做验证。
0924
        而且做验证的时候,做得很好。
        由于它仍然保留了C语言的特点,有执行的概念,这个里面最著名的一个例子,就是那个阻塞和非阻塞,那个blocking,non-blocking。
        VHDL是正宗的米德体系,完全没有这一说,因为电路的物理特性,要么是串联,要么是并联,所有的事情都是在瞬间发生的,没有先发生后发生一说。
        所以说它的赋值语句只有一个,就是信号signal的赋值,signal的赋值就是小于等于号,这是在VHDL里面唯一的信号赋值符。
        还有一个变量的赋值符,总之跟进程无关。但是这个Verilog不然,Verilog它是从C语言发展过来的。
        C语言里面就带阻塞和非阻塞,并不是VHDL的特征。
        是C语言的一个技术细节,是C语言里面的一个名词。
0925
        以后我们会来解释,什么是阻塞,什么是非阻塞。
        阻塞和非阻塞本来是并不适合于描述电路的,因为在阻塞的过程之中,就有非常强烈的执行色彩。
        必须要先执行上面的语句,上面的语句结束之后,才能执行第二条语句,像软件那样做。
        那么非阻塞呢,它是一个查询的过程,这个过程呢,特别是阻塞的一个语句,用于描述电路,早期很多人对它是持批评的。
        根本不对嘛,这样描述是不正确的,不真实的。
        可是,到了验证的这个时代,还非它莫属了,只有用这个阻塞的方式,才能把验证的代码写好,写成。
        所以说呢,我们现在看得到,Verilog之所以成为最终被大家接受的这个理由,也很奇怪,也很自然,也可以说体现了上帝的意图。
 楼主| lcytms 发表于 2016-12-4 22:24:33 | 显示全部楼层
0926
        本来是一个很正宗的学术思想,最终它很灵活的方式来处理,又变成了学术的思想。
        下面呢我们来讨论,今天的正宗的米德体系下面的一些问题。
        首先呢,我们来介绍一下层次化设计(Hierarchical Design)。
        正是像我们刚刚所叙述的EDA语言的引入,就是为了实现人机交互,就是把设计者的意图通过约定的语言系统描述出来,EDA按照这种约定来进行理解,来进行高效率的实现。
        可是一个复杂的电路系统,EDA又如何能做到精确的、准确的理解呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

x
 楼主| lcytms 发表于 2016-12-4 22:28:15 | 显示全部楼层
0927
        就是你的设计思想如何能够精确地传达给计算机呢?
        除了语言语法的描述之外,一个复杂的系统,它是一层套一层的,一个结构套一个结构的。
        这个时候呢,在现在的EDA架构下面,就讨论到了这么一种思想,就是层次化设计(Hierarchical Design),以及自上而下Top-down的设计。
        对于这个人来说,实现一个电路的设计也罢,实现一个机械的设计也罢,我们可以从细节着手,逐步地完善,然后最终实现。
        这种自下而上的设计呢,在工程实践中确实是有的,而且这种自下而上的设计呢,有的时候,它是一种对资源精确划分的一种设计,没问题。
0928
        另外一种设计,像人的设计,或者说这种更适合于人和人之间的交互,人际交互。
0929
        我们讨论的是人机交互。
        所以说一种层次化的设计,自上而下的设计的话呢。
        我们讲,自下而上的设计是面向上帝,面向真实的物理世界,当然可以做得很好。
        但是自上而下的设计,是面向人的,是面向人际交互的。
        因为一个自下而上的设计,人际交互可能会有障碍,但是自上而下,人,A是这么考虑问题的,B大多也是这么考虑问题,我们人类考虑问题的实质大致如此,这是从整体到局部。
        那么这种自上而下的思想呢,现在就被EDA广泛应用了,那么EDA软件就用这种思想,它首先检索你的顶层。
        昨天我们看到,我们要构建,要建模的时候,是用新建工程向导,在命名工程名的时候,它有一个顶层的实体。
        为什么要顶层的实体呢?
0930
        一定要找到它的顶层,它找到最顶层的电路模块,然后呢再逐步细化。
        这是EDA的一个实现的方式,现在这个EDA不仅是在我们的这个FPGA、ASIC这个方面,要做到层次化,自上而下。
        所有的,无论是板级设计,或者是设备级的设计,板级的设计以及集成电路的设计这一关,所有的EDA的软件,它都是依靠层次化这个树。
        层次化称之为一个树,一个Tree,它就一定有一个根,根下面有分支。
        正是依靠这棵树,EDA能够理解设计者的意图,你描述出这棵树,EDA就按设计者的意图找到它的果实。
        下面呢,我们就通过一个实际的例子,来说明一下层次化设计,和源代码的组织。
        这种层次化的设计,自上而下,Top-down是不言而喻的,是必定要存在的。
 楼主| lcytms 发表于 2016-12-4 22:29:42 | 显示全部楼层
0931
        而源代码的组织呢,我们会向大家推荐一种方式,也是一种现代施工的方式,我们称之为攀岩法。
        我们举一个例子,这个例子呢,是一个行波进位加法器的例子。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?我要注册

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

本版积分规则

QQ|小黑屋|手机版|Archiver|FPGA论坛 ( 京ICP备10035964号  

GMT+8, 2019-8-26 09:26 , Processed in 0.091954 second(s), 23 queries .

至芯科技 Powered by Discuz X3.2

© 2001-2014 Comsenz Inc.

快速回复 返回顶部 返回列表