当前位置:文档之家› 8位十进制乘法器汇总

8位十进制乘法器汇总

8位十进制乘法器汇总
8位十进制乘法器汇总

XX 学院课程论文

(2012 -2013学年第一学期)

课程论文题目:8位乘法器的设计学生姓名:

EDA期末考试

设计报告

设计题目:8位乘法器的设计学校:XX学院

系别:电子信息工程系

班别:10电本2班

姓名:XXX

学号:

组员:

指导老师:

摘要:本设计通过对一个8×8的二进制乘法器的设计。在此次设计

中该乘法器是由十进制计数器、BCD码(输入)转二进制码、8位寄

存器、8位加法器、 16位寄存器、8x1乘法器、二进制码转BCD码

(输出显示)7个模块构成的以时序方式设计的8位乘法器,采用逐

项移位相加的方法来实现相乘。设计中乘数,被乘数的十位和个位

分别采用cnt10(十进制加法器)来输入,经拼接符“&”拼接成8

位BCD码,再由BCD_B(BCD码转二进制码)转化成二进制码后计算,

计算结果由B_BCD(二进制转BCD码)转化成BCD码输入到数码管中显

示。

关键词:VHDL语言、十进制计数器、BCD码转二进制码、8位寄

存器、8位加法器、16位寄存器、8x1乘法器、二进制转BCD码

一、设计功能要求

能设置输入两个乘数(十进制),按操作键后以十进制的方式显示乘积。二、设计原理

本设计中该乘法器是由十进制计数器,BCD码(输入)转二进制码,8位寄存器,8位加法器, 16位寄存器,8x1乘法器,二进制码转BCD码(输出显示)7个模块构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。设计中乘数,被乘数的十位和个位分别采用cnt10(十进制加法器)来输入,经拼接符“&”拼接成8位BCD码,再由BCD_B(BCD码转二进制码)

转化成二进制码后计算,计算结果由B_BCD(二进制转BCD码)转化成BCD码输入到数码管中显示。使用中只要输入乘数,被乘数,按下键3(脉冲)就可以直接得出结果,显示结果稳定。可以满足两位十进制乘法的计算。

三、整体结构图:输出高八位

四、设计步骤:

4.1 利用VHDL语言来实现各个结构模块,其实现的用途及功能如下:

1. 十进制计算模块:使用4个十进制计数模块,输入乘数的十位个位,被乘数的十位个位。

2. BCD码转二进制模块:实现将输入的8位BCD码转化成二进制

3. 8位右移寄存器模块:将乘法运算中的被乘数加载于其中,同时进行乘法

运算的移位操作。

4. 8位加法器模块:进行操作数的加法运算。

5. 1位乘法器模块:完成8位与1位的乘法运算。

6. 16位锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。

7. 二进制转BCD码模块:将16位寄存器的值(积)转化成BCD码,配合数码管显示

4.2 利用VHDL语言来实现各个结构模块如下:

4.2.1十进制加计数器设计:

十进制计数器在每个时钟来临时计数,clk=1时清零,用于输入乘数,被乘数的个位,十位。

Library ieee; --使用ieee设计库--0到9计数器

Use ieee.std_logic_unsigned.all; - --允许用户对操作符重新定义

Use ieee.std_logic_1164.all; -- 使用std_logic_1164 程序包

Entity cnt10 is -- 实体名cnt10

Port (clk,clr: in std_logic; --clk时钟频率,rst清零

q: out std_logic_vector(3 downto 0)); --四位输出

end cnt10;

architecture behav of cnt10 is -- 结构体名behav

begin

process(clk,clr) –-时钟,清零为敏感信号

variable cqi: std_logic_vector(3 downto 0); --定义计数器

begin

if clr='1' then cqi:="0000"; --如果clr='1',则cqi:="0000"

elsif clk'event and clk='1' then----否则,若clk为上升沿,即上升沿触发if cqi=9 then cqi:="0000";--如果cqi=9,则cqi:="0000"

else cqi:=cqi+1; --否则cqi自加1

end if;

end if;

q<=cqi; 输出

end process;

end behav;

编译cnt10.vhd生成原理图文件,如下图:

图1 cnt10封装图

4.2.2 BCD码转二进制码BCD_B的设计:

将十进制计数器产生的十位和个位合并后,为BCD码,而计算时使用二进制码计算,所以采用该模块来转化。

Library ieee; --使用ieee设计库--(0到99)BCD码转二进制码Use ieee.std_logic_unsigned.all;-- 允许用户对操作符重新定义

Use ieee.std_logic_1164.all; -- 使用std_logic_1164 程序包

Entity BCD_B is --实体名BCD_B

Port ( a: in std_logic_vector(7 downto 0); --输入8位

q: out std_logic_vector(7 downto 0)); --输出8位

end BCD_B;

architecture behav of BCD_B is --结构体名behav

signal a1,a2,a3,a4,cq: std_logic_vector(7 downto 0);--定义四个内部信号

begin

process(a)--a为敏感信号

begin

a1<="0000"&a(3 downto 0); --"0000"与a的低四位连接

a2<="0000"&a(7 downto 4); --"0000"与a的高四位连接

a3<=a2(6 downto 0)&'0'; --a2的0位到6位与'0'连接

a4<=a2(4 downto 0)&"000";--a2的0位到4位与"000"连接

cq<=a4+a3+a1;--赋值

q<=cq; --输出

end process;

end behav;

编译BCD_B.vhd生成原理图文件,如下图

图2 BCD_B封装图

4.2.3 8位移位寄存器reg_8的设计:

8位移位寄存器是在时钟(r8_clk'event and r8_clk='1')信号作用下,当r8_load='1'时,将8位乘数加载进入;而当r8_load='0'时,对数据进行移位操作,同时定义一个信号reg8用来装载新数据及移位后的操作数,完成这些操

作后,寄存器的最低位reg8(0)传送给r8_out输出。

library ieee; --使用ieee设计库---8位移位寄存器

use ieee.std_logic_1164.all;--使用std_logic_1164 程序包

use ieee.std_logic_unsigned.all;-- 允许用户对操作符重新定义

use ieee.std_logic_arith.all;--定义了相关的算术运算符和数据类型转换函数entity reg_8 is --实体名reg_8

port(r8_clk,clr,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 --结构体名arc_reg_8

signal reg8:std_logic_vector(7 downto 0); --定义一个内部信号,其位宽为8位

begin

process(r8_clk,clr,r8_load)----三个敏感信号

begin

if clr='1'then

reg8<="00000000";--如果clr='1,则执行reg8<="00000000"

elsif r8_clk'event and r8_clk='1' then-- 否则,若r8_clk为上升沿,即上升沿触发

if r8_load='1' then

reg8<=r8_in;--如果r8_load='1',则执行reg8<=r8_in

else

reg8(6 downto 0)<=reg8(7 downto 1); --否则执行

end if; -- reg8(6 downto 0)<=reg8(7 downto 1) end if;

end process;

r8_out<=reg8(0); --输出

end arc_reg_8;

编译reg_8.vhd生成原理图文件,如下图:

图3 reg_8封装图

4.2.4 8位加法器adder_8的设计:

该加法器由八位二进制加法器组成。其中设计八位二进制加法器时,为了避免加法运算时产生溢出,故定义了三个信号量ss,aa,bb,将加数a8_a,a8_b分别与0连接后赋值给aa,bb,形成9位二进制数,然后aa,bb相加赋值给ss,最后将ss的低八位赋值给和a8_s,同时将ss的最高位送给a8_out输出。library ieee; --使用ieee设计库--8位加法器

use ieee.std_logic_1164.all----使用std_logic_1164程序包;

use ieee.std_logic_unsigned.all;-- 允许用户对操作符重新定义

use ieee.std_logic_arith.all;-- 定义了相关的算术运算符和数据类型转换函数entity adder_8 is --实体名adder_8

port(a8_a,a8_b:in std_logic_vector(7 downto 0);--定义两个输入端口

a8_s:out std_logic_vector(7 downto 0);--定义输出端口

a8_out:out std_logic);--定义输出端口

end adder_8;

architecture arc_adder_8 of adder_8 is --结构体名arc_adder_8

signal ss:std_logic_vector(8 downto 0); --定义一个内部信号signal aa,bb:std_logic_vector(8 downto 0);--定义两个内部信号

begin

aa<='0'&a8_a; bb<='0'&a8_b; ss<=aa+bb;

a8_s<=ss(7 downto 0);

a8_out<=ss(8);

end arc_adder_8;

编译adder_8.vhd生成原理图文件,如下图:

图4 adder_8封装图

4.2.5 1位乘法器multi_1的设计:

利用if语句来完成8位二进制数与1位二进制的乘法运算,最后将结果送到m1_out输出。即当m1_x为1时,m1_out输出为m1_y;当m1_x为0时,m1_out输出全为零。

library ieee; --使用ieee设计库--1位乘法器

use ieee.std_logic_1164.all;--使用std_logic_1164程序包

use ieee.std_logic_unsigned.all;-- 允许用户对操作符重新定义

use ieee.std_logic_arith.all;-- 定义了相关的算术运算符和数据类型转换函数entity multi_1 is --实体名multi_1

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 ---结构体名arc_multi_1

begin

process(m1_x,m1_y)---两个敏感信号

begin

if m1_x='1' then m1_out<=m1_y;--如果m1_x='1'则执行m1_out<=m1_y else m1_out<="00000000";--否则执行m1_out<="00000000"

end if;

end process;

end arc_multi_1;

编译multi_1.vhd生成原理图文件,如下图:

图5 multi_1封装图

4.2.6 16位移位寄存器reg_16的设计:

当清零信号(clr='1')到来时,定义信号变量reg_16归零;信号(r16_clr='1')到来时,定义信号变量reg16清零;否则在时钟信号r16_clk上升沿到来时,将reg16的低8位进行移位操作,同时将8位的数据输入r16_in锁存到reg16的高8位,最后赋值给r16_out输出,cout控制位输出1。

library ieee; -- 使用ieee设计库-- 16位移位寄存器

use ieee.std_logic_1164.all;--使用std_logic_1164程序包

use ieee.std_logic_unsigned.all;-- 允许用户对操作符重新定义

use ieee.std_logic_arith.all;-- 定义了相关的算术运算符和数据类型转换函数entity reg_16 is --实体名reg_16

port(r16_clk,clr,r16_clr:in std_logic;

r16_in:in std_logic_vector(8 downto 0);---输入

cout:out std_logic;--定义进位信号

r16_out:out std_logic_vector(15 downto 0));---输出

end reg_16;

architecture arc_reg_16 of reg_16 is --结构体名arc_reg_16

signal reg16:std_logic_vector(15 downto 0); --定义内部信号reg16,位宽为16位

signal i: std_logic_vector(3 downto 0);--定义内部信号i,位宽为4位

begin

process(r16_clk,r16_clr) --两个敏感信号

begin --当清零信号(clr='1')到来时

if clr='1'then cout<='0';reg16<="0000000000000000";--定义信号变量reg_16归零

elsif r16_clr='1' then --否则信号(r16_clr='1')到来时

reg16<="0000000000000000"; cout<='0';i<="0000";-定义信号变量reg16清零

elsif r16_clk'event and r16_clk='1' then --时钟信号r16_clk上升沿到来时

if (i="1000") then reg16<=reg16;cout<='1';

else

reg16(6 downto 0)<=reg16(7 downto 1);

reg16(15 downto 7)<=r16_in;

i<=i+1;

end if;

end if;

end process;

r16_out<=reg16; --r16_out输出

end arc_reg_16;编译reg_16.vhd生成原理图文件,如下图:

图6 reg_16封装图

4.2.7 16位二进制转BCD码B_BCD的设计:

当reg_16乘积结束时,cout输出1,为B_BCD的使能信号,r16_out为B_BCD 的输入信号,随着时钟上升沿的到来,开始转化,16个周期后完成16为二进制码到BCD码的转化,输出接数码管显示

Library ieee; ---使用ieee设计库--16位二进制转BCD码(0到9999)Use ieee.std_logic_unsigned.all;--- 允许用户对操作符重新定义

Use ieee.std_logic_1164.all; ---使用std_logic_1164程序包

Entity B_BCD is ---实体名B_BCD

Port ( clk,ena:in std_logic;--- clk时钟,ena使能

a: in std_logic_vector(15 downto 0);---输入端口

q: out std_logic_vector(15 downto 0));--输出端口

end B_BCD;

architecture behav of B_BCD is ---结构体名behav

begin

process(clk,a) ---敏感信号clk,a

variable i: std_logic_vector(4 downto 0);

variable in_a,out_a :std_logic_vector(15 downto 0);

begin

if ena='0'then

in_a:=a; i:="00000"; out_a:="0000000000000000";

elsif clk'event and clk='1' then

if i="10000" then out_a:=out_a;

else out_a:=out_a(14 downto 0)&in_a(15);

in_a:=in_a(14 downto 0)&'0';

i:=i+1;

if i<"10000" then-检查半字节+3 是否大于7,也就是检查半字节是否大于 4

if out_a( 3 downto 0)>4 then out_a( 3 downto 0):=out_a( 3 downto 0)+3;

end if; --如果大于4加 3

if out_a( 7 downto 4)>4 then out_a( 7 downto 4):=out_a( 7 downto 4)+3;

end if;

if out_a(11 downto 8)>4 then out_a(11 downto 8):=out_a(11 downto 8)+3;

end if;

if out_a(15 downto 12)>4 then out_a(15 downto 12):=out_a(15 downto 12)+3;

end if;

end if; end if; end if ;

q<=out_a;

end process; end behav;

编译B_BCD.vhd生成原理图文件,如下图:

图7 B_BCD封装图

4.2.8 8位乘法器的顶层设计:

当输入a,b后,随着STAR上升沿到来,将乘数a锁存到REG_8中,同时将16位的移位寄存器REG_16清零,然后随着时钟CLK上升沿的到来,对REG_8中的乘数进行移位操作,最低位在前,由低到高逐位输出。1位乘法器中进行与8位被乘数的相乘运算,并与锁存在16位寄存器reg_16中的高8位进行相加,其和(包含进位)在下一个时钟的上升沿到来时锁存到16位寄存器中。如此进行直到第八个时钟上升沿到来时,reg_16的输出即为所求的乘积,此时reg_16输出端cout输出高电平,B_BCD使能端有效,随着时钟的到来后,开始二进制到BCD码的转化,16个时钟后转化完成,输出结果。由(clr)清零端归零后,可以进行下一次的计算。

其顶层程序如下:

library ieee;---使用ieee设计库

use ieee.std_logic_1164.all;---使用std_logic_1164程序包

use ieee.std_logic_unsigned.all;---允许用户对操作符重新定义

use ieee.std_logic_arith.all;---定义了相关的算术运算符和数据类型转换函数

entity multi_8x8 is

port(clk,clk_a1,clk_a0,clk_b1,clk_b0,clr,start:in std_logic;--7个输入

out_a1,out_a0,out_b1,out_b0: buffer std_logic_vector(3 downto 0);4个输出

result: out std_logic_vector(15 downto 0));---结果输出end multi_8x8;

architecture arc_multi_8x8 of multi_8x8 is --结构体名arc_multi_8x8

component cnt10 --调用0到9计数器声明

Port (clk,clr: in std_logic;

q: out std_logic_vector(3 downto 0));

end component;

4FPGA实验报告8位乘法器—徐艺萍

实验四8位乘法器实验 一、实验原理 8位乘法器,输入为两个8位信号,输出结果为16位。 module mult8(out, a, b); //8位乘法器源代码 parameter size=8; input[size-1:0] a,b; //两个操作数 output[2*size-1:0] out; //结果 assign out=a*b; //乘法运算符 endmodule 本实验采用Chipscope-Pro生成VIO/ICON核,并插入到8位乘法器设计中,在线进行观测和调试。 二、实验目的 1. 熟悉ISE9.1 开发环境,掌握工程的生成方法; 2. 熟悉SEED-XDTK XUPV2Pro 实验环境; 3. 了解Verilog HDL语言在FPGA 中的使用; 4. 通过掌握8位乘法器的Verilog HDL设计,了解数字电路的设计。 三、实验内容 1. 用Verilog HDL语言设计8位乘法器,进行功能仿真验证。 2. 使用chipscope-Pro 生成VIO/ICON 核,在线观测调试。 四、实验准备 1. 将USB 下载电缆与计算机及XUPV2Pro 板的J8 连接好; 2. 将RS232 串口线一端与计算机连接好,另一端与板卡的J11 相连接; 3. 启动计算机,当计算机启动后,将XUPV2Pro 板的电源开关SW11 打开到ON 上。观察XUPV2Pro 板上的+2.5V,+3.3V,+1.5V 的电源指示灯是否均亮。若有不亮的,请断开电源,检查电源。

五、实验步骤 ⑴创建工程及设计输入 ①在E:\project\目录下,新建名为mult8的新工程; 器件族类型(Device Family)选择“Virtex2P”, 器件型号(Device)选“XC2VP30 ff896 -7”, 综合工具(Synthesis Tool)选“XST (VHDL/Verilog)”, 仿真器(Simulator)选“ISE Simulator” ②设计输入并保存。 ⑵功能仿真 ①在sources窗口sources for中选择Behavioral Simulation。 ②由Test Bench WaveForm 添加激励源,如图1所示。仿真结果如图2所示。 图1 波形激励编辑窗口 图2 仿真结果 从图中可以验证由Verilog HDL语言设计的8位乘法器的工作是正确的,不论是输入a的值变化还是输入b的值变化,输出值随之变化,为a与b的乘积。 ⑶生成核并添加核 本次试验内容为8位乘法器,不需要使用ILA核。因此下面使用核生成法生成一个ICON核,一个VIO核就可以了。 ①首先对生成的工程进行综合。 ②生成核 ③添加核

简单16位CPU的设计

简单CPU的设计 设计步骤: 1)确定CPU功能 2)拟定指令系统(采用MIPS) 3)分析指令系统,为数据通路选择合适的组件,并给出组件 所需的控制信号,连接组件建立数据通路 4)详细分析指令在多周期通路中的执行过程,给出指令执行 的流程图 5)依据指令执行的流程图,分析控制信号的取值,生成相应 的状态转换图 一、确定CPU功能 M[2]←M[0]+M[1] 二、拟定指令系统 J类型

4位12位 指令格式中的op(opcode)是指令操作码。rs(register source)是源操作数的寄存 器号。rd(register destination)是目的寄存器号。rt(register target)即可作为源寄 存器号,又可作为目的寄存器号,有具体的指令决定。func(function)可被认为 是扩展的操作码,Target表示一下个地址开始 注:操作码4位,寄存器字段rs,rt,rd各三位,Fun功能字段3位,Imm立即值字段6位;一共8个寄存器,R0只读不可写,恒为0。 R类型的指令 ADD Rd,Rs,Rt SUB Rd,Rs,Rt AND Rd,Rs,Rt OR Rd,Rs,Rt XOR Rd,Rs,Rt I类型的指令 LW Rt, Rs,imm6 SW Rt, Rs,imm6

存放在ROM中的汇编指令,完成M[2]←M[0]+ M[1] LW R1,0(R0);R1←M[R[0]+0],由于R(0)内容为0,即R1←M[0] LW R2,1(R0);R1←M[R[0]+1],由于R(0)内容为0,即R1←M[1] ADD R3,R1,R2 ; R3←R1+R2 SW R3,2(R0) ; M[R[0]+2]←R3 下面地址对应着rom模块里面

实验三 8位乘法器的设计

实验三8位乘法器的设计 一、实验目的 1)了解8位乘法器的工作原理 2)熟悉MAX+plusII软件的基本使用方法 3)熟悉EDA实验开发的基本使用方法 4)学习VHDL程序中数据对象,数据类型,顺序语句,并行语句的综合使用 二、实验内容 设计一个由8位加法器构成的以时序逻辑方式设计的8位乘法器。其乘法原理是:乘法通过逐项位移相加原理来实现,以被乘数的最低位开始,若为1,则乘数左移后与上一次和相加,若为0,左移后以全零相加,直至被乘数的最高位。 三、实验条件 开发软件:MAX+plus II 9.23 Baseline 硬件设备:装有windows7的pc机 四、实验设计 1)系统的原理框架图

2)VHDL源程序 andarith.vhd源代码 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 entity andarith; architecture art of andarith is begin process(abin, din)is begin for i in 0 to 7 loop dout(i)<=din(i)and abin; end loop; end process; end architecture art; arictl.vhd源代码 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity arictl is port(clk:in std_logic; start: in std_logic; clkout:out std_logic; rstall: out std_logic; ariend: out std_logic); end entity arictl; architecture art of arictl is signal cnt4b:std_logic_vector(3 downto 0); begin rstall<=start; process(clk, start)is begin if start='1' then cnt4b<="0000"; elsif clk'event and clk='1'then if cnt4b<8 then cnt4b<=cnt4b+1; end if; end if;

移位相加8位乘法器的设计

EDA技术课程大作业 设计题目:移位相加8位乘法器的设计 院系:电子信息与电气工程学院 学生姓名: 学号:200902070017 专业班级:09电子信息工程专升本 2010年12月3日

移位相加8位乘法器的设计 1.设计背景和设计方案 1.1设计背景 EDA技术(即Electronic Design Automation技术)就是依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(Hardware Ddscription Langurage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。它在硬件实现方面融合了大规模集成电路制造技术、IC版图设计、ASIC 测试和封装、FPGA(Gield Peogrammable Gate Array)/CPLD(Complex Programmable Logic Device)编程下载和自动测试等技术;在计算机辅助工程方面融合了计算机辅助设计(CAD),计算机辅助制造(CAM),计算机辅助测试(CAT),计算机辅助工程(CAE)技术以及多种计算机语言的设计概念;而在现代电子学方面则容纳了更多的内容,如电子线路设计理论、数字信号处理技术、数字系统建模和优化技术及长线技术理论等。本文介绍设计一个两个5位数相乘的乘法器。用发光二极管显示输入数值,用7段显示器显示十进制结果。乘数和被乘数分两次输入。在输入乘数和被乘数时,要求显示十进制输入数据。输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能 1.2设计方案 此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八位加法器,所以关键是设计好八位加法器。 方案一:八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的。 方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好。综合各方面的考虑,决定采用方案二。 该乘法器是由8位加法器构成的以时序方式设计的8位乘法器。其乘法原理是乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。从

8位二进制乘法器

8位二进制乘EDA实验 法器 学号:02115024 [2013.12.15] 班级:021151 姓名:王浩楠 指导老师:徐少莹

一.设计要求 8位二进制乘法采用移位相加的方法。即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加,直到所有的部分积都被加过一次。 例如:11010101和10010011相乘,计算过程如下: 二.设计方法 按照这种算法,可以得到下图所示之框图和简单流程图。按照这种算法,可以得到下图所示之框图和简单流程图。图中Y寄存器存放被乘数M,B寄存器存放乘数N,A累加器存放部分积。A和Y中的数据在加法器中相加后送入A 中,而A和B相级联又构成了一个16bit的移位寄存器,当它工作于移位模式时,可以实现数据的右移。由于乘数的每一位不是0就是1 ,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:如该位为1 ,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移位。运算时首先将累加器A清零,并将被乘数M和乘数N分别存入寄存器Y和B,然后依据寄存器B中最右一位B0(数据N0)确定第一个部分积。将此部分积送入A累加器以后,将A连同寄存器B右移一位,部分积的最低位被移进寄存器B的最左位,乘数的最低位N0被移出寄存器B,而乘数的次低位N1被移至寄存器B的B0位。第二次仍然依据B0位的数据(N1)来确定第二个部分积,将部分积与累加器中的数据相加后右移一位,N1又被移出寄存器,数据N2被移到B0位置。。。。。这样,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据。移位相加的次数应用一个计数器来控制,每移位一次,计数器计一个数。当计数器计得8个数时,发出一个信号,使电路停止操作,并输出运算结果。

16位(8x8)硬件乘法器设计报告

EDA课程设计16位(8x8)硬件乘法器设计学校:华侨大学 学院:信息与工程学院 班级:10集成 姓名:项传煜 学号:1015251031 老师:凌朝东

目录 摘要 一.设计要求 二.正文 2.1. 系统设计 2.1.1 系统设计方案 (3) 2.1.2 系统设计原理 (4) 2.2. 各子模块设计 2.2.1 十进制加计数器设计 (5) 2.2.2 BCD码转二进制码BCD_B的设计 (5) 2.2.3 8位移位寄存器reg_8的设计 (6) 2.2.4 8位加法器adder_8的设计 (7) 2.2.5 1位乘法器multi_1的设计 (7) 2.2.6 16位移位寄存器reg_16的设计 (8) 2.2.7 16位二进制转BCD码B_BCD的设计 (9) 2.3. 软件设计 2.3.1 设计平台和开发工具 (10) 2.3.2 程序流程方框图 (10) 2.3.3 实现功能 (11) 2.3.4 8位乘法器的顶层设计 (11) 2.4. 系统测试 2.4.1 乘法器使用 (13) 2.4.2 仪器设备 (13) 2.4.3 测试数据 (14) 2.5. 结论 (14) 三.测试结果仿真图 (14) 四.参考文献 (15) 五.附录:设计说明书及使用说明书 (15)

摘要 本设计通过对一个8×8的二进制乘法器的设计,学习利用VHDL语言来描述简单的算法,掌握利用移位相加方法实现乘法运算的基本原理。在此次设计中该乘法器是由十进制计数器,BCD码(输入)转二进制码,8位寄存器,8位加法器,16位寄存器,8x1乘法器,二进制码转BCD码(输出显示)7个模块构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。设计中乘数,被乘数的十位和个位分别采用cnt10(十进制加法器)来输入,经拼接符“&”拼接成8位BCD码,再由BCD_B(BCD码转二进制码)转化成二进制码后计算,计算结果由B_BCD(二进制转BCD码)转化成BCD码输入到数码管中显示。此次设计的创新点在于cnt10,BCD_B,B_BCD的设计,使得电路的输入简单,显示方式为十进制,符合人们的习惯。使用中只要输入乘数,被乘数,按下键3(脉冲)就可以直接得出结果,显示结果稳定。可以满足两位十进制乘法的计算。 一.设计要求 设计一个十六位(8*8)硬件乘法器(难度系数1.0) 要求:2位十进制乘法;能同时显示乘数,被乘数和积的信息(LED数码管)。 二.正文 2.1. 系统设计 2.1.1 系统设计方案 方案一:直接生成乘法器,再配合输入,输出电路,构成2位十进制乘法器,该方案简单,原理清晰明了,但占用资源比较多,且不易于了解内部结构,及其乘法原理。 方案二:移位相加方法实现乘法运算再配合输入,输出电路,构成2位十进制乘法器,该方案原理简单,占用资源少,易于初学者掌握移位相加方法实现乘法运算的原理,但电路模块较多。方案选择:由于现在属初学阶段,掌握原理较为重要,故经小组讨论,一致同意采用方案二。

四位原码乘法器

1.课程设计的内容和要求 内容:设计四位原码乘法器电路。 要求:1.有关资料,设计乘法器电路; 2.画出乘法器逻辑图; 3.在实验箱上完成乘法器电路的组装,调试,核对记录,测试有关数据, 通过老师当场验收; 4.完成课程设计报告。 1.课程设计原理 运用存储器的存储功能实现数字的存储。令电路的初始状态为000,000,000000。以二进制的形式输入数字,计算方式是以十进制数字乘法。输入的数字为三位数字,输出的是六位数字。先存储输入的乘数和乘积,然后再将乘积的导线端连到输出段,此时之前输入的乘积就可以在输出端显示。 此时序电路的真值表为:

1.课程设计思路 本次课程设计的题目为四位原码乘法器,利用真值表输入乘数时,需要存放数字,于是我查阅了一些资料,用存储器可以实现这一电路,所以本实验中用到的是INTEL 2114芯片。 具体实现过程如下图: a a b b F 32F 1 1.课程设计所需的器材 1.2114是一个容量为1K4位的静态RAM芯片,常用于寄存器。 其具体的引脚图为: 此芯片的电路图为: 2.数字电路实验箱 3.导线若干 1.课程设计实现 本次课程设计的题目是四位原码乘法器电路。 此部分只用到了2块INTEL2114芯片,具体连接如下: 1、先将这些芯片按在电路板上(注意不要插反,否者容易烧毁芯片)。 2、将两片芯片的A6和GND端,A7,A8,A9接地。 3、Vcc端接电压5V,cs接存储端,WE端接控制端。 4、两块芯片的A5,A4,A3组成一个乘数,A0,A1,A2组成另一个乘数。其中一块芯

片的I/O1,I/O2,I/O3,I/O4和另一块芯片的I/O1,I/O2组成要求的乘积。乘数与乘积的显示方式均为二进制,但是计算方法是以十进制数的乘法法则计算。 1.调试步骤及方法 在连接实验器件之前,要先检查如下实验器件: 1、检查芯片引脚是否有损坏。 2、检查电路板是否好用。 连接实验器件时要注意: 2严格按照电路图一步一步连接,以避免连接错误。 3导线要先连接电源测试是否导电。 连接好电路进行数据测试,输入001,010,000010,存储;001,101,000101,存储;001,111,000111,存储。将连在输入端的四个输出连接到输出端,并输入001,010,但是结果并不是000010,而是000100;再输入001,101,也没有得到000101的结果,而是000110的结果。检查线路,发现输出的线路错位,纠正后重新输入乘数,结果均得到计算结果。调试成功。 1.实验结果 连接好整个电路。A5A4A3和A2A1A0为输入端,即乘数,F5F4F3F2F1F0为输出端,即乘积。如下表: 8. 课程设计结果 输入000,000,000000,存储;

EDA实习之8位乘法器设计

学号:10446234 常州大学 EDA 技术 课程设计报告 题目:移位相加8位硬件乘法器设计 学生:朱京 学院(系):信息科学与工程学院专业班级:电子102 指导教师:李文杰

一、设计题目移位相加8位硬件乘法器设计 二、设计背景 纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。由8位加法器构成的以时序逻辑方式设计的8位乘法器,具有一定的实用价值。其乘法通过逐项移位相加来实现,从被乘数最低位开始,若为1,则乘数左移后与上次的和相加,若为0,左移后与全0相加,直至被乘数的最高位。 三、设计内容及要求 设计内容: 设计移位相加8位硬件乘法器,完成8位被乘数A[7..0]和8位乘数B[7..0]的乘法运算,得到16位的乘法运算输出DOUT[15..0]。 (1)设计8位移位寄存器SREG8B,当被乘数加载于SREG8B后,随时钟节拍,最低位在前,由低位至高位逐位移出。 (2)设计与门,根据移位寄存器输出是否为1,决定输入加法器的是8位乘数还是全零。 (3)设计8位加法器,将8位乘数或全零与16位锁存器的高8位进行相加。 (4)设计16位锁存器REG16B,在时钟到来时,锁存来自加法器的输出至高8位,并右移低8位。 要求: 1)根据系统设计要求,采用自顶向下的方法,划分系统主要模块,画出整体设计原理框图。 2)根据工作原理、用硬件描述语言对设计内容实现,列出设计程序清单,给出仿真波形图和调试中存在问题及解决方法。 3)设计内容下载至目标芯片,在EDA的GW48型实验箱进行功能验证。 4)谈谈该课题的课程设计中遇到的问题,获得哪些技能和体会,以及建设性意见。 四、设计步骤和安排: (1)题目安排;图书馆查相关资料; (2)设计原理研究,总体设计; (3)各主要模块的VHDL设计。各模块的设计仿真分析。 (4) 完成系统顶层文件设计,系统总体功能的仿真分析。 (5) 将设计内容进行硬件配置,在GW48实验箱上进行调试。 (6) 撰写课程设计报告、答辩并提交报告。

16位除8位有符号数的VHDL设计

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; Entity Divider is port( clk: in std_logic; --reset: in std_logic; start: in std_logic; word1: in std_logic_vector(15 downto 0);--被除数 word2: in std_logic_vector(7 downto 0);--除数 data_out: out std_logic_vector(15 downto 0)--商 ); end Divider; Architecture Divider_arc of Divider is type states is(S_Idle,S_Adivr,S_Adivn,S_div); signal state,next_state:states; signal dividend:std_logic_vector(16 downto 0); signal comparison:std_logic_vector(8 downto 0); signal divisor:std_logic_vector(7 downto 0); signal load_words,shift_divisor,shift_dividend,subtract:std_logic; signal num_shift_divisor,num_shift_dividend:integer range 0 to 16; signal quotient:std_logic_vector(15 downto 0); begin process(state,dividend,divisor) begin case state is when S_Adivr => if divisor(7)='0' then comparison<='1'&(not(divisor(6 downto 0)&'0')) +"000000001"+dividend(16 downto 8); else comparison<='1'&(not divisor) +"000000001"+dividend(16 downto 8); end if; when others => comparison<='1'&(not divisor) +"000000001"+dividend(16 downto 8); end case; end process; process(clk,start) begin

八位乘法器VHDL及功能模块说明

EDA课程设计报告 实验名称:八位乘法器

目录 一.引言 1.1 EDA技术的概念?? 1.2 EDA技术的特点?? 1.3 EDA设计流程?? 1.4 VHDL介绍?? 二.八位乘法器的设计要求与设计思路??2.1 设计目的?? 2.2 设计要求?? 三.八位乘法器的综合设计?? 3.1 八位乘法器功能?? 3.2 八位乘法器设计方案?? 3.3 八位乘法器实体设计?? 3.4 八位乘法器VHDL设计?? 3. 5八位乘法器仿真图形?? 心得体会?? 参考文献??

一、引言 1.1 EDA技术的概念 EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。 1.2 EDA技术的特点 利用EDA技术进行电子系统的设计,具有以下几个特点:①用软件的方式设计硬件;②用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③设计过程中可用有关软件进行各种仿真;④系统可现场编程,在线升级;⑤整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。 1.3 EDA设计流程 典型的EDA设计流程如下: 1、文本/原理图编辑与修改。首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。 2、编译。完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。 3、综合。将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。 4、行为仿真和功能仿真。利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。 5、适配。利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配臵、逻辑分割、逻辑优化、布局布线。适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。

EDA--八位二进制乘法器

EDA课设: 选题名称:八位二进制乘法电路 (一)设计要求: 分拍输入两个八位二进制数字,并四个数码管显示当前输入数字的十进制形式,通过使能端的控制,分拍输出这两位二进制数字的乘积并通过四个数码管显示成十进制。 (二)基本算法: 8位二进制乘法采用移位相加的方法。即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。直到所有的部分积都被加过一次。 按照这种算法,可以得到下图所示之框图和简单流程图。图中Y寄存器存放被乘数M,B寄存器存放乘数N,A累加器存放部分积。A和Y中的数据在加法器中相加后送入A中,而A和B相级联又构成了一个16bit的移位寄存器,当它工作于移位模式时,可以实现数据的右移。由于乘数的每一位不是0就是1 ,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:如该位为 1 ,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移位。运算时首先将累加器A 清零,并将被乘数M和乘数N分别存入寄存器Y和B,然后依据寄

存器B中最右一位B0(数据N0)确定第一个部分积。将此部分积送入A累加器以后,将A连同寄存器B右移一位,部分积的最低位被移进寄存器B的最左位,乘数的最低位N0被移出寄存器B,而乘数的次低位N1被移至寄存器B的B0位。第二次仍然依据B0位的数据(N1)来确定第二个部分积,将部分积与累加器中的数据相加后右移一位,N1又被移出寄存器,数据N2被移到B0位置……这样,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据。移位相加的次数应用一个计数器来控制,每移位一次,计数器计一个数。当计数器计得8个数时,发出一个信号,使电路停止操作,并输出运算结果(流程图是按减法计数器设计的,也可使用加法计数器)。

有符号5位整数乘法器设计与制作

哈尔滨工业大学(威海) 信息科学与工程学院 EDA课程设计报告 有符号5位整数乘法器设计与制作 指导老师:胡屏 学生班级:0802102 学生姓名:傅愉 学生学号:080210210 2009年11月10日

目录 1.课程设计的性质、目的和任务 (1) 2.题目要求 (1) 3.总体设计 (1) 3.1算法设计 (1) 3.2整体框图及原理 (2) 4.电路设计 (4) 4.1 乘法器总体电路原理图: (4) 4.2分时输入模块电路图: ........................................................... - 5 - 4.3乘法运算电路图: (6) 4.4阀门控制模块电路: ............................................................... - 9 - 4.5计数单元电路图: ................................................................. - 12 - 4.6数码管显示单元电路: ......................................................... - 14 - 4.7报警电路示意: ......................................... 错误!未定义书签。 5.调试过程中出现的问题以及解决办法 .......................................... - 19 - 6.心得体会........................................................................................... - 20 - 7.建议:............................................................................................... - 21 - 1.课程设计的性质、目的和任务 创新精神和实践能力二者之中,实践能力是基础和根本。这是由

8位乘法器实验报告

6.2 8位乘法器的设计 1.实验目的 (1)熟悉isEXPERT/MAX+plusisEXPERT/MAX+plus II/Foudation Series 软件的基本使用方法。 (2)熟悉GW48-CK EDA实验开发系统的基本使用方法。 (3)学习VHDL基本逻辑电路的综合设计。 2.实验内容 设计并调试好由8位加法器构成的以时序逻辑方式设计的8位乘法器。此乘法器通过判断被乘数的位值为1还是零,并通过乘数的左移与上一次和相加的方法,实现了8位乘法的运算,并用GW48-CK EDA实验开发系统进行硬件验证。 3.实验条件 (1)开发设备:Lattice ispEXPERT。 (2)实验设备:GW48-CK EDA实验开发系统。 (3)拟用芯片:ispLSI1032E PLCC-84或EPF10K10LC84-3或XCS05/XL PLCC84以及运算控制电路和外部时钟。 4.实验设计 1)系统的原理框图

2)VHDL源程序 (1)选通与门模块的源程序ANDARITH.VHD 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 ENTITY ANDARITH; ARCHITECTURE ART OF ANDARITH IS BEGIN PROCESS(ABIN,DIN)IS BEGIN FOR I IN 0 TO 7 LOOP DOUT(I)<=DIN(I)AND ABIN; END LOOP; END PROCESS; END ARCHITECTURE ART; (2)16位锁存器的源程序REG16B.VHD LIBRARY IEEE;

16位乘法器芯片设计 3月9日

16位乘法器芯片设计 1.方法 乘法器的设计方法有两种:组合逻辑设计方法和时序逻辑设计方法。 采用组合逻辑设计方法,电路事先将所有的乘积项全部算出来,然后做加法运算。 采用时序逻辑设计方法,电路将部分已经得到的乘积结果右移,然后与乘积项相加并保存和值,反复迭代上述步骤直到计算出最终积。 2.组合逻辑的实现 可以以16*3位的乘法器为例做出如下设想: A为16位二进制乘数,B为3位二进制乘数,C为A与B相乘的积。则: C的结果实际上只能为如下值中的一个: 0,A,2A,3A,4A,5A,6A,7A 因为B为3位二进制,则B只能是000,001,010,011,100,101,110,111中的一个。 初步设想符合现实,由于要实现ASIC芯片的生产,所以对各端口定义如下: reset:芯片复位、清零信号。值为0,芯片复位。 start:芯片使能信号。值为1,芯片读入乘数和被乘数,并将乘积复位清零。 ain:被乘数,16bit。 bin:乘数,3bit。 yout:乘积输出,19bit。 done:芯片输出标志信号,值为1,乘法运算完成,yout端口的数据稳定,得到最终的乘积;值为0,乘法运算未完成,yout端口数据不稳定。 编写的Verilog程序如下: Module mult16(reset,start,ain,bin,done,yout); Parameter N=16; Input reset; Input start; Input [N-1:0] ain; Input [2:0]bin; Output [N+3:0] yout; Output done; Integer aa,ab,ac,temp; Integer su; Reg done; Always @(ain) Begin If(start&&!reset) Begin aa=ain; ab=ain+ain; ac=ab+ab;

移位硬件八位乘法器

移位硬件八位乘法器 作者:孤灯 摘要:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA构成实验系统后,可以很容 易的用ASIC大型集成芯片来完成,性价比高,可操作性强。 关键词:加法器,寄存器,一位乘法器,锁存器。 Abstract The pure combinatory logic constitution multiplier although the working speed quite is quick,But too takes the hardware resources,Realizes the wide position multiplier with difficulty.Meets the ROM multiplication table based on the PLD component outside the multiplier then is unable to constitute the monolithic system,Also is impractica Here introduced constitutes by eight accumulators by the succession logic way design eight multipliers,Has the certain practical value, Moreover constitutes the experimental system after FPGA,May be very easy to complete with the ASIC large-scale integration chip,The natural price is higher than,Feasibility. 一.设计思路 纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与 上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。 二.方案设计与论证 此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八 加法器,所以关键是设计好八位加法器。 方案一:八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的。 方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好。综合 各方面的考虑,决定采用方案二。 三.工作原理

44数字乘法器设计

4*4数字乘法器设计 1.设计任务 试设计一4位二进制乘法器。4位二进制乘法器的顶层符号图如图1所示。 END P A B 1 0 1 11 1 0 1×1 0 1 10 0 0 01 0 1 11 0 1 1 1 1011001 图1 4位乘法器顶层符号图 图2 4位乘法运算过程 输入信号:4位被乘数A (A 3 A 2 A 1 A 0),4位乘数B (B 3 B 2 B 1 B 0),启动信号START 。 输出信号:8位乘积P (P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0),结束信号END 。· 当发出一个高电平的START 信号以后,乘法器开始乘法运算,运算完成以后发出高电平的END 信号。 2.顶层原理图设计 从乘法器的顶层符号图可知,这是一个9输入9输出的逻辑电路。一种设计思想是把设计对象看作一个不可分割的整体,采用数字电路常规的设计方法进行设计,先列出真值表,然后写出逻辑表达式,最后画出逻辑图。这种设计方法有很多局限性,比如,当设计对象的输入变量非常多时,将不适合用真值表来描述,同时,电路功能任何一点微小的改变或改进,都必须重新开始设计。另一种设计思想是把待设计对象在逻辑上看成由许多子操作和子运算组成,在结构上看成有许多模块或功能块构成。这种设计思想在数字系统的设计中得到了广泛的应用。 对于4位乘法器而言,设A =1011,B =1101,则运算过程可由图2所示。从乘法运算过程可知,乘法运算可分解为移位和相加两种子运算,而且是多次相加运算,所以是一个累加的过程。实现这一累加过程的方法是,把每次相加的结果用部分积P 表示,若B 中某一位 B i =1,把部分积P 与A 相加后右移1位;若B 中某一位B i = 0,则部分积P 与0相加后右移1位(相当于只移位不累加)。通过4次累加和移位,最后得到的部分积P 就是A 与B 的乘积。 为了便于理解乘法器的算法,将乘法运算过程中部分积P 的变化情况用图3表示出来。存放部分积的是一个9位的寄存器,其最高位用于存放在做加法运算时的进位输出。先把寄存器内容清零,再经过4次的加法和移位操作就可得到积。注意,每次做加法运算时,被乘

移位相加型8位硬件乘法器设计

合肥学院 课程设计报告 题目:移位相加型8位硬件乘法器 系别:电子信息与电气工程系 专业:通信工程 班级: 13通信工程(1)班 学号: 姓名: 导师:石朝毅 成绩: 2016年 6 月 11 日

移位相加型8位硬件乘法器设计 摘要 本次设计是基于时序结构的8位移位相加型乘法器,使用软件QuartusII进行仿真设计。完成此乘法器,我们需要首先设计该乘法器的组件,包括REGSHT模块、SREG8BT模块、AND8B模块和ADDER8BT模块,并对所有元件进行仿真,无误后可进行乘法器的设计。设计方法使用的是元件例化,具体原理是通过逐项相加来实现乘法功能,最终完成整体的VHDL程序设计并仿真。 关键词:时序;乘法器;元件例化

目录 第一章前言............................................ 错误!未定义书签。设计概述............................................. 错误!未定义书签。 问题提出与原理..................................... 错误!未定义书签。 设计需要........................................... 错误!未定义书签。第二章设计过程及结果.................................. 错误!未定义书签。设计思路............................................. 错误!未定义书签。 设计须知........................................... 错误!未定义书签。 基本步骤........................................... 错误!未定义书签。设计代码及仿真....................................... 错误!未定义书签。 元件REGSHT设计代码及仿真结果...................... 错误!未定义书签。 元件SREG8BT设计代码及仿真结果..................... 错误!未定义书签。 元件AND8B设计代码及仿真结果....................... 错误!未定义书签。 元件ADDER8BT设计代码及仿真结果.................... 错误!未定义书签。 总模块设计代码及仿真结果........................... 错误!未定义书签。第三章总结............................................ 错误!未定义书签。致谢................................................... 错误!未定义书签。

16位vhdl乘法器详解,加仿真图

控制模块: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity cont_modu is port( Clk : in std_logic ; Start : in std_logic; //数据输入开始信号 en_sig : out std_logic; //控制运算信号,为‘1’运算数据 out_sig : out std_logic // 运算完成信号 ); end entity; architecture rlt_cont_modu of cont_modu is signal cnt :integer range 0 to 15 :=0;//定义从0到15 type state is(S_idle,S_work,S_1d,S_2d);//运算状态信号,状态机 signal st_ty : state :=S_idle; begin process(Clk) begin if rising_edge(Clk) then case st_ty is选择语句;S_idle为空闲状态,当输入数据后Start信号为1就开始工作 when S_idle => if Start ='1' then如果为1就跳转到S_work状态,并且使能信号置1 st_ty <= S_work; en_sig <='1'; else不然继续在S_idle状态 st_ty <= S_idle; en_sig <='0'; end if; out_sig <='0'; when S_work => if cnt =15 then在S_work状态下,cnt信号一直加1,加满16个数就跳转到S_1d,然后使能信号en_sig 就为0。 st_ty <= S_1d; cnt <= 0; en_sig <='0'; else如果没到16个数继续加1 st_ty <= S_work;

相关主题
文本预览
相关文档 最新文档