课程设计(论文)-基于VHDL的8位二进制乘法电路程序

上传人:公**** 文档编号:543533385 上传时间:2023-03-17 格式:DOC 页数:19 大小:211KB
返回 下载 相关 举报
课程设计(论文)-基于VHDL的8位二进制乘法电路程序_第1页
第1页 / 共19页
课程设计(论文)-基于VHDL的8位二进制乘法电路程序_第2页
第2页 / 共19页
课程设计(论文)-基于VHDL的8位二进制乘法电路程序_第3页
第3页 / 共19页
课程设计(论文)-基于VHDL的8位二进制乘法电路程序_第4页
第4页 / 共19页
课程设计(论文)-基于VHDL的8位二进制乘法电路程序_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《课程设计(论文)-基于VHDL的8位二进制乘法电路程序》由会员分享,可在线阅读,更多相关《课程设计(论文)-基于VHDL的8位二进制乘法电路程序(19页珍藏版)》请在金锄头文库上搜索。

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

2、存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。加法器模块:这是一个8位加法器,进行操作数的加法运算。1位乘法器模块:完成8位与1位的乘法运算。锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。 按照上述算法,可以得到下图所示之框图和简单流程图。图中8位移位寄存器reg_8存放乘数a,从a的最低位开始,每次从reg_8中移出一位,送至18位乘法器multi_1中,同时将被乘数加至multi_1中,进行乘法运算,运算的结果再送至8位加法器adder_8中,同时取出16位移位寄存器reg_16的高8

3、位与之进行相加,相加后结果即部分积存入reg_16中,进行移位后并保存。这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积。(A)电路框图 输出结果16位移位寄存器reg_168位加法器adder_8时钟、清零、移位控制信号,控制移位、清零或锁存被乘数b18位乘法器multi_18位移位寄存器reg_8 乘数a(B)简单流程图开始开始信号到来,置newstart为1寄存器reg_16置0时钟上升沿到来,寄存器reg_8置乘数a时钟下降沿,置newstart为零reg_8移出1位后与被乘数放入multi_1中进行乘法运算,结果送至add

4、e_8reg_16取出高8位送adder_8中,与multi_1得到结果进行加法运算,结果送至reg_16右移后并进行锁存输出每一步的运算结果,即输出reg_16的值,其中第八个值即为求得的积结束(1)8位移位寄存器reg_8的设计8位移位寄存器是在时钟(r8_clkevent and r8_clk=1)信号作用下,当r8_load=1时,将8位乘数加载进入;而当r8_load=0时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位reg8(0)传送给r8_out输出。r8_clkr8_load r8_outr8_in7.0元件实体原理

5、图如右图:该模块元件的程序如下:reg_8library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity reg_8 is -实体描述port(r8_clk,r8_load:in std_logic; r8_in:in std_logic_vector(7 downto 0); r8_out:out std_logic);end reg_8;architecture arc_reg_8 of reg_8 is -结构体描述 signal re

6、g8:std_logic_vector(7 downto 0); -定义信号变量begin process(r8_clk,r8_load) begin if r8_clkevent and r8_clk=1 then -时钟上升沿到来 if r8_load=1 then -锁存新数据 reg8=r8_in; else reg8(6 downto 0)=reg8(7 downto 1); -数据右移 end if; end if; end process; r8_out=reg8(0); -输出最低位end arc_reg_8;仿真波形图如下:(2)8位加法器adder_8的设计I)该加法器由两

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

8、d_logic_arith.all; entity adder_4 is -实体描述 port(a4_in :in std_logic; a4_a,a4_b:in std_logic_vector(3 downto 0); a4_s:out std_logic_vector(3 downto 0); a4_out:out std_logic); end adder_4; architecture arc_adder_4 of adder_4 is -结构体描述 signal ss:std_logic_vector(4 downto 0); -定义信号变量 signal aa,bb:std_lo

9、gic_vector(4 downto 0); begin aa=0&a4_a; -为避免溢出,将0与a4_a连接 bb=0&a4_b; -将0与a4_b连接 ss=aa+bb+a4_in; -执行加法运算 a4_s=ss(3 downto 0); -输出结果 a4_out=ss(4); -进位位 end arc_adder_4;II)设计8位加法器时,采用例化语句,定义信号量carry_out,将4位加法器U1的a4_out赋给carry_out,再将carry_out的值给4位加法器U2的进位位a4_in,8位加法器的高四位和低四位分别来自四位加法器U1和U2。其连接电路图如下a8_in

10、a8_s7.0a8_a7.0 a8_b7.0 a8_out元件实体原理图如右图:其程序如下:adder_8library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity adder_8 is -实体描述port(a8_in :in std_logic; a8_a,a8_b:in std_logic_vector(7 downto 0); a8_s:out std_logic_vector(7 downto 0); a8_out:out std

11、_logic);end adder_8;architecture arc_adder_8 of adder_8 is -结构体描述 component adder_4 -元件例化,调用4位加法器声明 port(a4_in :in std_logic; a4_a,a4_b:in std_logic_vector(3 downto 0); a4_s:out std_logic_vector(3 downto 0); a4_out:out std_logic); end component; signal carry_out:std_logic; -定义信号变量begin u1:adder_4 -例

12、化语句 port map(a8_in,a8_a(3 downto 0),a8_b(3 downto 0),a8_s(3 downto 0),carry_out); u2:adder_4 port map(carry_out,a8_a(7 downto 4),a8_b(7 downto 4),a8_s(7 downto 4),a8_out);end arc_adder_8; 仿真结果如图所示:(3)1位乘法器multi_1的设计 利用循环语句FOR-LOOP完成8位二进制数与1位二进制的乘法运算,将8位二进制数m1_y从最低位到最高位与1位二进制m1_x分别做与运算,最后将结果依次送到m1_ou

13、t输出。即当m1_x为1时,m1_out输出为m1_y;当m1_x为0时,m1_out输出全为零。m1_x m1_out7.0 m1_y7.0 元件实体原理图如右图:其程序如下:multi_1library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity multi_1 is -实体描述port(m1_x:in std_logic; m1_y:in std_logic_vector(7 downto 0); m1_out:out std_logic_vector(7 downto 0);end multi_1;architecture arc_multi_1 of multi_1 is -结构体描述begin process(m1_x,m1_y) begin for i in 0 to 7 loop -循环完成8位与1位的乘法运算 m1_out(i)=m1_y(i)and m1_x; end loop; end pr

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号