您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子技术课程设计FPGA
电子技术课程设计FPGA实验班级:微82姓名:李虹江学号:2008011224实验一基本组合逻辑电路设计实验1.1加法器设计一、实验目的:1、掌握加法器的设计原理工作原理和设计方法;2、理解逐次进位和超前进位加法器的原理。二、实验原理表1.1全加器真值表ABCinSCo0000000110010100110110010101011100111111组成多位加法器的基本单元是一位全加器(FullAdder)。一位全加器的输入为被加数A、加数B以及低一位来的进位Cin,输出为本位的和S及向高一位的进位Co。根据全加器功能,列出真值表,如表1.1所示。根据表1.1可以得到:多比特的全加器可以通过一位全加器和逻辑门得到。根据其结构可以分为逐次进位加法器和超前进位加法器(如图1.2和图1.3所示)。逐次进位全加器直接由一位全加器级联得到,结构简单。但是后一级的结果需要等待前一级的进位输出计算完成,多比特的加法器延时较长。超前进位加法器可以缓解这个问题。超前进位加法器是一种通过缩短进位信号的生成时间加快运算速度的电路。这里采用进位产生函数和进位传递函数。其中,P为进位传递函数,G为进位产生函数。当G为1时,表示A和B都为1,这时不管Cin为何值都会产生进位信号,称为进位生成信号。而当P为1时,意味着A和B中有一个为1,另一个为0,如果Cin为1,则产生进位,否则没有进位,类似把Cin的值传给了Co,因此称为进位传递函数。依此类推得到各级的进位分别为:C0=G0+P0C-1C1=G1+P1G0+P1P0C-1C2=G2+P2G1+P2P1G0+P2P1P0C-1由式可以看出,每级的进位信号可以不需要等待之前一级的进位信号,而直接由各级的进位产生、进位传递、以及最低位进位输入计算得到,可以提高速度。图1.1.1逐次进位加法器示意图图1.1.2超前进位加法器示意图三、实验任务1,实现四位逐次进位加法器的门级设计代码实现:图1.1.3四位逐次进位加法器的门级设计moduleadder(S,Co,A,B,Cin)为一位全加器模块,采用门级描述,modulefour_digit_adder为四位加法器模块,依据逐次进位原理依次调用一位全加器模块,实现四位全加器。功能仿真:图1.1.4四位逐次进位加法器功能仿真结果从波形图中可以看出,四位相加结果正确。由于这是第一个实验,设计时还没有学会利用四位的寄存器输入输出,无法利用Quartus的2进制转10进制的功能,观察结果略微麻烦,但是结果的确是正确的。2、实现4位超前进位加法器的门级设计并和逐次进位加法器进行性能比较。设计代码:图1.1.54位超前进位加法器门级设计代码其中recursive_function模块为进位递推函数,在look_ahead_carry_adder模块中调用,实现4位加法器。程序功能仿真结果图1.1.64位超前进位加法器功能仿真从仿真结果看出,相加结果正确,且与4为逐次进位加法器波形完全相同。图1.1.7四位逐次进位加法器仿真后元件使用情况图1.1.8四位超前进位加法器仿真后元件使用情况从仿真结果来看,两种加法器不分伯仲,所用元件个数基本相同。再比较两种加法器的运算速度:图1.1.9四位逐次进位加法器timing仿真图1.1.10四位超前进位加法器timing仿真由于逐次进位加法器中,进位信号是从低位向高位逐位形成的,工作速度较慢,而超前进位加法器利用进位递推公式,每一位的进位由输入直接得出,不需要逐次进位,则工作速度较快。从仿真图上可以明显看出,超前进位加法器相比逐次进位加法器工作速度更快,毛刺更少,逐次进位加法器产生了很多的竞争冒险现象。3、完成4位逐次进位加法器和4位超前进位加法器的仿真验证前两问中已经完成。4、利用4位超前进位加法器实现8位超前进位加法器,并完成仿真验证(选做)设计代码:图1.1.118位超前进位加法器设计代码modulelook_ahead_carry_adder为四位超前进位加法器模块,在8位超前进位加法器中调用模块。图1.1.128位超前进位加法器功能仿真所加结果正确。5、利用1位全加器级联实现8位加法器,并与8位超前进位加法器进行性能比较(选做)设计代码图1.1.13由一位全加器构成八位逐次进位加法器图1.1.14八位逐次进位加法器功能仿真仿真结果正确与八位超前进位加法器进行比较图1.1.15八位超前进位加法器timing仿真图1.1.16八位超前进位加法器仿真元件使用情况图1.1.17八位逐次进位加法器timing仿真图1.1.18八位逐次进位加法器仿真元件使用情况理论上,八位超前进位加法器工作速度更快。而我设计的是一种“伪八位超前进位加法器”,原因是我将两个四位超前进位加法器进行了级联,即低四位和高四位之间为逐次进位,故从timing仿真结果可以看出会出现很窄的毛刺,但是工作速度较八位逐次进位加法器而言依然较快,八位逐次进位加法器的险象时间更长。从占用逻辑元件比较,两种电路都是16个,不分伯仲。6、利用4位超前进位加法器实现8位BCD码十进制加法器(选做)设计原理:由于1位8421BCD码中不存在大于9的数,因此两个1位8421BCD码相加,再加上可能存在的低位进位,最大可能和为19。考虑到8421BCD码是逢10进位的,四位二进制数十逢16进位的,因此对于和大于9的数,需进行加6的修正(参看表1.2),以实现十进制的逢十进位。十进制数未校正的BCD和校正的BCD和备注Cn’H3H2H1H0CnS3S2S1S000000000000不需校正100001000012000100001030001100011400100001005001010010160011000110700111001118010000100090100101001100101010000需校正110101110001120110010010130110110011140111010100150111110101161000010110171000110111181001011000191001111001表1.1.2校正8421BCD码的和判断和是否大于9,即求解向高位进位Cn的条件可以从表1.2着手。把CN视为两部分C’n和C’’n之或。对于16-19这4个和来说,进位C’n为1;对于10-15这6个和,可以根据卡诺图求得进位为C’’n=H3H2+H3H1所以Cn=C’n+C’’n=H3H2+H3H1+C’n若Cn=1,则意味着和大于9,需要进行加01102修正;若Cn=0,则不需修正。从而,得到图1.19所示的一位BCD码加法电路。图1.1.191位8421BCD码加法器将图1.19的1位BCD码加法器作为一个功能块,借助于中间变量,即进位信号Cn,可以构成多位8421BCD码加法电路的迭代阵列。图1.1.20多位BCD码加法器电路设计代码:图1.1.21BCD码加法电路此为BCD部分,当中调用了四位超前进位加法器模块。图1.1.22BCD码仿真结果仿真结果:29+13=4290+23=113个位,十位进位都正确。思考题:1、比较逐次进位和超前进位加法器的区别答:逐次进位加法器的原理是每一位的进位输出作为下一位的进位输入,而超前进位加法器利用“进位递推公式”,每位的进位由输入直接决定,不需要经过全加器。当位数很多时,逐次进位从低位到高位,每步时间累积,使加法器运算速度变慢,而超前进位加法器在位数很多时运算速度比逐次进位快很多。2、自行设计一个一位全减器。如何利用4位加法器实现一个4位减法器?答:1位二进制数的全减器有3个输入端:被减数An,减数Bn,从低位来得借位Cn-1;2个输出端:差Dn,向高位的借位Cn。全减器的真值表如表1.3所示。输入输出AnBnCn-1CnDn0000000111010110111010001101001100011111表1.1.3一位全减器真值表从表中可以画出差Dn和借位Cn的卡诺图,得出Dn=AnBnCn-1Cn=A-nBn+A-nCn-1+BnCn-1根据上面表达式,可以通过门级描述,得到全减器。由于减法可以看做是被减数加上减数的补码,所以可以将减数全部取反后与被减数输入4位加法器,即可以得到4位减法器。实验1.2竞争冒险消除实验一、实验目的1、了解竞争冒险的产生原因及其避免方法;2、学会利用软件仿真和硬件实现对数字电路的逻辑功能进行验证和分析。二、实验原理由于电路中各支路的器件延时不同,导致出现了竞争冒险现象。观察逻辑表达式Y=((A´B)´(AC)´)´=A´B+AC,其中´表示对逻辑变量求反或者求逆。该逻辑表达式对应的逻辑电路图如图1.2.1所示。图1.2.1电路逻辑图当B=C=1时,Y应恒为1。然而,由于在下方的支路中,非门引入额外延时,当A从1变为0的瞬间,输出端Y会出现短暂的低电平。这反映了组合逻辑电路的竞争冒险现象。为了消除竞争冒险,可以修改逻辑设计。增加冗余项通常能够有效地消除竞争冒险。例如,对于上述逻辑,可以引入冗余项BC,使之成为Y=A´B+AC+BC。当B=C=1时,BC=1。通过或操作,暂态0被消除了。同时,由于BC为冗余项,它不会改变原逻辑表达式的功能。三、实验内容要求1、软件仿真:根据要求设计该电路,并进行仿真,观察电路的竞争冒险现象,在仿真输出结果上标出稳态和暂态。加入冗余项,再进行相同的仿真,观察是否消除了竞争冒险现象;(必做内容)采用门级描述的代码如下:图1.2.2竞争冒险代码。图1.2.3竞争冒险波形图开始时按照图1.2.1直接进行门级描述,无论进行function仿真还是timing仿真均无法观察到险象。借鉴网络学堂讨论区中的帖子,自己写了与或非门,同时在entity设置中将setaspartition选中,如图1.2.4图1.2.4SetasDesignPartition再进行timing仿真即可以看见险象。推测出现这样结果的原因是QuartusII会对系统自带的与或非门进行优化,消除险象。加入冗余项后,险象消失,程序代码如图1.2.5图1.2.5加入冗余项后的竞争冒险代码图1.2.6加入冗余项后timing仿真,险象消失思考题:还有那些方法可以消除险象,举例说明答:险象消除最常用的方法是加入冗余项,消除险象的另一种方法是在组合电路输出端连接一个惯性延时环节。通常采用RC电路作惯性延时环节,RC电路实际上是一个低通滤波器。由于竞争引起的险象都是一些频率较高的尖脉冲信号,因此,险象在通过RC电路后能基本被滤掉,保留下来的仅仅是一些幅度极小的毛刺,它们不再对电路的可靠性产生影响。注意:采用这种方法时,必须适当选择惯性环节的时间常数(τ=RC),一般要求τ大于尖脉冲的宽度,以便能将尖脉冲“削平”;但也不能太大,否则将使正常输出信号产生不允许的畸变。三.选通法组合电路中的险象除了用上述方法消除外,还可以采用另外一种完全不同的方法,那就是避开险象而不是消除险象。选通法不必增加任何器件,仅仅是利用选通脉冲的作用,从时间上加以控制,使输出避开险象脉冲。由于组合电路中的险象总是发生在输入信号发生变化的过程中,且险象总是以尖脉冲的形式输出。因此,只要对输出波形从时间上加以选择和控制,利用选通脉冲选择输出波形的稳定部分,而有意避开可能出现的尖脉冲,便可获得正确的输出。实验二基本时序电路设计实验2.1D触发器设计一、实验目的1、掌握时序逻辑电路的基本分析和设计方法;2、理解触发器的工作原理,用硬件描述语言实现触发器的门级设计。二、实验原理触发器是最简单、最基本的时序逻辑单元,各种时序逻辑电路,如计数器,通常都是以触发器为基本单元构成的。一种常用的边沿触发型D触发器的功能如表2.1.1所示。D触发器的状态转换表如表2.1.2所示。根据表2.1.3,可以得到其状态方程为Qn+1=Dn。图2.1.1给出了典型的D触发器逻辑图,其中clk为时钟控制信号,D触发器在时钟脉冲clk的上升沿发生翻转,它的状态仅取决于时钟脉冲上升沿到来之前输入端的取值。表2.1.1D触发器功能表表2.1.2D触发器状态转换表图2.
本文标题:电子技术课程设计FPGA
链接地址:https://www.777doc.com/doc-75316 .html