译码阶段
译码阶段从取指队列中获取指令,并借助译码器对其进行解码。其单周期解码能力可通过ndcd参数进行动态配置。
译码器
在Zircon-2023中,译码器采用了Chisel的LookUpTable方案,即通过定义指令的编码匹配格式,使用指令对象到一系列控制信号的映射来实现译码。虽然这种方案有较好的可读性且不容易出现错误,但在阅读其生成的Verilog代码时,我们可以发现这种方案浪费了大量的资源。因此,Zircon-2024采用了手动译码的方案,通过利用指令空洞,译码器可以使用尽可能减省的逻辑来生成控制信号。
译码器主要会生成两个信号:立即数(imm)和操作码(op)。其中,op的每一位都采用了极致的复用,对于ALU源操作数选择、load/store使能这类完全不可能出现在同一个后端流水线中的信号,它们会复用op的同一个位置,减少了后端发射队列存储的成本。
此外,译码器还会为每一条指令生成一个func独热码信号,用来决定指令将要送入哪个后端发射队列。这个信号将会在分派阶段被使用。