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

16位(8x8)硬件乘法器设计报告
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位十进制乘法器,该方案原理简单,占用资源少,易于初学者掌握移位相加方法实现乘法运算的原理,但电路模块较多。方案选择:由于现在属初学阶段,掌握原理较为重要,故经小组讨论,一致同意采用方案二。

2.1.2 系统设计原理

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

例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:

2.2. 各子模块设计

下面分解8位乘法器的层次结构,分为以下7个模块:

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

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

3. 右移寄存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。

4. 加法器模块:这是一个8位加法器,进行操作数的加法运算。

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

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

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

2.2.1 十进制加计数器设计

十进制计数器在每个时钟来临时计数,clk=1时清零,用于输入乘数,被乘数的个位,十位Library ieee; --0到9计数器

Use ieee.std_logic_unsigned.all;

Use ieee.std_logic_1164.all;

Entity cnt10 is

Port (clk,clr: in std_logic;

q: out std_logic_vector(3 downto 0));

end cnt10;

architecture behav of cnt10 is

begin

process(clk,clr)

variable cqi: std_logic_vector(3 downto 0);

begin

if clr='1' then cqi:="0000";

elsif clk'event and clk='1' then

if cqi=9 then cqi:="0000";

else cqi:=cqi+1;

end if;

end if;

q<=cqi;

end process;

end behav;

2.2.2 BCD码转二进制码BCD_B的设计

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

Library ieee; --(0到99)BCD码转二进制码

Use ieee.std_logic_unsigned.all;

Use ieee.std_logic_1164.all;

Entity BCD_B is

Port ( a: in std_logic_vector(7 downto 0);

q: out std_logic_vector(7 downto 0));

end BCD_B;

architecture behav of BCD_B is

signal a1,a2,a3,a4,cq: std_logic_vector(7 downto 0);

begin

process(a)

begin

a1<="0000"&a(3 downto 0);

a2<="0000"&a(7 downto 4);

a3<=a2(6 downto 0)&'0';

a4<=a2(4 downto 0)&"000";

cq<=a4+a3+a1;

q<=cq;

end process;

end behav;

2.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; ---8位移位寄存器

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,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

signal reg8:std_logic_vector(7 downto 0);

begin

process(r8_clk,clr,r8_load)

begin

if clr='1'then

reg8<="00000000";

elsif r8_clk'event 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.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; --8位加法器

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity adder_8 is

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

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;

2.2.5 1位乘法器multi_1的设计

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

library ieee; --1位乘法器

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

if m1_x='1' then m1_out<=m1_y;

else m1_out<="00000000";

end if;

end process;

end arc_multi_1;

2.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; -- 16位移位寄存器

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity reg_16 is

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

signal reg16:std_logic_vector(15 downto 0);

signal i: std_logic_vector(3 downto 0);

begin

process(r16_clk,r16_clr)

begin

if clr='1'then cout<='0';reg16<="0000000000000000";

elsif r16_clr='1' then

reg16<="0000000000000000"; cout<='0';i<="0000";

elsif r16_clk'event and r16_clk='1' then

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;

end arc_reg_16;

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

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

Library ieee; --16位二进制转BCD码(0到9999)

Use ieee.std_logic_unsigned.all;

Use ieee.std_logic_1164.all;

Entity B_BCD is

Port ( clk,ena:in std_logic;

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

begin

process(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

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

end if;

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;

2.3. 软件设计

2.3.1 设计平台和开发工具

EDA软件(Quartus II 7.2)

2.3.2 程序流程方框图

图1.电路框图

图2.简单流程图

按照上述算法,首先由计数器输入乘数被乘数,经BCD_B转化成二进制码,记作a,b。图中8位移位寄存器reg_8存放(二进制)乘数a,从a的最低位开始,每次从reg_8中移出一位,送至1×8位乘法器multi_1中,同时将被乘数加至multi_1中,进行乘法运算,运算的结果再送至8位加法器adder_8中,同时取出16位移位寄存器reg_16的高8位与之进行相加,相加后结果即部分积存入reg_16中,进行移位后并保存。这样经过8次对乘数a的移位操作,所以的部分积已全加至reg_16中,此时锁存器reg_16存放的值即所要求的积,再经过B_BCD 转化成BCD码显示。

2.3.3 实现功能

实现两位十进制(0~99)乘法的计算。

2.3.4 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;

use ieee.std_logic_1164.all;

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;

out_a1,out_a0,out_b1,out_b0: buffer std_logic_vector(3 downto 0);

result: out std_logic_vector(15 downto 0));

end multi_8x8;

architecture arc_multi_8x8 of multi_8x8 is

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

Port (clk,clr: in std_logic;

q: out std_logic_vector(3 downto 0));

end component;

component BCD_B --调用0到99)BCD码转二进制码声明

Port ( a: in std_logic_vector(7 downto 0);

q: out std_logic_vector(7 downto 0));

end component;

component B_BCD --调用16位二进制转BCD码(0到9999)声明Port ( clk,ena:in std_logic;

a: in std_logic_vector(15 downto 0);

q: out std_logic_vector(15 downto 0));

end component;

component multi_1 --调用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 component;

component adder_8 --调用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 component;

component reg_8 --调用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 component;

component reg_16 --调用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 component;

signal q_a,cout:std_logic;

signal andsd,a,b,aa,bb:std_logic_vector(7 downto 0);

signal dtbin:std_logic_vector(8 downto 0);

signal dtbout:std_logic_vector(15 downto 0);

begin

aa<=out_a1&out_a0;

bb<=out_b1&out_b0;

u1:cnt10 --例化语句

port map(clk_a1,clr,out_a1);

u2:cnt10

port map(clk_a0,clr,out_a0);

u3:cnt10

port map(clk_b1,clr,out_b1);

u4:cnt10

port map(clk_b0,clr,out_b0);

u5:BCD_B

port map(aa,a);

u6:BCD_B

port map(bb,b);

u7:reg_8

port map(clk,clr,start,a,q_a);

u8:multi_1

port map(q_a,b,andsd);

u9:adder_8

port map(dtbout(15 downto 8),andsd,dtbin(7 downto 0),dtbin(8));

u10:reg_16

port map(clk,clr,start,dtbin,cout,dtbout);

u11:B_BCD

port map(clk,cout,dtbout,result);

end arc_multi_8x8

2.4. 系统测试

2.4.1 乘法器使用

键8为被乘数十位输入,键7为被乘数个位输入,键6为乘数十位输入,键5为乘数个位输入,键4为清零键,键3为“=“键。如需进行下一次计算,则需要按一下清零键。

2.4.2 仪器设备

采用的设备是GW48_EDA系统实验箱,模式为模式3。采用的芯片为Altera公司Cyclone||系列的EP2C5T144C8。

2.4.3 测试数据

乘数被乘数积

11 15 165

23 56 1288

78 80 6240

98 98 9604

5 85 425

58 79 4582

78 98 7644

2.5. 结论

经过多次系统测试,我们所设计的16位硬件乘法器满足设计要求,能够实现2位十进制数相乘,并能同时显示乘数,被乘数和积的信息,乘积结果正确显示稳定,基本满足设计要求。通过本次设计让我们大致了解一个系统的设计流程,增加了对VHDL语言的认识及使用,并提高了我们的思考能力和团结合作能力。尽管在设计中遇到了一些困难,如二进制转化为BCD 码整个系统的简化过程等。但最后通过查找资料都得了很好的解决。

三.测试结果仿真图

仿真图1:5*85=425

仿真图2:58*79=4582

仿真图2:78*98=7644

四.参考文献

1.EDA技术与VHDL(第三版)潘松,黄继业编著清华大学出版社

2. EDA原理及应用实验教程(第一版)何宾编著清华大学出版社

3.EDA技术与应用(第三版)江国强编著电子工业出版社

附录:设计说明书及使用说明书

十六位硬件乘法器设计说明书

一、系统的功能、技术指标

该系统能够实现2位十进制(0~99)乘法,能同时显示乘数、被乘数和积的信息,用数码管显示。乘数和被乘数的十位和个位能够分别输入,在输完乘数和被乘数后,按下等于键,马上能够看到结果显示。一轮计算完后,需清零才能再次计算。

二、系统的工作原理

2.1系统框图

输出高八位

2.2模块功能

十进制计数器 a1: 用来输入被乘数的十位数的BCD 码

十进制计数器 a0:用来输入被乘数的个位数的BCD 码 十进制计数器 b1:用来输入乘数的十位数的BCD 码 十进制计数器 b0:用来输入乘数的个位数的BCD 码 二进制码转BCD 码:用来把结果转化为十进制码显示出来 BCD 码转二进制码:把输入的乘数和被乘数转化为二进制码 8位移位寄存器: 把乘数的二进制码从低位到高位依次移出来 一位乘法器: 使乘数移出来的每一位和被乘数相乘 加法器: 乘数的每一位与被乘数相乘相加

锁存器: 通过移位锁存的方式把积算出来,并锁存

三、系统的实现方法

在该系统中计数器、转码器、移位寄存器、一位乘法器、加法器、锁存器都是采用

PLD 器件实现的。显示部件为普通的8为数码显示管,开关为单脉冲形式的按键开关、

采用5V 直流供电。

四、设计要求

设计一个六位(8*8)的硬件乘法器。能实现2位十进制(0~99)乘法,能同时显示乘数、被乘数和积的信息,用数码管显示。

五、设计完成

该系统能完成两位十进制简单的乘法要求。

十进制计

数器 a1

十进制计

数器 a0

十进制计

数器 b1

十进制计数器 b0 BCD 码转二进制码

BCD 码转二进制码

一位乘法器

8位移位寄存器

加法器

二进制码转BCD 码

锁存器

十六位硬件乘法器使用说明书

一、引脚锁定

1.根据乘法器原理图选择最佳电路图结构模式,这里我们选择模式3,以下是模式3电路结

构图:

2.输入端分配按键,从键1~~键8中给乘法器原理图中的使能计算(start)、清零(clr)、乘

数个位(clk_b0)、乘数十位(clk_b1)、被乘数个位(clk_a0)、被乘数十位(clk_a1)各分配一个按键,我们按顺序从键3到键8依次分配。给时钟(clk)锁定在clk0.

输出端:result[15...0]锁定在锁定在数码管1、数码管2、数码管3、数码管4上,乘数个位(out_b0[3...0])锁定在数码管5上,乘数十位(out_b1[3...0])锁定在数码管6上,被乘数个位(out_a0[3...0])锁定在数码管7上,被乘数十位(out_a1[3...0])锁定在数码管8上。

二、使用操作说明

1. 键8为被乘数十位输入,键7为被乘数个位输入,键6为乘数十位输入,键5为乘数个位输入,键4为清零键,键3为“=“键。如需进行下一次计算,则需要按一下清零键。

2. 乘数和被乘数在前四位数码管上显示。当数据输入完成后,按下键3(“=”),后四位数码管显示积。

我来做模板您来用硬件总体设计报告

硬件总体设计报告 (仅供内部使用) 文档作者:_________________ 日期:____/____/____ 文档校对:_________________ 日期:____/____/____ 管理办:_________________ 日期:____/____/____ 请在这里输入公司名称 版权所有不得复制

硬件总体设计报告 1 引言 1 .1编写目的 软件需求规格说明的目的在于为电能质量数据分析软件项目的开发提供: a.提出软件总体要求;作为软件开发人员和最终使用者之间相互了解的基础。 b.提出软件性能要求,数据结构和采集要求,作为软件设计和程序制作基础。 c.软件确认测试的依据。 1 .2背景 见项目开发计划。 1 .3参考资料 略 1 .4术语和缩写词 略。 特别说明:凡涉及到公司内部秘密的部分用(略)代替 2 概述 2 .1软件总体说明 本软件是一项独立、完整的软件。 本软件的主要功能为对(略)进行分析。 2 .2软件总体描述 ********************************************电能质量分析仪的数据分析软件。 该软件的基本要求有: 1.能够根据要求对所测量的结果文件以图形或表格形式进行分析。 2.软件界面友好,指示明确,显示清晰,易于使用。 3.分析结果可打印输出。

1.打开文件及评估标准设置 使用者选择打开一个测量结果文件(略)。文件选择前,首先出现评估标准设置窗口。设置内容可以存储在一个文件中,设置时也可选择一个已存在的文件。 确定后,可选择测量结果(略)。文件选择后,出现“互感器接法”选择窗口,可选择互感器接法。 评估标准国标规定值: (略)

精简8位cpu设计报告

精简8位cpu实验设计报告 实验介绍: 实验分为两个部分,第一部分为16*8 ROM 设计与仿真 第二部分为SAP-1 设计与仿真 实验流程: ①16*8 ROM 的设计与仿真 Rom16_8.VHDL LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ROM16_8 is PORT( DATAOUT :OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --Data Output ADDR :IN STD_LOGIC_VECTOR(3 DOWNTO 0); --ADDRESS CE :IN STD_LOGIC --Chip Enable ); END ROM16_8; ARCHITECTURE a OF ROM 16_8 IS BEGIN DATA<=“00001001”WHEN ADDR=“0000”AND CE=‘0’--LDA 9H “00011010”WHEN ADDR=“0001”AND CE=‘0’ELSE --ADD AH “00011011”WHEN ADDR=“0010”AND CE=‘0’ELSE --ADD BH “00101100”WHEN ADDR=“0011”AND CE=‘0’ELSE --SUB CH “11100000”WHEN ADDR=“0100”AND CE=‘0’ELSE --OUT “11110000”WHEN ADDR=“0101”AND CE=‘0’ELSE --HLT “00010000”WHEN ADDR=“1001”AND CE=‘0’ELSE “00010100”WHEN ADDR=“1010”AND CE=‘0’ELSE “00011000”WHEN ADDR=“1011”AND CE=‘0’ELSE

简单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模块里面

实验一四位串行进位加法器的设计实验报告

实验一四位串行进位加法器的设计 一、实验目的 1.理解一位全加器的工作原理 2.掌握串行进位加法器的逻辑原理 3.进一步熟悉Quartus软件的使用,了解设计的全过程, 二、实验容 1.采用VHDL语言设计四位串行进位的加法器 2.采用画原理图的方法设计四位串行进位加法器 三、实验步骤 1、使用VHDL语言设计 1.打开File—>New Project Wizard输入文件名adder4保存在D 盘,打开File—>New—>VHDL File,从模版中选择库的说明,use 语句的说明,实体的说明,结构体的说明,编写VHDL代码,然后保存、编译。打开File—>New—>Other File—>Vector Waveform File,查找引脚,从Edit中选择End Time 输入40、ns 保存。从Assignments—>Settings—>Simulator Settings —>Functional 然后Processing—>Generate Functional Simnlation Netlist —>确定。选择Start Simulation保存最后的波形图,打开File —>close关闭工程。 底层文件: LIBRARY ieee;

USE ieee.std_logic_1164.ALL; ENTITY fadder IS PORT ( a, b,cin : IN STD_LOGIC; s, co : OUT STD_LOGIC ); END fadder; ARCHITECTURE arc1 OF fadder IS BEGIN s<=a xor b xor cin; co<=((a xor b)and cin)or(a and b); END arc1; 顶层文件: LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY adder4 IS PORT ( c0: IN STD_LOGIC; a,b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); s : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

硬件总体设计模板

硬件总体设计方案

修订记录 目录

1概述 (7) 1.1文档版本说明 (7) 1.2单板名称及版本号 (7) 1.3开发目标 (7) 1.4背景说明 (7) 1.5位置、作用、 (7) 1.6采用标准 (8) 1.7单板尺寸(单位) (8) 2单板功能描述和主要性能指标 (8) 2.1单板功能描述 (8) 2.2单板运行环境说明 (8) 2.3重要性能指标 (8) 3单板总体框图及各功能单元说明 (9) 3.1单板总体框图 (9) 3.1.1单板数据和控制通道流程和图表说明 (10) 3.1.2逻辑功能模块接口和通信协议和标准说明 (10) 3.1.3其他说明 (11) 3.2单板重用和配套技术分析 (11) 3.3功能单元-1 (11) 3.4功能单元-2 ........................................................................................ 错误!未定义书签。3.5功能单元-3 ........................................................................................ 错误!未定义书签。 4关键器件选型 (12) 5单板主要接口定义、与相关板的关系 (13) 5.1外部接口 (13) 5.1.1外部接口类型1 (13) 5.1.2外部接口类型2 (13) 5.2内部接口 (13) 5.2.1内部接口类型1 (14) 5.2.2内外部接口类型2 (14) 5.3调测接口 (14) 6单板软件需求和配套方案 (14) 6.1硬件对单板软件的需求 (14) 6.1.1功能需求 (14) 6.1.2性能需求 (15) 6.1.3其他需求 (15) 6.1.4需求列表 (15) 6.2业务处理软件对单板硬件的需求可实现性评估 (15) 6.3单板软件与硬件的接口关系和实现方案 (16) 7单板基本逻辑需求和配套方案 (16) 7.1单板内可编程逻辑设计需求 (16) 7.1.1功能需求 (16) 7.1.2性能需求 (17) 7.1.3其他需求 (17) 7.1.4支持的接口类型及接口速率 (17) 7.1.5需求列表 (17) 7.2单板逻辑的配套方案 (18) 7.2.1基本逻辑的功能方案说明 (18)

计算机硬件课程设计报告(cpu设计)

计算机硬件课程设计 设计报告 学号: 姓名:成绩: 学号: 姓名:成绩: 东南大学计算机科学与工程系 二0 10 年11 月

一、设计名称: My CPU的设计 二、本设计的主要特色: 1、熟悉挂总线的逻辑器件的特性和总线传送的逻辑实现方法。 2、掌握半导体静态存储器的存取方法。 三、设计方案: 1. 数据格式——8位二进制定点表示 2. 指令系统——CPU的指令格式尽量简单规整,这样在硬件上更加容易实现。 7条基本指令:输入/输出,数据传送,运算,程序控制。 指令格式:Array 7 6 5 4 3 2 1 0 两种寻址方式: 寄存器寻址Array 7 6 5 4 3 2 1 0 直接地址寻址,由于地址要占用一个字节,所以为双字节指令。 7条机器指令:

IN R目:从开关输入数据到指定的寄存器R目。 OUT R源:从指定的寄存器R源中读取数据送入到输出缓冲寄存器,显示灯亮。 ADD R目,R源:将两个寄存器的数据相加,结果送到R目。 JMP address : 无条件转移指令。 HALT : 停机指令。 LD R目,address : 从内存指定单元中取出数据,送到指定寄存器R 目。 ST address , R 源: 从指定的寄存器R源中取出数据,存入内存指定单元。

Address(内存地址) 3. CPU内部结构 4.数据通路设计 根据指令系统,分析出数据通路中应包括寄存器组、存储器、运算器、多路转换器等,采用单总线结构。 通用寄存器组:

运算器: 存储器: 多路转换器:

输出缓冲器: 5.控制器设计 控制通路负责整个CPU的运行控制,主要由控制单元和多路选择器MUX 完成。在每一个时钟周期的上升沿指令寄存器IR 从内存中读取指令字后,控制单元必须能够根据操作码,为每个功能单元产生相应主控制信号,以及对ALU 提供控制信号。对于不同的指令,同一个功能单元的输入不同,需要多路选择器MUX 来对数据通路中功能单元的输入进行选择。

16位超前加法器实验报告

16位超前加法器设计实验 一、实验分析: 四位超前进位加法器HDL程序: module add4_head ( a, b, ci, s, pp, gg); input[3:0] a; input[3:0] b; input ci; output[3:0] s; output pp; output gg; wire[3:0] p; wire[3:0] g; wire[2:0] c; assign p[0] = a[0] ^ b[0]; assign p[1] = a[1] ^ b[1]; assign p[2] = a[2] ^ b[2]; assign p[3] = a[3] ^ b[3]; assign g[0] = a[0] & b[0]; assign g[1] = a[1] & b[1]; assign g[2] = a[2] & b[2]; assign g[3] = a[3] & b[3]; assign c[0] = (p[0] & ci) | g[0]; assign c[1] = (p[1] & c[0]) | g[1]; assign c[2] = (p[2] & c[1]) | g[2]; assign pp = p[3] & p[2] & p[1] & p[0]; assign gg = g[3] | (p[3] & (g[2] | p[2] & (g[1] | p[1] & g[0]))); assign s[0] = p[0] ^ ci; assign s[1] = p[1] ^ c[0]; assign s[2] = p[2] ^ c[1]; assign s[3] = p[3] ^ c[2]; endmodule p表示进位否决信号(pass),如果p为0就否决调前一级的进位输入。否决的意思就是即使前一级有进位,本级也不会向后一级产生进位输出。 g表示进位产生信号(generate),如果g为1就表示一定会向后一级产生进位输出。p[n] = a[n] ^ b[n]这句话的意思是说,当a=1,b=0或a=0,b=1时前一级的进位输入信号不能否决。这样就有个问题了,即当a=1,b=1时前一级的进位输入信号也不能否决啊,怎么没有体现出来?其实当a=1,b=1时产生了进位产生信号g,它的优先级高于p信号,就忽略了p信号,直接产生了向后一级产生进位输出,是没有逻辑错误的。 g[n] = a[n] & b[n] 这句话的意思是说,如果a=1,b=1时就直接向后一级产生进位输出信号,而不用考虑其它的任何因素。

CPU课程设计报告

课程设计报告 课程片上计算机系统 题目 CPU模型机设计 班级 专业 学生 学号 指导教师 2014年7 月 3 日 目录: 1.课程设计的目的及要求 (3) 2.处理器的设计思想和设计内容 (3)

3.设计处理器的结构和实现方法 (3) 4.模型机的指令系统 (4) 5.处理器的状态跳转操作过程 (4) 6. CPU的Verilog代码 (7) 7. 模型机在Quartus II环境下的应用 (19) 8. 仿真波形 (19) 9. 课程设计的总结 (21) 一.课程设计的目的及要求: (一)目的: 1.掌握RISC CPU与内存数据交换的方法。 2.学会指令格式的设计与用汇编语言编写简易程序。 3.能够使用VHDL硬件描述语言在QuartusⅡ软件环境下完成CPU模型机的 设计。

(二)要求: 1.以《计算机组成与设计》书中123页的简化模型为基础更改其指令系 统,形成设计者的CPU, 2.在Quartus II环境下与主存连接,调试程序,观察指令的执行是否达 到设计构想。 二.处理器的设计思想和设计内容: 处理器的字长为16b;包括四种指令格式,格式1、格式2、格式3的指令字长度为8b,格式4的指令字长度为16b;处理器内部的状态机包括七个状态。(一)关于修改后的CPU: 一共设计25条指令,主要包括空操作指令、中断指令、加法指令、减法指令、加法指令、四种逻辑运算指令、比较、算术移位操作指令、逻辑移位操作指令、加减1指令、加减2指令、数据传输指令、转移类指令、读写指令、特权指令等等。 (二)关于RAM: 地址线设置成8bits,主存空间为4096words。 三.设计处理器的结构和实现方法: (指令格式) 格式1:寄存器寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Rx Ry 空白 格式2:寄存器变址寻址方式 OP Ry 空白 格式3:立即数寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP I 空白 格式4:无操作数寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP 空白空白 格式5:直接寻址方式 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Addr 内存(2的12次方) 四.模型机的指令系统 CPU的指令集: 操作码OP IR(15..1 2) 指令 格式 指令的助记指令的内容

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位十进制乘法器,该方案原理简单,占用资源少,易于初学者掌握移位相加方法实现乘法运算的原理,但电路模块较多。方案选择:由于现在属初学阶段,掌握原理较为重要,故经小组讨论,一致同意采用方案二。

硬件设计规范

XXX电子有限公司 XXX电子硬件设计规范 V1.2

xxx 电子有限公司发布 1.目的: 为规范硬件设计、保证产品质量和性能、减少各类差错,特制定本规范。 2.适用范围 XXX公司自行研发、设计的各类产品中硬件设计的全过程,各部门涉及到有关内容者均以此规范为依据。 3.文档命名规定 硬件设计中涉及各种文档及图纸,必须严格按规则命名管理。由于XXX公司早期采用的 6.01设计软件不允许文件名超过8个字符,故文件名一直规定为8.3模式。为保持与以前文件 的兼容,本规范仍保留这一限制,但允许必要情况下在文件名后面附加说明性文字。 3.1.原理图 3.1.1.命名规则 原理图文件名形如 xxxxYmna.sch 其中xxxx:为产品型号,由4位阿拉伯数字组成,型号不足4位的前面加0。 Y:为电路板类型,由1位字母组成,目前已定义的各类板的字母见附录1。 m:为文件方案更改序号,表示至少有一个电路模块不同的电路方案序号,不同方案的电路可同时在生产过程中流通,没有互相取代关系。 n:一般为0,有特殊更改时以此数字表示。 a:为文件修改序号,可为0-z,序号大的文件取代序号小的文件。 例如:1801采用SSM339主控芯片的主板原理图最初名为1801M001.SCH,进行电路设计改进后为1801M002.SCH、1801M003.SCH等;改为采用AK1020主控芯片后名为1801M101.SCH,在此基础上的改进版叫1801M102.SCH、1801M103.SCH等。 3.1.2.标题框 原理图标题框中包含如下各项,每一项都必须认真填写: 型号(MODEL):产品型号,如1801(没有中间的短横线); 板名(BOARD):电路板名称,如MAIN BOARD、FRONT BOARD等; 板号(Board No.):该电路板的编号,如1801100-1、1801110-1等,纯数字表示,见“3.2.2.”; 页名(SHEET):本页面的名称,如CPU、AUDIO/POWER、NAND/SD等; 页号(No.):原理图页数及序号,如1 OF 2、2 OF 2等; 版本(REV.):该文件修改版本,如0.1、0.11、1.0等,正式发行的第一版为V1.0; 日期(DATE):出图日期,如2009.10.16等,一定要填出图当天日期; 设计(DESIGN):设计人,由设计人编辑入标题框; 审核(CHECK):审核人,需手工签字; 批准(APPROVE):批准人,需手工签字。 3.2.PCB图 3.2.1.命名规则 PCB文件除后缀为.PCB外,文件名主体及各字段的意义与对应的原理图文件完全相同。 注意:PCB图更改后,即便原理图没有变动,也必须更改原理图文件名,使二者始终保持这种对应关系。

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

超前进位加法器设计报告

存档资料成绩: 华东交通大学理工学院 课程设计报告书 所属课程名称EDA课程设计 题目超前进位加法器设计 分院 专业班级 学号 学生姓名 指导教师 2013 年7月2日

目录 第一章设计内容与要求 (3) 第二章超前进位加法器设计原理 (3) 第三章详细设计流程 (4) 3.1.创建工程文件 (4) 3.2.程序的编译 (5) 3.3.波形的仿真 (7) 第四章设计结果分析 (11) 第五章源程序代码 (12) 第六章心得体会 (14) 第七章参考文献 (15)

第一章设计内容与要求 加法运算是最重要也是最基本的运算,所有的其他基本运算,如减、乘、除运算最终都能归结为加法运算。但因为加法运算存在进位问题,使得某一位计算结果的得出和所有低于他的位相关。因此为了减少进位传输所消耗的时间,提高计算速度,人们设计了多种类型的加法器,如跳跃进位加法器、进位选择加法器、超前进位加法器等。本设计采用的是超前进位加法器。通过Verilog 设计一个超前8位加法器。 要求在Quartus II软件下,利用Verilog编程完成层次式电路设计,电路中的元件可以用Verilog设计也可以用库元件连线构成再封装。8位超前进位加法器,借助EDA工具中的综合器,适配器,时序仿真器和编程器等工具进行相应处理。适配采用Cyclone系列的EP1C6Q240C8。 要求综合出RTL电路,并进行仿真输入波形设计并分析电路输出波形. 试比较并阐述数据类型reg型和wire型的区别。 第二章超前进位加法器设计原理 将n个全加器相连可得n位加法器,但是加法时间较长。解决的方法之一是采用“超前进位产生电路”来同时形成各位进位,从而实现快速加法。超前进位产生电路是根据各位进位的形成条件来实现的 首先对于1位加法器基本位值和与进位输出为1;如果a,b有一个为1,则进位输出等于cin; 令G=ab,P=a+b,则有: Cout==ab+(a+b)cin=G+P?cin 由此可以G和P来写出4位超前进位链如下(设定四位被加数和加数为A

硬件设计文档规范 -硬件模板

SUCHNESS 硬件设计文档 型号:GRC60定位终端 编号: 机密级别:绝密机密内部文件 部门:硬件组 拟制:XXXX年 XX月 XX日 审核:年月日 标准化:年月日 批准:年月日

文档修订历史记录

目录 1系统概述 (3) 2系统硬件设计 (3) 2.1硬件需求说明书 (3) 2.2硬件总体设计报告 (3) 2.3单板总体设计方案 (3) 2.4单板硬件详细设计 (3) 2.5单板硬件过程调试文档 (3) 2.6单板硬件测试文档 (4) 3系统软件设计 (4) 3.1单板软件详细设计 (4) 3.2单板软件过程调试报告 (4) 3.3单板系统联调报告 (4) 3.4单板软件归档详细文档 (4) 4硬件设计文档输出 (4) 4.1硬件总体方案归档详细文档 (4) 4.2硬件信息库 (5) 5需要解决的问题 (5) 6采购成本清单 (5)

1系统概述 2系统硬件设计 2.1、硬件说明书 硬件需求说明书是描写硬件开发目标,基本功能、基本配置,主要性能指标、运行环境,约束条件以及开发经费和进度等要求,它的要求依据是产品规格说明书和系统需求说明书。它是硬件总体设计和制订硬件开发计划的依据,具体编写的内容有:系统工程组网及使用说明、硬件整体系统的基本功能和主要性能指标、硬件分系统的基本功能和主要性能指标以及功能模块的划分等 2.2、硬件总体设计报告 硬件总体设计报告是根据需求说明书的要求进行总体设计后出的报告,它是硬件详细设计的依据。编写硬件总体设计报告应包含以下内容:系统总体结构及功能划分,系统逻辑框图、组成系统各功能模块的逻辑框图,电路结构图及单板组成,单板逻辑框图和电路结构图,以及可靠性、安全性、电磁兼容性讨论和硬件测试方案等 2.3、单板总体设计方案 在单板的总体设计方案确定后出此文档,单板总体设计方案应包含单板版本号,单板在整机中的位置、开发目的及主要功能,单板功能描述、单板逻辑框图及各功能模块说明,单板软件功能描述及功能模块划分、接口简单定义与相关板的关系,主要性能指标、功耗和采用标准 2.4、单板硬件详细设计 在单板硬件进入到详细设计阶段,应提交单板硬件详细设计报告。在单板硬件详细设计中应着重体现:单板逻辑框图及各功能模块详细说明,各功能模块实现方式、地址分配、控制方式、接口方式、存贮器空间、中断方式、接口管脚信号详细定义、时序说明、性能指标、指示灯说明、外接线定义、可编程器件图、功能模块说明、原理图、详细物料清单以及单板测试、调试计划。有时候一块单板的硬件和软件分别由两个开发人员开发,因此这时候单板硬件详细设计便为软件设计者提供了一个详细的指导,因此单板硬件详细设计报告至关重要。尤其是地址分配、控制方式、接口方式、中断方式是编制单板软件的

《单周期CPU设计》实验报告

《计算机组成原理与接口技术实验》 实验报告 学院名称: 学生姓名: 学号: 专业(班级): 合作者: 时间:2016 年4 月25 日 成绩: ________ 实验二: 一. 实验目的 1.掌握单周期CPU数据通路图的构成、原理及其设计方法; 2.掌握单周期CPI的实现方法,代码实现方法; 3.认识和掌握指令与CPU勺关系; 4.掌握测试单周期CPI的方法。 二. 实验内容 设计一个单周期CPU,该CPU至少能实现以下指令功能操作。需设计的指令

与格式如下:

==>算术运算指令 功能:rd Jrs + rt 。 reserved为预留部分,即未用,一般填“0 (2)addi rt , rs , immediate 功能:rt J rs + (sign-extend) immediate ;immediate 符号扩展再参加“加”运算(3) sub rd , rs , rt 完成功能:rd J rs - rt ==>逻辑运算指令 (4)ori rt , rs , immediate 功能:rt Jrs | (zero-extend) immediate ; immediate 做“ o ”扩展再参加“或”运算(5) and rd , rs , rt 功能:rd Jrs & rt ;逻辑与运算 (6)or rd , rs , rt 功能:rd Jrs | rt ;逻辑或运算。 ==>传送指令 功能:rd Jrs + $0 ; $0=$zero=0。 ==>存储器读/写指令 (8)sw rt , immediate( rs)写存储器 功能:memory[rs+ (sign-extend) immediate ] J rt ; immediate 符号扩展再 相加。

有符号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.课程设计的性质、目的和任务 创新精神和实践能力二者之中,实践能力是基础和根本。这是由

加法器的设计与仿真实验报告

加法器的设计与仿真 一、实验内容 1、用逻辑图和VHDL语言设计全加器。 2、利用设计的全加器组成串行加法器。 3、用逻辑图和VHDL语言设计并行加法器。 4、应用MaxplusII软件对全加器和串行加法器进行编译、仿真和模拟。 5、在“MaxplusII软件的基本操作”实验的基础上,能更加熟练的掌握应用MaxplusII软件,从而更形象更深层次的理解全加器和串行加法器。 二、实验平台及实验方法 用VHDL语言编写全加器和串行加法器的程序,运用MaxplusII软件进行仿真,再结合FPGA(即对实验箱的芯片进行编译)进行验证。也可以用原理图进行文本设计,波形设计。逻辑符号图: 真值表: 电路图: 三、实验过程 1.启动MaxplusII软件; 2.新建一个文本编辑文件,输入全加器的VHDL语言; 3.编译。点击file save as,保存文件名为f-adder名称,扩展名为vhd,选择芯片类型为EPF10K20TI144-4,保存并进行编译,

若编译结果出现0 error,0 warnings则说明编译通过。 4.仿真波形。点Max+plus II→Waveform editor,出现波形图的设置界面,然后点Node→Enter Nodes from SNF→list,将输入输出端添加到界面,并设置其周期和输入波形,保存后,点Max+plus II→Simulator,即可仿真出输出的波形。 5.配置芯片。点Max+plus II→Floorplan editor,将Unassigned Nodes & 栏中,电路的输入输出节点标号直接用鼠标“拖到” 想分配的引脚上,Max+plusII→programmer→configuer,然后就可以操作试验箱,观察全加器的工作情况。 四、实验结果 实验步骤: 1、用VHDL语言编写全加器的程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT( x,y,cin:IN STD_LOGIC; s,cout:OUT STD_LOGIC ); END ENTITY f_adder; ARCHITECTURE bhv OF f_adder IS BEGIN s<=x XOR y XOR cin; cout<=(x AND y)OR(x AND cin)OR(y AND cin); END ARCHITECTURE bhv; 2、将上述程序保存为文件名为f_adder的文件,点击Maxplus里的compiler进行编译,点击start,如果出现0 error,0 warnings,则编译成功。

CPU设计实验报告

实验中央处理器的设计与实现 一、实验目的 1、理解中央处理器的原理图设计方法。 2、能够设计实现典型MIPS的11条指令。 二、实验要求 1、使用Logisim完成数据通路、控制器的设计与实现。 2、完成整个处理器的集成与验证。 3、撰写实验报告,并提交电路源文件。 三、实验环境 VMware Workstations Pro + Windows XP + Logisim-win-2.7.1 四、操作方法与实验步骤 1、数据通路的设计与实现 数据通路主要由NPC、指令存储器、32位寄存器文件、立即数扩展部件、ALU、数据存储器构成。其中指令存储器和数据存储器可直接调用软件库中的ROM和RAM元件直接完成,其余部件的设计如图所示: 图1.1 NPC

图1.2 32位寄存器

图1.3 立即数扩展部件 图1.4 ALU 2、控制器的设计与实现 控制器的主要设计思想如图所示 图2.1 控制器设计思想 输入 1 1 0

输出R-type ORI LW SW BEQ JUMP RegDst 1 0 0 x x x ALUSrc 0 1 1 1 0 x MemtoReg0 0 1 x x x RegWrite 1 1 1 0 0 0 MemWrite0 0 0 1 0 0 Branch 0 0 0 0 1 0 Jump 0 0 0 0 0 1 Extop x 0 1 1 1 x ALUop2 1 0 0 0 0 x ALUop1 x 1 0 0 x x ALUop0 x 0 0 0 1 x ALUop[2:0] Funct[3:0] 指令ALUctr[2:0] 111 0000 add 010 111 0010 sub 110 111 0100 and 000 111 0101 or 001 111 1010 slt 111 010 xxxx ori 001 000 xxxx Lw/sw 010 011 xxxx beq 110 表2.1 控制器设计真值表

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;

十六位硬件乘法器电路设计报告

课程名称电子设计自动化 题目十六位硬件乘法器电路 院系班级信息学院11电子信息工程A班姓名 学号 指导老师凌朝东 2013 年 12 月 5 日

题目名称: 十六位硬件乘法器电路 摘要: 设计一个16位硬件乘法器电路.要求2位十进制乘法,能用LED数码管同时显示乘数,被乘数和积的值.本设计利用Quartus II软件为设计平台,通过移位相加的乘法原理:即从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。经软件仿真和硬件测试验证后,以达到实验要求。

目录 1.题目名称 (2) 2.摘要 (2) 3.目录 (3) 4.正文 (4) 4.1. 系统设计 (4) 4.1 设计要求 (4) 4.2 系统设计方案 (4) 4.2 单元电路设计 (4) 4.2.1十进制计算模块 (5) 4.2.2 BCD码转二进制模块 (5) 4.2.3 8位右移寄存器模块 (6) 4.2.4 8位加法器模块 (7) 4.2.5 1乘法器multi_1模块 (7) 4.2.6 16位移位寄存器reg_16模块 (8) 4.2.7 16位二进制转BCD码B_BCD模块 (9) 4.2.8 8位乘法器multi_8x8顶层设计 (10) 4.3 软件设计 (12) 4.3.1设计平台和开发工具 (12) 4.3.2程序流程方框图 (13) 4.4 系统测试 (14) 4.1仿真分析 (14) 4.2硬件验证 (15) 5. 结论 (15) 6. 参考文献 (15) 7. 附录 (15)

4.正文 4.1系统设计 1.1设计要求 题目要求设计一个16位硬件乘法器电路.要求2位十进制乘法;能用LED数码管同时显示乘数,被乘数和积的信息.设置一个乘法使能端,控制乘法器的计算和输出. 1.2系统设计方案 此设计问题可分为乘数和被乘数输入控制模块,乘法模块和输出乘积显示模块基本分. 乘数和被乘数的输入模块使输入的十进制数转化为二进制数输入乘法模块,乘法模块利用移位相加的方法将输入的两组二进制数进行相乘,并将16位乘积输出到乘积输出显示模块.显示模块将输入的二进制数按千,百,十,个位分别转化为十进制数输出. 乘数和被乘数的输入可用数据开关K1~K10分别代表数字1,2,…,9,0,用编码器对数据开关K1~K10的电平信号进行编码后输入乘法器进行计算.但此方案所用硬件资源较多,输入繁琐,故不采取. 方案二是利用硬件箱自带16进制码发生器,由对应的键控制输出4位2进制构成的1位16进制码,数的范围是0000~1111,即0H~FH.每按键一次,输出递增1,输出进入目标芯片的4位2进制数将显示在该键对应的数码管. 乘数和被乘数的输入模块将16进制码的A~F码设计成输出为null.使得减少了无用码的输入. 两数相乘的方法很多,可以用移位相加的方法,也可以将乘法器看成计数器,乘积的初始值为零,每一个时钟周期将乘数的值加到积上,同时乘数减一,这样反复执行,直到乘数为零.本设计利用移位相加的方法使得程序大大简化. 系统总体电路组成原理图如下图所示: 4.2单元电路设计

相关文档
最新文档