8位乘法器毕业设计论文
基于时序电路的移位相加型8位硬件乘法器设计

基于时序电路的移位相加型8位硬件乘法器设计硬件乘法器是计算机中十分重要的一个组成部分,其作用是实现两个二进制数的乘法运算。
在硬件乘法器中,采取“移位相加”的方式进行计算,这种方式就是将一个数乘以另一个数时,将其中一个数的每一位与另一个数相乘,然后相加得到最终结果。
基于此,本文将围绕“基于时序电路的移位相加型8位硬件乘法器设计”进行详细阐述。
第一步,进行原理分析。
在8位硬件乘法器中,两个二进制数各占8位,分别是A、B。
在移位相加的计算方式中,B中的每一位都与A 中相应的位相乘,然后将所得到的结果进行相加即可。
第二步,进行电路设计。
在设计时,需要采用时序电路进行控制,即将所有需要的操作按照一定的步骤进行排列,并确保每一步操作的正确性。
具体来说,需要设计如下模块:1. 寄存器模块:用于存储A、B两个数以及计算时需要用到的中间结果。
将A、B送入寄存器中后,通过移位操作,将B中的各个二进制位与A中对应的位进行相乘,然后得到中间结果。
2. 加法器模块:用于将中间结果进行相加,并将最终结果存储在寄存器中。
3. 控制器模块:用于控制寄存器和加法器的操作顺序,确保计算的正确性。
第三步,进行仿真测试。
在设计完成后,需要进行仿真测试,以确保电路的正确性和稳定性。
在测试时,可以利用Verilog HDL进行仿真,对各个模块进行单独测试,并最终汇总验证。
第四步,进行综合与分析。
在仿真测试完成后,需要进行综合分析。
综合分析的目的是将Verilog代码转化为门电路级别的实现,以便进行电路布局和物理设计。
在综合分析中,需要考虑电路的功耗、时序、面积等因素,以确保电路的可行性和优化性。
总之,基于时序电路的移位相加型8位硬件乘法器设计,是一项复杂且关键的工作。
只有通过对原理的深入了解和对电路的细致设计,才能最终得到稳定、可靠的硬件乘法器。
8位乘法器设计

8位乘法器设计一、摘要纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。
这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。
其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八加法器,所以关键是设计好八位加法器。
二、综述ARICTL是乘法运算控制电路,它的START信号上的上跳沿与高电平有2个功能,即16位寄存器清零和被乘数A[7...0]]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号,乘法时钟信号从ARICTL的CLK输入。
当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,一位乘法器ANDARITH打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。
而当被乘数的移出位为0时,一位乘法器全零输出。
如此往复,直至8个时钟脉冲后,由ARICTL的控制,乘法运算过程自动中止,ARIEND输出高电平,乘法结束。
此时REG16B的输出即为最后的乘积。
三、方案设计与分析方案一:八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的。
方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度等方面较好,综合各方面的考虑,决定采用第二种方案。
3.1程序清单1.library ieee; ----四位二进制并行加法器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add4b isport( cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end;architecture one of add4b issignal sint,aa,bb:std_logic_vector(4 downto 0);beginaa<='0' & a;bb<='0' & b;sint<=aa+bb+cin;s<=sint(3 downto 0);cout<=sint(4);end;2.library ieee; --由两个四位二进制并行加法器级联而成的八位二进制加法器;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8b isport( cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end;architecture one of adder8b iscomponent add4b --对要调用的元件add4b的端口进行说明port( cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end component;signal carryout: std_logic;beginu1:add4b port map(cin,a(3 downto 0),b(3 downto 0),s(3 downto 0),carryout);u2:add4b port map(carryout,a(7 downto 4),b(7 downto 4),s(7 downto 4),cout);end;3.library ieee; --一位乘法器;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity andarith isport( abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0));end;architecture one of andarith isbeginprocess(abin,din)beginfor i in 0 to 7 loopdout(i)<=din(i) and abin;end loop;end process;end;4.library ieee; --乘法运算控制器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arictl isport( clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end;architecture one of arictl issignal cnt4b:std_logic_vector(3 downto 0);beginrstall<=start;process(clk,start)beginif start='1' then cnt4b<="0000";elsif clk'event and clk='1' thenif cnt4b<8 then --小于8则计数,等于8则表明乘法运算已经结束cnt4b<=cnt4b+1;end if;end if;end process;process(clk,cnt4b,start)beginif start='0' thenif cnt4b<8 thenclkout<=clk; ariend<='0';else clkout<='0'; ariend<='1';end if;else clkout<=clk; ariend<='0';end if;end process;end;5.library ieee; --16位锁存器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b isport( clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0)); end;architecture one of reg16b issignal r16s:std_logic_vector(15 downto 0); beginprocess(clk,clr)beginif clr='1' then r16s<="0000000000000000";elsif clk'event and clk='1' thenr16s(6 downto 0)<=r16s(7 downto 1);r16s(15 downto 7)<=d;end if;end process;q<=r16s;end;6.library ieee; --8位右移寄存器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sreg8b isport( clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end;architecture one of sreg8b issignal reg8:std_logic_vector(7 downto 0);beginprocess(clk,load)beginif clk'event and clk='1' thenif load='1' then reg8<=din;else reg8(6 downto 0)<=reg8(7 downto 1);end if;end if;end process;qb<=reg8(0);end;7.library ieee;--8位乘法器顶层设计use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mult8x8 isport( clk:in std_logic;start:in std_logic;a,b:in std_logic_vector(7 downto 0);dout:out std_logic_vector(15 downto 0);ariend:out std_logic);end;architecture struc of mult8x8 iscomponent adder8b isport( cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end component;component andarith isport( abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0)); end component;component arictl isport( clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end component;component reg16b isport( clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0)); end component;component sreg8b isport( clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end component;signal gndint :std_logic;signal intclk :std_logic;signal rstall :std_logic;signal qb :std_logic;signal andsd :std_logic_vector(7 downto 0);signal dtbin :std_logic_vector(8 downto 0);signal dtbout :std_logic_vector(15 downto 0);begindout<=dtbout; gndint<='0';u1:arictl port map( clk,start,intclk,rstall,ariend);u2:sreg8b port map(intclk,rstall,b,qb);u3:andarith port map(qb,a,andsd);u4:adder8b port map(gndint,dtbout(15 downto 8),andsd,dtbin(7 downto 0),dtbin(8));u5:reg16b port map(intclk,rstall,dtbin,dtbout);end;3.2仿真结果(1)输入波形图(2)输出波形图3.3工作原理图cin a[7..0]b[7..0]s[7..0]coutadder8binst1abin din[7..0]dout[7..0]andarithinst2clkstart clkout rstallariend arictl inst3clk clr d[8..0]q[15..0]reg16b inst5clk loaddin[7..0]qbsreg8b inst6dout[15..0]OUTPUTVCCB[7..0]INPUT VCCA[7..0]INPUT dout5[15..0]OUTPUT二、方案综合评价与结论它由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好,电路原理简单,连线很少,制作起来方便易行,总体来说还是很成功的。
EDA_8位乘法器_实验报告

南华大学船山学院实验报告(2009 ~2010 学年度第二学期)课程名称EDA实验名称8位乘法器姓名学号专业计算机科学与班级01技术地点8-212 教师一、实验目的:学习和了解八位乘法的原理和过程二、设计思路:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD 器件外接ROM 九九表的乘法器则无法构成单片系统,也不实用。
这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA 构成实验系统后,可以很容易的用ASIC 大型集成芯片来完成,性价比高,可操作性强。
其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
三、实验逻辑图:四、实验代码:1) 选通与门模块的源程序ANDARITH.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY ANDARITH IS PORT (ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR (7 DOWNTO 0) DOUT:OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END ANDARITH;ARCHITECTURE ART OF ANDARITH IS BEGINPROCESS (ABIN ,DIN) BEGINFOR I IN 0 TO 7 LOOPDOUT (I)<=DIN (I)AND ABIN; END LOOP;ARICTLCLKEND PROCESS;END ART;2) 16位锁存器的源程序REG16B.VHDLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B IS PORT (CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR (8 DOWNTO 0)Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGIN PROCESS (CLK,CLR)BEGINIF CLR = '1' THEN R16S<= "0000000000000000";ELSIF CLK'EVENT AND CLK = '1'THENR16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)<=D;END IF;END PROCESS;Q<=R16S;END ART;3) 8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT (CLK:IN STD_LOGIC; LOAD :IN STD _LOGIC; BIN:IN STD_LOGIC_VECTOR(7DOWNTO 0);QB:OUT STD_LOGIC );END SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS (CLK,LOAD)BEGINIF CLK'EVENT AND CLK= '1' THENIF LOAD = '1' THEN REG8<=DIN;ELSE REG8(6 DOWNTO0)<=REG8(7 DOWNTO 1); END IF;END IF;END PROCESS;QB<= REG8 (0);END ART;4) 乘法运算控制器的源程序ARICTL.VHD LIBRARYUSE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT ( CLK:IN STD_LOGIC; START:INSTD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUTSTD_LOGIC;ARIEND:OUT STD_LOGIC );END ARICTL;ARCHITECTURE ART OF ARICTL IS SIGNAL CNT4B:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINRSTALL<=START;PROCESS (CLK,START)BEGINIF START = '1' THEN CNT4B<= "0000";ELSIF CLK'EVENT AND CLK = '1' THENIF CNT4B<8 THENCNT4B=CNT4B+1;END IF;END IF;END PROCESS;PROCESS (CLK,CNT4B,START)BEGINIF START = '0' THENIF CNT4B<8 THENCLKOUT <=CLK; ARIEND<= '0';ELSE CLKOUT <= '0'; ARIEND<= '1';END IF;ELSE CLKOUT <=CLK; ARIEND<= '0';END IF;END PROCESS;END ART;5) 8位乘法器的源程序MULTI8X8.VHDLIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI8X8 ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ARIEND:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTLPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC; CLKOUT:OUT STD_LOGIC;RSTALL:OUT STD_LOGIC; ARIEND:OUT STD_LOGIC);END COMPONENT;COMPONENT ANDARITHPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT_STD_LOGIC_VECTOR( 7 DOWNTO 0) ); END COMPONENT;COMPONENT ADDER8B...COMPONENT SREG8B...COMPONENT REG16B...SIGNAL GNDINT:STD_LOGIC;SIGNALINTCLK:STD_LOGIC;SIGNAL RSTALL:STD_LOGIC;SIGNAL QB:STD_LOGIC;SIGNAL ANDSD:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DTBIN:STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL DTBOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINDOUT<=DTBOUT;GNDINT<= '0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>INTCLK,RSTALL=>RSTALL,ARIEND=>ARIEND); U2:SREG8B PORT MAP(CLK=>INTCLK,LOAD=>RSTALL.DIN=>B,QB=>QB);U3:ANDARITH PORT MAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD);U4:ADDER8B PORTMAP(CIN=>GNDINT,A=>DTBOUT(15 DOWNTO 8),B=>ANDSD,S=>DTBIN(7 DOWNTO 0),COUT=>DTBIN(8));U5:REG16B PORT MAP(CLK =>INTCLK,CLR=>RSTALL,D=>DTBIN,Q=>DTBOUT);END ART;五、实验结果:六、实验心得:通过本实验基本上了解了八位乘法的工作原理:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
中山学院EDA综合实验报告-8位硬件乘法器设计

在实验老师的指导下,我圆满完成了实验任务,有了不少收获,其中了解到了移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的电路优势,并且在加深了如何通过VerilogHDL生成原理图器件并进行相应仿真,最后学习了应用移位相加原理设计8位乘法器。
3、ADDER8BT的仿真图及分析
如图所示,红色剪头表示8+11=19,绿色剪头表示8+9=17,紫色剪头表示8+9+1=18,这说明S=A+B+CIN。
4、完整乘法器的仿真图及分析
如图所示,红色剪头表示外部按键START按下(给SREG8BT的LOAD高电平)时给ARIEND一个高电平输出,绿色剪头处的Q为31104,而31104<<1结果为0xF300,此处最高位为0xF3,即相乘的结果为0xF3,这里表示B的数值0xF3乘以A的数值0xC8第4位再加上前3位的结果,因为前3位相乘后的结果为0,因此这里相乘的结果为0xF3,紫色剪头也是同理。
如图所示,在第一个2,此时输出Q=1536,其二进制表示为0000 0110 0000 0000,由VerilogHDL代码可知R16S[6:0]<=R16S[7:1]即R16S[6:0] = 0,R16S[15:7] = 12,此结果与Q输出结果一致绿色剪头与紫色剪头也是同理。
学生实验报告
系别
电子信息学院
课程名称
《EDA综合实验》
班级
实验名称
8位硬件乘法器设计
姓名
实验时间
学号
指导教师
成绩
批改时间
报告内容
一、实验目的和任务
1、学习应用移位相加原理设计8位乘法器。
2、了解移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的
booth8乘法器实验

8位booth乘法器设计实验一、实验分析:4 位位宽:A=7(0111),B=2(0010)。
A = (7) 0000 0111;2A = (14) 0000 1110;-2A = (-14) 1111 0010。
在这里我们必须注意一下当B[1:-1] 等于011 或者100 的时候,4 位的被乘数A 的取值范围最大是-7 ~ 7 然而,+2(被乘数) 或者-2(被乘数) 都会使得A 的最大值突破取值范围。
所以需要从4 位位宽的空间向更大的位位宽空间转换。
这里就选择向8 位位宽的空间转换。
B 乘数加码为B[1:-1] = 3'b100 ,亦即-2(被乘数) 和B[3:1] = 3'b100 ,亦即+被乘数。
二、实验所需程序:module booth8(A,B,clk,product);input [7:0] A,B;input clk;output [15:0] product;reg [3:0] i;reg [15:0] a;reg [15:0] a2;reg [15:0] s;reg[15:0] s2;reg [15:0] p;reg [3:0] M;reg [8:0] N;reg [15:0] p1;always @(posedge clk)begini <= 4'd0;case(i)0:begina <= A[7] ? { 8'hFF , A } : { 8'd0, A };a2 <= A[7] ? { 8'hFF ,A + A} :{ 8'd0,A + A };s <= ~A[7] ? { 8'hFF , (~A + 1'b1 )} : { 8'd0 ,( ~A + 1'b1 )};s2 <=~A[7] ? {8'hFF , ( ~A + 1'b1 ) + (~A+1'b1)} : { 8'd0 , (~A + 1'b1) + (~A + 1'b1)};p <= 16'd0;p1<=16'd0;M <= 4'd0;N <= { B , 1'b0};i <= i+ 1'b1;end1,2,3,4:beginif( N[2:0] == 3'b001 || N[2:0] == 3'b010 ) p <= p+ (a<< M);else if (N[2:0] == 3'b011 ) p <= p+ ( a2 << M );else if (N[2:0] == 3'b100 ) p <= p + ( s2 << M);else if ( N[2:0] == 3'b101 || N[2:0] == 3'b110 ) p <= p + (s << M);M <= M + 2'd2;N <= ( N >> 2);i <= i + 1'b1;end5:beginif(i==5) p1<= p;endendcaseendassign product = p1;endmodule二、实验结果及功能仿真:(下页)功能仿真图可以看到,在得到正确解之前经历了多个时钟,这是因为需要计算四次所致的,本来应该在正确解之前会有三个数值的,为了更好的查看结果,本程序采用屏蔽手段使其前三个值为零了。
8位乘法器设计范文

8位乘法器设计范文1.乘法器的基本原理乘法器的基本原理是通过将两个数中的每一位进行相乘,得到部分乘积,然后将所有部分乘积相加得到最终的乘积。
以两个8位数A和B相乘为例,可以将A的每一位与B的每一位相乘,然后将部分乘积相加,得到一个16位的结果。
2.乘法器的电路结构一种常见的8位乘法器电路结构是使用一位乘法器和8位加法器组合而成。
这种结构可以将乘法操作分解为多个阶段,简化电路设计。
首先,使用一个一位乘法器对A的每一位分别与B的所有位进行相乘,得到8个部分乘积。
然后,使用8位加法器将这些部分乘积相加,得到最终的乘积。
3.一位乘法器的设计一位乘法器是8位乘法器的基本组成部分。
它是一个计算两个单独位的乘法结果的电路。
常见的一位乘法器实现方法包括使用门电路、Karnaugh图和有限状态机等。
3.1使用门电路的一位乘法器设计一位乘法器可以通过使用与门、或门和非门来实现。
基本原理是将两个输入位相与得到部分乘积的低位,然后使用或门和非门对部分乘积和进位进行处理,得到最终的乘积位和进位位。
3.2 使用Karnaugh图的一位乘法器设计Karnaugh图是一种按照二进制输入和输出函数绘制的图表。
它可以帮助分析和简化布尔代数函数。
使用Karnaugh图可以快速绘制并简化一位乘法器的逻辑电路。
3.3使用有限状态机的一位乘法器设计有限状态机是一种具有有限个状态和状态转移规则的模型。
可以使用有限状态机模型来描述和实现一位乘法器的行为。
这种设计方法可以更好地描述一位乘法器的状态转移关系,但也需要更复杂的控制电路。
4.8位乘法器的实现使用一位乘法器的设计方法,可以将乘法器分为两个阶段:部分乘积生成和部分乘积相加。
首先,使用8个一位乘法器对A的每一位与B的每一位进行相乘,得到8个部分乘积。
然后,使用8位加法器将这些部分乘积相加,得到最终的乘积。
这个设计方法的优点是每个一位乘法器可以独立并行地进行计算,提高了计算效率。
而且,部分乘积生成和部分乘积相加可以分别设计和优化,使得整个乘法器的电路结构更清晰。
ASIC系统设计实验报告八位乘法器

八位乘法器的设计汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。
由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。
随着DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。
本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINX ISE 软件进行VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。
1 原理分析与方案选择乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。
本实验利用FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。
图1 四位串行乘法器结构本文采用并行输入/输出方式来进行乘法器的设计。
下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。
由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。
)0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123pro pro pro pro pro pro pro pro b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a a a a a b b b b ----------------------------------------+••••+••••+••••••••⨯K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 图2 四位二进制乘法过程图3 四位二进制乘法结构图从图3可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。
8无符号乘法器[整理版]
![8无符号乘法器[整理版]](https://img.taocdn.com/s3/m/3122e207fd4ffe4733687e21af45b307e871f930.png)
8位无符号乘法器设计实验一、乘法原理:乘法通过逐项移位相加原理来实现,从乘数的最低位开始,若为1,则被乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至乘数的最高位。
二、原理框图:三、实验所需程序代码:module mult8(out,a,b,clk);output[15:0] out;input[7:0] a,b;input clk;wire[15:0] out;reg[14:0] temp0=15'b000000000000000;reg[14:0] temp1=15'b000000000000000;reg[14:0] temp2=15'b000000000000000;reg[14:0] temp3=15'b000000000000000;reg[14:0] temp4=15'b000000000000000;reg[14:0] temp5=15'b000000000000000;reg[14:0] temp6=15'b000000000000000;reg[14:0] temp7=15'b000000000000000;function[7:0] mult8x1; //该函数实现8×1 乘法input[7:0] operand;input sel;beginmult8x1= (sel) ? (operand) : 8'b00000000;endendfunctionalways @(posedge clk) //调用函数实现操作数b 各位与操作数a 的相乘begintemp7<=mult8x1(a,b[0]);temp6<=((mult8x1(a,b[1]))<<1);temp5<=((mult8x1(a,b[2]))<<2);temp4<=((mult8x1(a,b[3]))<<3);temp3<=((mult8x1(a,b[4]))<<4);temp2<=((mult8x1(a,b[5]))<<5);temp1<=((mult8x1(a,b[6]))<<6);temp0<=((mult8x1(a,b[7]))<<7);endassign out= temp0+temp1+temp2+temp3+temp4+temp5+temp6+temp7; //加法器endmodule四、功能仿真结果:功能仿真选取a和b两个数都为最大值255(11111111),则结果out=255*255=65025(1111111000000001)功能仿真结果如图所示见下页:(注:采用上升沿触发)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科生毕业论文(设计)8位乘法器的设计姓名:吴小东指导教师:华婷婷院系:信息工程学院专业:计算机科学与技术提交日期: 2010/4/30目录中文摘要 (2)外文摘要 (3)1.绪论 (4)1.1概述 (4)1.2 VHDL和MAX+PIUS简介 (5)1.3 实验平台 (6)2.乘法器初步设计 (7)2.1 设计思想 (7)2.2乘法器原理 (7)2.3乘法器设计流程 (8)3. 乘法器具体设计 (9)3.1右移寄存器的设计 (9)3.2 加法器模块的设计 (10)3.2.1 4位加法器的设计 (10)3.2.2 8位加法器的设计 (11)3.3 乘1模块设计 (13)3.4锁存器模块设计 (14)4. 乘法器仿真 (17)4.1 8位加法器仿真 (17)4.2 乘1模块仿真 (17)4.3 锁存器模块仿真 (18)4.4 8位乘法器仿真 (18)结束语 (19)参考文献 (20)致谢 (21)8位乘法器的设计吴小东指导老师:华婷婷(黄山学院信息工程学院,黄山,安徽 245041)摘要:在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理的关键部件,它已经是现代计算机必不可少的一部分。
本文主要是在于如何运用标准硬件描述语言(VHDL)完成八位乘法器,以及如何做二进制位相乘的运算过程。
该乘法器是由八位加法器构成的以时序方式设计八位乘法器,通过逐项移位相加来实现乘法功能,并以MAX+Plus II 软件工具进行模拟,仿真并予以显示。
关键字:乘法器;标准硬件描述语言(VHDL);移位相加;MAX+Plu s II8-bit multiplier designWu xiaodongDirector:hua tingting(College of InformationEngineering,HuangshanUniversity,Huangshan,Anhui,245041) Abstract:In the microprocessor chip, the multiplier is a digital signal processing core microprocessor is also a key component of data processing, it is already an essential part of the modern computer. This article is on how to use standard hardware description language (VHDL) to complete eight multipliers, as well as how to make the process of a binary bit multiplication operation. The multiplier is composed of eight adder to timing approach in designing eight multiplier, achieved by adding the multiplication-by-shift function, and in MAX + Plus II software tools for simulation, emulation and be displayed.Keywords: multiplier; standard hardware description language (VHDL); shift sum; MAX + Plus II1.绪论1.1概述本课题的设计来源是基于标准硬件描述语言(Very High Speed Integrated Circuit Hardware Description Language,VHDL)及MAX + Plus II(Multiple Array Matrix Programmable Logic User System)软件开发工具的进行模拟仿真的8位乘法器,用于实现8位移位相加乘法器的乘法运算功能。
本课题的研究现状是基于乘法器是定点处理器的主要组成部分,其速度是影响CPU速度的关键因素。
乘法器也是数字信号处理(DSP)、系统级芯片(SOC)的关键部件。
在最新的处理器中乘法器除了直接作为运算部件外,还用于加速地址转换、数组寻址和其他整数操作。
随着科研生产地运算速度要求的提高,对乘法器性能的要求也在不断地提升。
BOOTH算法、WALLACE树、CLA等技术的出现也使得乘法器设计的技术日益成熟。
而不同的应用背景又要求在不同的算法和实现之间进行选择,权衡电路鬼名模和性能,达到特定条件下的最优设计。
本次设计的目的就是在掌握移位相加八位乘法器的工作原理,了解并学习掌握VHDL硬件描述语言的设计方法和思想,通过自己学习的VHDL语言结合以前电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。
通过对八位二进制乘法器的设计,巩固和综合运用所学课程,加深对数字电路和VHDL基本单元的理解,并借助MAX + Plus II软件开发工具这个平台进行仿真,理论联系实际,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。
通过课程设计深入理解VHDL语言的精髓,达到课程设计的目标,加法器的设计可以加深对门电路的理解,乘法器的设计可以使对计算机怎样工作有了更深了解。
本设计的主要难点包括:1)了解乘法器的工作原理和乘法器的各个子模块的功能实现,并分析其内部构造。
2)根据设计的功能要求,使用标准硬件描述语言(VHDL)设计出移位相加8位乘法器3)利用MAX + Plus II软件工具完成8位乘法器的仿真。
1.2 VHDL和MAX+PlusII简介VHDL是超高速集成电路硬件描述语言的中文缩写,它是电子系统硬件行为描述、结构描述、数据流描述的高级语言。
它在20世纪80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言,并于1987年成为IEEE的一种标准语言,1993年VHDL重新修订,变得更加完备,形成新的标准。
该语言设计技术齐全、方法灵活、功能强大、与制作工艺无关、编程易于共享,所以成为硬件描述语言的主流,成为标准硬件描述语言。
VHDL作为EDA的重要组成部分,提供了借助计算机进行数字系统设计的一种很好的手段。
用VHDL 进行有很多优点,VHDL的硬件描述很强,可以用于从门级、电路级直至系统级的描述、仿真、综合和调试。
利用VHDL丰富的仿真语句和库函数,对大系统的早期设计,可在远离门级的高层次上进行模拟,以利于设计者确定整个设计结构和功能的可行性。
VHDL强大的描述能力和程序结构,使其具有支持多大规模设计进行分解,以及对已有的设计进行再利用的功能。
VHDL标准、规范、语法较为严格、便于重复利用和交流。
它所具有的类属描述语句和子程序调用等功能,使设计者对完成的设计不必改变程序,只需改变类属于参数或函数,就可改变设计的规模和结构。
从ASIC的设计到PCB系统的设计,VHDL语言都能派上用场,都能够轻易地达成设计供者的要求。
目前,VHDL语言已经成为FPGD/CPLD编程最常用的工具。
MAX+plusII是美国Altera公司自行开发的,一种针对其公司生产的系列CPLD和FPGA器件的设计、仿真、编程的工具软件。
MAX+PlusII是CPLD/FPGA 应用软件中比较典型的一种工具,目前已发行到10.2版本。
它所提供的灵活性和高效性事无可比拟的,其丰富的图形界面,辅之以完整的、可即时访问的在线文档,使设计人员能够轻松愉快的使用它。
使用MAX+PlusII的设计者不需精通器件内部的复杂结构。
设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MAX+PLUSII把这些设计转自动换成最终所需的格式。
其设计速度非常快。
对于一般几千门的电路设计,使用MAX+PlusII,从设计输入到器件编程完毕,用户拿到设计好的逻辑电路,大约只需几小时。
设计处理一般在数分钟内内完成。
特别是在原理图输入等方面,MaxplusII被公认为是最易使用,人机界面最友善的PLD开发软件,特别适合初学者使用。
在Max+plusII上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,具有多平台、全集中化、模块组合式工具软件、硬件描述语言、开放的界面等特点,是设计者能方便地进行设计输入、快速处理和器件编程。
1.3实验平台软件环境:1.操作系统:Windows 72.仿真软件:MAX+PLUSII硬件环境:1.CPU Intel2.内存 DDR3 2G3.硬盘 250GB2.乘法器初步设计2.1设计思想本设计首先要了解乘法器的基本原理,我所设计的8位乘法器采用移位和加法来实现,主要用到原码一位乘运算规则。
然后对乘法器的进行顶层设计,把乘法器的设计分成几个功能模块,并逐步细化,因此需要了解各个模块的引脚含义以及它们的内部构造,并对各个模块的实现功能进行分析,通过标准硬件描述语言对它们模块进行编程,调试。
最后在MAX+PlusII应用软件进行模拟仿真,得出正确的运行结果。
2.2乘法器原理8位乘法器可用移位和加法来实现,两个8位数相乘,总共需要执行8次加法运算和8次移位运算。
由乘数的末位值确定被乘数是否与原部分积相加,从乘数的最低位开始,若乘数为1,加被乘数,然后右移一位,形成新的部分积,乘数同时右移一位;若乘数为0,加上零值,然后右移一位,形成新的部分积,乘数同时右移一位,直到乘数的最高位为止,从而得出最终的乘积结果。
实现原码一位乘法的硬件逻辑结构图如图2-1所示。
用寄存器R0存放部分积,R1存放乘数Y,并且最低位Yn作判断位。
R0和R1都具有右移功能并且是连通的,寄存器R2存放被乘数X,加法器完成部分积与位积求和,计数器记录相加移位的操作次数。
图2-1 硬件逻辑结构图8位乘法器的顶层设计主要分成四大功能模块,并可根据分解的层次进行设计,各个功能模块作用介绍如下:1)右移寄存器模块:是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移。
本设计采用的一个8位寄存器,能存放8位二进制代码,需用8个触发器来构成,它可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
2)加法器:本设计用到一个8位加法器,主要进行操作数的加法运算。
3)乘1模块:主要实现8位与1位的乘法运算。
4)锁存器:它所实现的功能是把当前的状态锁存起来,使CPU送出的数据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直到解除锁定。