硬件

简介

这是Pinsec顶层硬件图:

../../../_images/pinsec_hardware.svg

RISCV

RISCV是一款5级流水线CPU,具有以下特性:

  • 指令缓存

  • 单周期桶式移位器

  • 单周期MUL、34周期DIV

  • 中断支持

  • 动态分支预测

  • 调试端口

AXI4

如前所述,Pinsec集成了AXI4总线结构。 AXI4不是最容易使用的总线,但具有许多优点,例如:

  • 灵活的拓扑结构

  • 高带宽潜力

  • 潜在的乱序请求完成

  • 满足时钟时序的简单方法

  • 被许多IP核使用的标准

  • 适合SpinalHDL反压流(Stream)的握手方法。

从面积利用率的角度来看,AXI4肯定不是最轻量的解决方案,但某些技术可以大大减少这种担忧:

  • 在可能的情况下使用只读/只写AXI4变体

  • 引入Axi4-Shared变体,其中引入新的ARW通道来代替和组合AR和AW通道。该解决方案将地址解码和地址仲裁的资源使用量减少了两倍。

  • 根据互连实现的不同,如果所有主设备都不会使R/B通道停滞(RREADY和BREADY被固定为1),则可以进行时序松弛。在这种情况下,可以通过综合去除两个xREADY信号,从而放宽时序。

  • 正如AXI4规范所建议的,互连可以通过聚合相应的输入端口ID来扩展事务ID。这允许互连具有无限数量的待处理请求,并且能够以极小的面积成本(扩大事务ID)支持乱序完成。

Pinsec互连不会引入延迟周期。

APB3

在Pinsec中,所有外设均实现了一个APB3总线接口。选择APB3的原因如下:

  • 非常简单的总线(无突发)

  • 使用很少的资源

  • 被许多IP核使用的标准

生成RTL

要生成RTL,您有多种方案:

您可以下载SpinalHDL源代码,然后运行:

sbt "project SpinalHDL-lib" "run-main spinal.lib.soc.pinsec.Pinsec"

或者您可以在自己的SBT项目中创建自己的main,然后运行它:

import spinal.lib.soc.pinsec._

object PinsecMain {
  def main(args: Array[String]) {
    SpinalVhdl(new Pinsec(100 MHz))
    SpinalVerilog(new Pinsec(100 MHz))
  }
}

备注

目前,由于最新版本的GHDL与cocotb不兼容,因此仅在仿真和FPGA中测试了verilog版本。