lcytms
发表于 2016-12-4 23:10:54
0948
我们注意到,我们刚刚准备rca_16这个框架的时候呢,顶层Hierarchy这个树上,只有一个rca_16。
这就是根,看不到它的树杈。
现在我们把它装配上去,稍后来看一下。
装配的过程是这样,我们可以对照这张图来装配。
我首先把进位链装配出来,c_in,这个c_in就是顶层的c_in,rca_16的c_in的端口,装配到M0的c_in端。
0949
然后呢,m0的c_out连接到m1的c_in,m1的c_out连接到m2的c_in,m2的c_out连接到m3的c_in。
最后,m3的c_out连接到端口rca_16的c_out。
这样的话,进位链我们就连上了。
0950
连上进位链之后,我们就连接外围的端口了,m0连接的是a、b、sum的。
m1是。
0951
m2是,m3是。
大家理解,圆括弧里面的a,就是端口的a,的a,4根4根的分列。
lcytms
发表于 2016-12-4 23:13:03
0952
我保存了,执行一次分析和综合。
然后我们看一下Hierarchy,啊,这个树上长果实了。
rca_16有4个分支,是由rca_4组成的,m0~m3是它的实例名。
EDA正是用这种方式才能够理解你的意图,现在施工接着往后面走。
现在呢,顶层已经装配了,装配到什么程度呢,是装配到一半,还是全部完成了呢?
EDA它说,自上而下的时候呢,顶层是全部完成,是一次性施工结束了,顶层就已经做完了。
除非是以后有变动,如果按照这个设计没有变动的话,顶层已经全部做完了。
然后呢,第二层、第三层,第二层还没有开始,rca_4是空的,第三层连名字都没有,连框架都没有。
lcytms
发表于 2016-12-4 23:16:03
0953
可不可以这样呢?
不仅是可以,而且还是一种非常优秀的施工方法,非常优秀的、被国外很多高校推荐的源代码的组织方式。
接着,我们来自上而下,先做上面的,再做下面的,rca_4是由四个全加器组成,接着,我们要用四个全加器来装配rca_4。
四个全加器我们同样先把它的frame,它的框架做出来。
这个框架很有意思,如果我们团队作战的时候,框架的制定者制定了以后呢,他就可以把这个框架交付下层团队去做实施,上层团队就可以用这个框架做组装。
0954
所以说便于团队作战。好,我们先在新建一个Verilog,立刻另存为adder_full.v。
这次呢,我们是做一个全加器。
全加器呢,我从rca_4上复制过来,修改过来,端口列表一模一样,这也是我们为什么推荐端口列表只写端口名,而不写信号方向。
0955
因为端口命名并没有变,只是bit数变了,是一位的,这就是全加器,Ctrl-S、Ctrl-K。
那么这种自上而下,我们可以看到,每一个施工过程中,我们随时都做分析和综合。
这种分析和综合不仅做语法的检查,而且结构上他也做检查,如果每一个步骤都是正确的,最近的错误一定和最近的施工有关。
好,全加器有了。
有了全加器,我们就可以来装配rca_4了。
rca_4是第三层来实现的,同样,它的中间信号是b0连着b1,b1连着b2,b2连着b3,我们称之为b0_cout、b1_cout、b2_cout。
lcytms
发表于 2016-12-4 23:18:07
0956
这个时候到rca_4上施工,把中间信号准备好,b0_cout、b1_cout、b2_cout这三根线。
用全加器的框架来做rca_4的装配,b0、b1、b2、b3。
0957
我们同样用这张图,先把进位链装好。
0958
然后我们来连线,a、b、sum,依次是0、1、2、3。
lcytms
发表于 2016-12-4 23:20:10
0959
这样的话,我们就完成了rca_4的施工。Ctrl-S、Ctrl-K。
然后我们再看一下Hierarchy,层次这个树。
啊,又长出了新的层次。
rca_16上长了四个rca_4的果实的分叉,rca_4呢,长了四个全加器,就逐步形成了这棵树,层次Hierarchy。
下面该做什么呢?
全加器是有两个半加器加上一个或门构成的。
需要两个半加器的框架,把两个半加器的框架做了,生成出来。
lcytms
发表于 2016-12-4 23:21:16
1000
半加器和全加器的区别就是没有c_in,拷贝修改完成。
Ctrl-S、Ctrl-K。
现在有了半加器的框架,我们用半加器的框架来装配全加器。
同样先准备好中间信号,把白框内部的信号声明出来。
lcytms
发表于 2016-12-4 23:23:24
1001
连接三个中间信号,h0的sum、c_out,h1的c_out,做好装配的准备。
1002
装配好h0、h1。
1003
或门我们用assign来做。
lcytms
发表于 2016-12-4 23:26:06
本帖最后由 lcytms 于 2016-12-4 23:27 编辑
1004
这样呢,我们就写完了全加器。
但我们写全加器的时候,半加器还是空的,每一个施工的过程都是如此。
Ctrl-S、Ctrl-K。
好了,我们再看层次这棵树,rca_16下面有rca_4,四个果实,每个rca_4下面有四个全加器。
现在把全加器这个果实打开来,还有两个半加器,这个层次关系,这棵树,已经非常清楚了,你的设计意图就这样得到了EDA的理解。
lcytms
发表于 2016-12-4 23:29:03
1005
现在呢,我们就剩下做一个半加器了。
我们用assign语句来写,半加器的sum是a和b的异或,c_out是a和b的相与。
Ctrl-S、Ctrl-K。
这个过程,像小学生写汉字似的,先横后竖,先撇后捺,先做什么后做什么。
现在呢,我们就完整地完成了rca_16的建模,它是由多个层次关系形成的,这个层次关系在Hierarchy这个标签页上看得非常清楚,仿真也是如此,完全依靠这棵树。
lcytms
发表于 2016-12-4 23:32:43
本帖最后由 lcytms 于 2016-12-4 23:33 编辑
1006
当我们这棵树上有它的果实的时候,Testbench就能够做它的支持,EDA就能找到它,没有的话,就要另外想办法了。
或者加入这棵树,在仿真的时候,特别加入这个模型,或者把它添加到这棵树上去。
另外呢,我们的验证怎么来做?
验证刚好相反,当然高效率的话,直接做顶层的验证,直接做rca_16的验证,也可以观测到顶层的信号。
对于团队施工来讲呢,底层的团队先要证明他完成的这个部分是正确的,这是一个因素。
第二个呢,我们知道,上层的部件,是由下层的组件构成的。
那么,下层的组件如果正确,上层的组件有可能正确,有可能不正确。
1007
如果它,上层的组件装配正确,也就正确,上层的组件装配不正确,仍然不正确。
但是有一点是肯定的,如果下层的组件不正确,上层的组件就一定不正确。
所以说,不是充分条件,而是必要条件,下层组件的正确性,是上层组件正确性的必要条件,虽然不是充分条件。
那么,这样的话呢,要验证全加器是正确的,必要条件就是它的半加器必须是正确的。
要rca_4是正确的,必要的条件是它的全加器必须是正确的。
要rca_16是正确的,必要的条件是它的rca_4必须是正确的。
所以说验证,尤其这种必要性的验证,必须是自下而上的验证。
对,自下而上的验证,又称为必要性的验证。
好,现在我们来做这种必要性的验证。
1008
先验证半加器,新建Verilog,另存为adder_half_tb.v文件。
写时标,半加器的测试框架。
然后呢,我们要验证半加器的电路模型,把它置于半加器的Testbench之中。
1009
添加激励和信号,进行装配。
页:
1
2
[3]
4
5
6
7
8
9
10
11
12