集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
楼主: lcytms

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

[复制链接]
 楼主| lcytms 发表于 2016-12-4 22:32:33 | 显示全部楼层
0932
        这个例子我们说,它具有很大的普遍意义。
        之所以认为这个例子具有普遍性呢,主要是我们在参考国外的教材的时候,我们看到国外的很多高校的教材。
        虽然它们的EDA教学的方向各有不同,但是谈到自上而下,层次化设计,源代码的组织,几乎都选中了这个例子,称之为行波进位加法器。
        昨天我们讨论了半加器、全加器,今天要做一个无符号的16的行波进位加法器。
        刚刚我们是在描述什么呢?描述对它的实现,既描述了它要做什么,又描述了它要如何去做,用人机结构来描述。
0933
        那么我们要描述行波进位加法器,我们把它命名为RCA_16。



本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 22:35:25 | 显示全部楼层
0934
        对于加法器而言,现代算术体系下面的数字模块而言,加法器有很多很多种实现的方式,行波进位加法器并不是最优秀的一种。
        我们知道超前进位链,还有高速超前进位链,等等。
        那么,这些加法器,都是真正用于我们的高通芯片,我们的酷睿CPU里面的加法器。
        但是行波进位加法器呢,之所以我们说,为什么国外很多高校都谈这个加法器,作为我们现在自上而下的一个例子呢?
        并不是由于它的速度特别快,而是由于它特别工整,特别适合于做练习。
        什么是超前进位链?
        什么是行波进位链?
        超前进位链我们稍后来说,我们以后的课程来介绍,这个时候我们是提速了,复杂起来了,现在我们就来看这个非常工整的例子。
0935
        所谓行波进位,就是前级的进位链的输出是后一级进位链的输入,进位链是逐级相连的,这个称之为行波进位链。
        行波进位链呢,我们的构成是这样,顶层是一个16位的行波进位加法器。
        它的第二层,就像我们的PPT上看到的,是由四个4位的行波进位加法器,有超前进位链连接而成。
        四个RCA_4构成一个RCA_16,在RCA_16的树上就长了RCA_4的果实,RCA_4呢又是由四个全加器构成。
        全加器,昨天我们讨论了,它是带进位链输入的,四个全加器构成一个RCA_4,四个RCA_4构成一个RCA_16。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 22:38:43 | 显示全部楼层
0936
        然后呢,全加器是由两个半加器加上一个或门构成的。
        昨天我们讨论了那个真值表,如果做那个真值表的化简,或者说做一个布尔表达式的一些个处理的话呢,也可以看得到,它是两个半加器加上一个或门构成。
        这个算法的过程,我就不需要同学们做了,做练习的时候我直接发给大家,大家看一下就行了。
        昨天做这个过程,就是给大家做一个复习嘛,数字电路复习,因为我们毕竟不是去考研的,在理论上不需要做太多的纠缠。
        两个半加器加上一个或门,构成一个全加器,这是它的第四层。
        最后半加器是如何构成,昨天我们做了,求它的最小项的SOP,sum是~a•b + a•~b。
        那么这个呢,形成对应的逻辑门。

本帖子中包含更多资源

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

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

0937
        我们回忆一下逻辑门的公式,它是a和b的异或。
        C_out是a和b的相与,五层结构。
        这五层结构,我们告诉大家做的呢,RCA_16,现在我们就来通过实际的建模,我来说一下它是如何构成的。
        构成的过程,我们看得到层次的形成,自上而下的施工方式,以及我们向大家介绍的攀岩法的源代码的组织。
        RCA_16这是顶层,我首先我来建一个RCA_16的电路模块。
        现在我们强烈推荐现在所有的文件都位于根目录下,至于学完了以后,可以自己组织。

本帖子中包含更多资源

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

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

0938
        所有的文件都位于根目录下,有它的好处。
        然后我启动Quartus,我先做,做完了以后,我们再来总结。
        启动Quartus以后,我们第一件事,新工程向导。
        这一点我是强烈提醒我们同学,因为我们同学来这之前,可能或多或少已经接触了一些EDA的建模,自己使用这样或那样的一些施工方式。
        但今天我们就总结,或者说我们标准化一下,一定要使用新工程向导。
        Introduction跳过去,选Next。
        1/5选择新建的工程文件夹。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 22:50:48 | 显示全部楼层
本帖最后由 lcytms 于 2016-12-4 23:00 编辑

0939
        跳过2/5。
        3/5选一款器件。
        我们每次都用相同的方式来操作,也可以避免一些不必要的错误,提升我们的运行效率,建模的效率。
        设置4/5,5/5选finish。
        然后新建Verilog文件。
        立刻另存为 rca_16.v,找到我们新建的工程文件夹,一定要在根目录下面。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 22:57:07 | 显示全部楼层
0940
        如果是在根目录下面保存,它的标签页上前面应该是没有别的路径。
        好,现在我们为它建模。我们首先做RCA_16的顶层,就像我们PPT上的,以及绘制在黑板上的。
        因为这个时候,它已经有对应的电路名称、电路端口。
        先把结构写了。
        结构写完了以后,我们再来填端口列表,五个端口。
        a、b、c_in、sum、c_out。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 23:00:14 | 显示全部楼层
0941
        然后我申明它的方向。
        然后Ctrl+S、Ctrl+K。
        这样的话呢,我们就得到了RCA_16的框架。顶层的框架。
        在我们施工的这个过程之中,一个复杂的电子系统,究竟应该是怎么样进行它的源代码的施工呢?
        是想代码做代码吗?

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 23:04:10 | 显示全部楼层
0942
        我们在上小学的时候,老师会告诉我们,写一个汉字,一定是先横后竖,先撇后捺,从上到下,从左到右。
        小学老师会注意我们的笔画顺序,以至于到了中学大学,没人会关注这件事情。
        所以说,工程人员的一个好的顺序,好的方式,就决定了你的功底。
        你小学老师,有时候说,语文的功底,或者说将来怎么怎么样。
        但是呢,这个EDA的建模方式,却非常重要。先做什么,后做什么。
        当我们学习的时候,可以说既是一种训练,一种技能的训练,也是一种往高级,迈向高速建模的,一个必然的,必须要有的一个技能,一个处理方式。
        而不是想到哪做到哪。
0943
        否则你这个系统就永远做不大,永远做不复杂。
        方法就是这样,先写顶层,接着我们是来写RCA_4,还是写全加器,还是写半加器呢?
        该怎么做呢?
        现在我们就来说这种施工方法。
        如果我们要写RCA_16,我现在准备的是RCA_4,我需要用四个RCA_4来装配一个RCA_16。
        但RCA_4我现在还没有呢,RCA_4没有,全加器也没有,半加器也没有,这个时候我们怎么做呢?
        如果我们这个时候,按照想当然的方法,想到哪做到哪,随便挑一个来做。
0944
        现在呢,我们就按照攀岩法的施工方式。
        攀岩法说,如果我要做RCA_16,我需要RCA_16的部件,自上而下地施工。
        那么我们需要RCA_4,因此,我准备RCA_4的框架。
        刚才大家看见了,这是RCA_16的框架。
        我只要RCA_4的框架,框架就是这个部分,一行代码都没有。
        现在我就来写个RCA_4的框架。
        新建一个Verilog,另存为rca_4.v文件。
        快一点施工,我就把rca_16代码复制过来,粘到rca_4上,修改过来。
        这个比我一行一行打要快一点,然后呢,Ctrl+S、Ctrl+K。

本帖子中包含更多资源

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

x
 楼主| lcytms 发表于 2016-12-4 23:08:08 | 显示全部楼层
0945
        现在我们就得到了一个rca_4的一个组件的框架。
        有了这个框架之后,我们接着做什么呢?
        是不是接着再写全加器,再写半加器呢?
        攀岩法告诉我们,不然。
        自上而下,先把顶层完成,这一点很有意思。
        这个是EDA建模里面有别于常理的一件事情。
        我们所谓常理嘛,做任何事情,总装总是在最后做的,无论是机械也好,做土木工程,盖大楼,桥,都是这样,总装是最后做的。
        唯独EDA一上来就做总装,第一件事就做总装。
        总装需要它的部件,部件只需要一个框架。
        现在总装的框架我已经有了,因此,我就可以来做总装,立刻做总装。
        总装应该是最先做,只要能做就先做,尽量做它上层的总装。
0946
        所以说rca_16的总装就可以开始了,rca_16的总装装起来应该是这个样子,就是由第二层形成的,四个rca_4,rca_4的框架有了嘛。
        然后呢,我们现在要装配顶层的时候呢,要有一个准备工作,准备工作就是中间信号要声明出来。
        我们看见第二层,现在这张图上,a、b都是端口,只不过要分列出来,sum也是分列出来的,c_in、c_out也是它的端口,rca_16的端口,这些端口可以直接地用。
        但是呢,中间信号你必须声明出来,有哪些中间信号呢?
        画在这个白色的外框内部的、没有出头的信号,这是一个,这是一个,这是一个,总共有三个中间信号。
        这三个中间信号应该声明出来,而且它应该是线。
        我们把它分别声明成m0的c_out,m1的c_out,和m2的c_out,这三根线,声明出来。
0947
        回到顶层,顶层就要准备开始要做总装了。
        总装之前的准备工作,先把中间信号声明出来,是m0_cout、m1_cout、m2_cout,就这三个中间信号,有了中间信号,我们就可以来装配顶层了。
        装配呢,是用rca_4来装配。
        我把rca_4的例化头的部分复制过来,贴到第10行,写上m0的实例名,做好接线的准备。
        例化的部分有点类似于我们的Testbench,就是把这个电路模型接入到它的上层,复制下来,然后我们把它修改过来。这是m1,这是m2,这是m3。

本帖子中包含更多资源

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

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

本版积分规则

关闭

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

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

GMT+8, 2024-12-24 00:32 , Processed in 0.062540 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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