SpinalHDL之Flow

本文作为SpinalHDL学习笔记第十九篇,介绍SpinalHDL Flow相关API。

SpinalHDL学习笔记总纲链接如下:

SpinalHDL 学习笔记_spinalhdl blackbox-CSDN博客

目录:

1.规范

2.代码示例

3.仿真支持

1.规范

数据流接口是一个简单的有效/负载协议,这意味着从端无法终止总线。它可用于表示来自 UART 控制器的数据、写入片上存储器的请求等。

信号

类型

驱动

描述

何时忽略

valid

Bool

Master

当为高时 => 接口上存在有效负载 (payload)

payload

T

Master

传输任务内容

valid为低

2.代码示例:

case class FlowExample() extends Component {
val io = new Bundle {
val request = slave(Flow(Bits(8 bit)))
val answer = master(Flow(Bits(8 bit)))
}
val storage = Reg(Bits(8 bit))
val fsm = new StateMachine {
io.answer.setIdle()
val idle: State = new State with EntryPoint {
whenIsActive {
when(io.request.valid) {
storage := io.request.payload
goto(sendEcho)
}
}
}
val sendEcho: State = new State {
whenIsActive {
io.answer.push(storage)
goto(idle)
}
}
}
// This StateMachine behaves equivalently to
// io.answer <-< io.request
}

 

3.仿真支持

用法

FlowMonitor

用于主端和从端,如果数据流传输数据,则调用带有负载的函数。

FlowDriver

Testbench 中主端通过调用函数来应用值(如果可用)以驱动值。如果值可用,则函数必须返回。支持随机的延迟。

ScoreboardInOrder

通常用于比较参考/dut 数据

package spinaldoc.libraries.flow
import spinal.core._
import spinal.core.sim._
import spinal.lib._
import spinal.lib.sim.{FlowDriver, FlowMonitor, ScoreboardInOrder}
import scala.language.postfixOps
case class SomeDUT() extends Component {
val io = new Bundle {
val input = slave(Flow(UInt(8 bit)))
val output = master(Flow(UInt(8 bit)))
}
io.output <-< io.input
}
object Example extends App {
val dut = SimConfig.withWave.compile(SomeDUT())
dut.doSim("simple test") { dut =>
SimTimeout(10000)
val scoreboard = ScoreboardInOrder[Int]()
// drive random data at random intervals, and add inputted data to scoreboard
FlowDriver(dut.io.input, dut.clockDomain) { payload =>
payload.randomize()
true
}
FlowMonitor(dut.io.input, dut.clockDomain) { payload =>
scoreboard.pushRef(payload.toInt)
}
// add all data coming out of DUT to scoreboard
FlowMonitor(dut.io.output, dut.clockDomain) { payload =>
scoreboard.pushDut(payload.toInt)
}
dut.clockDomain.forkStimulus(10)
dut.clockDomain.waitActiveEdgeWhere(scoreboard.matches == 100)
}
}

 

相关推荐

  1. SpinalHDLFlow

    2024-07-18 15:06:05       24 阅读
  2. SpinalHDL总线

    2024-07-18 15:06:05       16 阅读
  3. SpinalHDL寄存器库函数

    2024-07-18 15:06:05       27 阅读
  4. SpinalHDL实用工具(下篇)

    2024-07-18 15:06:05       27 阅读
  5. SpinalHDL实用工具(上篇)

    2024-07-18 15:06:05       22 阅读
  6. SpinalHDLVHDL 和 Verilog 生成

    2024-07-18 15:06:05       25 阅读
  7. SpinalHDL】1. Getting Started

    2024-07-18 15:06:05       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 15:06:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 15:06:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 15:06:05       58 阅读
  4. Python语言-面向对象

    2024-07-18 15:06:05       69 阅读

热门阅读

  1. 精通JVM监控与调优:工具使用与命令指南

    2024-07-18 15:06:05       22 阅读
  2. C#配置文件中AppSettings的读写

    2024-07-18 15:06:05       18 阅读
  3. Flutter 开源库学习

    2024-07-18 15:06:05       22 阅读
  4. 白骑士的C++教学附加篇 5.2 代码规范与最佳实践

    2024-07-18 15:06:05       18 阅读
  5. 基于STM32设计的人体健康监测系统(华为云IOT)(189)

    2024-07-18 15:06:05       23 阅读
  6. x264 写入码流函数分析与介绍

    2024-07-18 15:06:05       23 阅读
  7. Spring Boot 动态多数据源配置

    2024-07-18 15:06:05       23 阅读
  8. react中状态管理useState

    2024-07-18 15:06:05       17 阅读
  9. 深度学习,人工智能

    2024-07-18 15:06:05       19 阅读
  10. 英文Essay写作质量不能出现问题

    2024-07-18 15:06:05       22 阅读
  11. C++代码_让室友坑我

    2024-07-18 15:06:05       21 阅读
  12. 网络安全-网络安全及其防护措施10

    2024-07-18 15:06:05       21 阅读