八位二进制除法器
八位二进制——BCD码转换器

实验报告:8位二进制-BCD码转换器姓名:学号:指导教师:一.实验目的了解二进制-BCD码转换器实现原理,掌握移位加3算法,熟悉Verilog编程中模块复用模式。
二.实验任务1.掌握用移位加三算法实现二进制-BCD码转换器的设计;2.设计Verilog实验程序;3.生成比特流文件,将文件下载到开发板中进行硬件验证。
三.实验设备1.计算机(安装Xilinx ISE 10.1软件平台);2.NEXYS2 FPGA开发板一套(带USB-MIniUSB下载线)四.实验原理设计任意数目输入的二进制-BCD码转换器的方法就是采用移位加三算法(Shift and Add 3 Algorithm)。
此方法包含以下4个步骤:1)把二进制左移1位;2)如果共移了8位,那么BCD数就在百位、十位和个位列;3)如果在BCD列中,任何一个二进制数是5或者比5更大,那么就在BCD列的数值加上3;4)回到步骤1)。
其工作过程如图1所示:图1. 一个8位的二进制数转换成BCD码的步骤五.实验内容在Xilinx ISE 10.1上完成8位二进制-BCD码转换器设计,输入设计文件,仿真后,生成二进制码流文件下载到FPGA开发板上进行验证;1)依照实验1的方式,在Xilinx ISE 10.1中新建一个工程example02;2)在工程管理区任意位置单击鼠标右键,在弹出的快捷菜单中选择“New Source”命令,弹出新建源代码对话框,这里我们选择“Verilog Module”类型,输入Verilog文件名“binbcd8.v”,完整代码如下:module binbcd8(input [7:0] b,output reg [9:0] p);reg [17:0] z;integer i;always @(*)beginfor (i=0;i<=17;i=i+1)z[i]=0;z[10:3]=b;repeat(5) //重复5次beginif (z[11:8]>4)z[11:8]=z[11:8]+3;if (z[15:12]>4)z[15:12]=z[15:12]+3;z[17:1]=z[16:0];endp=z[17:8];endendmodule3)设计相应的7段显示管程序,将相应的十进制数在开发板的显示管上显示出来。
基于VHDL的8位除法器的实现

基于VHDL的8位除法器的实现The Design of 8 Division With VHDL摘要:介绍了利用VHDL实现八位除法,采用层次化设计,给出了实现除法的子模块程序。
使用Altera公司的MAX+PLUSII10.2开发软件进行功能仿真并给出仿真波形。
关键词:二进制除法 VHDL MAX+PLUS2Abstract:The design of division(8/8) by hierarchy technique is proposed. Schematic documents and submodule program with VHDL language are also given. At the end of the article, using MAX+PLUS2, the flow char is given and the simulation result is attached.Keywords: division VHDL MAX+PLUS2引言除法是数值计算和数据分析中最常用的运算之一,许多高级运算如平方根、指数、三角函数等都与其有关。
在FPGA中,有加、减、乘、除的算法指令,但除法中除数必须是2的幂,因此无法实现除数为任意数的除法。
本文用VHDL编写了除法运算,可实现任意八位数的除法。
除法器的设计本文所采用的除法原理是:对于八位无符号被除数A,先对A转换成高八位是0低八位是A的数C,在时钟脉冲的每个上升沿C向左移动一位,最后一位补零,同时判断C的高八位是否大于除数B,如是则C的高八位减去B,同时进行移位操作,将C的第二位置1。
否则,继续移位操作。
经过八个周期后,所得到的C的高八位为余数,第八位为商。
从图(1)可清楚地看出此除法器的工作原理。
此除法器主要包括比较器、减法器、移位器、控制器等模块。
1、比较模块设计中所用的八位比较器是由两个四位比较器级联而成的。
8位二进制加法计算器

一:本实验设计的是一个8为二进制加法计算器,其功能就是对两个八位的二进制数执行加法运算,并可以异步清零。
二:电路可划分为三部分:半加器、全加器和复位电路。
1、半加器:真值表a b so co0 0 0 00 1 1 01 0 1 01 1 0 1电路图2全加器:由半加器和或门组成电路图3复位电路:复位电路通过en控制,当en为‘1’时,执行加法运算,输出正确的值,当en为‘0’时,输输出及结果为全0.三:实验波形仿真和VHDL1、仿真图:2、VHDL代码1)半加器h_adder:library ieee;use ieee.std_logic_1164.all;entity h_adder isport (a,b :in std_logic;co,so :out std_logic);end entity h_adder;architecture fh1 of h_adder isbeginso <= not(a xor (not b));co <= a and b ; end architecture fh1;2)或门or2a:library ieee;use ieee.std_logic_1164.all;entity or2a isport (a,b :in std_logic;c: out std_logic);end entity or2a;architecture one of or2a isbeginc <= a or b ;end architecture one;3)全加器f_adder:library ieee;use ieee.std_logic_1164.all;entity f_adder isport (ain,bin,cin:in std_logic;cout,sum:out std_logic);end entity f_adder;architecture fd1 of f_adder iscomponent h_adderport (a,b :in std_logic;co,so :out std_logic);end component;component or2aport (a,b :in std_logic;c: out std_logic);end component;signal d,e,f: std_logic;beginu1:h_adder port map(a=>ain,b=>bin,co=>d,so=>e);u2:h_adder port map(a=>e,b=>cin,co=>f,so=>sum);u3: or2a port map(a=>d,b=>f,c=>cout);end architecture fd1;4)与门and2a:library ieee;use ieee.std_logic_1164.all;entity and2a isport (a,b :in std_logic;c: out std_logic);end entity and2a;architecture one of and2a isbeginc <= a and b ;end architecture one;5)顶层设计文件library ieee;use ieee.std_logic_1164.all;entity zong isport (a1,a2,a3,a4,a5,a6,a7,a8,b1,b2,b3,b4,b5,b6,b7,b8,en :in std_logic;solution1,solution2,solution3,solution4,solution5,solution6,solution7,solution8,solution9 :out std_logic );end entity zong;architecture fh1 of zong iscomponent h_adderport (a,b :in std_logic;co,so :out std_logic);end component;component f_adderport (ain,bin,cin:in std_logic;cout,sum:out std_logic);end component;component and2aport (a,b :in std_logic;c: out std_logic);end component;signale2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24 :std_logi c;beginu1:and2a port map(a=>en,b=>a1,c=>e2);u2:and2a port map(a=>en,b=>a2,c=>e3);u3:and2a port map(a=>en,b=>a3,c=>e4);u4:and2a port map(a=>en,b=>a4,c=>e5);u5:and2a port map(a=>en,b=>a5,c=>e6);u6:and2a port map(a=>en,b=>a6,c=>e7);u7:and2a port map(a=>en,b=>a7,c=>e8);u8:and2a port map(a=>en,b=>a8,c=>e9);u9:and2a port map(a=>en,b=>b1,c=>e10);u10:and2a port map(a=>en,b=>b2,c=>e11);u11:and2a port map(a=>en,b=>b3,c=>e12);u12:and2a port map(a=>en,b=>b4,c=>e13);u13:and2a port map(a=>en,b=>b5,c=>e14);u14:and2a port map(a=>en,b=>b6,c=>e15);u15:and2a port map(a=>en,b=>b7,c=>e16);u16:and2a port map(a=>en,b=>b8,c=>e17);u17:h_adder port map(a=>e2,b=>e10,co=>e18,so=>solution1);u18:f_adder port map(ain=>e3,bin=>e11,cin=>e18,cout=>e19,sum=>solution2);u19:f_adder port map(ain=>e4,bin=>e12,cin=>e19,cout=>e20,sum=>solution3);u20:f_adder port map(ain=>e5,bin=>e13,cin=>e20,cout=>e21,sum=>solution4);u21:f_adder port map(ain=>e6,bin=>e14,cin=>e21,cout=>e22,sum=>solution5);u22:f_adder port map(ain=>e7,bin=>e15,cin=>e22,cout=>e23,sum=>solution6);u23:f_adder port map(ain=>e8,bin=>e16,cin=>e23,cout=>e24,sum=>solution7);u24:f_adder port map(ain=>e9,bin=>e17,cin=>e24,cout=>solution9,sum=>solution8);end architecture fh1;。
组成原理课后习题答案..

1. 写出下列各数的原码、反码、补码表示 (用8位二进制数)。其中MSB是最高位 (又是符号位)LSB是最低位。 (1)[-35]原=10100011;[-35]反=11011100 [-35]补=11011101 (2) [127]原= [127]反=[127]补= 01111111; (3) [-127 ]原=11111111; [-127]反=10000000; [-127]补=10000001;
7. 用原码阵列乘法器、补码阵列乘法器分 别计算X×Y。 (2)x = -11111 y = - 11011 解:a)带求补器的原码阵列乘法:
|x|=11111, |y|= 11011
x * y=01101000101
b)带求补器的补码阵列 [x]补 = 100001, [y]补 = 100101 乘积符号位单独运算1⊕1=0 尾数部分算前求补输出│X│=11111,│y│ =11011
(2)根据已知条件,CPU在1us内至少访存一次,而 整个存储器的平均读/写周期为0.5us, 假定16K*8位的DRAM芯片用128*1024矩阵存储元构 成,如果采用集中刷新,有64us的刷新死时间, 肯定不行;如果采用分散刷新,则每1us只能访存 一次,也不行。 所以采用异步式刷新方式。刷新时只对128行进行 异步方式刷新,则刷新间隔为2ms/128 = 15.625us,可取刷新信号周期大约为15.5us,则两 次刷新的最大时间间隔为tmax=15.5(μ S) 对全部存储单元刷新一遍所需实际刷新时间为 t=0.5×128=64(μ S) (注意假设的刷新时间不能大于0.5μ S)
(3)X=11011 Y=-10011 解:先写出x和y的变形补码,再计算它们的差 [x]补=0011011 [y]补=1101101 [-y]补=0010011 [x-y]补=[x]补+[-y]补=0011011 +0010011 = 0101110 ∵运算结果双符号不相等 ∴ 01为正溢出
EDA8位二进制并行加法器

实验二:8位加法器的设计1.实验目的(1)学习Quartus Ⅱ/ISE Suite/ispLEVER软件的基本使用方法。
(2)学习GW48-CK或其他EDA实验开发系统的基本使用方法。
(3)了解VHDL程序的基本结构。
2.实验内容设计并调试好一个由两个4位二进制加法器级联而成的8位二进制并行加法器,并用GW48-CK或其他EDA实验开发系统(事先应选定拟采用的实验芯片的型号)进行硬件验证。
3.实验要求(1)画出系统的原理图,说明系统中各主要组成部分的功能。
(2)编写各个VHDL源程序。
(3)根据系统的功能,选好测试用例,画出测试输入信号波形或编号测试程序。
(4)根据选用的EDA实验开发装置编好用于硬件验证的管脚锁定表格或文件。
(5)记录系统仿真、逻辑综合及硬件验证结果。
(6)记录实验过程中出现的问题及解决办法。
4.实验条件(1)开发条件:Quartus Ⅱ 8.0。
(2)实验设备:GW48-CK实验开发系统。
(3)拟用芯片:EPM7128S-PL84。
5.实验设计1)系统原理图为了简化设计并便于显示,本加法器电路ADDER8B的设计分为两个层次,其中底层电路包括两个二进制加法器模块ADDER4B,再由这两个模块按照图2.1所示的原理图构成顶层电路ADDER8B。
ADDER4B图2.1 ADDER4B电路原理图A8[7..0]图 2.1 ADDER8B电路原理图2)VHDL程序加法器ADDER8B的底层和顶层电路均采用VHDL文本输入,有关VHDL程序如下。
ADDER4B的VHDL源程序:--ADDER4B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B ISPORT(C4:IN STD_LOGIC;A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC);END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B ISSIGNAL S5:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL A5,B5:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINA5<='0'&A4;B5<='0'&B4;S5<=A5+B5+C4;S4<=S5(3 DOWNTO 0);CO4<=S5(4);END ARCHITECTURE ART;ADDER8B的VHDL源程序:--ADDER8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B ISPORT(C8: IN STD_LOGIC;A8: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S8: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);CO8: OUT STD_LOGIC );END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B ISCOMPONENT ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC );END COMPONENT ADDER4B;SIGNAL SC: STD_LOGIC;BEGINU1:ADDER4B PORT MAP(C4=>C8,A4=>A8(3 DOWNTO 0),B4=>B8(3 DOWNTO 0),S4=>S8(3 DOWNTO 0),CO4=>SC);U2:ADDER4B PORT MAP(C4=>SC,A4=>A8(7 DOWNTO 4),B4=>B8(7 DOWNTO 4),S4=>S8(7 DOWNTO 4),CO4=>CO8);END ARCHITECTURE ART;CTRLS的VHDL程序--CTRLS.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CTRLS ISPORT(CLK: IN STD_LOGIC;SEL: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END ENTITY CTRLS;ARCHITECTURE ART OF CTRLS ISSIGNAL CNT:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS(CLK) ISBEGINIF CLK'EVENT AND CLK='1' THENIF CNT="111" THENCNT<="000";ELSECNT<=CNT+'1';END IF;END IF;END PROCESS;SEL<=CNT;END ARCHITECTURE ART;DISPLAY的VHDL程序--DISPLAY.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DISPLAY ISPORT( SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0); -- DATAIN: IN STD_LOGIC_VECTOR(15 DOWNTO 0); DATAIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); COM: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --LEDW: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); SEG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY DISPLAY;ARCHITECTURE ART OF DISPLAY ISSIGNAL DATA: STD_LOGIC_VECTOR(3 DOWNTO 0);-- SIGNAL DATA: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINP1:PROCESS(SEL) ISBEGINCASE SEL ISWHEN"000"=>COM<="11111110";WHEN"001"=>COM<="11111101";WHEN"010"=>COM<="11111011";WHEN"011"=>COM<="11110111";WHEN"100"=>COM<="11101111";WHEN"101"=>COM<="11011111";WHEN"110"=>COM<="10111111";WHEN"111"=>COM<="01111111";WHEN OTHERS=>COM<="11111111";END CASE;END PROCESS P1;--LEDW<=SEL;P2:PROCESS(SEL)BEGINCASE SEL ISWHEN"000"=>DATA<=DATAIN(3 DOWNTO 0);WHEN"001"=>DATA<=DATAIN(7 DOWNTO 4);-- WHEN"010"=>DATA<=DATAIN(11 DOWNTO 8);-- WHEN"011"=>DATA<=DATAIN(15 DOWNTO 12); WHEN OTHERS=>DATA<="0000";END CASE;CASE DATA ISWHEN"0000"=>SEG<="00111111";WHEN"0001"=>SEG<="00000110";WHEN"0010"=>SEG<="01011011";WHEN"0011"=>SEG<="01001111";WHEN"0100"=>SEG<="01100110";WHEN"0101"=>SEG<="01101101";WHEN"0110"=>SEG<="01111101";WHEN"0111"=>SEG<="00000111";WHEN"1000"=>SEG<="01111111";WHEN"1001"=>SEG<="01101111";WHEN OTHERS=>SEG<="00000000";END CASE;END PROCESS P2;END ARCHITECTURE ART;ADDER8B动态扫描的VHDL程序--ADDER8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B ISPORT(C8: IN STD_LOGIC;A8: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8: IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK:IN STD_LOGIC;-- S8: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); S8: BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); CO8: OUT STD_LOGIC ;COM: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);SEG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B IS--COMPONENT ADDER4BCOMPONENT ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC );END COMPONENT ADDER4B;--COMPONENT CTRLSCOMPONENT CTRLS ISPORT(CLK: IN STD_LOGIC;SEL: OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END COMPONENT CTRLS;--COMPONENT DISPLAYCOMPONENT DISPLAY ISPORT(SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0);--DATAIN: IN STD_LOGIC_VECTOR(15 DOWNTO 0);DATAIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);COM: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);SEG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT DISPLAY;SIGNAL SC: STD_LOGIC;SIGNAL SB: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINU1:ADDER4B PORT MAP(C4=>C8,A4=>A8(3 DOWNTO 0),B4=>B8(3 DOWNTO 0),S4=>S8(3 DOWNTO 0),CO4=>SC);U2:ADDER4B PORT MAP(C4=>SC,A4=>A8(7 DOWNTO 4),B4=>B8(7 DOWNTO 4),S4=>S8(7 DOWNTO 4),CO4=>CO8);U3:CTRLS PORT MAP(CLK,SB);U4:DISPLAY PORT MAP(SB,S8(7 DOWNTO 0),COM(7 DOWNTO 0),SEG(7 DOWNTO 0));END ARCHITECTURE ART;3)仿真波形设置本设计包括两个层次,因此先进行底层的二进制加法器ADDER4B的仿真,再进行顶层ADDER8B的仿真。
加法器除法器FPGA实现总结文档

加法器除法器FPGA实现总结文档FPGA实现加法器和除法器总结文档引言FPGA(Field-Programmable Gate Array)是一种可编程逻辑芯片,可以根据需要进行配置和重新编程,具有灵活性和可重复性。
在数字电路设计中,加法器和除法器是非常常见且基础的功能模块。
本文将总结FPGA实现加法器和除法器的过程和结果,并对实现的优势和不足进行分析。
一、加法器的实现在FPGA中实现加法器有多种方法,最基本也是最常见的是使用全加器构建一个完整的加法器。
全加器是一个三输入一输出的电路,可以实现两个二进制位的加法。
通过级联多个全加器,就可以构造出任意位数的加法器。
1.实现步骤:(1)定义加法器的输入和输出位数:假设我们要实现一个4位加法器,那么就需要4个输入(A[3:0]、B[3:0])和一个4位输出(SUM[3:0])。
(2)使用VHDL或Verilog等硬件描述语言来描述全加器和加法器的逻辑。
(3)使用逻辑综合工具将硬件描述语言代码综合为逻辑电路连接。
(5)验证加法器的功能和正确性。
2.实现优势:FPGA实现加法器的优势主要体现在以下几个方面:(1)灵活性:FPGA可以根据需要重新编程,可以方便地修改加法器的位数和功能。
(2)速度:FPGA中的逻辑电路是并行计算的,可以实现高速的加法运算。
(3)资源利用:FPGA可以利用其内部的查找表(lookup table)实现逻辑运算,节省了硬件资源的使用。
3.实现不足:FPGA实现加法器也存在一些不足之处:(1)成本高:FPGA价格相对较高,成本较高,适合于需要较高性能和灵活性的应用场景。
(2)资源有限:FPGA的资源有限,实现复杂的逻辑电路可能会导致资源不足的问题。
二、除法器的实现除法器是一个更为复杂的数字电路,用于实现两个二进制数的除法运算。
在FPGA中实现除法器需要使用一种称为"非冗余算法"的方法,通过迭代运算来实现除法的功能。
fpga除法算法 -回复

fpga除法算法-回复FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,可以用于实现各种数字逻辑功能。
在计算机硬件领域,FPGA常被用于处理复杂的算法和数据计算,其中包括除法算法。
本文将深入探讨FPGA除法算法的原理和实现方法。
第一步:了解除法算法的原理除法是数学中的基本运算之一,用于将一个数(被除数)分割成若干个等份(除数),得到商和余数。
在FPGA中,我们需要将除法算法转化为硬件电路的形式。
最常见的除法算法是长除法法则,它按照一定的步骤进行计算,直到得到商和余数。
在这个过程中,除数逐渐的从被除数中减去,得到一个新的被除数,直到被除数小于除数为止。
然后将减数的次数作为商。
这个算法可以用于整数除法和浮点数除法。
第二步:了解FPGA的基本元件为了实现FPGA除法算法,我们需要了解FPGA的基本元件。
FPGA由一系列可编程逻辑块(Programmable Logic Blocks,PLBs)组成,每个PLB包含逻辑门、触发器等基本逻辑电路。
这些PLB可以通过编程决定连接关系,从而形成不同的电路结构。
此外,FPGA还包含许多其他的元件,如片上存储器(On-chip Memory,OCM)、片上RAM(On-chip Random Access Memory,O-CRAM)等。
这些元件可以用于存储中间结果和临时变量,从而提高算法的执行效率。
第三步:FPGA除法算法的实现方法FPGA除法算法可以通过多种实现方法来达到目标。
下面将介绍几种常用的方法。
1. 二进制除法器:这种方法将被除数和除数都转化为二进制形式,然后通过逐位移动的方式进行计算。
首先进行除数规约,将除数左移,直到其位数与被除数相等。
然后逐位比较被除数和除数,如果被除数大于或等于除数,则将该位设为1,否则设为0。
然后将被除数减去除数的倍数,并将得到的差值作为新的被除数。
重复上述步骤,直到被除数为0为止。
2. 查表法:这种方法将被除数和除数都转化为二进制形式,并将其作为查找表的索引。
乘法器和除法器

手工进行乘法运算
×
2 3 4 5 9 8 7 6 11 4 20 27 30
手工进行乘法运算
手工进行乘法运算
×
? ? ? ? ? ? ? ? ? 2 3 4 5 9 8 7 6 114 20 27 30 ? ? ? ? ? ? ? ? ? ? ? ? ??
较为简单的数字
× 1 0 0 0 1 0 0 1 1 0 0 0
Shift right
8-bit Adder
Multiplier
0 1 0 0
4-bit
Write
0 0 0 0 1 0 0 0
8-bit
Product
Control test
乘法器的工作过程(2)
0 0 0 1 0 0 0 0
8-bit Multiplicand
Shift left
第2轮
1 0 0 0 two × 1 0 0 1two
0 0 0
乘积 Product
十进制和二进制运算的选择
采用十进制的ENIAC 采用二进制的EDVAC
十进制和二进制运算的选择
电子管是一种“全或无”设备( allor-none ),适合表示只有两个数值 的系统,即二进制。 二进制可以大幅度地简化乘法和除法 的运算过程。尤其是对于乘法,不再 需要十进制乘法表,也不再需要两轮 的加法。 关于EDVAC的 报告草案 1945 必须要记住,十进制才是适合人使用 约翰· 冯· 诺依曼 的。因此,输入输出设备需要承担二 John Von Neumann 进制和十进制之间的转换工作。 1903~1957
简化后的运算过程
× 0 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 要求:被除数和除数均为八位二进制数,结果以商和余数形式表示。 • 乘法器是以加法形式来实现,而除法器则以比较器和移位寄存器等 来实现,具体的算法如下: • 假设X为被除数,Y为除数,商为S,余数为R,考虑到X不一定能够 被Y整除,因此:(X,Y,S,R均默认为八位二进制数,X为 00000000~11111111,Y为00000001~11111111) • <1>在X之前添加8个0,构成一个被除数A; <2>将A左移一位,成为被除数C,再将Y与C的高8位比较,若C的高8位 大于或等于Y,则商为1,余数为C的高8位与Y之差;反之,商Si为0,余数 Ri为C的高8 位,且将该余数与C的低8位重新组合为新的被除数,重复 <2>的操作8次;(i=7,6,5,4,3,2,1,0) <3>8次操作完后,S为S7S6S5S4S3S2S1S0,R为R0。
流程图
设被除数为X,除数为Y,商为S,余数为R,CNT为计数,从0到7。
开 始
输入X , Y , S = 0, R = 0, CNT = 0
C (15downto0) ← 00000000 & X
C ← C ≪1
C (15downto8) ≥ Y ?
N
Y
R ← C (15downto8) , S(7downto0)=0
R ← C (15downto8) − Y , S& C (7downto0) , C T ←C T+1 N N
CNT > 7 ?
Y N
R ← C (7 downto0) , S ← S7S6S5S4S3S2S1S0
结 束