《可编程逻辑实验》实验十二 移位相加8位乘法器电路设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十二移位相加8位乘法器电路设计
1.实验目的
学习应用移位相加原理设计8位乘法器。
2.实验原理
该乘法器是由8位加法器构成的以时序方式设计的8位乘法器。
其乘法原理是:乘法通过逐项移位相加原理实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全0相加,直至被乘数的最高位。
从图12-1的逻辑图及其乘法操作时序图如图12-2(本例中的相乘数为9FH和FDH)上可以看出此乘法器的工作原理。
图12-1中,START信号的上升沿及其高电平有两个功能,即16位寄存器清零和被乘数A[7..0]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。
CLK为乘法时钟信号。
当被乘数加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,1位乘法器andarith打开,8位乘数B[7..0]在同一脉冲进入8位加法器,与上一次锁存在16位锁存器reg16b中的高8位进行相加,其和在下一时钟脉冲的上升沿被锁进此锁存器。
被乘数的移出位为0时,与门全零输出。
如此往复,直至8个时钟脉冲后,最后乘积完整出现在reg16b端口。
例1 8位右移寄存器的设计
源程序:
Library ieee;
Use ieee.std_logic_1164.all;
Entity sreg8b is
Port(clk,ld:in std_logic;
d:in std_logic_vector(7 downto 0);
q:out std_logic);
End;
Architecture behav of sreg8b is
Signal reg8: std_logic_vector(7 downto 0);
Begin
Process(clk,ld)
Begin
If ld='1' then
Reg8<=d;
Elsif ( clk'event and clk='1') then
Reg8(6 downto 0) <= reg8 (7 downto 1);
end if;
end process;
q<=reg8(0);
End;
例2 8位加法器的设计
源程序:
Library ieee;
Use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
Entity adder8b is
Port( a,b:in std_logic_vector(7 downto 0);
s:out std_logic_vector(7 downto 0)); End;
Architecture behav of adder8b is
Begin
S<=’0’ & a + b;
End;
例3 1位乘法器的设计
源程序:
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;
Architecture behav of andarith is
Begin
Process(abin,din)
Begin
For I in 0 to 7 loop
Dout(i) <=din(i) and abin;
End loop;
end process;
End;
例4 16位锁存器/右移寄存器的设计
源程序:
Library ieee;
Use ieee.std_logic_1164.all;
Entity reg16b is
Port(clk,clr:in std_logic;
d:in std_logic_vector(8 downto 0);
q:out std_logic_vector(15 downto 0)); End;
Architecture behav of reg16b is
Signal r16s: std_logic_vector(15 downto 0);
Begin
Process(clk,clr)
Begin
If clr='1' then
R16s<=(others =>’0’);
Elsif ( clk'event and clk='1') then
R16s(6 downto 0) <= r16s (7 downto 1);
R16s(15 downto 7) <=d;
end if;
end process;
q<=r16s;
End;
3.实验内容
3.1 根据给出的乘法器逻辑原理图及其各模块的VHDL描述,在MAX+plusII上完成全部设计,包括编译、综合和仿真操作等。
以87H乘以F5H为例,进行仿真,对仿真波形作出详细解释,包括对8个工作时钟脉冲中,每一个脉冲乘法操作的方式和结果,对照波形给以详细说明。
3.2 编程下载,进行实验验证。
4.注意事项
电路工作之前应进行初始化。
5.预习要求
(1)完成实验内容。
的电路设计任务。
(2)预习移位寄存器、加法器、锁存器工作原理。
6.实验报告
(1)详细分析以上各个模块的逻辑功能,以及他们的工作原理。
(2)写出以上程序分析报告、仿真波形图及其分析报告、硬件测试和实验过程报告。