关于状态

状态电路与组合逻辑电路

  • 状态电路用于记住值,如寄存器(小而快)或内存(大而慢)。
  • 组合逻辑电路用于处理数据流。

状态的使用

  • 作为存储某些不确定时间价值的场所:
    • 寄存器文件(如RISC - V上的x0 - x31)
    • 记忆(缓存和主存)
  • 帮助控制组合逻辑块之间的信息流动。
    • 状态变量用于在组合逻辑块的输入端保持信息的运动,并允许有序的传递。

构建累加器

image-20240730191736211

image-20240730191830276

image-20240730191841007

在register这块中,数据从上到下,从右到左

刚开始时,reset初始化sum为0,随后sumxi进行加法运算,sum再次进入register后传给xi

  1. 累加器的构建

    • 累加器的目标是将一系列输入值累加。
    • 基本思路是通过循环累加输入数组中的每个元素,最终得到总和。
  2. 累加器的初步设计

    • 设计一个简单的累加电路,尝试在没有状态电路的情况下进行累加。
    • 发现仅使用组合逻辑电路无法完成累加操作,因为无法控制循环的迭代,也无法初始化累加器。
  3. 引入状态电路

    • 为了解决上述问题,引入寄存器和复位线。
    • 寄存器用于保存当前累加值,并在复位时将其设为零。
    • 加载器(时钟)控制每个周期的累加操作。
  4. 反馈机制的使用

    • 反馈机制允许输出值回送到输入,用于连续累加。
    • 通过在时钟的上升沿进行操作,确保累加过程有序进行。
  5. 具体实现

    • 累加器电路图示,显示输入值(x)随着时间变化。
    • 通过时钟控制寄存器,使累加值逐步增加。
  6. 总结与预告

    • 讲座结束时展示了累加器的工作原理。
    • 预告下一讲将进一步深入探讨累加器的具体实现。

关键概念

  • 状态电路(State Circuit):用于记忆和存储数据的电路。
  • 组合逻辑电路(Combinational Logic Circuit):用于处理和传递数据的电路。
  • 累加器(Accumulator):一个用于累加输入值的电路。
  • 反馈(Feedback):输出值返回到输入的机制,用于连续处理。
  • 寄存器(Register):用于存储数据的基本单元。
  • 时钟(Clock):控制电路操作时序的信号。

寄存器细节-触发器(Flip-flops)

flip and flop between 0 and 1.

触发器的基本概念

image-20240730200747865

  • 寄存器的内部是触发器(Flip-Flops)
    • 一个n位寄存器实际上是n个1位触发器的并行组合。
    • 输入称为数据(Data, D),输出称为Q(代表静止Quiescent)。

触发器(FF)的时序

image-20240730200903106

这个是上升沿触发触发器(rising edge-triggered),还有下降沿触发触发器,在这里我们只考虑上升沿触发的触发器、也称为正边沿(positive edge)。

这意味着当它 从 0 变为 1 时,就会触发,即负载的意思。

触发器的工作原理

  • 触发器的输入输出

    • 输入数据通过触发器的时钟信号在上升沿被采样。
    • 输出数据在触发器采样后的某个延迟时间内传输到输出端。
    • 上升沿触发(Rising Edge Triggered):在时钟信号从0到1的上升沿时采样输入数据。
  • 时序图解释

    • 时钟信号的上升沿是触发器工作的关键时刻。
    • 在上升沿时,触发器采样输入数据并将其传输到输出端。
    • 输入数据可以在两个时钟信号之间变化,但触发器只在上升沿时采样。

触发器的时间参数

  • 设置时间(Setup Time)
    • 输入数据在时钟上升沿之前必须保持稳定的时间。
  • 保持时间(Hold Time)
    • 输入数据在时钟上升沿之后必须保持稳定的时间。
  • 时钟到输出延迟(Clock to Q Delay)
    • 从时钟上升沿到输出数据稳定所需的时间。

理想情况下触发器的参数要求

  • 较小的时钟到输出延迟
    • 延迟越小,电路运行速度越快。
  • 较小的设置和保持时间
    • 稳定输入数据的时间窗口越小越好。
    • 输入数据能被快速采样并传输到输出端。

总结

  • 触发器是寄存器的基本组成单元,通过时钟信号的上升沿采样输入数据,并在一定延迟后输出。
  • 理想的触发器需要较小的设置时间、保持时间和时钟到输出延迟,以实现更快、更稳定的电路性能。

以触发器时序图角度再看累加器

image-20240730203142094

image-20240730203151964

  • 寄存器的重置输入用于强迫寄存器到所有的零点(优先于D输入)。
  • § Si - 1保存了第i - 1次迭代的结果。
  • §从寄存器的输出开始分析电路时序。
  • Si暂时是错误的,但寄存器总是捕获正确的值。
  • 在好的电路中,clk上升沿附近不会出现不稳定现象。

这个图需要注意的是Si-1是输入,Si才是输出

简述下全过程:

  • reset开关启动,Si-1设置为0,同Xi一起进入加法器中,Si再经过寄存器变成Si-1同Xi进行计算

使用流水线/管线设计来提高系统的性能(Pipelining for Performance)

最大时钟频率

image-20240730204106508

  • 讨论了如何减少周期以提高频率。
  • 通过电路的延迟分析标准电路,得出第一个延迟是时钟到Q的时间(t_clk_to_Q),第二个延迟是CL Delay组合逻辑延迟,第三是因为在t_setup之前即在下一上升时cl需要保持稳定
  • 重点在于确保下一个上升沿之前的所有延迟都稳定。

图中路线颜色对应时间颜色

流水线的概念

image-20240730204141836

  • 将复杂的任务分割成更小的步骤,以提高处理频率。
  • 通过一个例子解释:想象一个生产线上包裹巧克力和写俳句的任务,若分给两个人完成,每一步都会更快。
  • 插入更多寄存器来分割任务,从而减少每个步骤的延迟。

实现流水线

image-20240730204149590

  • 在组合逻辑电路中插入额外的寄存器。
  • 时钟上升沿到输出稳定之间的延迟称为t_clk_to_Q。
  • 分割后的每个步骤的延迟更小,整体处理频率更高。

是在+和shifter中间加了个reg后相当于把CL delay拆开成两个独立的这个数据回路,所以最大延迟减小了时钟周期小了,时钟频率就大了,output就多了。

代价与收益

  • 流水线使每秒的输出更多,但每个数据通过流水线所需的时间略长。
  • 这种方法的整体收益是每秒处理更多的数据。

关键术语回顾

  • 时钟:系统的心跳。
  • 设置时间(Setup Time):上升沿之前数据必须稳定的时间。
  • 保持时间(Hold Time):上升沿之后数据必须保持稳定的时间。
  • 时钟到Q的时间(t_clk_to_Q):上升沿发生到数据在输出端口稳定之间的延迟。
  • 触发器:构建寄存器的基础,用于RISC V机器的数据路径。

有限状态机(Finite State Machines)

有限状态机的基本概念

image-20240730205503583

  1. 状态与转换:FSM由一系列状态和转换组成,箭头表示转换。
  2. 输出的来源:输出可以是转换的函数,也可以附加在状态上。
  3. 转换条件:每个状态都必须有所有可能输入的出口箭头。
  4. 初始状态:每个FSM需要有一个箭头指示初始状态或用双圈标示初始状态。

实例:检测三个连续的1

image-20240730205516285

FSM可以用来检测输入序列中的特定模式。以下是一个简单的例子,用于检测三个连续的1。

状态机设计

  • 状态表示
    • 状态0:初始化状态,表示没有检测到1。
    • 状态1:检测到一个1。
    • 状态2:检测到两个连续的1。
    • 状态0:重新回到初始状态,表示检测到三个连续的1。

状态转换规则

  • 状态0
    • 输入0:保持在状态0。
    • 输入1:转换到状态1。
  • 状态1
    • 输入0:回到状态0。
    • 输入1:转换到状态2。
  • 状态2
    • 输入0:回到状态0。
    • 输入1:输出1,表示检测到三个连续的1,然后回到状态0。

FSM的硬件实现

  • ..因此需要一个寄存器来保存机器处于哪个状态的表示。
    • ú为每个状态使用唯一的位模式。
  • 使用组合逻辑电路实现一个函数,将输入和当前状态( PS )的输入映射到下一个状态( NS )和输出。

image-20240730210028794

FSM的硬件:组合逻辑

下篇详讲

image-20240730210048734

同步系统的一般模型

image-20240730210107065

  • 由寄存器分隔的CL块集合。
  • 寄存器可以背靠背,CL块可以背靠背。
  • 反馈是可选的。
  • 时钟信号只与寄存器的时钟输入连接。