四位ALU设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

四位ALU设计------两种方案比较蔡曙江2007.12.15一,设计介绍ALU(ArithmeticLogicUnit,算术逻辑单元)是处理器CPU中用于计算的那一部分。它负责处理数据的运算工作,包括算术运算起(如:加、减、乘、除等),逻辑运算(如:AND、OR、NOT..等)及关系运算(比较大小等关系),并将运算的结果存回记忆单元。本文将要讨论的ALU比较简单,位宽仅4位。其主要功能如下表所示。二,两种方案1,方案1通过对ALU功能表的观察,并经过简单和直接的思考,可知,ALU可由AU,LU和MUX三个子模块构成。其中AU负责代数运算,LU负责逻辑运算,MUX则决定当前选用哪种运算。输入数据为A,B,位宽为4位,输出数据为ALU_out,位宽也是4位,输入控制信号为S0,S1,C0,M。根据功能表,S0,S1信号控制LU模块作何种逻辑运算,S0,S1,C0信号控制AU模块作何种代数运算,M信号控制MUX模块选择种运算类型。此种方案的原理图如下所示。2,方案2方案1无疑是简单和直接的,但却存在着一个显著的缺点:面积较大。AU模块会综合出多个加法器,占用较大的面积。经过仔细分析,AU模块可以由两种思路用来实现:先加法后选择,或者先选择后加法。因为加法器占用面积较大,而前种思路又综合出多个加法器,所以前种思路占用面积较大,后种思路只需要一个加法器,故占用面积较小。方案1采用前种思路,故面积较大,方案2采用后种思路,优化了AU模块部分,故比方案1节省面积。通过引进中间变量A2,B2,可以仅用一个全加器实现AU模块。仔细分析下表,就可以体会思路2的意思。方案2的原理图如下:三,综合结果1,工作环境介绍系统平台:WindowsXP设计语言:verilog输入工具:UltraEditv13.10仿真工具:MentorModelSimSE6.1综合工具:SynopsysDCv2000.52,DC综合结果比较方案1与方案2的主要区别在于AU模块实现思路不同,AU模块面积占ALU总面积的大部分,而加法器又是AU模块的关键,故想方设法减少加法器的数目是优化ALU设计的重点之一。下表为综合结果。可以看出,当采用方案2时,面积可以节省一大半。但需要指出的是,综合结果中面积的绝对值与所加的设计约束以及工艺库等因素有关,上述结果只是作者所得到的值,但方案2比方案1节省许多面积,却是在任何情形下都成立的。下面为DesignAnalyzer中显示的两种方案的综合结果。四,附录:源文件方案1的verilog源代码文件ALU1.v//Author:SeamasCai//Date:Dec2,2007//Module:4bitALUmoduleALU1(out,M,S1,S0,C0,A,B);output[3:0]out;reg[3:0]out;input[3:0]A,B;inputM,S1,S0,C0;always@(MorS1orS0orC0)if(M==1'b0)//LUcase({S1,S0})2'b00:out=A&B;2'b01:out=A|B;2'b10:out=A^B;2'b11:out=A^~B;default:out=4'bxxxx;endcaseelseif(M==1'b1)//AUcase({S1,S0,C0})3'b000:out=A;3'b001:out=A+1;3'b010:out=A+B;3'b011:out=A+B+1;3'b100:out=A+~B;3'b101:out=A-B;3'b110:out=~A+B;3'b111:out=B-A;default:out=4'bxxxx;endcaseelseout=4'bxxxx;endmodule方案2的verilog源代码文件ALU3.v//Author:SeamasCai//Date:Dec2,2007//Module:4bitALU`includeripple_carry_adder.vmoduleALU3(ALU_out,Carry,M,S1,S0,C0,A,B);output[3:0]ALU_out;outputCarry;input[3:0]A,B;inputM,S1,S0,C0;reg[3:0]LU_out,A2,B2;wire[3:0]AU_out;always@(S1orS0)case({S1,S0})2'b00:beginLU_out=A&B;A2=A;B2=4'b0000;end2'b01:beginLU_out=A|B;A2=A;B2=B;end2'b10:beginLU_out=A^B;A2=A;B2=~B;end2'b11:beginLU_out=A^~B;A2=~A;B2=B;enddefault:beginLU_out=4'bxxxx;A2=4'bxxxx;B2=4'bxxxx;endendcaseripple_carry_adderrca1(.Sum(AU_out),.Co(Carry),.A(A2),.B(B2),.Ci(C0));assignALU_out=M?AU_out:LU_out;endmodule四位全加器verilog源代码文件ripple_carry_adder.v`includefulladder.vmoduleripple_carry_adder(Sum,Co,A,B,Ci);output[3:0]Sum;outputCo;input[3:0]A,B;inputCi;wireCo0,Co1,Co2;fulladderFA0(.Sum(Sum[0]),.Co(Co0),.A(A[0]),.B(B[0]),.Ci(Ci));fulladderFA1(.Sum(Sum[1]),.Co(Co1),.A(A[1]),.B(B[1]),.Ci(Co0));fulladderFA2(.Sum(Sum[2]),.Co(Co2),.A(A[2]),.B(B[2]),.Ci(Co1));fulladderFA3(.Sum(Sum[3]),.Co(Co),.A(A[3]),.B(B[3]),.Ci(Co2));endmodule一位全加器verilog源代码文件fulladder.vmodulefulladder(Sum,Co,A,B,Ci);outputSum,Co;inputA,B,Ci;assignSum=A^B^Ci;assignCo=A&B|B&Ci|Ci&A;endmoduleDC综合脚本文件#Author:SeamasCai#Date:Dec,2007#setlibrarylappendsearch_pathsourcelibscriptssettarget_librarycb35os142_typ.db#setsynthetic_library“dw_foundation.sldb”setlink_library*$target_librarysetlink_library*$target_library$synthetic_library#setdw_prefer_mc_insidetrue#setsymbol_librarycore.sdb#setcache_write~/#setcache_read$cache_write#setcommand_log_filecommand.logsetactive_designALU1#readthedesign#analyze-fverilogfulladder.v#analyze-fverilogripple_carry_adder.vanalyze-fverilog$active_design.velaborate$active_designcurrent_design$active_designlink#Eraseallattributesandconstraintsfromthecurrentdesignreset_design#remove_design#definethedesignenviromentset_operating_conditions-maxWCCOM-minBCCOM#settimingandareaconstraintcreate_clock-nameclk-period10-waveform{05}set_clock_latency1.0[get_clocksclk]set_clock_uncertainty0.5[get_clocksclk]set_dont_touch_network[get_clocksclk]#set_input_delay-max0.5-clockclk[get_portsA*B*]#set_input_delay-max0.3-clockclk[get_portsS1S0C0]#set_input_delay-max0.5-clockclk[get_portsM]set_input_delay-max4.5-clockclk[all_inputs]#set_output_delay-max5.5-clockclk[get_portsALU_out*]#set_output_delay-max5.5-clockclk[get_portsCarry]set_output_delay-max1.5-clockclk[all_outputs]set_max_area0#SetEnvironmentalAttributesset_load0.5[all_inputs]set_load0.5[all_outputs]#mapandoptimizethedesignuniquifycompile#analyzeanddebigthedesignreport_constraint-all_violators./reports/$active_design.constraint.rptreport_timing-max20./reports/$active_design.timing.rptreport_area./reports/$active_design.area.rptreport_resources./reports/$active_design.resources.rpt#savethedesigndatabasewrite-formatverilog-hierarchy-output./reports/$active_design.syn.vwrite-formatdb-hierarchy-output./reports/$active_design.dbwrite_sdc./reports/$active_design.sdcwrite_sdf-v2.1./reports/$active_design.sdf#write-formatddc-hierarchy-output./reports/$active_design.ddcecho......check_design......check_design后记闲时写此一文,纯粹为梳理一下自己的思路,并与他人共享。此资料版权归作者所有,他人因使用本资料内容,所产生的好的或者不好的结果,均与作者无关。如有引用,敬请注明出处。作者自毕业后就进入半导体行业工作,首先在一家芯片工厂工作三年,其后又专心于芯片设计。目前主要从事数字电源管理(DigitalPowerManagement),智能功率集成电路(SmartpowerIC)等方面的研究开发。本文写的较为简陋,希望能对读者有所助益,读者如果发现本文中的差错和不足,可通过下列方式通知作者。Email:seamascai@yahoo.cnMSN:Seamas_Cai@hotmail.com蔡曙江2007.12.15

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功