系列文章目录
上一节:从零开始的RISCV架构CPU设计(2)-CISC与RISC
文章目录
前言
流水线与状态机是数字电路设计中两种重要的技术,本节将由浅入深对这两种技术作简要介绍,并探讨在该RV CPU软核的实现框架。
一、举个例子
在进行对流水线与状态机的介绍之前,首先为大家引入一个生活实例:
王大妈与李大妈现打算各自开设一家餐饮店,她们俩分别采用了不同的经营模式。
王大妈开设的餐饮店不招收员工,店内所有工作需要王大妈一个人负责完成,这些工作包括接单、需求分析、后厨制作、餐饮配送;假设这些工作每项需要十分钟,我们不难得出,王大妈一个处理订单的速度为这些工作时间的总和共计40分钟;并且假设王大妈在进行其中一项工作时无法同时进行其他工作,因此王大妈只有在处理完当前订单后才能对下一个订单做处理;我们对王大妈的这种模式画一个时间轴,如下所示:
王大妈处理三个订单花费了120分钟,我们可以看出,这种运营方式处理订单的效率并不高。
我们再来看李大妈,李大妈选择招收一个前台柜员、一个服务员、一个厨师、一个骑手来分别负责接单、需求分析、后厨制作、餐饮配送。在这种情况下,前台柜员将接收到的订单给服务员后,便可以接收下一份订单,同理服务员在
对订单进行分析后,将顾客的需求反应给厨师后,就可以转去处理柜员传递的下一份订单,以此类推,这种工作模式的时间轴如下所示:
从整体上来看,整个餐厅在处理上一份订单的需求时,可以进行下一份订单的接单任务,在处理上一份订单的后厨制作时,可以进行下一份订单的需求分析;同理在上一份订单配送时,下一份订单处于后厨制作阶段;
李大妈的这种模式,虽然单个订单的处理时间仍然是40分钟,但整体上来看,三个订单的处理时间仅花费了60分钟。
我们再来综合看下这两种经营模式,王大妈的经营模式简单来说就是划分好了每个时刻的任务,第一个10分钟干什么,第二个十分钟干什么;李大妈人多力量大,所有工作在每个十分钟都可以同时进行。其实前者的工作模式就是一种状态机,后者就是流水线;
两种模式各有优缺点,王大妈虽然减少了店内员工的开销,但是处理订单的效率不高,适合订单不多的情况;李大妈虽然处理订单的效率提高了,但其在员工上的开销也增大了,适合订单较多的情况;
二、状态机
2.1 状态机概念
正如上述我们举的实例,状态机所做的就是将一个复杂的任务分为若干个阶段,每个阶段去完成其中的一小部分。由于状态机在每个时钟周期到来时处理的任务是唯一的,做事是“一心一意”的,所以各个状态对应逻辑是允许逻辑复用的,所以状态机是一种以性能换面积的手段;
2.2 状态机设计
从状态机的类型上来看,状态机可以分为moore型和mealy型;
从状态机的代码实现上来看,状态机可以是一段式、二段式或三段式;
moore型状态机的特点是状态机的输入与输出无关,输出仅与当前状态有关,如下图所示:

mealy型状态机的特点是状态机的输入会影响输出;

2.3 设计实例
我们这边举一个二段式状态机的设计实例;计算y=12*x + (x - 6) + x / 4;
module state_machine_test(
input wire clk,
input wire nrst,
input wire [15:0] x,
output wire [31:0] y
);
reg [31:0] y_temp;
reg [31:0] y_buff;
reg [1:0] state;
localparam integer MUL0 = 0;
localparam integer SUB0 = 1;
localparam integer DIV0 = 2

本文深入介绍了RISC-V架构CPU设计中的流水线和状态机技术。通过王大妈和李大妈的餐饮店经营比喻,阐述了流水线提高效率的原理。文章详细讲解了状态机的概念、设计实例以及流水线的工作模式,并对比了两者的优缺点。此外,还讨论了CPU设计框架,包括指令执行流程、单周期与多周期CPU的区别以及流水线冒险问题,如结构冒险和数据冒险的解决方案。最后,指出虽然流水线带来了复杂性,但其性能提升显著。
最低0.47元/天 解锁文章
1962





