一、实验原理
1.1 补码
正数:
例:+10的补码是00001010。(备注:这个+10的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)
负数
求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是,然而在16位二进制补码表示中,就是10001。以下都使用8位2进制来表示。
0的补码
数0的补码表示是唯一的。
[+0]补=[+0]反=[+0]原=00000000
[ -0]补=+1=00000000
1.2 求补器
求补器的概念:正数的原码与补码形式相同,直接由输入信号通过求补电路的输入端送至输出out;负数的补码是符号位不变原码的绝对值部分求反加1之后,输出out。
求补电路如下:
电路初始图:
二、实验内容:
1、熟悉LogiSim环境
2、设计一个求补器
三、八位求补器(第8位是符号位)电路测试
示例一:正数
输入:0000 0001 结果:0000 0001
正数的补码与原码相同。
示例二:负数
输入:1000 1001结果:1111 0110
负数的补码由原码各位取反加一得到。
源代码:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <project source="2.7.1" version="1.0"> This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/). <lib desc="#Wiring" name="0"/> <lib desc="#Gates" name="1"/> <lib desc="#Plexers" name="2"/> <lib desc="#Arithmetic" name="3"/> <lib desc="#Memory" name="4"/> <lib desc="#I/O" name="5"/> <lib desc="#Base" name="6"> <tool name="Text Tool"> <a name="text" val=""/> <a name="font" val="SansSerif plain 12"/> <a name="halign" val="center"/> <a name="valign" val="base"/> </tool> </lib> <main name="main"/> <options> <a name="gateUndefined" val="ignore"/> <a name="simlimit" val="1000"/> <a name="simrand" val="0"/> </options> <mappings> <tool lib="6" map="Button2" name="Menu Tool"/> <tool lib="6" map="Button3" name="Menu Tool"/> <tool lib="6" map="Ctrl Button1" name="Menu Tool"/> </mappings> <toolbar> <tool lib="6" name="Poke Tool"/> <tool lib="6" name="Edit Tool"/> <tool lib="6" name="Text Tool"> <a name="text" val=""/> <a name="font" val="SansSerif plain 12"/> <a name="halign" val="center"/> <a name="valign" val="base"/> </tool> <sep/> <tool lib="0" name="Pin"> <a name="tristate" val="false"/> </tool> <tool lib="0" name="Pin"> <a name="facing" val="west"/> <a name="output" val="true"/> <a name="labelloc" val="east"/> </tool> <tool lib="1" name="NOT Gate"/> <tool lib="1" name="AND Gate"/> <tool lib="1" name="OR Gate"/> </toolbar> <circuit name="main"> <a name="circuit" val="main"/> <a name="clabel" val=""/> <a name="clabelup" val="east"/> <a name="clabelfont" val="SansSerif plain 12"/> <wire from="(680,600)" to="(680,610)"/> <wire from="(930,370)" to="(980,370)"/> <wire from="(970,590)" to="(970,730)"/> <wire from="(810,340)" to="(810,540)"/> <wire from="(810,810)" to="(810,820)"/> <wire from="(880,840)" to="(880,850)"/> <wire from="(440,160)" to="(440,430)"/> <wire from="(980,370)" to="(980,440)"/> <wire from="(520,130)" to="(520,330)"/> <wire from="(830,790)" to="(830,820)"/> <wire from="(860,730)" to="(860,820)"/> <wire from="(1000,160)" to="(1000,440)"/> <wire from="(520,330)" to="(520,540)"/> <wire from="(280,160)" to="(280,440)"/> <wire from="(860,730)" to="(970,730)"/> <wire from="(830,740)" to="(850,740)"/> <wire from="(1000,160)" to="(1150,160)"/> <wire from="(500,330)" to="(520,330)"/> <wire from="(610,790)" to="(830,790)"/> <wire from="(540,610)" to="(610,610)"/> <wire from="(90,820)" to="(800,820)"/> <wire from="(1100,360)" to="(1100,530)"/> <wire from="(850,490)" to="(850,540)"/> <wire from="(350,350)" to="(410,350)"/> <wire from="(230,150)" to="(1190,150)"/> <wire from="(680,610)" to="(730,610)"/> <wire from="(1150,160)" to="(1150,440)"/> <wire from="(500,350)" to="(550,350)"/> <wire from="(1180,160)" to="(1180,380)"/> <wire from="(390,330)" to="(390,530)"/> <wire from="(690,350)" to="(730,350)"/> <wire from="(710,160)" to="(710,440)"/> <wire from="(550,350)" to="(550,440)"/> <wire from="(410,590)" to="(410,800)"/> <wire from="(90,160)" to="(90,820)"/> <wire from="(660,120)" to="(660,340)"/> <wire from="(250,590)" to="(250,810)"/> <wire from="(730,770)" to="(840,770)"/> <wire from="(840,360)" to="(840,440)"/> <wire from="(350,330)" to="(390,330)"/> <wire from="(410,350)" to="(450,350)"/> <wire from="(1130,380)" to="(1180,380)"/> <wire from="(410,800)" to="(820,800)"/> <wire from="(710,160)" to="(860,160)"/> <wire from="(280,160)" to="(440,160)"/> <wire from="(520,130)" to="(1190,130)"/> <wire from="(810,110)" to="(810,340)"/> <wire from="(1130,380)" to="(1130,440)"/> <wire from="(870,760)" to="(870,820)"/> <wire from="(430,480)" to="(430,530)"/> <wire from="(860,160)" to="(1000,160)"/> <wire from="(560,490)" to="(560,540)"/> <wire from="(1120,590)" to="(1120,760)"/> <wire from="(390,140)" to="(390,330)"/> <wire from="(1080,360)" to="(1100,360)"/> <wire from="(840,770)" to="(840,820)"/> <wire from="(230,150)" to="(230,530)"/> <wire from="(540,600)" to="(540,610)"/> <wire from="(810,110)" to="(1190,110)"/> <wire from="(870,760)" to="(1120,760)"/> <wire from="(250,350)" to="(300,350)"/> <wire from="(860,160)" to="(860,440)"/> <wire from="(820,800)" to="(820,820)"/> <wire from="(850,740)" to="(850,820)"/> <wire from="(1080,380)" to="(1130,380)"/> <wire from="(660,120)" to="(1190,120)"/> <wire from="(390,140)" to="(1190,140)"/> <wire from="(990,490)" to="(990,530)"/> <wire from="(1180,160)" to="(1190,160)"/> <wire from="(780,340)" to="(810,340)"/> <wire from="(730,610)" to="(730,770)"/> <wire from="(270,490)" to="(270,530)"/> <wire from="(950,100)" to="(950,350)"/> <wire from="(1100,90)" to="(1190,90)"/> <wire from="(440,160)" to="(570,160)"/> <wire from="(950,350)" to="(950,530)"/> <wire from="(570,160)" to="(710,160)"/> <wire from="(610,610)" to="(610,790)"/> <wire from="(830,600)" to="(830,740)"/> <wire from="(980,370)" to="(1030,370)"/> <wire from="(660,340)" to="(660,540)"/> <wire from="(90,160)" to="(280,160)"/> <wire from="(640,350)" to="(690,350)"/> <wire from="(780,360)" to="(840,360)"/> <wire from="(570,160)" to="(570,440)"/> <wire from="(690,350)" to="(690,440)"/> <wire from="(550,350)" to="(590,350)"/> <wire from="(250,810)" to="(810,810)"/> <wire from="(840,360)" to="(880,360)"/> <wire from="(410,350)" to="(410,430)"/> <wire from="(250,350)" to="(250,440)"/> <wire from="(950,100)" to="(1190,100)"/> <wire from="(1100,90)" to="(1100,360)"/> <wire from="(930,350)" to="(950,350)"/> <wire from="(640,340)" to="(660,340)"/> <wire from="(1150,160)" to="(1180,160)"/> <wire from="(700,490)" to="(700,540)"/> <wire from="(1140,490)" to="(1140,530)"/> <comp lib="1" loc="(250,590)" name="XOR Gate"> <a name="facing" val="south"/> </comp> <comp lib="0" loc="(880,840)" name="Splitter"> <a name="facing" val="north"/> <a name="fanout" val="8"/> <a name="incoming" val="8"/> </comp> <comp lib="1" loc="(990,490)" name="AND Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(1030,370)" name="OR Gate"> <a name="facing" val="west"/> <a name="label" val="c0"/> </comp> <comp lib="1" loc="(700,490)" name="AND Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(430,480)" name="AND Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(730,350)" name="OR Gate"> <a name="facing" val="west"/> <a name="label" val="c2"/> </comp> <comp lib="1" loc="(970,590)" name="XOR Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(880,360)" name="OR Gate"> <a name="facing" val="west"/> <a name="label" val="c1"/> </comp> <comp lib="1" loc="(270,490)" name="AND Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(850,490)" name="AND Gate"> <a name="facing" val="south"/> </comp> <comp lib="0" loc="(1210,80)" name="Splitter"> <a name="facing" val="west"/> <a name="fanout" val="8"/> <a name="incoming" val="8"/> </comp> <comp lib="0" loc="(880,850)" name="Pin"> <a name="facing" val="north"/> <a name="output" val="true"/> <a name="width" val="8"/> <a name="labelloc" val="east"/> </comp> <comp lib="1" loc="(410,590)" name="XOR Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(300,350)" name="OR Gate"> <a name="facing" val="west"/> <a name="label" val="c5"/> </comp> <comp lib="1" loc="(560,490)" name="AND Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(1120,590)" name="XOR Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(830,600)" name="XOR Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(450,350)" name="OR Gate"> <a name="facing" val="west"/> <a name="label" val="c4"/> </comp> <comp lib="1" loc="(680,600)" name="XOR Gate"> <a name="facing" val="south"/> </comp> <comp lib="1" loc="(1140,490)" name="AND Gate"> <a name="facing" val="south"/> </comp> <comp lib="6" loc="(1271,52)" name="Text"> <a name="text" val="输入"/> </comp> <comp lib="6" loc="(794,867)" name="Text"> <a name="text" val="输出"/> </comp> <comp lib="0" loc="(1210,80)" name="Pin"> <a name="facing" val="west"/> <a name="width" val="8"/> <a name="tristate" val="false"/> </comp> <comp lib="1" loc="(590,350)" name="OR Gate"> <a name="facing" val="west"/> <a name="label" val="c3"/> </comp> <comp lib="1" loc="(540,600)" name="XOR Gate"> <a name="facing" val="south"/> </comp> </circuit> </project>
今天的文章
基于logisim的八位求补器的设计与实现分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/81011.html