8位二进制乘法电路程序_第1页
8位二进制乘法电路程序_第2页
8位二进制乘法电路程序_第3页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、位二进制乘法电路该乘法器是有由8位加法器构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。直到所有的部分积都被加过一次。例如:被乘数 (M7M6M5M4M3M2M1M0 )和乘数(N7N6N5N4N3N2N1N0 )分别为 11010101 和10010011,其计算过程如下:11010101X 100100111101010

2、1NO与被乘数相乘的部分积,部分积右移一位11010101N1与被乘数相乘的部分积十 1101010110011111111001111111两个部分积之和,部分积之和右移一位:前简单流程图)0 0 00N2与被乘数相乘的部分积与前面部分积之和相加,部分积之和右移一- 0 00 0 00 0 0N4与被乘数相乘的部分积 N7与被乘数相乘的部分积-110 10 10 1与前面部分积之和相加 右移一位得到最后的积下面分解8位乘法器的层次结构,分为以下 右移寄存器模块:这是 行乘法运算的移位操作。 加法器模块:这是一个 1位乘法器模块:完成 锁存器模块:这是一个 输入数值的锁存与移位。按照上4个模块

3、:个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进8位加法器,进行操作数的加法运算。8位与1位的乘法运算。16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成图中8位移位寄存器reg_8存放 数送至1 8位乘法器 multi_1中,同时 送至 8位加法器adder_8中,同时取reg_16 中,进述算法流程图。口ill时 制信号乘数加 清出零或锁存移位寄存送至reg_16右移后并进行锁进行相加,Z再诂加后结果即部分积存入行移位后并保存。这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积。(1) 8位移位寄存器reg_

4、8的设计) 信号作用下,当1时,将 8 位r8_load=0时,对数据进行移位操作8-同时定义一个信号氐位oadr8_eu8(0)传送给r8r8_i n7.Oreg_8reg8用来装载 out输出。8位移位寄存器是在时钟(r8_clkeve nt and r8_clk=1 乘数加载进入;而当新数据及移位后的操作数,完成这些操作后,寄存器的最低 元件实体原理图如右图:该模块元件的程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_ un sig ned.all;use ieee.std_logic_arith.all;

5、en tity reg_8 is-实体描述port(r8_clk,r8_load:i n std_logic;r8_in:in stdo gic_vector(7 dow nto 0);r8_out:out std_logic);end reg_8;architecture arc_reg_8 of reg_8 is-结构体描述sig nal reg8:std_logic_vector(7 dow nto 0);-定义信号变量beginprocess(r8_clk,r8_load)beginif r8_clkeve nt and r8_clk=1 the n-时钟上升沿到来if r8_load

6、=1 the n-锁存新数据reg8=r8_i n;elsereg8(6 dow nto 0)=reg8(7 dow nto 1);-数据右移end if;end if;end process;r8_out=reg8(0);-输出最低位end arc_reg_8;仿真波形图如下:NapeD ps20.0 m40.0 m60.080.0 ns1D0. D in120.0 m140.iiiiiiD 20 ps0 PJ比0:r0_clkA 0TL rL TL nL_r_rL_n_rL_r_r-L_rL_rL_TLL_rLAlIH T8_inH 47F4F11r8_flutA 0Liii i(2) 8

7、位加法器adder_8的设计I)该加法器由两个四位二进制加法器组成。其中设计四位二进制加法器时,为了避免加法运 算时产生溢出,故定义了三个信号量ss,aa,bb将加数a4_a, a4_b分别与0连接后赋值给aa,bb,形成5位二进制数,然后 aa,bb与进位位a4_in相加赋值给ss,最后将ss的低四位赋值给和a4_s,同时将ss的最高位送给a4_out输出。 元件实体原理图如右图:a4_i na4_s3.0 a4_a3.0 a4_b3.0a4_outadder 4其程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic

8、_ un sig ned.all;use ieee.std_logic_arith.all;en tity adder_4 is-实体描述port(a4_in :in std_logic;a4_a,a4_b:i n std_logic_vector(3 dow nto 0); a4_s:out std_logic_vector(3 dow nto 0); a4_out:out std_logic);end adder_4;architecture arc_adder_4 of adder_4 is-结构体描述sig nal ss:std_logic_vector(4 downto 0);-定义

9、信号变量sig nal aa,bb:std_logic_vector(4 dow nto 0);beginaa=0&a4_a;-为避免溢出,将 0与a4_a连接bb=0&a4_b;-将 0 与 a4_b 连接ss=aa+bb+a4_i n;-执行加法运算a4_s=ss(3 dow nto 0);-输出结果a4_out28a8_tnilk D(3) 1位乘法器40. xis80.甲 he100.0 M1 j 10 X 11 jriFX 131516 jri)riaH 11 X 12】4 X 15 厂仃 X 18 厂帀 I: 1IT JCgOmulti_1的设计利用循环语句FOR-LOOP完成8位

10、二进制数与1位二进制的乘法运算,将8位二进制数 m1_y从最低位到最高位与 1位二进制m1_x分别做与运算,最后将结果依次送到 m1_out输出。 即当m1_x为1时,m1_out输出为 m1_y ;当m1_x为0时,m1_out输出全为零。元件实体原理图如右图:其程序如下:ml xlibrary ieee;use ieee.stdo gic_1164.all;use ieee.std_logic_ un sig ned.all;use ieee.std_logic_arith.all;en tity multi_1 is-实体描述port(m1_x:in std_logic;m1_y:in

11、std_logic_vector(7 dow nto 0);m1_out:out std_logic_vector(7 dow nto 0);end multi_1;architecture arc multi 1 of multi 1 is -结构体描述beginprocess(m1_x,m1_y)m1_out7.0m1 y7m0ilti 1beginfor i in 0 to 7 loop-循环完成8位与1位的乘法运算m1_out(i)=m1_y(i)a nd m1_x;end loop;end process;end arc_multi_1;其仿真电路图如下:口当清零信号(r16_clr

12、=1)到来时,定义信号变 一reg16清零;否则在时钟信号r16_clrr16_out15.0r16_i n8.Oreg_16r16 elk上升沿到来时,将reg16的低8位进行移位操作,同时将16_位的数据输入r16_in锁存到reg16的高 8位,最后赋值给r16_out输出。元件实体原理图如右图:其程序如下:use ieee.std _lo gic_1164.all;use ieee.std_logic_ un sig ned.all;use ieee.std_logic_arith.all;en tity reg_16 is-实体描述port(r16_clk,r16_clr:in st

13、d_logic;r16_in:in std_logic_vector(8 dow nto 0); r16_out:out stdo gic_vector(15 dow nto 0);end reg_16;architecture arc_reg_16 of reg_16 is-结构体描述sig nal reg16:stdo gic_vector(15 dow nto 0);-定义信号变量beginprocess(r16_clk,r16_clr)beginif r16_clr=1 then-clr 为高电平,清零reg16=0000000000000000;elsif r16_clkeve nt

14、 and r16_clk=1 the n-时钟上升沿到来reg16(6 dow nto 0)=reg16(7 dow nto 1);-右移,并锁存低八位reg16(15 dow nto 7)=r16_i n;-将输入锁存到高 8 位end if;end process;r16_out=reg16;-数据输出end arc_reg_16;仿真电路图如图所示:(5) 8位乘法器的顶层设计元件实体原理图如图:RJLTI_8CLK 其顶层电路如图:如上图所示,当 STAR上升沿到来,将乘数 a锁存到REG_8中,同时将16位的移位寄 存器REG_16清零,然后随着时钟 CLK上升沿的到来,对REG_8

15、中的乘数进行移位操作,最低位在前,由低到高逐位输出。1位乘法器中进行与 8位被乘数的相乘运算,并与锁存在16位寄存器reg_16中的高8位进行相加,其和(包含进位)在下一个时钟的上升沿到来时锁存 到16位寄存器中。如此进行直到第八个时钟上升沿到来时,reg_16的输出即为所求的乘积。其顶层程序如下:use ieee.std _lo gic_1164.all; use ieee.std_logic_ un sig ned.all;use ieee.std_logic_arith.all;en tity multi_8 is-实体描述port(clk,start:in std_logic;a,b:

16、i n std_logic_vector(7 dow nto 0);result:out std_logic_vector(15 dow nto 0); end multi_8;architecture arc_multi_8 of multi_8 is-结构体描述compo nent multi_1-调用1位乘法器声明port(m1_x:i n std_logic;m1_y:in std_logic_vector(7 dow nto 0);m1_out:out std_logic_vector(7 dow nto 0);end comp onent;component adder_8-调用8

17、位加法器声明port(a8_ in :in std_logic;a8_a,a8_b:i n std_logic_vector(7 dow nto 0);a8_s:out std_logic_vector(7 dow nto 0); a8_out:out std_logic);end comp onent;component reg_8 -调用8位寄存器声明 port(r8_clk,r8_load:i n std_logic;r8n:in std_logic_vector(7 dow nto 0);r8_out:out std_logic);end comp onent;component re

18、g_16 -调用16位寄存器声明 port(r16_clk,r16_clr:in std_logic;r16_in:in std_logic_vector(8 dow nto 0); r16_out:out stdo gic_vector(15 dow nto 0);end comp onent;sig nal gndin t, newstart,qb:std_logic;-定义信号变量sig nal an dsd:std_logic_vector(7 dow nto 0);sig nal dtb in: std_logic_vector(8 dow nto 0);sig nal dtbout

19、:std_logic_vector(15 dow nto 0);beginresult=dtbout;gndin t=0;process(clk,start)beginif start=1 the n n ewstart=1;elsif clk=0 the n n ewstartincfime 呂 an:Q p$*J Poihler42 irtslinflervat42 西 nsJ pv20. f m40 f nxg m 9gp n0 P5 PS JelkA 01 1J 11 1 1 1 1 11 1 1 1_1_1 _L* 11 - :El *H 93r!93 bM B5rD5PH re-sultK 0000Loooo6ASD狀号FCT敝7E7S WfcX 3J3C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论