硬件的魅力

硬件的魅力

 

前言

今天睡到了11,挺嗨啊,下午去找女朋友,估计这几天写不了博客了,等回来了补上吧.

本次要介绍的是一点硬件知识和HCL语言的内容.

 

 

 

正文

 

从疑问开始

 

首先,在介绍本文的内容之前,我们先来考虑一个考斯简单的问题.众所周知,计算机归根结底是在01打交道,那么到底01是如何被计算机记住的呢?

 

怎么样,是不是有点像1+1为啥等于2?

 

这个问题的答案比着1+1=2要简单多了.答案就是计算机通过电压来记录01.在学习物理的时候大家肯定都听说过电压这个玩意,它的单位一般是伏特(V).比如我们常用的电压一般是220V.计算机中使用1V来代表1,使用0V代表0.

 

 

 

设计的基础

要谈设计,就要知道设计的基础.刚才其实我们了解了最基本的基础,就是01如何表示,不过这只是最根本的立足之本,我们还需要一些基本的元素.就像你要画一个物体一样,首先是点,然后才能点动成线,进而线动成画,最终画动成体.

 

刚才的01只不过是点而已,接下来,我们要用点变化成线.这个东西就叫做逻辑门.

 

逻辑门是数字电路的基本计算元素,也可以看做是物理结构与逻辑结构的映射,它们实际上是由晶体管组成的.逻辑门接收信号的输入,并根据信号产生一定的输出,而输出则是输入的布尔函数,也就是说,输出只能是01.下图是and(“与”门),or(“或”门)not(“非”门)的标准符号,你可以看到他们代表了一组路线的组成方式.

 

 

可以看出,andor都是2个输入,not为一个输入.前面我们提到了HCL硬件设计语言,上面的的三个图分别用HCL表示则是,a&&b,a||b,!a.

 

举个例子,比如对于and门来说,它接受2个输入,如果2输入都是高位电压,则输出的为高位电压,也就是输出为1否则的话,都是输出低位电压,也就是输出0.这些就是建立在刚才1V1,oV0的基础上的.

 

 

 

高级设计

现在我们已经掌握了基础,那么在基础之上,我们就可以玩点花样了.比如刚才提到的逻辑门,他们只能接受1位的输入和1位的输出,比如我们计算0&&10.那么如果我们希望计算更加复杂的表达式该如何做呢,比如10001&&11111=?(注意,这里是位’与’运算,而不是逻辑运算).

 

答案就是组合电路.道理很简单,一个逻辑门可以计算1,如果我们弄来32个逻辑门,不就可以计算32位了吗?那么像上面那个10001&&11111的运算,我们就可以采取5个逻辑门去计算.当然,实际上并不是这样的,这个后续我们会更加详细的介绍.

 

不过电路往往是复杂的,不能随便乱接,否则电死了咋办?因此组合的电路需要遵循以下两个规则:

 

1.两个逻辑门的输出不能连接到一起,否则他们可能会使线上的信号矛盾,因此可能会得到一个不合法的电压或故障.比如10V11V接到一起,会不会出来一个0.5V,又或者类似于正负极相接,直接断路了呢?

 

2.组合的电路必须是无环的.也就是说输出不能再当做输入,否则会使这个函数产生歧义.这个道理很简单,比如数学上来说,如果c=a+b.我们这里可以把c看做输出,a+b看做输入.如果a又等于c,那么是不是b就等于0了呢?当然不是,因为a此时其实就是a+b,第二轮的c又会等于a+2b,同理,第三轮的c又会等于a+3b.那么到底c=a+b还是c=a+2b还是c=a+3b?

 

遵循以上规则,我们就可以随意组装电路了,比如这么一个图:

 

 

它代表着输出是ab,如果用HCL来描述电路,就是(a&&b)||(!a&&!b).我们不难看出来,这个表达式就是编程语言a==b.

 

接下来的这个图是另一个案例,它被翻译为多路复用器.其实之所以叫这个,是因为其中的控制位s是可以复用的.

 

 

在这里例子中还不是特别明显,但是之后的有更明显的例子说明”复用”的含义.以上这个电路如果用HCL表达,则是(a&&s)||(b&&!s).这个电路的含义是如果s1,则结果为a,否则结果为b.

 

在书中对HCL表达式与C语言的表达式做了以下区别,有以下三点:

 

1.逻辑门是持续输出的,C语言表达式是执行到的时候才会求值.这个区别可以把逻辑门当成一个电路来看,电路是不能断点的,电流会一直存在.

 

2.C语言中输入可以是任意整数,HCL只能是10.这点比较好理解.

 

3.对于a&&b这个符号来说,C语言中的规定是如果前者为假,则后者不会再计算.HCL当中没有这种说法.

 

 

按位计算

 

以上所提到的,哪怕是高级设计,也依然是针对1位进行操作的.那么如何才能真正操作多个位呢,比如平时常用的32位或者64.

 

道理很简单,就是多个1位操作一起进行,例如下面这个图:

 

 

这个图当中每个位相等的判断都是上面所提到的两个not,两个and门和一个or门组成的组合电路.它们并列的一起进行,最终再通过一个and,就完成了判断两个32位的数字是否相等的操作.也就是表达式A==B,值得注意的是,这里的AB都是32位的.

 

还有一种类似于C语言中的switch语言的表达式,就是如下形式:

int	Out=[
s:A;
1:B;
];


他代表的意思就是说如果s1,则输出A否则输出B,同样,这里的AB都是32.那么使用电路如何表达呢?其实就是上次的服用电路的32位版本,见下图:

 

可以看到,snot值是被复用的,否则的话,这里需要32not.值得一提的是,HCL中条件选择表达式中的条件是不需要互拆的,只是按照优先顺序依次选取,这与C语言中的seitch是不同的.

 

最后一种HCL表达式,试剂盒的形式.他表示需要拿一个输入信号与某些值做匹配.比如下图的S1S0:

 

 

其中如果S1code==2||code==3,S0code==1||code==0.那么HCL可以用另外一种方式表达,code in {2,3}code in{1,0} .可以看出,HCL表达式其实就是一种硬件表述方式.

 

 

存储器和时钟

 

上面我们介绍的都是组合电路,它们的作用是根据输入来产生一个值.但是刚才也说过,组合电路是一直输出的,因此它无法保持一个状态不变.但我们的计算机是需要存储数据的,因此就需要能保存状态的存储设备.存储设备则是由一个时钟控制,时钟就像一个开关一样,,它控制着存储设备什么时候更新设备里的值.

 

常见的存储设备一般有两种

 

1.时钟寄存器:存储单个位或者单个字.时钟信号来控制寄存器是否要加载输入的值.

 

2.随即访问存储器:存储多个字.用低脂来选择该读,写哪个字.

 

时钟寄存器的典型应用是PC,条件码寄存器以及程序状态.它们都有明确的输入,这意味着他们的值其实是某几个值的一个函数,比如条件码寄存器的输入主要就是逻辑计算单元的值,因此条件码寄存器的值就可以看做是逻辑计算单元的函数.

 

时钟寄存器一般是很据时钟信号来更新状态的,而时钟信号就像一个表一样,比如每到12,寄存器的值就更新一下.就像下图一样,当时钟变化时,值就会变化为y.

 

 

 

随即访问存储器最典型的案例就是我们的寄存器文件(也就是8个程序寄存器)和随即访问存储器(也就是我们常说的内存).它们没有明确的输入值,因此不存在函数关系.不论是进村器文件还是随即访问存储器,都有读和写两种操作,而对于时钟寄存器来说,是无所谓读和写的,因为它只会根据输入的变化改变输出的值,是可以直接连接到电路上去的.

 

寄存器文件一般有两个读端口和一个写端口.每个端口都附带有一个地址来标示操作的是哪个寄存器,而对于写端口,还有一个输入数据,对于读端口,则还有一个输出数据.具体的图示如下:

 

可以看到在寄存器文件的写端口处,有一个时钟(clock)控制着写的操作.当时钟变化时,输入数据的值就会更新到对应的寄存器当中.而对于读数据,则类似于组合电路,根据输入的地址值(src),寄存器文件会输出相应的数据.

 

对于随即访问存储器来说,与寄存器文件非常相似.不同的是,随即访问存储器只有一个地址输入,而不是三个,只有一个数据输出而不是两个.具体的图示如下:

 

 

当地址输入,并且输入数据(data in)输入时,如果写(write)输入为1并且时钟(clock)变化时,存储器中地址为输入地址值的值将会变化,值就是输入数据(data in)的值.同样的,如果地址(address)输入,并且写(write)输入为0,则输出数据(data out)会输出地址为输入地址值的值.这里还有一点特殊的是,当读数据的时候,如果地址超出了范围,erroe信号将会输出为1.回忆一下刚才的HCL语言,error其实就可以看做是一个组合电路的输出,等于(address in>max address)||(address in <0),即当输入的地址值不在合法范围内时,他的输出为1.

 

 

小小的结一下

本次主要就是结合HCL语言在讲解硬件的组成.而这些硬件,就是Y86处理器需要使用的.比如组合电路,存储器.在本章的最后,已经非常接近我们的变成领域了,我们可以看到有寄存器和内存的出现.但要注意的是,这里的寄存器文件并不等于寄存器,随即访问存储器也不等于内存,咱只想想让大家更加深刻的理解他.

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值