集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

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

[复制链接]
 楼主| 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的[3:0]。
        m1是[7:4]。
0951
        m2是[11:8],m3是[15:12]。
        大家理解,圆括弧里面的a,就是端口的a,[15:0]的a,4根4根的分列。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 23:13:03 | 显示全部楼层
0952
        我保存了,执行一次分析和综合。
        然后我们看一下Hierarchy,啊,这个树上长果实了。
        rca_16有4个分支,是由rca_4组成的,m0~m3是它的实例名。
        EDA正是用这种方式才能够理解你的意图,现在施工接着往后面走。
        现在呢,顶层已经装配了,装配到什么程度呢,是装配到一半,还是全部完成了呢?
        EDA它说,自上而下的时候呢,顶层是全部完成,是一次性施工结束了,顶层就已经做完了。
        除非是以后有变动,如果按照这个设计没有变动的话,顶层已经全部做完了。
        然后呢,第二层、第三层,第二层还没有开始,rca_4是空的,第三层连名字都没有,连框架都没有。

本帖子中包含更多资源

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

x
 楼主| 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。

本帖子中包含更多资源

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

x
 楼主| 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。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 23:20:10 | 显示全部楼层
0959
        这样的话,我们就完成了rca_4的施工。Ctrl-S、Ctrl-K。
        然后我们再看一下Hierarchy,层次这个树。
        啊,又长出了新的层次。
        rca_16上长了四个rca_4的果实的分叉,rca_4呢,长了四个全加器,就逐步形成了这棵树,层次Hierarchy。
        下面该做什么呢?
        全加器是有两个半加器加上一个或门构成的。
        需要两个半加器的框架,把两个半加器的框架做了,生成出来。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 23:21:16 | 显示全部楼层
1000
        半加器和全加器的区别就是没有c_in,拷贝修改完成。
        Ctrl-S、Ctrl-K。
        现在有了半加器的框架,我们用半加器的框架来装配全加器。
        同样先准备好中间信号,把白框内部的信号声明出来。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 23:23:24 | 显示全部楼层
1001
        连接三个中间信号,h0的sum、c_out,h1的c_out,做好装配的准备。
1002
        装配好h0、h1。
1003
        或门我们用assign来做。

本帖子中包含更多资源

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

x
 楼主| 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的理解。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 23:29:03 | 显示全部楼层
1005
        现在呢,我们就剩下做一个半加器了。
        我们用assign语句来写,半加器的sum是a和b的异或,c_out是a和b的相与。
        Ctrl-S、Ctrl-K。
        这个过程,像小学生写汉字似的,先横后竖,先撇后捺,先做什么后做什么。
        现在呢,我们就完整地完成了rca_16的建模,它是由多个层次关系形成的,这个层次关系在Hierarchy这个标签页上看得非常清楚,仿真也是如此,完全依靠这棵树。

本帖子中包含更多资源

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

x
 楼主| 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
        添加激励和信号,进行装配。

本帖子中包含更多资源

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

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-23 11:38 , Processed in 0.063391 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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