学号:10446234常州大学EDA 技术课程设计报告题目:移位相加8位硬件乘法器设计学生:朱京学院(系):信息科学与工程学院专业班级:电子102 指导教师:李文杰一、设计题目移位相加8位硬件乘法器设计二、设计背景纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。
基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。
由8位加法器构成的以时序逻辑方式设计的8位乘法器,具有一定的实用价值。
其乘法通过逐项移位相加来实现,从被乘数最低位开始,若为1,则乘数左移后与上次的和相加,若为0,左移后与全0相加,直至被乘数的最高位。
三、设计内容及要求设计内容:设计移位相加8位硬件乘法器,完成8位被乘数A[7..0]和8位乘数B[7..0]的乘法运算,得到16位的乘法运算输出DOUT[15..0]。
(1)设计8位移位寄存器SREG8B,当被乘数加载于SREG8B后,随时钟节拍,最低位在前,由低位至高位逐位移出。
(2)设计与门,根据移位寄存器输出是否为1,决定输入加法器的是8位乘数还是全零。
(3)设计8位加法器,将8位乘数或全零与16位锁存器的高8位进行相加。
(4)设计16位锁存器REG16B,在时钟到来时,锁存来自加法器的输出至高8位,并右移低8位。
要求:1)根据系统设计要求,采用自顶向下的方法,划分系统主要模块,画出整体设计原理框图。
2)根据工作原理、用硬件描述语言对设计内容实现,列出设计程序清单,给出仿真波形图和调试中存在问题及解决方法。
3)设计内容下载至目标芯片,在EDA的GW48型实验箱进行功能验证。
4)谈谈该课题的课程设计中遇到的问题,获得哪些技能和体会,以及建设性意见。
四、设计步骤和安排:(1)题目安排;图书馆查相关资料;(2)设计原理研究,总体设计;(3)各主要模块的VHDL设计。
各模块的设计仿真分析。
(4) 完成系统顶层文件设计,系统总体功能的仿真分析。
(5) 将设计内容进行硬件配置,在GW48实验箱上进行调试。
(6) 撰写课程设计报告、答辩并提交报告。
目录1产品设计介绍 (1)1.1 概念: (1)1.2 意义: (1)1.3主要功能: (1)1.4设计平台: (1)1.4.1硬件平台: (1)1.4.2软件平台: (1)2方案设计及实现 (2)2.1系统实现原理 (2)2.2 设计步骤 (2)2.2.1系统介绍: (2)2.2.2原理框图: (2)2.3主要模块之8位右移寄存器模块的设计 (4)2.3.3源代码: (4)2.3.4仿真图: (5)2.3.5仿真分析: (5)2.4主要模块之8位加法寄存器模块的设计 (6)2.4.3源代码: (6)2.4.4仿真图: (6)2.5主要模块之选通与门模块的设计 (7)2.5.3源代码: (7)2.5.4仿真图: (8)2.5.5仿真分析: (8)2.6主要模块之16位锁存器的设计 (9)2.6.4仿真图: (10)2.6.5仿真分析: (10)2.7系统总体仿真 (11)2.7.1仿真图: (11)2.7.2仿真分析: (11)3硬件调试 (11)3.1调试方法: (11)3.2调试步骤: (11)3.3调试结果及分析: (12)4心得体会及总结 (12)5参考文献 (12)6附录 (13)6.1引脚锁定 (13)6.2功能扩展 (13)1产品设计介绍1.1 概念:该乘法器是由8位加法器构成的以时序方式设计的8位乘法器。
1.2 意义:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。
基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。
由8位加法器构成的以时序逻辑方式设计的8位乘法器,具有一定的实用价值。
其乘法通过逐项移位相加来实现,从被乘数最低位开始,若为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位寄存器清零和被乘数A[7..0]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。
CLK 为乘法时钟信号。
当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,与门ANDER打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。
而当被乘数的移出位为0时,与门全零输出。
如此往复,直至8个时钟脉冲后,乘法运算过程中止。
此时SREG16B的输出值即为最后的乘积。
此乘法器的优点是节省芯片资源,它的核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率。
本设计采用层次描述方式,且用原理图输入和文本输入混合方式建立描述文件。
下图是乘法器顶层图形输入文件,它表明了系统由8位右移寄存器(SREG8B)、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位右移寄存器工作流程图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 is port(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_vector(7 downto 0); beginprocess(load,clk) beginclk=’1’’结束YYN N输出最低位装载新数据开始load=’0’数据右移if(clk'event and clk='1')thenif(load='0')thenreg8<=din;elsereg8(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模块说明:输入为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 behave 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位运算。
选通与门模块的工作流程图2.5.3源代码: library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ANDER is port(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 isabin=’1’q<="00000000"开始结束q<=dinbeginprocessbeginif(abin = '1')thenq<=din;elseq<="00000000";end if;end process;end behave;2.5.4仿真图:2.5.5仿真分析:在abin为‘1’的时候,输出q=din;在abin为‘0’的时候,输出q=“00000000”。
2.6主要模块之16位锁存器的设计2.6.1模块说明:输入为clk 、clr 和din ,输出为q ;2.6.2模块功能:模块的主要功能是将数据锁存。
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_logic_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<="0000000000000000"; 开始 结束 清零 锁存输入值 并右移低8位 clr=’0’clk=’1’ Y Y N 输出16位结果elsif(clk'event and clk='1')thenreg16(15 downto 7)<=din;reg16(6 downto 0)<=reg16(7 downto 1);end if;end process;q<=reg16;end behave;2.6.4仿真图:2.6.5仿真分析:当clr为‘0’的时候,输出清零;在clr为‘1’且上升沿脉冲到来的时候,输入din锁存至输出的高9位且将低8位右移一位。