综合课程设计——两位十进制数加法实验报告
标准实验报告学生姓名:指导教师:一、实验室名称:二、实验项目名称:综合课程设计——两位十进制数加减法的实现三、实验原理:1、FPGA的矩阵键盘开发板上设计了行列式矩阵编码键盘,规模为4*4,可作为外部输入。
其对应管脚分布如下:2、自由按键电路KEY1 对应P102,KEY2 对应P101。
3、拨码开关板上设计了一组8 位的拨码开关,ON为低电平,OFF为高电平。
拨码开关可供用户输入一些高低电平。
4、键盘扫描及数码显示对键盘的扫描分为三步,首先检测由于没有按键按下,然后在有按键按下的情况下,先进行行扫描找出对应按键是哪行按下,接着是对应的列扫描最终确定是哪一个按键。
给对应的按键赋上预先设定的值连接到数码管便能控制数码管显示。
我们需要如下几个信号来实现编写这一部分程序:key_code,用来控制数码管显示相应的值;row,用来控制行扫描;column,用来控制列扫描。
要利用8个数码管显示8个不同的数字,由于此为动态显示,送到每一段的值都一样,利用显示使能en,来控制亮灭,同时提高显示时钟频率,可以实现8位数码管的不同值显示。
5、去抖利用普通的CASE语句编写的程序会出现按键按下值会一直递增的现象,我们需要一个优化的能够实现对长按下的键只记一次。
需要重新自己设定一个去抖参数。
个人思想如下:设定去抖参数qudou,当没有按键按下时其自动置为0,在检测按键时如果同时检测都qudou=0才做对应键值加1的操作且同时把去抖参数置为1;如此便能够实现。
6、两位十进制加减法实现原理加数和被加数的输入由矩阵键盘扫描完成,具体实现是,利用状态机,一个状态来进行加数的输入然后跳转到另一状态,进行被加数的输入,两个数输入完成后,下一状态为显示结果。
同时需要一位来控制是做加法还是减法。
状态机设计,利用VHDL设计有限状态机分为两个定义,三个进程。
两个定义分别用来定义状态变量以及状态机的状态;三个进程分别用来描述状态寄存器状态,状态转移进程以及状态输出。
7、FPGA硬件管脚的配置在实现时首先要做的事是管脚的配置,根据程序的功能来配置管脚从而可以从实验板上观察到所需的状态。
注意每一段的对应以及功能的设置。
四、实验目的:1、进一步熟悉基于FPGA的硬件编程实现;2、掌握如何实效编程;3、熟悉程序基于ISE的仿真以及改错;4、掌握编程驱动FPGA的键盘扫描以及数码显示的方法;5、实现自主创新,编程实现自己的想法,并熟悉利用FPGA硬件实现编程;6、进一步实践前两次实验的理论,全自主掌握管脚配置,程序调试下载并运行,提高动手能力。
五、实验内容:编写程序实现两位十进制数的加减法并用数码管显示,具体功能如下:1、手动从键盘输入两个数;2、具有清零功能;3、能够实现加减法互换。
六、实验器材(设备、元器件):FPGA实验板一块、下载线一套、PC机一台七、实验步骤:1、打开桌面EDA文件夹中的ISE软件,并新建一个ADD_SUB工程;2、在“Sources in Project”子窗口中右击,选择Add Source… ,添加VHDL设计文件,编写程序;3、保存并进行语法检错,若有错误返回修改,直到没有错误提示为止;4、连接好FPGA和下载线套装;5、进行管脚配置,在“Sources in Project”子窗口中右击,选择AddSource… ,选择添加 .ucf 文件,打开所添加的 .ucf 文件在对应的地方输入管脚即可,或者是打开工程文件夹,找到ADD_SUB.ucf文件以文本文档方式打开,在里面编写形如:NET "clk" LOC = "p18" ;(“”中的为信号名称,=后面的为对应管脚)的管脚配置参数,编写完成后保存。
6、把程序进行仿真并载入到FPGA实验板上观察现象是否与理论一致;7、若不符合则,返回修改程序,直到现象符合。
八、实验数据及结果分析:1、实验程序:A、主程序部分library ieee;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity design isport(clk : in std_logic;rst : in std_logic;row : out std_logic_vector(3 downto 0);column : in std_logic_vector(3 DOWNTO 0);dataout : out std_logic_vector(7 DOWNTO 0);en : out std_logic_vector(7 downto 0);add_or_sub : in std_logic;stage : in std_logic);end design;architecture arch of design iscomponent xiaodouport (clk : in std_logic;rst : in std_logic;data_in : in std_logic;data_out : out std_logic);end component;component displayport (num : in std_logic_vector(12 downto 0);en : out std_logic_vector(7 downto 0);dataout : out std_logic_vector(7 downto 0);clk : in std_logic;rst : in std_logic);end component;component keyscanport(clk : in std_logic;rst : in std_logic;row : out std_logic_vector(3 downto 0);column : in std_logic_vector(3 DOWNTO 0);cnt : in std_logic_vector(1 downto 0);dat1 : out std_logic_vector(3 downto 0);dat2 : out std_logic_vector(3 downto 0)); end component;signal cnt : std_logic_vector(1 downto 0);signal dat1 : std_logic_vector(3 downto 0); signal dat2 : std_logic_vector(3 downto 0); signal row_temp : std_logic_vector(3 downto 0); signal dat : std_logic_vector(4 downto 0);signal stage_x : std_logic;signal num : std_logic_vector(12 downto 0);begini1:xiaodouport map(clk,rst,stage,stage_x);process(clk,rst)beginif(rst = '0') thencnt <= "00";elsif(clk'event and clk = '1') thenif(stage_x = '1') thencnt <= cnt + "01";end if;end if;end process;row <= row_temp;process(add_or_sub,dat1,dat2)beginif(add_or_sub = '1') thendat <= ('0'&dat1) + ('0'&dat2);elsedat <= ('0'&dat1) - ('0'&dat2);end if;end process;num(3 downto 0) <= dat1;num(7 downto 4) <= dat2;num(12 downto 8) <= dat;i2:displayport map(num,en,dataout,clk,rst);i3:keyscanport map(clk,rst,row_temp,column,cnt,dat1,dat2);end arch;B、消抖模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity xiaodou isport (clk : in std_logic;rst : in std_logic;data_in : in std_logic;data_out : out std_logic);end xiaodou;architecture arch of xiaodou issignal count : std_logic_vector(20 downto 0);signal data_in_s : std_logic;signal data_in_s_r : std_logic;signal data_in_ctrl : std_logic;beginprocess(clk,rst)beginif(rst = '0') thencount <= "000000000000000000000";data_in_s <= data_in;elsif(clk'event and clk = '1') thencount <= count + "000000000000000000001";if(count = "111111111111111111111") thendata_in_s <= data_in;end if;end if;end process;process(clk)beginif(clk'event and clk = '1') thendata_in_s_r <= data_in_s;end if;end process;data_in_ctrl <= data_in_s_r and (not(data_in_s)); data_out <= data_in_ctrl;end arch;C、显示译码模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity display isport (num : in std_logic_vector(12 downto 0);en : out std_logic_vector(7 downto 0);add_or_sub : in std_logic;dataout : out std_logic_vector(7 downto 0);clk : in std_logic;rst : in std_logic);end display;architecture arch of display isconstant state0 : std_logic_vector(2 downto 0) := "000"; constant state1 : std_logic_vector(2 downto 0) := "001"; constant state2 : std_logic_vector(2 downto 0) := "010"; constant state3 : std_logic_vector(2 downto 0) := "011"; constant state4 : std_logic_vector(2 downto 0) := "100"; constant state5 : std_logic_vector(2 downto 0) := "101"; constant state6 : std_logic_vector(2 downto 0) := "110"; constant state7 : std_logic_vector(2 downto 0) := "111";signal state : std_logic_vector(2 downto 0);signal count : std_logic_vector(15 downto 0);signal dataout_temp : std_logic_vector(3 downto 0);signal num1 : std_logic_vector(7 downto 0);signal num2 : std_logic_vector(7 downto 0);signal num3 : std_logic_vector(7 downto 0);beginprocess(clk,rst)beginif(rst = '0') thenstate <= state0;elsif(clk'event and clk = '1') thencount <= count +"0000000000000001";if(count = "1111111111111111") thencase state iswhen state0 => state <= state1;when state1 => state <= state2;when state2 => state <= state3;when state3 => state <= state4;when state4 => state <= state5;when state5 => state <= state6;when state6 => state <= state7;when state7 => state <= state0;when others => state <= state0;end case;end if;end if;end process;process(num)beginif(num(3 downto 0) > "1001") thennum1(7 downto 4) <= "0001";num1(3 downto 0) <= num(3 downto 0) - "1010";elsenum1(7 downto 4) <= "0000";num1(3 downto 0) <= num(3 downto 0);end if;if(num(7 downto 4) > "1001") thennum2(7 downto 4) <= "0001";num2(3 downto 0) <= num(7 downto 4) - "1010";elsenum2(7 downto 4) <= "0000";num2(3 downto 0) <= num(7 downto 4);end if;if(num(12 downto 8) > "11101") thennum3(7 downto 4) <= "0011";num3(3 downto 0) <= num(11 downto 8) - "1110";elsif(num(12 downto 8) > "10011") thennum3(7 downto 4) <= "0010";num3(3 downto 0) <= num(11 downto 8)-"0100";elsif(num(12 downto 8) > "01001") thennum3(7 downto 4) <= "0001";num3(3 downto 0) <= num(11 downto 8)-"1010";elsenum3(7 downto 4) <= "0000";num3(3 downto 0) <= num(11 downto 8);end if;end process;process(state,num1,num2,num3,add_or_sub)begincase state iswhen state0 =>en <= "11111101";dataout_temp <= num1(3 downto 0);when state1 =>en <= "11111110";dataout_temp <= num1(7 downto 4);when state2 =>en <= "11111011";if(add_or_sub='1')thendataout_temp <= "1010";elsif(add_or_sub='0')thendataout_temp <= "1011";end if;when state3 =>en <= "11101111";dataout_temp <= num2(3 downto 0);when state4 =>en <= "11110111";dataout_temp <= num2(7 downto 4);when state5 =>en <= "11011111";dataout_temp <= "1100";when state6 =>en <= "01111111";dataout_temp <= num3(3 downto 0);when state7 =>en <= "10111111";dataout_temp <= num3(7 downto 4);when others =>NULL;end case;end process;process(dataout_temp)begincase dataout_temp isWHEN "0000" => dataout <= "11000000";WHEN "0001" => dataout <= "11111001";WHEN "0010" => dataout <= "10100100";WHEN "0011" => dataout <= "10110000";WHEN "0100" => dataout <= "10011001";WHEN "0101" => dataout <= "10010010";WHEN "0110" => dataout <= "10000010";WHEN "0111" => dataout <= "11111000";WHEN "1000" => dataout <= "10000000";WHEN "1001" => dataout <= "10011000";when "1010" => dataout <= "10000100";when "1011" => dataout <= "10111111";when "1100" => dataout <= "10110111";WHEN OTHERS => dataout <= "11000000";end case;end process;end arch;D、按键扫描模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity keyscan isport(clk : in std_logic;rst : in std_logic;row : out std_logic_vector(3 downto 0);column : in std_logic_vector(3 DOWNTO 0);cnt : in std_logic_vector(1 downto 0);dat1 : out std_logic_vector(3 downto 0);dat2 : out std_logic_vector(3 downto 0));end keyscan;ARCHITECTURE arch OF keyscan ISSIGNAL div_cnt : std_logic_vector(20 downto 0);SIGNAL scan_key : std_logic_vector(3 DOWNTO 0); --扫描码寄存器SIGNAL key_code : std_logic_vector(3 DOWNTO 0);SIGNAL dataout_tmp : std_logic_vector(7 DOWNTO 0);signal start_delay: std_logic;SIGNAL cnt_delay : std_logic_vector(19 DOWNTO 0); --按键延时计数器BEGINrow <= scan_key;PROCESS(clk,rst)BEGINIF (NOT rst = '1') THENdiv_cnt <= "000000000000000000000";ELSIF(clk'EVENT AND clk = '1')THENif(start_delay='0') thendiv_cnt <= div_cnt + 1;elsediv_cnt <=div_cnt;end if;END IF;END PROCESS;PROCESS(div_cnt(20 downto 19))BEGINCASE div_cnt(20 downto 19) ISWHEN "00"=> scan_key<="1110";WHEN "01"=> scan_key<="1101";WHEN "10"=> scan_key<="1011";WHEN "11"=> scan_key<="0111";when others => NULL;END CASE;END PROCESS;PROCESS(clk,rst)BEGINIF (NOT rst = '1') THENcnt_delay <= "00000000000000000000";ELSIF(clk'event and clk='1')THENIF (start_delay = '1') THENIF (cnt_delay /= "11000011010100000000") THENcnt_delay <= cnt_delay + "00000000000000000001";ELSEcnt_delay <= "00000000000000000000";END IF;END IF;END IF;END PROCESS;process(clk,rst)beginIF (NOT rst = '1') THENkey_code <= "0000";start_delay<='0';ELSIF(clk'EVENT AND clk='1')THENif(cnt_delay = "00000000000000000000" AND ( column="1110" OR column="1101" OR column="1011" OR column="0111")) thenstart_delay <= '1';ELSEIF (cnt_delay = "11000011010100000000") THENstart_delay <= '0';CASE scan_key IS --检测何处有键按下WHEN "1110" =>CASE column ISWHEN "1110" =>key_code <= "0000";WHEN "1101" =>key_code <= "0001";WHEN "1011" =>key_code <= "0010";WHEN "0111" =>key_code <= "0011";WHEN OTHERS =>NULL;END CASE;WHEN "1101" =>CASE column ISWHEN "1110" =>key_code <= "0100";WHEN "1101" =>key_code <= "0101";WHEN "1011" =>key_code <= "0110";WHEN "0111" =>key_code <= "0111";WHEN OTHERS =>NULL;END CASE;WHEN "1011" =>CASE column ISWHEN "1110" =>key_code <= "1000";WHEN "1101" =>key_code <= "1001";WHEN "1011" =>key_code <= "1010";WHEN "0111" =>key_code <= "1011";WHEN OTHERS =>NULL;END CASE;WHEN "0111" =>CASE column ISWHEN "1110" =>key_code <= "1100";WHEN "1101" =>key_code <= "1101";WHEN "1011" =>key_code <= "1110";WHEN "0111" =>key_code <= "1111";WHEN OTHERS =>NULL;END CASE;WHEN OTHERS =>key_code <= "1111";END CASE;end if;end if;end if;end process;process(cnt,rst,key_code)beginif(rst = '0') thendat1 <= "0000";dat2 <= "0000";elseif(cnt = "00") thendat1 <= key_code;elsif(cnt = "01") thendat2 <= key_code;end if;end if;end process;END arch;2、管脚配置NET "clk" LOC = "p18" ;NET "add_or_sub" LOC = "p100" ; NET "column<0>" LOC = "p134" ; NET "column<1>" LOC = "p131" ; NET "column<2>" LOC = "p132" ; NET "column<3>" LOC = "p130" ; NET "dataout<0>" LOC = "p140" ; NET "dataout<1>" LOC = "p139" ; NET "dataout<2>" LOC = "p141" ; NET "dataout<3>" LOC = "p4" ;NET "dataout<4>" LOC = "p5" ;NET "dataout<5>" LOC = "p6" ;NET "dataout<6>" LOC = "p7" ;NET "dataout<7>" LOC = "p10" ; NET "en<0>" LOC = "p21" ; NET "en<1>" LOC = "p20" ; NET "en<2>" LOC = "p19" ; NET "en<3>" LOC = "p11" ; NET "en<4>" LOC = "p12" ; NET "en<5>" LOC = "p13" ; NET "en<6>" LOC = "p22" ; NET "en<7>" LOC = "p23" ; NET "row<0>" LOC = "p126" ; NET "row<1>" LOC = "p129" ;NET "row<2>" LOC = "p123" ;NET "row<3>" LOC = "p124" ;NET "rst" LOC = "p102" ;NET "stage" LOC = "p101" ;3、实验图片九、实验结论:1、通过重新设定一个去抖参数能够有效快捷的实现去抖功能;2、程序的FPGA硬件实现需要对其内部管脚进行编码;3、在将程序烧录到FPGA板子上时特别注意对应位流文件要选择正确;4、提高显示时钟频率能够让动态显示数码管显示不同的数值;5、利用状态机有效地实现了,分时的输入数值和显示功能;6,在综合时ISE软件会自动的综合掉对输出没有影响的信号。
实验二多位十进制数加法实验
实验二多位十进制数加法实验
一、实验目的
1.熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序的过程。
2.掌握数据传送和算术运算指令的用法。
3.熟悉和掌握用DEBUG调试程序的方法。
二、实验内容
将两个多位十制数4678和2556相加,要求加数和被加数均以ASCII码形式各自顺序存放在以DATAl和DATA2为首的5个内存单元中(低位在前),结果送回DATAl处,并显示结果。
操作步骤:
打开MASM文件夹,检查我们要用到的四个文件EDIT ,MASM.EXE,LINK.EXE,DEBUG 。
1.进入EDIT编辑环境建立和修改汇编源程序文件(文件名要以.ASM结尾)
2.用MASM命令汇编源文件以产生相应的目标文件(OBJ文件)
3.用LINK命令连接目标文件以产生可执行文件(EXE文件)
4.用DEBUG调试,记录调试过程,
5. 运行可执行程序。
相关中断调用表
三、实验报告要求
1.整理运行正确的源程序,加上注释。
2.写出程序运行结果。
3.总结应用DEBUG调试程序的方法。
4.回答思考题。
两位二进制十进制加法电路课设
两位二进制十进制加法电路课设摘要:一、引言二、二进制与十进制的概念1.二进制2.十进制三、二进制与十进制的转换方法1.二进制转十进制2.十进制转二进制四、二进制与十进制的加法运算1.二进制加法2.十进制加法五、二进制与十进制加法电路的设计1.二进制加法电路2.十进制加法电路六、总结与展望正文:两位二进制十进制加法电路课设随着现代电子技术的飞速发展,数字电路在各个领域得到了广泛应用。
其中,二进制与十进制这两种数字系统在计算机科学中尤为重要。
本文将详细介绍二进制与十进制的相关概念,以及如何进行转换和加法运算,并设计出两位二进制十进制加法电路。
首先,我们需要了解二进制与十进制的概念。
二进制是一种基于2的数制系统,仅使用0和1两个数字来表示数值。
它的基数为2,每一位的权值是2的相应次方。
十进制则是一种基于10的数制系统,我们日常生活中常用的数字系统就是十进制。
它的基数为10,每一位的权值是10的相应次方。
接下来,我们来探讨如何将二进制与十进制进行转换。
二进制转十进制的方法是将二进制数的每一位乘以2的相应次方,然后求和。
十进制转二进制的方法是不断除以2,记录下余数,直到商为0为止,然后将余数倒序排列即可得到二进制数。
二进制与十进制的加法运算可以通过按位相加的方法进行。
对于二进制加法,我们只需要将对应位的数字相加,进位则向左移动一位。
对于十进制加法,我们同样需要将对应位的数字相加,进位则向左移动一位。
最后,我们来设计两位二进制十进制加法电路。
这里我们分别设计二进制加法电路和十进制加法电路。
电路中需要使用与门、或门、非门等基本逻辑门,以及寄存器、计数器等组件。
具体实现过程可以参考数字电路相关教材或网络资源。
总之,本文详细介绍了二进制与十进制的概念、转换方法以及加法运算,并设计出了两位二进制十进制加法电路。
太原理工大学EDA实验报告-2位十进制加法器
实验报告课程名称:EDA技术与FPGA应用设计课设题目:2位十进制计数器实验地点:信息学院楼CPLD实验室专业班级:学号:学生姓名:指导教师:张文爱2016年4月1日实验二2位十进制计数器一、实验目的1.熟悉ispDesignEXPERT System、QuartusII的原理图设计流程的全过程。
2.学习简单时序电路的设计方法。
3.学习EDA设计的仿真和硬件测试方法。
二、实验原理2位十进制计数器参考原理图如图1所示,也可以采用其他元件实现。
图1.用74LS390设计一个有时钟使能的2位十进制计数器三、实验任务(1)设计2位十进制计数器电路。
(2)在EDA环境中输入原理图。
(3)对计数器进行仿真分析、引脚锁定、硬件测试。
四、实验步骤1、设计电路原理图设计含有时钟使能及进位扩展输出的十进制计数器。
可以选用双十进制计数器74LS390或者十进制计数器74LS160和其他一些辅助元件来完成。
2、计数器电路的实现。
绘制过程中应特别注意图形设计规则中信号标号和总线的表达方式。
若将一根细线变成一粗线显示的总线,可以先单机使其变红,再选Option选项中的Line Style;若在某线上加信号标号,也应该点击该线某处使其变成红色,然后键入标号名称,标有相同标号的线段可视为连接线段,不必直接连接。
总线可以以标号方式进行连接。
3、编程测试。
五、实验结果图2.用74LS390设计一个有时钟使能的2位十进制计数器六、实验感想通过本次实验学会了简单时序电路的设计方法。
学会了使用QuartusII软件调用元器件库进行原理图设计的方法和设计流程。
这次实验让我学会了用FPGA设计电路并且学会了FPGA的设计过程和实现方法。
提高了动手能力,加深了对所学知识的理解。
这次EDA实验,提高了动手能力,加深了对所学知识的理解。
综合课程设计——两位十进制数加法实验报告DOC
标准实验报告学生姓名:指导教师:一、实验室名称:二、实验项目名称:综合课程设计——两位十进制数加减法的实现三、实验原理:1、FPGA的矩阵键盘开发板上设计了行列式矩阵编码键盘,规模为4*4,可作为外部输入。
其对应管脚分布如下:2、自由按键电路KEY1 对应P102,KEY2 对应P101。
3、拨码开关板上设计了一组8 位的拨码开关,ON为低电平,OFF为高电平。
拨码开关可供用户输入一些高低电平。
4、键盘扫描及数码显示对键盘的扫描分为三步,首先检测由于没有按键按下,然后在有按键按下的情况下,先进行行扫描找出对应按键是哪行按下,接着是对应的列扫描最终确定是哪一个按键。
给对应的按键赋上预先设定的值连接到数码管便能控制数码管显示。
我们需要如下几个信号来实现编写这一部分程序:key_code,用来控制数码管显示相应的值;row,用来控制行扫描;column,用来控制列扫描。
要利用8个数码管显示8个不同的数字,由于此为动态显示,送到每一段的值都一样,利用显示使能en,来控制亮灭,同时提高显示时钟频率,可以实现8位数码管的不同值显示。
5、去抖利用普通的CASE语句编写的程序会出现按键按下值会一直递增的现象,我们需要一个优化的能够实现对长按下的键只记一次。
需要重新自己设定一个去抖参数。
个人思想如下:设定去抖参数qudou,当没有按键按下时其自动置为0,在检测按键时如果同时检测都qudou=0才做对应键值加1的操作且同时把去抖参数置为1;如此便能够实现。
6、两位十进制加减法实现原理加数和被加数的输入由矩阵键盘扫描完成,具体实现是,利用状态机,一个状态来进行加数的输入然后跳转到另一状态,进行被加数的输入,两个数输入完成后,下一状态为显示结果。
同时需要一位来控制是做加法还是减法。
状态机设计,利用VHDL设计有限状态机分为两个定义,三个进程。
两个定义分别用来定义状态变量以及状态机的状态;三个进程分别用来描述状态寄存器状态,状态转移进程以及状态输出。
两位二进制十进制加法电路课设
两位二进制十进制加法电路课设【最新版】目录1.引言2.二进制加法电路的原理3.二进制加法电路的设计与实现4.十进制加法电路的原理5.十进制加法电路的设计与实现6.总结正文1.引言在计算机科学中,加法电路是一个基本的组件。
它可以实现两个二进制数的加法运算。
本课程设计项目旨在让学生设计和实现两位二进制加法电路和两位十进制加法电路。
通过这个项目,学生可以深入理解计算机中加法运算的原理和实现方法。
2.二进制加法电路的原理二进制加法电路是一种简单的加法电路,它可以实现两个二进制数的加法运算。
在二进制加法电路中,只有两个输入信号,即两个二进制数,以及一个输出信号,即两个二进制数的和。
根据输入信号的不同组合,输出信号可以是 0 或 1。
3.二进制加法电路的设计与实现设计二进制加法电路时,需要考虑以下几个方面:首先,需要为输入信号和输出信号选择合适的电子元件,例如晶体管或电阻;其次,需要设计电路的逻辑门,以实现输入信号的逻辑运算;最后,需要设计电路的布线,以连接各个电子元件。
实现二进制加法电路时,需要按照设计图纸,将电子元件焊接到电路板上,并连接各个电子元件的引脚。
在焊接电子元件时,需要注意焊接的牢固度和连接的正确性。
4.十进制加法电路的原理十进制加法电路是一种复杂的加法电路,它可以实现两个十进制数的加法运算。
在十进制加法电路中,有十个输入信号,即两个十进制数的各个位数,以及一个输出信号,即两个十进制数的和。
根据输入信号的不同组合,输出信号可以是 0 到 9 中的任何一个数字。
5.十进制加法电路的设计与实现设计十进制加法电路时,需要考虑以下几个方面:首先,需要为输入信号和输出信号选择合适的电子元件,例如晶体管或电阻;其次,需要设计电路的逻辑门,以实现输入信号的逻辑运算;最后,需要设计电路的布线,以连接各个电子元件。
实现十进制加法电路时,需要按照设计图纸,将电子元件焊接到电路板上,并连接各个电子元件的引脚。
在焊接电子元件时,需要注意焊接的牢固度和连接的正确性。
十进制加减法数字电路课程设计报告
设计名称:设计一个一位十进制加减法器 设计内容:1、0-9十个字符和“+”“-”分别对应一个按键,用于数据输入。
2、用一个开关控制加减法器的开关状态。
3、要求在数码显示管上显示结果。
设计目的与要求:1、学习数字逻辑等电路设计方法,熟知加减法器、编码器、译码显示的工作原理及特点;2、培养勤奋认真、分析故障和解决问题的能力。
设计环境或器材、原理与说明:环境:利用多功能虚拟软件Multism8进行电路的制作、调试,并生成文件。
器材:74LS283或者4008, 4个异或门(一片74LS86)(减法);74LS08,3输入或门(加法)设计原理:图1分析:如图1所示,第一步置入两个四位二进制数(要求置入的数小于1010),如(1001)2和(0111)2,同时在两个七段译码显示器上显示出对应的十进制数9和7;第二步通过开关选择运算方式加或者减;第三步,若选择加运算方式,所置数送入加法运算电路进行运算,同理若选择减运算方式,则所置数送入减法运算电路运算;第四步,前面所得结果通过另外两个七段译码器显示。
设计过程(步骤)或程序代码: 实验电路:1:减法电路的实现:(1):原理:如图1所示(如下),该电路功能为计算A-B 。
若n 位二进制原码为N 原,则与它相对应的补码为N 补=2n -N 原,补码与反码的关系式为N 补=N 反+1,A-B=A+B补-2n=A+B反+1-2n(2):因为B○+1= B非,B○+0=B,所以通过异或门74LS86对输入的数B求其反码,并将进位输入端接逻辑1以实现加1,由此求得B的补码。
加法器相加的结果为:A+B反+1,(3):由于2n=24=(10000)2,相加结果与相2n减只能由加法器进位输出信号完成。
当进位输出信号为1时,它与2n的差为0;当进位输出信号为0时,它与2n差值为1,同时还要发出借位信号。
因为设计要求被减数大于或等于减数,所以所得的差值就是A-B差的原码,借位信号为0。
十进制加法计数器课程设计
实验十九 计数、译码、显示电路一、实验目的1、掌握中规模集成计数器74LS90的逻辑功能。
2、学习使用74LS48、BCD译码器和共阴极七段显示器。
3、熟悉用示波器测试计数器输出波形的方法。
二、 实验原理计数、译码、显示电路是由计数器、译码器和显示器三部分电路组成的,下面分别加以介绍。
1、计数器:计数器是一种中规模集成电路,其种类有很多。
如果按各触发器翻转的次序分类,计数器可分为同步计数器和异步计数器两种;如果按照计数数字的增减可分为加法计数器、减法计数器和可逆计数器三种;如果按计数器进位规律可分为二进制计数器、十进制计数器、可编程N进制计数器等多种产品。
常用计数器均有典型产品,不须自己设计,只要合理选用即可。
本实验选用74LS90二—五进制计数器,其功能如下表所示。
6263(1) R 0(1)和R 0(2)为直接复位端,R 9(1)和R 9(2)为直接置位端,可以预置数字“9”(Q D = Q A = 1,Q B = Q C = 0)。
(2) A 为二分频计数器的输入,Q A 的输出频率为CP A 的1/2。
B 为五进制计数器的输入,把Q A 输出作为五进制计数器B 的输入,即构成8421BCD 码十进制计数器。
2、 译码器:这里所说的译码器是将二进制数译成十进制数的器件。
我们选用的74LS48是BCD 码七段译码器兼驱动器。
其外引线排列图和功能表如下所示。
1234567891011121314GNDVCC 74LS48B1615CLTBI/RBORBIDAgabcdef十进制数 或功能输 入LT RBI D C B A 0123H H H H H X X X L L L L L L L H L L H L L L H H BI/RBO H H H H 输 出a b c d e f g H H H H H H L L H H L L L L H H L H H L H H H H H L L H 字 型注4567H H H H X X X X L H L L L H L H L H H L L H H H H H H H L H H L L H H H L H H L H H L L H H H H H H H H L L L L H H H X X X H L L L H L L H H L H L H H H H H H H H H H H H H L L H H L L L H H L H L L H H L L H 891011H X H L H H H H H H X X X H H L L H H L H H H H L H H H L H L L L H H H L L H L H H L L L H H H H L L L L L L L 12131415H X H H H H H 1BI RBI LTX H LX XL X X X X X X X XL L L L L L HL L L L L L L L L L L L L L H H H H H H H2 34(1) 要求输出数字0~15时,“灭灯输入”(BI )必须开路或保持高电平。
微机实验-2(多精度十进制加法程序设计)
实验内容及要求
2、完成程序的设计、调试程序并学习 DEBUG工具的D命令、E命令、F命令、R 命令、G命令、U命令、单T命令、N命令、 L命令、Q命令等常用调试命令的使用,运 L Q 行程序并记录结果。 3、完成实验报告。
实验内容及要求
编程思路
该题目要求掌握加法ADD、ADC指令和十进制 调整DAA指令的应用和循环程序的编程方法。为 了实现指定功能,应从以下几个方面考虑: 【1】组织数据时,要按照高位在高地址,低位在 低地址的原则。 【2】完成多精度字节数据相加运算,最低字节用 ADD指令,而其它高位字节则要用ADC指令。 还要考虑最后的进位位存储。
实验内容及要求
1、编写程序将内存两个多精度十进制数相加。 4619534937+2531498790 = 11151033727 要求被加数和加数均以压缩BCD码形式分别存放在 以DATA1和DATA2为首的连续5个字节单元中,结果 送以RESULT为首存储区。 已知变量DATA1和DATA2定义如下: DATA1 DB 37H,49H,53H,19H,46H ;被加数 DATA2 DB 90H,87H,49H,31H,65H ;加数 RESULT DB 6 DUP(?) ;结果
十进制加法计数器高精度加法微机原理实验微机实验报告微机接口实验报告微机原理实验报告微机实验微机原理实验答案南邮微机实验东南大学微机实验
实验二 多精度十进制 加法程序设计
实验目的
1、学习数据传送和算术运算指令的用 法。 2、学习循环程序编程方法。 3、掌握多字节加法计算程序的设计方 法。 4、学会使用DEBUG工具调试程序。
实验内容及要求
【3】因为被加数和加数都以压缩BCD码表示,所以 在加法指令之后要有压缩BCD码加法调整指令DAA。 【4】题目要求完成5个字节十进制数相加,所以应 采用循环程序结构。 【5】 程序结束时应使用DOS系统功能调用返回系统 提示符。即程序代码段的最后两条指令应是: MOV AH,4CH INT 21H
微机原理实验报告多位十进制数相加程序
本科实验报告课程名称:微机原理及接口技术课题项目:多为十进制数相加程序专业班级:电科1201 学号:2012001610 学生姓名:王天宇指导教师:任光龙2015年5月23日实验一多位十进制数相加程序一、实验目的学习数据传送和算术运算指令的用法二、实验内容将两个多位十进制数28056、47193相加,并显示加数、被加数、和。
要求两个加数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)三、程序流程图开始显示加数和被加数加数和被加数由ASCⅡ码表示转化为十六进制计数值5-->CX清除最低位进位执行ADC带进位相加AAA调整调整偏移量显示加数和被加数NCX-1=0Y将十六进制结果转化为ASCⅡ码表示的数字显示结果结束四、实验程序SHOW MACRO BMOV DL,BMOV AH,02HINT 21HENDMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34HDATA2 DB 36H,35H,30H,38H,32HDATA3 DB '__',0DH,0AH,'$'DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA2MOV BX,05SHOW 20HCALL DISPLSHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1 MOV BX,05SHOW 2BHCALL DISPLSHOW 0DHSHOW 0AHMOV CL,7S1: SHOW 2DHLOOP S1SHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 CALL ADDAMOV SI,OFFSET DATA1 MOV BX,05SHOW 20HCALL DISPLMOV AX,4C00HINT 21HDISPL PROC NEARDS1: SHOW [SI+BX-1]DEC BXJNZ DS1RETDISPL ENDPADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05AD1: SUB BYTE PTR [SI+BX-1],30H SUB BYTE PTR [DI+BX-1],30H DEC BXJNZ AD1MOV SI,DXMOV DI,BPMOV CX,05CLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALINC SIINC DILOOP AD2MOV SI,DXMOV DI,BPMOV BX,05AD3: ADD BYTE PTR [SI+BX-1],30H ADD BYTE PTR [DI+BX-1],30H DEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五、实验步骤1、在windows环境下,打开“开始”菜单,选择“运行”项,然后输入”CMD”,按“确定”进去DOS环境。
两个多位十进制数相加实验
实验一两个多位十进制数相加实验一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程二、实验要求1 独立完成每个实验项目2 按照程序流程图编好实验程序三程序框图Array加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验二将键盘输入的小写字母转换成大写字母一实验目的了解小写字母和大写字母在计算机内的表示方法,学习如何转换二、实验要求1 独立完成每个实验项目2三程序框架加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验三输入字符一实验目的1学习数据传送及算术运算指令的用法2 进一步熟悉汇编语言上机过程加程序四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在软件上调试实验程序3 写出实验结果实验四8255A并行口实验一、实验目的加深理解逐次逼近法模数转换器的特征和工作原理,掌握ADC0809的接口方法以及A/D输入程序的设计和调试方法。
二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。
三、实验原理PC口8位接8个开关K1~ K8,PB口8位接8个发光二极管,从PC口读入8位开关量送PB口显示。
拨动K1~ K8,PB口上接的8个发光二极管L1~ L8对应显示K1~ K8的状态。
程序:CODE SEGMENTASSUME CS:CODEIOCONPT EQU 0073HIOAPT EQU 0070HIOBPT EQU 0071HIOCPT EQU 0072HIOBDATA EQU 0500HCONTPORT EQU 00DFHDATAPORT EQU 00DEHDATA1 EQU 0640HSTART: J MP IOLEDIOLED: CALL FORMATCALL LEDDISPMOV DS,AXMOV AL,82HMOV DX,IOCONPTOUT DX,ALMOV DX,IOBPTIN AL,DXMOV BYTE PTR DS:[0501H],ALMOV DX,IOCONPTMOV AL,80HOUT DX,ALMOV DX,IOBPTMOV AL,DS:[0501H]OR AL,0F0HOUT DX,ALMOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY1IOLED0: MOV AL,10100101BMOV DX,IOCPTOUT DX,ALCALL DELAY1CALL DELAY1OR AL,0F0HOUT DX,ALMOV CX,8HIOLED1: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,10101111BOUT DX,ALCALL DELAY2OR AL,01010000BOUT DX,ALCALL DELAY2LOOP IOLED1MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2MOV AL,01011010BOUT DX,ALCALL DELAY1CALL DELAY1OUT DX,ALMOV CX,8HIOLED2: MOV DX,IOBPTMOV AL,DS:[0501H]AND AL,01011111BOUT DX,ALCALL DELAY2OR AL,10100000BOUT DX,ALCALL DELAY2LOOP IOLED2MOV DX,IOCPTMOV AL,0F0HOUT DX,ALCALL DELAY2JMP IOLED0DELAY1: PUSH AXPUSH CXMOV CX,0030HDELY2: CALL DELAY2LOOP DELY2POP CXPOP AXRETDELAY2: PUSH CXMOV CX,8000HDELA1: LOOP DELA1POP CXRETLEDDISP:MOV AL,90HMOV DX,CONTPORTOUT DX,ALMOV BYTE PTR DS:[0600H],00 LED1: CMP BYTE PTR DS:[0600H],07H JA LED2MOV BL,DS:[0600H]MOV BH,0HMOV AL,CS:[BX+DATA1]MOV DX,DATAPORTOUT DX,ALADD BYTE PTR DS:[0600H],01HJNZ LED1LED2: RETFORMAT: MOV BX,0MOV WORD PTR DS:[BX+0640H],405BHADD BX,2MOV WORD PTR DS:[BX+0640H],4040HADD BX,2MOV WORD PTR DS:[BX+0640H],6D6DHADD BX,2MOV WORD PTR DS:[BX+0640H],7F5BHRETCODE ENDSEND START四、实验所用仪器计算机电源DVCC——8086 实验箱一台五、实验步骤和方法1 独立编好程序2 在实验机箱上连好实验线路3 观察实验现象4 分析实验结果实验五8259中断控制器实验一、实验目的1.掌握8259中断控制器的接口方法.2.掌握8259中断控制器的应用编程.二、实验要求1 理解实验程序2 掌握各个芯片的原理和使用方法。
