lcytms
发表于 2016-12-11 23:06:44
1053
门级的描述加上具体的地址就会得到网表,得到延迟特性,这个呢描述的是相同的电路,描述的方式不同,抽象的层次不同,gate level更接近于具体的描述。
真正下板的时候呢,还要具体到开关级。
所以说呢,越往下面的描述就更接近具体,越往上面就更接近抽象,这种从抽象到具体的描述,这种层次结构呢,在很多教材里,我们都称之为抽象的层次讨论。
最高级的抽象,可以是系统级的抽象,从需求和概念上进行抽象。
另外,可以从算法描述进行算法级的抽象,或者是框图描述的架构级抽象。
以及我们源代码描述的,HDL代码描述的寄存器RTL级的抽象,更进一步的,由EDA的机器决定的门级抽象和开关级的抽象。
1054
这些呢,抽象层次的划分,抽象层次的树,主流是由工具决定的,但是设计者的作为并不大。
设计者在建模的时候,选择每一级的抽象,算法及以上,架构级以上,这可能和你设计的思路有关,以下的部分大多是由工具决定的。
但是在米德体系下,就提出了三种非常著名的,非常重要的,设计者可以主动作为的描述方式,就是称之为数据流建模、行为建模和结构化建模。
所谓数据流建模,或者数据流的description,description本身就是描述嘛,data-flow description。
数据流的这个描述呢,建模呢,是对资源进行组织,对资源的描述。
通过对资源的描述,来实现对电路的描述,称之为数据流建模。
lcytms
发表于 2016-12-11 23:13:02
1055
VHDL的数据流建模,它是正宗的米德体系,它做得很好。但是Verilog是商业化行为,商业化行为的数据流建模。
业界曾经有一种批评,就是认为Verilog的数据流建模做得是很差很少很失败,三个很。
但是呢,尽管如此,2015以后的verilog呢,做了弥补,虽然它的语法上支持很弱,但是呢,它还是有一些手段,能够解决对数据流建模的支持。
最著名的,最重要的一个verilog的一个数据流的建模,就是带问号的assign语句。
我们知道,带问号的assign语句,还可以对资源进行描述,这是唯一的一个。
另外一种方式,就是称为behavioral description,行为的描述。
1056
2000年之前呢,EDA的教材上呢,或者说在EDA界值得欢欣鼓舞的一件事,就是引入了behavior,引入了行为的statements,语句。
当时的人们有这样的感觉,EDA的设计者,因为在之前,EDA的设计呢,总要考虑what to do和how to do。
既要考虑它要做什么,也要考虑它的门级实现,如何用门来实现对应的任务的,执行它的what to do和how to do的这个过程的。
正是由于EDA这个语言的出现呢,引入了行为的语句,使得这种效率呢,得到了极大的提升。
我们不再需要描述how to do了,我们只需要描述what to do,做什么,这个电路做什么。
什么是what to do呢?
就是我只要考虑,如果出现了什么样的情况,电路发生什么样的动作,需要把这件事情描述清楚。
1057
类似于人类的语言,if怎么样,结果怎么样。
Case怎么样,结果怎么样。
想想看,这个跟电路有没有关系,没有任何的关系,或者需要用行为,用behavior来描述,带来的效率的巨大提升。
我刚才已经解释了,正是由于行为的描述,导致了更多的故事。
就是2000年之前,我们只要会写行为,就会写EDA,但是2000年之后,写了行为,你不一定能够写出一个很好的电路。
因为有可能会出现综合的问题,综合不友好,或者说综合效率低下,或者说不可综合。
那么,行为的描述显然带来了巨大的提升。
什么是行为呢?
就是类似于人类的语言,如果怎么样,就怎么样,出现什么样的情况怎么样,我们要怎么样地处理。
但你做这种描述的时候,你描述了行为,但是行为变成电路呢,如何变成电路?
1058
how to do完全是EDA,自动化地进行,自动化地进行固然带来了效率的提升。
但2000年之后也提到了一个特别的问题,除了追求效率的问题之外,就是核心竞争力。
你不能指望你的行为语句会产生核心竞争力,因为行为变成电路完全交给EDA来做,EDA不可能替你进行创造性的思维。
它只可能用行为所对应的、尽可能优化的电路结构来实现你的行为,而绝不会根据你的行为产生一个你有而别人没有,人无我有的一种特定的、高端的、更高级的一个电路结构,不可能。
更高级的电路结构怎么做呢?
还得回到结构化,structural description,结构化的描述,既描述了what to do,又描述了how to do。
1059
结构化的描述,可以说,又回到了传统的电子设计的那种思路上,用结构化,用具体的部件,下层的部件来实现上层的部件,这种描述。
这种描述的方式呢,都在一个电路模型里面,可能会交流,综合地来说,就是在现在的国外的高校的教案里面,大多数都会这样讨论这三种方式。
就是行为是描述what to do,没有描述how to do。省略了how to do,带来效率的提升。
而结构化是既描述what to do,又描述how to do,是完整的描述。
数据流居于其中,它有的时候可以描述how to do,有的时候可以不用描述,居于其中。
下面呢,我们就通过具体的例子来说明这三种方式是如何实现的。
并且我们可以看到verilog里面的,它的编译器的一些特征。
1100
有同学指出来,什么时候声明成reg呢?什么时候声明成线呢?
这个跟EDA三种建模方式密切相关,密不可分。
现在呢,我们通过一个例子,通过一个简单的例子,来说明这三种建模方式。
我们这里通过一个简单的例子来比较,这三种建模方式的相同之处和不同之处,它们的特点。
我们仍然通过多路器的例子,a输入,b输入,s输入。
lcytms
发表于 2016-12-11 23:14:22
1101
0、1、f。
f跟a、b、s的布尔表达式是如何呢?
我们现在就做一遍。
根据我们的电路的需求,当s为真值的时候b输出,当s为假值的时候a输出,现在我们根据这些描述把真值表绘制出来。
输入项a和b,s,输出项f。
lcytms
发表于 2016-12-11 23:15:30
1102
那么有三个输入,一共有八种情况。
我用列模式来做。
lcytms
发表于 2016-12-11 23:16:46
1103
s为0的时候是a输出,s为1的时候是b输出。
现在呢,根据这张真值表,SOP的最小项,积之和。
lcytms
发表于 2016-12-11 23:18:42
1104
(见图)
lcytms
发表于 2016-12-11 23:20:25
1105
其实用卡诺图也很容易。
现在呢,我们就来通过三种方式,数据流、行为、结构化,来进行建模的描述。
lcytms
发表于 2016-12-11 23:21:55
本帖最后由 lcytms 于 2016-12-11 23:23 编辑
1106
我同样新建一个文件夹,关闭当前工程,新工程向导,我同样在今天日期下面新建一个mux2,顶层、工程命名mux2。
跳过第二页。
第三页,我们仍然选cyclone II这个器件。
第四页,仿真,语言。
第五页,finish。
lcytms
发表于 2016-12-11 23:25:36
1107
新建一个verilog,另存为mux2_dataflow.v,我们用数据流来做。
显然在mux2这棵树上是找不到mux2_dataflow这个果实,我只能把它设置为顶层,否则EDA找不到它,就任何的事情都做不了。
我只能重新把它设置为顶层。
建模。
什么时候要切换顶层,就要看层次这棵树上有没有。
就象我在黑板上叙述的。
lcytms
发表于 2016-12-11 23:27:17
1108
搭建框架。
ctrl-s、ctrl-k。
现在我们知道框架的重要性。
mux2_dataflow这个框架。
然后呢,我们写它的数据流,verilog里面最著名的一个数据流的语句,它的唯一的一个,就是assign带问号的那个。
这是verilog里面唯一的一个数据流的语句,数据流的赋值语句就是这个,带问号的这种形式。
以后我们在VHDL的课程里面会讨论到,它的支持要强大得多。
ctrl-s、ctrl-k。