《EDA实习之8位乘法器设计(共19页).doc》由会员分享,可在线阅读,更多相关《EDA实习之8位乘法器设计(共19页).doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 学号:常 州 大 学EDA 技 术 课 程 设 计 报 告题 目: 移位相加8位硬件乘法器设计 学 生: 朱京 学院(系): 信息科学与工程学院 专 业 班 级: 电子102 指导教师: 李文杰 专心-专注-专业一、设计题目 移位相加8位硬件乘法器设计二、设计背景 纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。由8位加法器构成的以时序逻辑方式设计的8位乘法器,具有一定的实用价值。其乘法通过逐项移位相加来实现,从被乘数最低位开始,若为1,则乘数左移后与上次的和相加,
2、若为0,左移后与全0相加,直至被乘数的最高位。三、设计内容及要求设计内容:设计移位相加8位硬件乘法器,完成8位被乘数A7.0和8位乘数B7.0的乘法运算,得到16位的乘法运算输出DOUT15.0。(1)设计8位移位寄存器SREG8B,当被乘数加载于SREG8B后,随时钟节拍,最低位在前,由低位至高位逐位移出。(2)设计与门,根据移位寄存器输出是否为1,决定输入加法器的是8位乘数还是全零。(3)设计8位加法器,将8位乘数或全零与16位锁存器的高8位进行相加。(4)设计16位锁存器REG16B,在时钟到来时,锁存来自加法器的输出至高8位,并右移低8位。要求:1)根据系统设计要求,采用自顶向下的方法
3、,划分系统主要模块,画出整体设计原理框图。2)根据工作原理、用硬件描述语言对设计内容实现,列出设计程序清单,给出仿真波形图和调试中存在问题及解决方法。3)设计内容下载至目标芯片,在EDA的GW48型实验箱进行功能验证。4)谈谈该课题的课程设计中遇到的问题,获得哪些技能和体会,以及建设性意见。四、设计步骤和安排:(1)题目安排;图书馆查相关资料;(2)设计原理研究,总体设计;(3)各主要模块的VHDL设计。各模块的设计仿真分析。 (4) 完成系统顶层文件设计,系统总体功能的仿真分析。 (5) 将设计内容进行硬件配置,在GW48实验箱上进行调试。 (6) 撰写课程设计报告、答辩并提交报告。 目 录
4、1产品设计介绍11.1 概念:11.2 意义:11.3主要功能:11.4设计平台:11.4.1硬件平台:11.4.2软件平台:12方案设计及实现22.1系统实现原理22.2 设计步骤22.2.1系统介绍:22.2.2原理框图:22.3主要模块之8位右移寄存器模块的设计42.3.3源代码:42.3.4仿真图:52.3.5仿真分析:52.4主要模块之8位加法寄存器模块的设计62.4.3源代码:6 2.4.4仿真图:62.5主要模块之选通与门模块的设计72.5.3源代码:72.5.4仿真图:82.5.5仿真分析:82.6主要模块之16位锁存器的设计92.6.4仿真图:102.6.5仿真分析:102.
5、7系统总体仿真112.7.1仿真图:112.7.2仿真分析:113硬件调试113.1调试方法:113.2调试步骤:113.3调试结果及分析:124心得体会及总结125参考文献126附录136.1引脚锁定136.2功能扩展131产品设计介绍 1.1 概念:该乘法器是由8位加法器构成的以时序方式设计的8位乘法器。 1.2 意义:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。由8位加法器构成的以时序逻辑方式设计的8位乘法器,具有一定的实用价值。其乘法通过逐项移位相加来实现,从被乘数最低位开始,若为
6、1,则乘数左移后与上次的和相加,若为0,左移后与全0相加,直至被乘数的最高位。1.3主要功能: 乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。1.4设计平台: 1.4.1硬件平台:GW48 EDA实验系统 1.4.2软件平台: MAX+plus II;Windows72方案设计及实现 2.1系统实现原理在下图中,START信号的上跳沿及其高电平有两个功能,即16位寄存器清零和被乘数A7.0向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。CLK为乘法时钟信号。当被乘数被加载于8位右移寄存器SR
7、EG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。当为1时,与门ANDER打开,8位乘数B7.0在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。而当被乘数的移出位为0时,与门全零输出。如此往复,直至8个时钟脉冲后,乘法运算过程中止。此时SREG16B的输出值即为最后的乘积。此乘法器的优点是节省芯片资源,它的核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率。本设计采用层次描述方式,且用原理图输入和文本输入混合方式建立描述文件。下图是乘法器顶层图形输入文件,它表明了系统由8位右移寄存器(SREG8
8、B)、8位加法器(ADDER8)、选通与门模块(ANDER)和16位锁存器(SREG16B)所组成,它们之间的连接关系如下图所示。 2.2 设计步骤 2.2.1系统介绍:此移位相加8位硬件乘法器分为四大部分。第一部分:8位寄存器设计第二部分:选通与门设计第三部分:8位带进位加法器第四部分:16位锁存器 2.2.2原理框图:16位锁存器8位寄存器加法器选通与门clk输入输出高8位移位相加硬件乘法器电路原理图2.3主要模块之8位右移寄存器模块的设计2.3.1 模块说明:输入为clk、load和din,输出为q;2.3.2 模块功能:模块的主要功能是数据右移。8位右移寄存器工作流程图clk=1结束Y
9、YNYN输出最低位装载新数据开始load=0数据右移 2.3.3源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity SREG8B isport(clk,load:in std_logic; din:in std_logic_vector(7 downto 0); q:out std_logic);end SREG8B;architecture behave of SREG8B issignal reg8:std_logic
10、_vector(7 downto 0);beginprocess(load,clk)beginif(clkevent and clk=1)then if(load=0)thenreg8=din; else reg8(6 downto 0)=reg8(7 downto 1); end if;end if;end process; q=reg8(0);end behave; 2.3.4仿真图: 2.3.5仿真分析: 在上升沿脉冲到来且load为0的时候,装载新数据,并输出din(0);在load为1的时候,进行数据右移,并输出din(0)。2.4主要模块之8位加法寄存器模块的设计2.4.1模块说明
11、:输入为a、b,输出为q;2.4.2模块功能:模块的主要功能是实现两个8位数的加法运算8位加法寄存器的工作流程图开始q=a+b结束 2.4.3源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ADDER8 isport(a:in std_logic_vector(7 downto 0); b:in std_logic_vector(7 downto 0); q:out std_logic_vector(8 downto 0);end ADDER8;architecture be
12、have of ADDER8 isbeginq=a+b;end behave; 2.4.4仿真图:: 2.4.5仿真分析: 这是一个8位带进位加法器,输出q为输入a与输入b的和,最高位q(8)是进位位2.5主要模块之选通与门模块的设计2.5.1模块说明:输入为abin和din,输出为q;2.5.2模块功能:模块的主要功能是完成8位与1位运算。选通与门模块的工作流程图abin=1q=开始结束q=din 2.5.3源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ANDER isp
13、ort(abin:in std_logic; din:in std_logic_vector(7 downto 0); q:out std_logic_vector(7 downto 0);end ANDER;architecture behave of ANDER isbeginprocessbeginif(abin = 1)thenq=din;elseq=;end if;end process;end behave; 2.5.4仿真图: 2.5.5仿真分析: 在abin为1的时候,输出q=din;在abin为0的时候,输出q=“”。 2.6主要模块之16位锁存器的设计 2.6.1模块说明:
14、输入为clk、clr和din,输出为q; 2.6.2模块功能:模块的主要功能是将数据锁存。16位锁存器工作流程图开始结束清零锁存输入值并右移低8位clr=0clk=1YYN输出16位结果 2.6.3源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity SREG16B isport(clk,clr:in std_logic; din:in std_logic_vector(8 downto 0); q:out std_logi
15、c_vector(15 downto 0);end SREG16B;architecture behave of SREG16B issignal reg16:std_logic_vector(15 downto 0);beginprocess(clr,clk)beginif(clr = 0)thenreg16=00000;elsif(clkevent and clk=1)then reg16(15 downto 7)=din; reg16(6 downto 0)=reg16(7 downto 1);end if;end process; q=reg16;end behave; 2.6.4仿真
16、图: 2.6.5仿真分析: 当clr为0的时候,输出清零;在clr为1且上升沿脉冲到来的时候,输入din锁存至输出的高9位且将低8位右移一位。 2.7系统总体仿真 2.7.1仿真图: 2.7.2仿真分析: 将输入A设定为21,输入B设定为32,按下START(键8),连续来8个脉冲后,输出为0672,与理论计算结果相同。 3硬件调试 3.1调试方法: 在GW48 EDA实验箱上选择电路模式1,8位输入A、B分别锁定键1、2、3、4,START信号锁定键8,16位输出锁定数码管5、6、7、8,CLK信号选择2KHz。 3.2调试步骤: 1.输入A设定为21,输入B设定为32;2.CLK选择2KH
17、z,按下START(键8);3.观察数码管5、6、7、8。 3.3调试结果及分析: 结果:在第8个脉冲到来时,数码管上显示0672;分析:与仿真波形的结果相同,更改输入A,B的数据,数码管的输出结果与仿真波形都相同,达到设计要求。 4心得体会及总结 4.1总结 在长达十天的课程设计当中,我更加熟悉了MAX+plus II 软件的使用,比如说实体、结构体的作用、保存的时候不能还有中文及文件名要和实体名相同等。 加深了对VHDL编程语言的理解,尤其是本课题中锁存器的设计让我更清楚进程、变量、信号的使用及它们之间的区别。 EDA这门课程还是非常重要的。通过这次EDA课程设计,意识到了其重要性。当然,
18、团队合作也很重要,非常感谢其他组员的配合,才能让这次的EDA课程设计快速的完成。 4.2遇到的问题 在调试过程中,其输出结果与仿真波形总是不一致,但是一直找不到错误。后来,想到了原因是因为引脚锁定时锁定错误。一个非常低级的错误,让我多走了一些弯路。提醒自己在做各种事情的时候要小心谨慎,不要粗心大意。5参考文献【1】 朱正伟编著EDA基础及应用【2】 韩学超,张小鸣编著EDA技术开发系统GW48实验指导书6附录 6.1引脚锁定 选择器件FLEX EPF10K10-PLCC84-4名称引脚号名称引脚号A(0)5B(0)17A(1)6B(1)18A(2)7B(2)19A(3)8B(3)21A(4)9
19、B(4022A(5)10B(5)23A(6)11B(6)24A(7)16B(7)25START81CLK43DOUT(0)27DOUT(1)28DOUT(2)29DOUT(3)30DOUT(4)35DOUT(5)36DOUT(6)37DOUT(7)38DOUT(8)39DOUT(9)47DOUT(10)48DOUT(11)49DOUT(12)50DOUT(13)51DOUT(14)52DOUT(15)53 6.2功能扩展以下内容是为了显示本次课程设计的题目”4:MUTIPLY”,采用verilog语言。代码如下:module lcd(clk, rs, rw, en,dat); input cl
20、k; output 7:0 dat; output rs,rw,en; reg e; reg 7:0 dat; reg rs; reg 15:0 counter; reg 4:0 current,next; reg clkr; reg 1:0 cnt; parameter set0=4h0; parameter set1=4h1; parameter set2=4h2; parameter set3=4h3; parameter dat0=4h4; parameter dat1=4h5; parameter dat2=4h6; parameter dat3=4h7; parameter dat
21、4=4h8; parameter dat5=4h9; parameter dat6=4hA; parameter dat7=4hB; parameter dat8=4hC; parameter dat9=4hD; parameter dat10=4hE; parameter dat11=5h10; parameter nul=4hF;always (posedge clk) begin counter=counter+1; if(counter=16h000f) clkr=clkr;endalways (posedge clkr)begin current=next; case(current
22、) set0: begin rs=0; dat=8h30; next=set1; end set1: begin rs=0; dat=8h0c; next=set2; end set2: begin rs=0; dat=8h6; next=set3; end set3: begin rs=0; dat=8h1; next=dat0; end dat0: begin rs=1; dat=4; next=dat1; end dat1: begin rs=1; dat=:; next=dat2; end dat2: begin rs=1; dat=M; next=dat3; end dat3: be
23、gin rs=1; dat=U; next=dat4; end dat4: begin rs=1; dat=T; next=dat5; end dat5: begin rs=1; dat=P; next=dat6; end dat6: begin rs=1; dat=L; next=dat7; end dat7: begin rs=1; dat=Y; next=dat8; end dat8: begin rs=1; dat= ; next=dat9; end dat9: begin rs=1; dat= ; next=dat10; end dat10: begin rs=1; dat= ; next=dat11; end dat11: begin rs=1; dat= ; next=nul; end nul: begin rs=0; dat=8h00; if(cnt!=2h2) begin e=0;next=set0;cnt=cnt+1; end else begin next=nul; e=1; end end default: next=set0; endcase endassign en=clkr|e;assign rw=0;endmodule
限制150内