1、4*4 数字乘法器设计1设计任务试设计一 4 位二进制乘法器。4 位二进制乘法器的顶层符号图如图 1 所示。M U LE N DP844ABS T A R T1 0 1 11 1 0 11 0 1 10 0 0 01 0 1 11 0 1 1110 1 1001图 1 4 位乘法器顶层符号图 图 2 4 位乘法运算过程输入信号:4 位被乘数 A(A 3 A2 A1 A0) ,4 位乘数 B(B 3 B2 B1 B0) ,启动信号 START。输出信号:8 位乘积 P(P 7 P6 P5 P4 P3 P2 P1 P0) ,结束信号 END。当发出一个高电平的 START 信号以后,乘法器开始乘法
2、运算,运算完成以后发出高电平的 END 信号。2顶层原理图设计从乘法器的顶层符号图可知,这是一个 9 输入 9 输出的逻辑电路。一种设计思想是把设计对象看作一个不可分割的整体,采用数字电路常规的设计方法进行设计,先列出真值表,然后写出逻辑表达式,最后画出逻辑图。这种设计方法有很多局限性,比如,当设计对象的输入变量非常多时,将不适合用真值表来描述,同时,电路功能任何一点微小的改变或改进,都必须重新开始设计。另一种设计思想是把待设计对象在逻辑上看成由许多子操作和子运算组成,在结构上看成有许多模块或功能块构成。这种设计思想在数字系统的设计中得到了广泛的应用。对于 4 位乘法器而言,设 A=1011,
3、B=1101,则运算过程可由图 2 所示。从乘法运算过程可知,乘法运算可分解为移位和相加两种子运算,而且是多次相加运算,所以是一个累加的过程。实现这一累加过程的方法是,把每次相加的结果用部分积 P 表示,若 B 中某一位 Bi=1,把部分积 P 与 A 相加后右移 1 位;若 B 中某一位 Bi= 0,则部分积 P 与 0 相加后右移 1 位(相当于只移位不累加) 。通过 4 次累加和移位,最后得到的部分积 P 就是 A与 B 的乘积。为了便于理解乘法器的算法,将乘法运算过程中部分积 P 的变化情况用图 3 表示出来。存放部分积的是一个 9 位的寄存器,其最高位用于存放在做加法运算时的进位输出
4、。先把寄存器内容清零,再经过 4 次的加法和移位操作就可得到积。注意,每次做加法运算时,被乘数 A 与部分积的 D7D4 位相加。0 0 0 0 0 0 0 0 0初始状 态0 1 0 1 1 0 0 0 0与 1 0 1 1 相加0 0 1 0 1 1 0 0 0右移 1 位0 0 1 0 1 1 0 0 0与 0 0 0 0 相加0 0 0 1 0 1 1 0 0右移 1 位0 1 1 0 1 1 1 0 0与 1 0 1 1 相加0 0 1 1 0 1 1 1 0右移 1 位1 0 0 0 1 1 1 1 0与 1 0 1 1 相加0 1 0 0 0 1 1 1 1右移 1 位D0D1D
5、2D3D4D5D6D7D88 位积图 3 乘法运算过程中部分积 P 的变化情况示意图乘法器的算法可以用如图 4 所示的算法流程图来描述。当 START 信号为高电平时,启动乘法运算。在运算过程中,共进行 4 次累加和移位操作。当 i=4 时,表示运算结束,END 信号置为高电平。图 4 乘法器的算法流程图在明确乘法器的算法之后,便可将电路划分成数据处理单元和控制单元。数据处理单元实现算法流程图规定的寄存、移位、加法运算等各项运算及操作。控制单元接收来自数据处理单元的状态信号并向其发出控制信号。经过划分成控制单元和数据处理单元的乘法器顶层原理图如图 5 所示。控制器寄存器加法器A D D E R
6、寄 存 器寄 存 器计数器C N T被乘数 A乘数 B积 PS T A R TBiE N DC Pi4C CC AC S0、 C S1C B0、 C B1C L RL DC RC RS H / L DS H / L DDS RBi544444422M U L C O NR E G SR E G AR E G B1C P C PC PC P数据处理单元图 5 乘法器的顶层原理图REGA 和 REGB 为 4 位寄存器,分别用于存放被乘数 A、乘数 B。REGS 为一 5 位寄存器,用于存放加法器输出的结果(考虑进位时为 5 位) 。在运算过程中,寄存器 REGS和 REGB 合起来用于存放部分积
7、 P,因此,REGS 和 REGB 还应具有右移功能,以实现部分积的右移。寄存器 REGS 的移位输出送寄存器 REGB,寄存器 REGB 的移位输出信号 Bi送至控制器,以决定部分积是与被乘数相加还是与零相加。并行加法器 ADDER 用于实现4 位二进制加法运算。计数器 CNT 用于控制累加和移位的循环次数。当计数值等于 4 时,计数器的输出信号 i4 输出高电平。控制器 MULCON 的功能是接收来自寄存器 REGB 的移位输出信号 Bi 和计数器输出信号 i4,发出 CA、CB 0、CB 1、CS 0、CS 1、CLR、CC 等控制信号。其中,CA 为寄存器 REGA的控制信号,用于选择
8、置数或保持功能;CS 0、CS 1 为寄存器 REGS 的控制信号,用于选择置数、右移和保持等功能;CB 0、CB 1 为寄存器 REGB 的控制信号,用于选择置数、右移和保持等功能;CLR 为寄存器 REGS 和计数器 CNT 的异步清零信号;CC 为计数器 CNT计数使能信号。乘法器的控制单元采用 CP 脉冲上升沿触发,而数据处理单元采用 CP 的下降沿触发。其目的有二:一是使控制器无需产生数据处理单元的时钟信号,降低了控制器复杂程度;二是为了避免时钟偏移对电路的不良影响。需要指出的是,在设计顶层原理图时,只是从系统的功能和工作时序的关系上分析了各功能模块必须满足的要求,并没有考虑各模块所
9、采用元器件的型号和工艺。根据如图 4 所示的乘法器逻辑框图,寄存器 A 和寄存器 B 选择 4 位多功能移位寄存器74LS194,寄存器 S 采用 8 位多功能移位寄存器 74LS198,加法器选用 4 位二进制超前进位加法器 74LS283,计数器则选用 74LS161,以上这些模块均可以从 Max+plusII 元件库直接调用。将这些模块连接起来如图 6 所示的乘法器数据处理单元的原理图。74LS194(1)只需置数、保持操作,因此将 M0M1 连在一起由一根控制线 CA 控制,当 CA 为高电平(M 1M0=11)时,选择置数功能;当 CA 为低电平(M 1M0=00)时,选择保持功能。
10、74LS194(2)和 74LS198 既要置数(M 1M0=11)又要右移(M 1M0=01) ,因此M1M0 分别由两根控制线 CB1、CB 0 和 CS1、CS 0 控制。乘法器的控制单元采用 CP 脉冲上升沿触发,而数据处理单元采用 CP 的下降沿触发。其目的有二:一是使控制器无需产生数据处理单元的时钟信号,降低了控制器复杂程度;二是为了避免时钟偏移对电路的不良影响。1控 制 器 5VM U L C O N7 4 L S 1 6 17 4 L S 2 8 37 4 L S 1 9 87 4 L S 1 9 4 ( 2 )S T A R TBiE N DC Pi4C L R C AC C
11、C AC S0C S1C B0C B1C CC L RA3A2A1A0i4C S0C S1C B0C B1B3B2B1B0BiP3P2P1P0P7P6P5P4C L RA DC PCBDS RDS LM0M1R DQAQBQCQD7 4 L S 1 9 4 ( 1 )A DC PCBDS RDS LM0M1R DQAQBQCQD+ 5 VA DCBQAQBQCQDC PC TPC TTC OL DR D+ 5 VA DCB E HGFQAQBQCQDQEQFQGQHC PR DDS LDS RM0M1A3A2A1A0B3B2B1B0S3S2S1S0C OC I图 6 数据处理单元原理图4控制单
12、元的设计乘法器控制单元实际上是一同步时序逻辑电路,或者说是一有限状态机。根据乘法器的算法流程图,乘法器控制单元应具有如下逻辑功能:(1)当启动信号 START 变为高电平后,控制器发出 CLR 信号(低电平有效)对寄存器 74LS198 和计数器 74LS161 清零,并通过 CA 和 CB0、CB 1 信号将被乘数和乘数分别置入寄存器 74LS194(1)和寄存器 74LS194(2) 。(2)控制器根据输入信号 Bi 实现不同的操作:若 Bi 为 1,则把加法器的结果置入寄存器 74LS198;否则,不对寄存器置数(相当于不做累加操作) 。通过 CC 信号使能计数器加 1。(3)通过 CS
13、1、CS 0 与 CB1、CB 0 信号使寄存器 74LS198 和寄存器 74LS194(2)右移一位。(4)重复(2) 、 (3)步骤 4 次,当输入信号 i4 有效时,电路回到等待状态,一次乘法运算结束。根据上述逻辑功能,将乘法器控制单元定义 4 个状态:S 0、S 1、S 2、S 3。S 0 为初始状态;S1 完成对计数器和寄存器清零,同时将两个乘数置入寄存器;S 2 完成加法运算;S 3 完成移位操作。为了更加简洁明了,乘法器控制单元的逻辑功能通常采用 ASM(Algorithmic State Machine)图来描述,如图 7 所示。在 ASM 图中,矩形框用来表示一个状态框,其
14、左上角表示该状态的名称,右上角的一组二进制码表示该状态的二进制编码。为了消除输出信号中的毛刺,状态编码采用 Gray 码。状态框内定义该状态的输出信号。菱形框表示条件分支框,将外部输入信号放入条件分支框内。当控制算法存在分支时,次态不仅决定于现态,还与外输入有关。椭圆框表示条件输出框,表示在某些状态下只有满足一定条件才能输出的命令。 1END,1STAR10CACLR,B1C ,1iB10CS ,4iWAIT 10CSBS0S1S2 3NYYNNY00图 7 乘法器控制单元的 ASM 图乘法器控制单元可设计为摩尔型状态机,其基本结构由同步时序逻辑电路和组合逻辑电路组成。同步时序逻辑电路在外部时
15、钟的作用下实现状态转移,组合逻辑电路对时序电路的状态译码发出控制信号。根据控制单元的 ASM 图,每个状态发出的控制信号如表 1所示。S0 为初始状态;S 1 完成对计数器和寄存器清零,同时将两个乘数置入寄存器;S2 完成加法运算;S 3 完成移位操作。然后 s2 s3 重复四次结束。直到 4 次结束。移位寄存器:“11”载入, “00”保持, “01”右移表 1 控制器每个状态发出的控制信号输入信号 输出信号状态符号Bi END CLR CA CB1 CB0 CS1 CS0 CCS0S1S2S2S3011000010111010000100001001000100001100110在以上分析
16、的基础上,得到控制单元的 VHDL 语言源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mulcon IS PORT (start,i4,bi,clk:IN STD_LOGIC;endd,clr,ca,cb1,cb0,cs1,cs0 ,cc:OUT STD_LOGIC);END mulcon;ARCHITECTURE one OF mulcon IS SIGNAL current_state,next_state:BIT_VECTOR(1 DOWNTO 0) ;CONSTANT s0:BIT_VECTOR(1 DOWNTO 0):=
17、“00”;CONSTANT s1:BIT_VECTOR(1 DOWNTO 0):= “01”;CONSTANT s2:BIT_VECTOR(1 DOWNTO 0):= “11”;CONSTANT s3:BIT_VECTOR(1 DOWNTO 0):= “10”;BEGINcom1:PROCESS(current_state,start,i4)BEGINCASE current_state ISwhen s0 = IF (start=1) THEN next_state next_state next_state IF (i4=1) THEN next_state endd endd IF (b
18、i=1) THEN endd endd=0;clr=1;ca=0;cb1=0;cb0=1 ;cs1=0;cs0=1 ;cc=0;END CASE;END PROCESS com2;reg:PROCESS (clk)BEGINIF clk=1 AND clkEVENT THEN current_state=next_state;END IF;END PROCESS reg;END; 上述乘法控制单元的 VHDL 源程序的结构体由三个进程组成。其中 com1 和 com2 实现组合电路,reg 实现时序电路。5设计输入及仿真在完成上述设计的基础上,利用 Max+plusII 完成设计输入及仿真。先
19、将乘法控制单元的 VHDL 程序 MULCON.VHD 用文本输入法输入,编译后进行仿真。仿真结果如图 8 所示。将仿真结果与表 1 比较可知,乘法控制单元的逻辑功能正确。图 8 乘法器控制单元仿真结果利用图形输入法将如图 6 的乘法器原理图输入,得到如图 9 所示的乘法器顶层原理图。图 9 乘法器顶层原理图对项目编译后进行仿真,其仿真结果如图 10 所示。从仿真结果看到,当结束信号endd 输出高电平时,对应的 P74和 P30就是乘法器的结果。当乘数为 3、被乘数为 7时,其乘积为 15H(对应的十进制数为 21) ;当乘数为 9、被乘数为 0BH 时,其乘积为63H(对应的十进制数为 99) 。可见乘法器运算结果正确。图 10 乘法器仿真结果6设计项目处理和验证对照 EDA-1 板子,设计硬件连接图,完成器件选择、管脚锁定和编程下载。具体步骤在此不再赘述。