tag 标签: 二进制

相关博文
  • 热度 6
    2023-4-26 15:32
    1149 次阅读|
    0 个评论
    自20世纪中叶半导体问世以来,晶体管体积不断缩小,应用领域也从实验室转移到我们日常使用的普通设备上。而在这一过程中就隐藏着数字电路世界的二进制秘密。 二进制是什么? 所有电子产品的基础逻辑是逻辑电路(与或非门),这个又是基于二进制作为原理:最简单的就是1代表通路;0代表开路。 那我们如何用二进制来保存信息呢?首先,我们可以把任何一件事情,用有限个“是非题”来表示。 1两个数码,但它的每一位都可以用电子元件来实现,且运算规则简单,相应的运算电路也容易实现。通过“是”与“不是”,就可以实现任何一种描述。这就是二进制的精髓,简单明了,绝不会产生异议。 利用二进制的这一特性,我们创建了一套逻辑门,所谓门就是一种开关,它能按照一定的条件去控制信号的通过或不通过,门电路的输入与输出之间存在一定的逻辑关系,所以门电路又被称为逻辑门电路。 什么是半导体? 简单来说,半导体就是介于导体和绝缘体中间的一种东西,比如二极管。 (注:二极管是用半导体材料(硅、硒、锗等)制成的一种电子器件 。 它具有单向导电性能, 即给二极管阳极和阴极加上正向电压时,二极管导通。 当给阳极和阴极加上反向电压时,二极管截止。 因此,二极管的导通和截止,则相当于开关的接通与断开。)3 电流可以从A端流向C端,但反过来则不行。你可以把它理解成一种防止电流逆流的东西。 利用半导体的这一特性,我们可以制作一些有趣的电路,比如【与门】。 3参考来源: https://baike.baidu.com/item/%E4%BA%8C%E6%9E%81%E7%AE%A1 (注:上图左侧是由二极管组成的与门电路,图中A、B为输入端,Y为输出端,根据二极管导通与截止条件,若输入全为高电平(1)时,二极管VD1、VD2都截止,则输出端为高电平(1);若输入端有低电平(0)时,则二极管正偏而导通,输出端电压被下拉为低电平(0)。下图右侧是与门电路的电路图形符号‘又称逻辑图’。)4 此时A端B端只要有一个是0V,那Y端就会和0V地方直接导通,导致Y端也变成0V。只有AB两端都是10V,Y和AB之间才没有电流流动,Y端也才是10V。 我们把这个装置称为【与门】,把有电压的地方计为1,0电压的地方计为05。 日常生活中,我们经常碰到这种电路,例如下面的继电器。 继电器 4参考来源: http://www.dxzg.com:81/ziyuanku/dzjc/Courseware/content/SCOs/dz07-0101/index.html 5参考来源: https://blog.csdn.net/dog250/article/details/90542988 (注:是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。 它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。 通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。6) 如果每一个问题都需要像继电器一样大的电子元件来展示,那就没有多少人能够负担得起电脑了!事实上,世界上第一台计算机也确实非常庞大。那个时代计算机器都是使用继电器制造的,后来ENIAC采用了比继电器速度更快的电子管,与现在不同,ENIAC采用的十进制进行运算,而不是现在计算机采用二进制。所以它也被迅速淘汰了! (注:1946年2月15日,世界上第一台通用电子数字计算机“埃尼阿克”(ENIAC)在美国研制成功。它当时由1.8万个电子管组成,是一台又大又笨重的机器,体重达30多吨,占地有两三间教室般大。它当时的运算速度为每秒5000次加法运算。7) 我们要感谢集成电路的诞生,让这些空间和成本的问题得以解决! 二进制与半导体 6参考来源:赵爱国,黄海平,高惠瑾编.新维修电工实用技术一点通:河南科学技术出版社,2008.5:第193页 7参考来源: http://history.m4.cn/2013-02/1201209.shtml 逻辑门电图通常用二极管和三极管来实现,二极管和三极管被普遍应用在集成电路中。 当多个与非门组合在一起,按照预定的编程顺序操作时,就可以完成复杂的逻辑运算8。由于二进制的逻辑组装简单,计算机内部处理的数字基本上使用二进制方法,在计算机被广泛使用的今天,二进制也越来越受到人们的关注——飞机的航线,导弹远程调整姿态,电网的运行,万里之外的股票交易,远程就医,远程视频会议,等等。如今,一国的经济、军事、生命,都与运行在二进制基础上的一行行代码息息相关。 所以我们会说,半导体的世界是由基本的0和1组成的。今后随着5G的高速发展,各行各业对于半导体的依赖也会越来越深。 如果把电脑类比成大脑,那么半导体就像人类的神经元一样。不同的是,人类的神经元和大脑没有办法进行扩大或压缩,而半导体依旧有很大的发展空间。 二进制与语言文字转换 尽管半导体的世界是二进制组成的,我们的世界却拥有各种各样的文字、语言、声音和色彩。那么二进制与我们日常书写的文字怎么做转换呢?这就关系到国标码了! 8参考来源: https://blog.csdn.net/dog250/article/details/90571607 1980年,我国制定了《信息交换用汉字编码字符集·基本集》,国家标准 GB2312-80,代号国标码,是国家规定的汉字信息处理使用的代码依据。电视剧《创业年代》中,唐教授发明的中华卡,就是以国标码为故事原型,打破了电脑无法输入汉字的僵局,让中国人也能用上外国人发明的电脑。 在GB2312-80中,收进汉字6763个,其中一级汉字3755个,二级汉字3008个。一级汉字为常用字,按拼音顺序排列,二级汉字为次常用字,按部首排列。 汉字编码表有94行区号、94列位号。双字节中,用高字节表示区号,低字节表示位号。非汉字图形符号置于第1~11区,一级汉字3755个,位于第16~55区,二级汉字3008个,置于第56~87区9。 每个图形字符的汉字交换码,均用两个字节的低7位二进制码表示。汉字国标码通常用十六进制数表示。 9参考来源: https://blog.csdn.net/jxnu_xiaobing/article/details/8780202 例如:“中国”二字 “中”字的区号为 54,位号为48。 二进制数国标码为:01010110 01010000 “国”字的区号为25,位号为90。 二进制数国标码为:00111001 01111010 二进制与电影 如果文字能用二进制来记录,那么影像画面和声音呢? 当然也是可以的!本质上来说图片是由一个个马赛克小点组成的,电影是由一张张图片组成的,图片和电影都可以用二进制来保存。 再说声音,声音是由物体振动产生的,我们小时候玩过的八音盒,就是非常原始的二进制声音存储设备,再到后面的唱片,都是运用了二进制的原理。 但用二进制数来记录电影、音乐和图片,会使原本的文件质量遭到严重的损坏和畸变!比如你的照片,把你的照片放大100倍,你就会发现照片上满满都是马赛克,根本看不出原来的样子!但如果我们把这些损坏和畸变控制在肉眼无法察觉的范围内,就需要用更大空间的存储类半导体啦! 来源:skhynix
  • 热度 6
    2022-1-13 11:14
    4017 次阅读|
    0 个评论
    1. 数字世界是二进制 虽然数字世界是由二进制来表示的, 与二进制兼容性好、容易被人理解的十六进制也经常被使用。 二进制只用0和1来表示。以0和1这一对数字作为符号,但L/H有时也会被使用。 十进制= Decimal  二进制= Binary  十六进制= Hexadecimal 为了区别是几进制,在数字后面加上d、b、h来区分。 【例】11 d (十进制的11)、11 b (十进制的3)、11 h (=17 d ) 2. 十进制⇔二进制⇔十六进制的变换 【十进制⇔二进制⇔十六进制的举例 十进制 二进制 十六进制 63 0000 0011 1111 0 3 F 127 0000 0111 1111 0 7 F 255 0000 1111 1111 0 F F 1023 0011 1111 1111 3 F F 4095 1111 1111 1111 F F F 3. 需要记住的数字 二进制是增加1位后所表示的数之间相差2倍。 红色 部分是在A/D转换器和D/A转换器中经常使用的。 3bit=8阶段 4bit=16阶段 5bit=32阶段 6bit=64阶段 7bit=128阶段  8bit=256阶段  9bit=512阶段 11bit=2048阶段 12bit=4096阶段 14bit=16384阶段 16bit=65536阶段 【什么是bit】 这是表示二进制位的二进制数(binary digit)的简称,把0或者1中任意数字表示的二进制的1位称作bit。 来源:ROHM
  • 热度 29
    2014-3-24 18:00
    2927 次阅读|
    0 个评论
    前面有篇博文介绍了本人研究如何使用TCL脚本来存取二进制文件,这是因为我们在具体项目中实际使用得到,今天就给大家介绍下如何使用。   先来简单介绍下我们项目的基本要求吧,如图1所示,项目中有22个FPGA,每个FPGA存有3种表格,而每种表格都有6个block,每一个block的表格在实际产品使用的时候都有可能需要更新,这时候就需要生成表格,然后写入到FPGA,具体如何写入FPGA不是本文的内容,这里主要谈谈如何生成表格文件。 图1:二进制文件格式定义   图1中头和尾的内容就是单个32-bit数据,由于是预先定义好的,所以可以在代码中用常数概念,也即使用TCL脚本插入常数即可。而中间的LUT由于数据庞大,所以必须从另外的文件里读进来,由于每一次需要更新的LUT个数不一样,所以每次更新都需要单独生成。这个工作并不是fpga硬件工程师的任务,但是在最终产品交付之前,我又必须测试我的FPGA逻辑,所以必须自己产生文件进行测试。为了不打扰软件工程师,我自己使用TCL脚本来按照图1格式产生测试文件。   最终使用TCL脚本生成的工具如图2所示。   图2:脚本生成的产生LUT更新文件的工具     以下是插入Header的代码片段: ;##插入头 proc Ins_Header {} {      set lutfile      set header_file      fconfigure $lutfile -translation binary      gets $header_file line      set HeadSel      set b      set a      puts -nonewline $lutfile $a       close $lutfile      close $header_file }     上述代码是插入头的参考代码,我们看到在二进制文件中每次插入LUT之前先插入头,而头的具体内容则由菜单命令控制,不同的菜单命令针对不同的FPGA,一共22个FPGA.   图3显示的是一个已经生成的查找表的二进制文件,注意第一个32-bit数据为header,二进制数据格式是little-endian。 图3:二进制文件
  • 热度 20
    2014-3-24 14:57
    5556 次阅读|
    1 个评论
    T CL 脚本完成二进制文件存取 王敏志 概述            项目电路板测试,特别是需要从 FPGA 收集一些测试数据的时候可以通过 Altera 提供的 virtual JTAG 接口来完成。开发调试平台需要使用 TCL 脚本来设计,收集到的数据可以存储到一个文件里面,对于 TCL 脚本来说,任何数据都被认为是字符,所以存储成文本格式是很方便的,但是由于项目测试另一个平台是利用 LabView 或者 C++ 来分析数据,而 LabView 或者 C++ 程序设计者希望数据存储在二进制文件中。笔者折腾用 TCL 读二进制文件以及 TCL 将数据存储成二进制格式文件,好长时间才搞定,特记录于此已备时间一长遗忘,因为不常用,备后续参考。   TCL 读取二进制文件            一般读取文本文件很简单,代码如下所示:          set chan     set myfile1     while { =0} {           puts $myfile1 $line      }   上述代码第一句是先打开一个文件“ file_t ”并开始读这个文件,这是一个文本文件。第二句是打开一个文件“ file_t1 ”并开始写,如果这个文件不存在,那么就创建这个文件。最后的 while 循环是将第一个文件里的内容全部写入到第二个文件中。相当于复制黏贴。   文件 file_t 只是一个文本文件,文件里的内容如图 1 所示,笔者在使用 Virtual JTAG 处理数据的时候一般都是按照图 1 所示的格式存储,也即每一行只存储一个数据,所以在使用上述代码 while 循环里就可以直接逐一对数据读出并进行相关处理。   图 1 :文本文件中的内容 那么如果存在一个二进制格式的数据文件,应该如何将数据读出来呢?首先我们来看二进制数据文件的存放格式,如图 2 所示。   图 2 :二进制格式文件内容 图 1 和图 2 存放的内容都是一样的,注意二进制格式存放的时候需要定义每一个数据位宽,这里给每个数据定义为 32-bit ,所以我们看图 2 的第一个数据是 0 ,第二个数据是 0x100000 ,即 1048576 ,后面数据依次类推。所以如果要将图 2 所示的数据读出来,那么在打开这个文件以后首先要对其进行配置,因为 TCL 默认认为打开的文件是字符格式,具体代码实现如下所示: set chan fconfigure $chan -translation binary while {1} {        set data_read ;## 一次读 4 个字节,即 32bit ,在循环体中,该命令似乎可以自动连续往后读。          binary scan $data_read "H*" tmp0;## 将这 4 个字节转换成 16 进制数据        set m_val        set x_val        set y_val        pain_cross_star $m_val $x_val $y_val        incr cnt        if {$cnt 10000} {            close $chan            break }   第一句和上面一样,先是打开一个文件,并开始读。第二句是给刚刚打开的文件配置“二进制”属性。读的时候使用“ read ”命令,由于我们定义一个数据的位宽是 32-bit ,所以每次需要读四个字节。 Binary scan 是将读出来的 32-bit 数据转换成 16 进制数据,否则默认读出来的数据认为是字符格式。   TCL 存储数据成二进制格式            上一节讲述了如何从二进制格式文件中读取数据并进行处理,这一节介绍一下如何将数据存储成类似图 2 所示的二进制格式文件。            首先我们还是来看看默认 TCL 脚本是如何存储数据到文件的,由于数据默认认为是字符格式,所以存储后的数据文件就是图 1 所示的格式。具体代码如第一节所示。即 file_t1 和 file_t 中的内容都是如图 1 所示那样。那么如何才能将 file_t 中的文件存储成图 2 所示那样呢?具体代码如下所示。     set chan set my_binfile fconfigure $my_binfile -translation binary set a 0     while { =0} {           set a          puts -nonewline $my_binfile $a     }            第一句同样是打开一个要读取的文件,即 file_t ,第二句是打开一个文件,即 bin_file.dat ,如果文件不存在那么创建这个文件,打开属性是“ w ”。第三句是配置刚刚创建的文件配置成“二进制”属性。第四句定一个临时变量 a ,并赋值为 0 。 While 循环里从 file_t 逐行读出数据(千万记住每一行只有一个数据),将每行读出的数据首先转换成二进制格式,转换后将二进制格式数据写入二进制文件,注意此时带上写入参数“ nonewline ”。需要特别注意的是数据格式转换的时候使用了“ I1 ”参数,“ I ”表示将一个或多个整数转换成 32-bit ,且字节顺序是 Big-endian 模式,如果“ i ”则是 Little-endian 模式。如果不是 32-bit ,那么可以查此命令找到相关参数( c/C 指定 8-bit , s/S 指定 16-bit 等等)   分析及结论   二进制文件处理在项目测试阶段非常有用,在分析数据的时候如果数据量庞大,如果按照字符模式,且每一行只存放一个数据那么数据文件的容量将非常之大,如果采用二进制格式,可以大大减少文件存放容量,同时可以统一各个平台之间的数据格式,所谓一举多得啊。    
  • 热度 24
    2013-10-8 16:06
    1335 次阅读|
    0 个评论
    由于标题原因这里计划开始进入二进制数的运算里来。用这节的时间精通二进制所以比其他的教程会更精简一些。首先是概念世界上没有进制的说法只是人类为了计数方便创造了各种进制。还是那句话同样的数量的东西怎么数都是那些客观事实谁都无能为。而我们这里谈的是怎么数准备好笔和纸哦。   1.注意英语名10进制Decimal二进制Binary十六进制H。以后用打头字母代表进制.D1234就是十进制表示1234B1234就是用2进制表示1234.   2.几进制就是几为权重常用转换在下边一通百通多做练习 例   a.10进制到十进制变换 012,........9 10个数的权重(不懂这个词看例子)从右到左以此为110100...... D1793=3*10^0+9*10^1+7*10^2+1*10^3=1+90+700+1000=D1793   b. 2进制到十进制变换 B10110=0*2^0+1*2^1+...=D22   c.10进制到2进制变换 D 84   84 /2= 42 ...0 42 /2= 21 ...0 21 /2= 10 ...1 10 /2= 5 .....0 5 /2= 2 .........1 2 /2=1.........0 1/2=0........1 结果就是D84=B1010100 d.16进制 就是123...,9,A,B,C,D,E,F(就是A是10B是11...)。这里用字母的原因就是10开始就是用两位表达的了而进制定义是n进制就是用n-1个一位数来表达不这样的话10和二进制会发生混淆。 2^4=16,所以4位二进制表达一位十六进制。 例十六进制到二进制 H2ED就是 十六进制 2ED = B 0010 1110 11012是0010E也就是14是1110D是1101   二进制到十六进制 B1111010 = H7A从右边读起1010就是A111是7 十进制到16进制 D333 333/16 = 20...13 20/16 =1... 4 1/16 = 0......1 结果是H14D 3. 计算机常用单位转换 1byte = 8bits 1nibble = 4bits 1word由处理器架构决定 1024byte=1KB 1024bite=1Kb 1KB=8*1Kb 4.LSBMSBLSB就是最没用的位可以被随时扔掉而MSB就是最有用的位要保留。 例只看amsb代表2^5,而lsb是0.在计算机四舍五入的时候当然不能把msb扔掉做加减法的时候可以。 5.二进制加法和十进制一样看例子就明白 那么试着算一下1101+0101=答案是10010多了一位就是说溢出了 6.正负号问题两套系统 例 D5=101我们拓延一位 D5=0101再把MSB换成1即可 D-5=B110这就是所谓的“符号系统” 加法问题也就是减法   利用2的“补位系统”为了计算D-7= 首先D7=0111然后 计算~D7=1000再+1即可求出补位系统里的表达式 D-7=1001 然后按着5做加法即可。 例1D-2+D1=B1110+B0001=B1111=D-1 例2D-7+D7=B1001+B0111=B10000由于msb溢出扔掉结果为B0000。   可以发现补位系统里0是正数1111...1+1=100000...0,msb溢出把1扔掉     7。范围问题 例 若有4bit空位 补位系统-8到7 符号系统0到15 所以补位系统由于没有-0所以有N bits的时候范围是 .而最大的负数就是B10000...0=-2^(N-1)由于虽然是负数但是由于msb溢出被扔掉变成正数所以被称为 奇异数。 例若只有有4bit空位在补码系统中计算D4+D5=B0100+B0101=B1001=-7结果溢出4bit但是用5bit就能得到正确结果。 符号拓延被定义为进行如下操作例如把4bit空位中1101放在7bit空位中则结果为111 1101   总结见上图是一个4bit空位三个系统的范围的列举。Unsigned范围从0到15补码系统从-8到7符号系统从-7到7.注意符号系统的两个01000和0000分别是-0和0.要熟练掌握以上7条就足以以不变应万变了。          
相关资源