1、例如被乘数为00000101,乘数为01101111,初始条件下,部分积为0,乘数最低位为1,加被乘数,和为00000101,使其右移一位,形成新的部分积为00000010,乘数同时右移一位,原和最低位1被放到乘数的最高位,此时,乘数最低位为1,加00000101,和为00000111,使其右移一位,形成新的部分积为0000011,依次类推,循环8次,总共需要进行8次相加和8次移位操作,最终得出乘积结果。其设计流程图所如下所示:38位乘法器的顶层设计 8位移位相加乘法器的原理图如下图所示。在图中,START信号的上升沿及其高电平有两个功能,即16位寄存器清零和被乘数A70向移位寄存器SREG8
2、B加载;它的低电平则作为乘法使能信号。CLK位乘法时钟信号。当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。当为1时,1位乘法器ANDARTIH打开,8位乘数B70在同一节拍进入8位加法器,与上一次锁存在16位锁存器中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。而当被乘数的移出位为0时,与门全零输出。如此反复,直至8个时钟脉冲后。最后乘积完整出现在REG16B端口。移位相加乘法器的原理图如下: 根据上图移位相加乘法器的原理图,利用元例化的方法可得乘法器乘法器的顶层设计的VHDL的代码如下:LIBRARY IEEE;USE IEE
3、E.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL IS PORT(CLK:IN STD_LOGIC; START: ARIEND:OUT STD_LOGIC; CLKOUT: OUT STD_LOGIC; RSTALL: OUT STD_LOGIC); END ENTITY ARICTL;ARCHITECTURE ART OF ARICTL ISSIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN RSTALL=START; PROCESS(CLK,START)IS
4、BEGIN IF START=1THEN CNT4B=0000; ELSIF CLKEVENT AND CLK=THEN IF CNT4B8 THEN CNT4B =CNT4B+1; END IF; END PROCESS;PROCESS(CLK,CNT4B,START)IS BEGIN 0 THEN8 THEN CLKOUT =CLK;ARIEND= ELSE CLKOUTEND IF;END PROCESS;END ARCHITECTURE ART;ENTITY ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO
5、 0);B4:S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4:END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B ISSIGNAL S5: STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL A5,B5:A5&A4;B5B4;S5=A5+B5+C4;S4=S5(3 DOWNTO 0);CO4=S5(4);ENTITY SREG8B ISPORT(CLK:LOAD:DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB:END ENTITY SREG8B;ARCHITECTUR
6、E ART OF SREG8B ISSIGNAL REG8B: STD_LOGIC_VECTOR(7 DOWNTO 0);PROCESS(CLK,LOAD)ISIF CLKIF LOAD= THEN REG8B=DIN;ELSE REG8B(6 downto 0)=REG8B(7 DOWNTO 1);QB=REG8B(0);ENTITY REG16B ISPORT (CLK: CLR: D: IN STD_LOGIC_VECTOR(8 DOWNTO 0); Q: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END ENTITY REG16B;ARCHITECTURE A
7、RT OF REG16B ISSIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0);PROCESS(CLK,CLR)IS IF CLR= THEN R16S0000000000000000EVENT AND CLK= R16S(6 DOWNTO 0)=R16S(7 DOWNTO 1); R16S(15 DOWNTO 7)=D; QCIN,A4=A(3 DOWNTO 0),B4=B(3 DOWNTO 0),S4=S(3 DOWNTO 0),CO4=SC);U2:SC,A4=A(7 DOWNTO 4),B4=B(7 DOWNTO 4),S(7 DOWNTO 4),C
8、O4=COUT);ENTITY ANDARITH ISPORT(ABIN:DOUT: OUT STD_LOGIC_vector(7 DOWNTO 0);END ENTITY ANDARITH;ARCHITECTURE ART OF ANDARITH ISPROCESS(ABIN,DIN)ISFOR I IN 0 TO 7 LOOPDOUT(I)=DIN(I)AND ABIN;END LOOP;ENTITY MULTI8X8 ISIN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);END ENTITY M
9、ULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTL ISSTART:END COMPONENT ARICTL;COMPONENT ANDARITH IS PORT(ABIN: DIN: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END COMPONENT ANDARITH;COMPONENT ADDER8B ISA:B:S:COUT:END COMPONENT ADDER8B ;COMPONENT SREG8B ISEND COMPONENT SREG8B ;COMPONENT REG16B ISEND COM
10、PONENT REG16B ;SIGNAL S1:SIGNAL S2:SIGNAL S3:SIGNAL S4:SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL S7: DOUT=S7; S1CLK,START=START, CLKOUT=S2,RSTALL=S3,ARIEND=ARIEND); U2:SREG8B PORT MAP(CLK=S2,LOAD=S3, DIN=A,QB=S4); U3:ANDARITH PORT MAP(ABIN=S4,DIN=B,DOUT=S5); U4:ADDER8B PORT MAP(CIN=S1,A=S7(15 D
11、OWNTO 8), B=S5,S=S6(7 DOWNTO 0),COUT=S6(8); U5:REG16B PORT MAP(CLK=S2,CLR=S3,D=S6(8 DOWNTO 0),Q=S7(15 DOWNTO 0);4乘法器仿真1) 系统仿真情况输入值A=0AH、B=0CH,结果DOUT=0078H;输入值A=0CH、B=0AH,结果DOUT=0078H;输入值A=02H、B=03H,结果DOUT=0006H;仿真图如下:2) 仿真分析当START输入信号为“1”,REG16B清零和被乘数A7.0向移位寄存器加载。此后START信号为“0”,乘法进行。乘法时钟从ARICTL的CLK输入。当被乘数加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。当为1时,与门ANDARITH打开,8位乘数B在同一节拍进入八位加法器,与上一次锁存在16位锁存器REG16B中高8位进行相加,其和在下一时钟节拍的上升沿被锁进此寄存器。而当被乘数移出位为0时,与门全零输出。如此往复,直至八个时钟脉冲后,有ARICTL的控制,乘法运算终止ARIEND输出高电平,以此点亮发光管,以示乘法结束。此时,REG16B的输出值即为最后乘积。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1