首页 > 其他分享 >SpinalHDL之实用工具(下篇)

SpinalHDL之实用工具(下篇)

时间:2024-07-12 18:30:32浏览次数:5  
标签:下篇 val 实用工具 SpinalHDL Xlen valid io dy ready

本文作为SpinalHDL学习笔记第十四篇,记录使用SpinalHDL的一些实用性语法工具。

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

SpinalHDL 学习笔记_spinalhdl blackbox-CSDN博客

目录:

6.存根(Stub)

7.Assertions

8.Report

9.ScopeProperty

6.存根(Stub)

可以将组件层次结构清空作为一个存根(stub):

class SubSysModule extends Component {
val io = new Bundle {
val dx = slave(Stream(Bits(32 bits)))
val dy = master(Stream(Bits(32 bits)))
}
io.dy <-< io.dx
}
class TopLevel extends Component {
val dut = new SubSysModule().stub //instance an SubSysModule as empty stub
}

 例如,它将生成以下 Verilog 代码:

module SubSysModule (
input io_dx_valid,
output io_dx_ready,
input [31:0] io_dx_payload,
output io_dy_valid,
input io_dy_ready,
output [31:0] io_dy_payload,
input clk,
input reset
);
assign io_dx_ready = 1'b0;
assign io_dy_valid = 1'b0;
assign io_dy_payload = 32'h0;
endmodule

还可以清空顶部组件:

SpinalVerilog(new Pinsec(500 MHz).stub)

stub 有什么作用?

• 首先遍历所有组件并找出时钟,然后保留时钟

• 然后删除所有子组件

• 然后删除我们不需要的所有赋值和逻辑

• 给输出端口赋值 0

7.Assertions

除了 Scala 运行时断言之外,还可以使用以下语法添加硬件断言:

assert(assertion : Bool, message : String = null, severity: AssertNodeSeverity = Error)

严重性等级是:

名称

描述

NOTE

用于报告提示性消息

WARNING

用于报告异常情况

ERROR

用于报告不应该发生的情况

FAILURE

用于报告致命情况并关闭仿真

一个实际的例子是检查当 ready 为低电平时,握手协议的 valid 信号不应该由高变低:

class TopLevel extends Component {
val valid = RegInit(False)
val ready = in Bool()
when(ready) {
valid := False
}
// some logic
assert(
assertion = !(valid.fall && !ready),
message = "Valid dropped when ready was low",
severity = ERROR
)
}

8.Report

可以使用以下语法在 RTL 中添加调试以进行仿真:

object Enum extends SpinalEnum{
val MIAOU, RAWRR = newElement()
}
class TopLevel extends Component {
val a = Enum.RAWRR()
val b = U(0x42)
val c = out(Enum.RAWRR())
val d = out (U(0x42))
report(Seq("miaou ", a, b, c, d))
}

例如,它将生成以下 Verilog 代码:

$display("NOTE miaou %s%x%s%x", a_string, b, c_string, d);

从 SpinalHDL 1.4.4 开始,还支持以下语法:

report(L"miaou $a $b $c $d")

可以使用 REPORT_TIME 对象显示当前仿真时间:

report(L"miaou $REPORT_TIME")

会导致:

$display("NOTE miaou %t", $time);

9.ScopeProperty

范围属性是可以在当前线程本地存储值的东西。它的 API 可用于设置/获取该值,还可以以堆栈方式对部分值进行修改。

换句话说,它是全局变量、 scala 隐式变量、线程本地变量(ThreadLocal)的替代品。

• 与全局变量相比,它允许运行多个线程独立运行相同的代码

• 与 scala 隐式变量相比,它与代码库的耦合较小

• 与线程本地变量(ThreadLocal)相比,它有一些 API 可以收集所有范围属性并稍后将它们恢复到相

同状态

object Xlen extends ScopeProperty[Int]
object ScopePropertyMiaou extends App {
Xlen.set(1)
println(Xlen.get) //1
Xlen(2) {
println(Xlen.get) //2
Xlen(3) {
println(Xlen.get) //3
Xlen.set(4)
println(Xlen.get) //4
}
println(Xlen.get) //2
}
}

标签:下篇,val,实用工具,SpinalHDL,Xlen,valid,io,dy,ready
From: https://blog.csdn.net/m0_59092412/article/details/140375653

相关文章

  • SpinalHDL之实用工具(上篇)
    本文作为SpinalHDL学习笔记第十三篇,记录使用SpinalHDL的一些实用性语法工具。SpinalHDL学习笔记总纲链接如下:SpinalHDL学习笔记_spinalhdlblackbox-CSDN博客SpinalHDL的核心定义了许多功能性语法:•类型/字面量•寄存器/时钟域•组件/逻辑区•随机访问/只读存储......
  • SpinalHDL之错误修复(下篇)
    此箫非彼箫,不竹不丝不石。肉音别自唔咿。流苏瑟瑟纱垂,辨不出宫商角徵。一点樱桃欲绽,纤纤十指频移。课吞添吐两情痴,不觉悟灵犀味美推荐小说《回到明朝当王爷》,也有动漫,但小说改国漫通病,小说中杀伐果断人设极好的男主,到了动漫里就变成犹犹豫豫优柔寡断的废材,参见《元龙》。......
  • C++——模板详解(下篇)
    一、非类型模板参数模板参数分为类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之后的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。namespaceH{//定义一个模板类型的......
  • 作为程序员的他,大学四年一直自学,全靠这些实用工具和学习网站!
    鸡腿哥,你好,马上6月份就要毕业了。非常感谢这些年来鸡腿哥的鼓励,你的那些文章我基本上都看了,尤其是程序人生方面的文章给我启迪很大。大学四年,我没有白过,虽然专业不是程序员,但我喜欢这个行业,一直在自学,并且收集了不少实用工具和学习网站,希望借助二哥的影响力传播给更多新......
  • 程序员的加油站,各类技术文章,可视化技术,在线源码资源,在线实用工具,数据爬虫接口持续集成
    先挂网址:https://wheart.cn可视化大屏模板与设计,在线预览上百例可视化模板技术文章、资源下载等各类资源导航页echart在线实用demo各种在线工具提升开发效率echart在线代码模板......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-52- 字符串操作 - 下篇
    1.简介在日常的自动化测试工作中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。2.测试场景宏哥在这里......
  • MySQL表的增删改查初阶(下篇)
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • 【vueUse库Sensors模块各函数简介及使用方法---下篇】
    vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法:vueUse库Sensors模块各函数简介及使用方法vueUseSensors函数1.usePag......
  • 深度学习各算法的优缺点和适用场景!!纯干货,建议收藏。(下篇)
    ............纯   干  货........上篇地址:深度学习各算法的优缺点和适用场景!!纯干货,建议收藏。(上篇)-CSDN博客目录废话不说,直接上干货自编码器1、标准自编码器(VanillaAutoencoder)2、稀疏自编码器(SparseAutoencoder)3、去噪自编码器(Denoisin......
  • 机器学习中的神经网络重难点!纯干货(下篇)
    上篇文章地址:机器学习中的神经网络重难点!纯干货(上篇)-CSDN博客目录长短时记忆网络基本原理一个示例自注意力模型基本原理自注意力机制具体步骤一个案例生成对抗网络基本原理一个案例长短时记忆网络LSTM就像一个有记忆的人,可以记住重要的信息并且忘记不重要的。......