资源描述:
《VHDL的乘法器设计——数字电路课程设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数字电路课程设计题目乘法器设计班级实验二班学号姓名时间第十三、十四周地点科A-304指导陈学英唐青1【摘要】:用FPGA设计完成基于半加器、全加器和保留进位思想设计的4BIT四级流水乘法器,用modelsim仿真其结果。【目录】:第一章、实验任务及原理第二章、设计思路方法及方案第三章、FPGA模块程序设计与仿真第四章、结束语2【正文】【第一章】:实验任务及原理本实验只要求编写乘法器的硬件代码,并用Modelsim进行仿真测试。设计乘法器,两个输入都是4BIT,对所有输入相乘都得到正确结果,乘法器采用四级流水设计,以增加
2、处理速度。用modelsim仿真时,要求用时钟上升沿方式遍历所有输入,检查输出结果是否正确。原理用到流水,进位保留思想。【第二章】:设计思路及方案算法结构(无符号)由上图可见,乘法的运算最终是加法的运算,两个4BIT输入,输出为7BIT。模块一、半加器:单比特输入相加,模块二、全加器:由两个半加器组成,有一个进位输入,模块三、进位保留加法器:3最终程序结构图流水设计的原理:在前向割集上加入四级流水图一图二如上图所示方框代表触发器,五边形代表组合逻辑块,假设图一中逻辑块输入输出延时为Ta,图二将逻辑块切割成两块,延时分别
3、为T1,T2,且Ta=T1+T2,4并在两逻辑块之间加触发器,两个逻辑块工作频率都可以达到clk频率,故工作速度增加一倍,虽然时延增加了,但资源优化了许多。【第三章】:FPGA程序模块及仿真半加器的程序模块:entityhalf_adderisport(a,b:instd_logic;s,cout:outstd_logic);endhalf_adder;architectureBehavioralofhalf_adderisbegins<=axorb;cout<=aandb;endBehavioral;全加器的程序模块
4、:调用半加器,采用顶层设计entityfull_adderisport(a,b,cin:instd_logic;s,cout:outstd_logic);endfull_adder;architectureBehavioraloffull_adderiscomponenthalf_adderport(a,b:instd_logic;cout,s:outstd_logic);endcomponent;signalh1s,h1cout,h2cout:std_logic;beginu1:half_adderportmap(a
5、,b,h1cout,h1s);u2:half_adderportmap(cin,h1s,h2cout,s);cout<=h1coutorh2cout;endBehavioral;乘法器的程序模块:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;----Uncommentthefollowinglibrarydeclarationifinstantiating----anyX
6、ilinxprimitivesinthiscode.--libraryUNISIM;--useUNISIM.VComponents.all;5entitymmisport(a:instd_logic_vector(3downto0);b:instd_logic_vector(3downto0);clk:instd_logic;reset:instd_logic;psum:outstd_logic_vector(7downto0));endmm;architectureBehavioralofmmiscomponenth
7、alf_adderport(a,b:instd_logic;s,cout:outstd_logic);endcomponent;componentfull_adderport(a,b,cin:instd_logic;s,cout:outstd_logic);endcomponent;signalx:std_logic_vector(1to16);-----原理图中从左到右------------原理图中,触发器从左到右,共四层,依次定义信号signald1:std_logic_vector(1to16);signald
8、2:std_logic_vector(1to13);signald3:std_logic_vector(1to10);signald4:std_logic_vector(1to9);-----------原理图中,加法器从左到右,依次定义加法器输出的进位信号signalc1:std_logic_vector(1to3);signa