Tan's Blog.

CSAPP逻辑设计

字数统计: 801阅读时长: 2 min
2019/05/18 Share

逻辑设计与HCL

这部分内容应该是之前上过的一门课-数字电路设计与分析的精简版了吧,主要是讲各种逻辑电路的设计。

逻辑门

基本的逻辑门类型有:AND、OR、NOT
逻辑门是活动的,输入变化输出就会变化。

表达式

1.单个位
eq = (a && b) || (!a && !b) 这个表达式的结果分析,只有a 和 b 都为 0 或者都为 1 的时候,输出才为1。
(a && s) || (b && !s) 我们分析如果s为1,则结果为a,否则结果为b。
2.多个位
eq=(A==B) 这里A和B都是int型的,表达式是在判断64位字A和B中的每一位是否相同。

HCL表达式 和 C 语言逻辑表达式的区别

1.逻辑门是持续输出的,如果电路的输入变化了,在一定的延迟之后,输出也会相应的变化,而C表达式是在执行到的时候才会求值。
2.两者操作的值不同,逻辑门只对值 0 和值 1 进行操作,而C 逻辑表达式允许参数是任意整数,0表示false,其它任意值都表示true。
3.逻辑表达式存在短路,比如对于a && b这个符号来说,C语言中的规定是如果前者为假,则后者不会再计算。而HCL当中没有这种说法。

存储器和时钟

组合电路是一直持续输出的,因此它无法保持一个状态不变。也就是说组合电路从本质上来讲,不存储任何信息。他们只是简单的响应输入信号,产生等于输入的某个函数的输出。但我们的计算机是需要存储数据的,因此就需要能保存状态的存储设备。存储设备是由一个时钟控制,时钟是一个周期型号,它控制着存储设备什么时候更新设备里的值。
常用的存储设备一般有两种:
时钟寄存器:简称寄存器,存储单个位或字。时钟信号控制寄存器加载输入值。
随机访问存储器:简称存储器,存储多个字,用地址来选择该读或者该写哪个字。

Y86-64的顺序实现

处理一条指令包含很多操作,将它们组织成某个特殊的阶段序列。分为以下几个阶段:
取指:取指阶段从存储器读取指令字节,地址为程序计数器(PC)的值
译码:译码阶段从寄存器文件读入最多两个操作数,得到val A 和 / 或 val B
执行:执行阶段,算术/逻辑单元要么执行指令明确的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。得到的值为valE
访存:访存阶段可将数据写入存储器或从存储器读出数据
写回:最多可写两个结果到寄存器文件
更新PC:将PC设置成下一指令的地址

CATALOG
  1. 1. 逻辑设计与HCL
    1. 1.1. 逻辑门
    2. 1.2. 表达式
    3. 1.3. HCL表达式 和 C 语言逻辑表达式的区别
    4. 1.4. 存储器和时钟
  2. 2. Y86-64的顺序实现