8位硬件乘法器。
—eda技术及应用大作业。
电子信息学院。
10级通信工程01班。
目录。1. 总体设计说明3
1.1设计原理3
1.2设计方案3
1.3设计优点3
2. 各模块设计实现4
2.1 adder8b模块设计4
2.2 andarith模块设计5
2.3 arictl模块设计6
2.4 reg16b模块设计7
2.5 sreg8b模块设计8
3.总体**结果及分析10
4.心得10
5.附录10
6.参考文献12
8位硬件乘法器。
1.总体设计说明。
1.1设计原理。
8位硬件乘法器是由8位加法器构成并以时序逻辑方式设计的,该乘法器具有一定的实用价值。其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次和相加;若为0,则左移后以全零相加,直至被乘数的最高位。
1.2设计方案。
8位硬件乘法器电路原理图如下。arictl是乘法运算控制电路,其start信号上跳沿与高电平有两个功能,即16位寄存器清零和被乘数a[7..0]向移位寄存器sreg8b加载;它的低电平则作为乘法使能信号。
乘法时钟信号从arictl的clk输入。当被乘数加载于8位右移寄存器sreg8b后,随着每一时钟节拍,最低位在前,,由低位至高位逐位移出。当为1时,与门andarith打开,8位乘数b[7..
0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器reg16b中的高8位进行相加,其和在下一时钟节拍的上升沿被锁存进此锁存器。而当被乘数移出位为0时,与门全零输出。如此往复,直至八个时钟脉冲后,由arictl控制,乘法运算过程自动终止,ariend输出高电平,以此可点亮一发光管,以示惩罚结束。
此时,reg16b的输出值即为最后乘积。
8位硬件乘法器电路原理图。
1.3设计优点。
此乘法器优点是节省芯片资源,其核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率,因此,可以用此乘法器或相同原理构成的更高位乘法器完成一些数字信号处理方面的运算。
2.各模块设计实现。
2.1 adder8b模块设计。
vhdl程序:
library ieee; -8位加法器。
use use
entity adder8b is
port(cin:in std_logic;
a,b:in std_logic_vector(7 downto 0);
s:out std_logic_vector(7 downto 0);
cout:out std_logic);
end adder8b;
architecture beh** of adder8b is
signal sint,aa,bb:std_logic_vector(8 downto 0);
beginaa<='0'&a; bb<='0'&b; sint<=aa+bb+cin;s<=sint(7 downto 0);
cout<=sint(8);
end beh**;
模块图:**波形图:
模块功能:adder8b是一个8位加法器。有三个输入端(cin,a[7..
0],b[7..0]),其中a[7..0]是被乘数。
b[7..0]是乘数。adder8b起到使两个数相加的作用;即在加法的基础上才能相乘。
2.2 andarith模块设计。
vhdl程序:
library ieee1位乘法器。
use 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 andarith;
architecture beh** of andarith is
beginprocess(abin,din)
beginfor i in 0 to 7 loop循环,完成8位与1位运算。
dout(i)<=din(i)and abin;
end loop;
end process;
end beh**;
模块图:**波形图:
模块功能:andarith是一个1位乘法器。有两个输入端(abin,din[7.
0]).有一个输出端dout[7..0]。
andarith起乘法的作用。它类似于一个特殊的与门。即当abin为‘1’时,dout直接输出din,而当abin为‘0’时,dout输出“0”。
2.3 arictl模块设计。
vhdl程序:
library ieee运算控制模块。
use use
entity arictl is
port (clk,start : in std_logic;
clkout,rstall,ariend : out std_logic);
end arictl;
architecture beh**e of arictl is
signal cnt4b : std_logic_vector(3 downto 0);
beginrstall <=start;
process(clk,start)
beginif start = 1' then cnt4b <=0000";
elsif clk'event and clk = 1' then
if cnt4b < 8 then cnt4b <=cnt4b + 1; end if;
end if;
end process;
process(clk, cnt4b, start)
beginif start = 0' then
if cnt4b < 8 then clkout <=clk; ariend <=0';
else clkout <=0';ariend <=1';end if;
else clkout <=clk; ariend <=0';
end if;
end process;
end beh**e;
模块图:**波形图:
模块功能:arictl是一个乘法器的控制模块。为了接受实验系统上的连续脉冲。
有两个输入端(clk,start);其中start信号的上跳沿及其高电平有两个功能,即16位寄存器清零和被乘数a[7..0]向移位寄存器sreg8b加载;它的低电平则作为乘法使能信号。clk为乘法时钟信号。
有三个输出(clkout,rstall,ariend)
2.4 reg16b模块设计。
vhdl程序:
library ieee16位锁存器/右移寄存器。
use library ieee;
use 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 reg16b;
architecture beh** of reg16b is
signal r16s : std_logic_vector(15 downto 0);
beginprocess(clk,clr)
beginif clr='1' then r16s<="0000000000000000"
dsp大作业最终版
dsp原理及应用 课程大作业内容与要求。显示 每人一个 1 启动程序,垂直显示 宁波理工姓名学号 接着从下到上逐行移动,直至全部消。失。2 启动程序,垂直显示 宁波理工姓名学号 接着从左到右逐行移动,直至全部消。失。3 启动程序,垂直显示 宁波理工姓名学号 接着从上到下逐行移动,直至全部消。失。4 ...
Maple大作业最终版
maple大。作。业。姓名 封荣 学院 计算机学院 班级 网络c111 学号 115072 1 将10进制数 转换为2进制数。convert 1705124778833,binary十进制转换二进制。2 求和。sum 2 n 1 3,n 1.16求和。3 求由确定的隐函数对得导数。f x 2 y s...
matlab作业最终版
matlab课程设计 课程设计。专业 光电信息工程1101班 姓名 燕。学号 指导教师 张胜。日期 2014年10月25日 一 课题要求 深入研究离散时间信号和系统时域分析的理论知识。利用matlab强大的图形处理功能 符号运算功能以及数值计算功能,实现离散时间信号和系统时域分析的 波形。二 课题内...