SpinalHDL之仿真(五)

本文作为SpinalHDL学习笔记第三十三篇,介绍SpinalHDL仿真线程 API相关内容。

在 SpinalSim 中,可以使用多个线程来编写测试平台,方法与 SystemVerilog 类似,有点像 VHDL/Verilog的 process/always 块。这允许使用流畅的 API 编写并发任务并控制仿真时间。

目录:

1.分裂和合并仿真线程

2.休眠和等待

3.无线程 API

4.敏感 API

 

1.分裂和合并仿真线程

// Create a new thread
val myNewThread = fork {
// New simulation thread body
}
// Wait until `myNewThread` is execution is done.
myNewThread.join()

 

2.休眠和等待

// Sleep 1000 units of time
sleep(1000)
// waitUntil the dut.io.a value is bigger than 42 before continuing
waitUntil(dut.io.a > 42)

 

3.无线程 API

可以使用一些函数来避免使用线程,但仍然允许控制仿真时的流程。

无线程函数描述
delayed(delay){
callback }
注册要在当前时间步 delay 步之后调用的回调代码。

与使用常规模拟线程 + 休眠相比, delayed 函数的优点是:
• 性能(无上下文切换)
• 内存使用情况(无本机 JVM 线程内存分配)

与 ClockDomain 对象相关的一些其他无线程函数被设计为Callback API 的一部分,而其他一些与仿真增量周期执行过程相关的函数被设计为Sensitive API 的一部分。

 

4.敏感 API

可以注册要在仿真过程中每个仿真增量周期调用的回调函数:

敏感函数描述
forkSensitie
{ callback
}
注册要在仿真的每个仿真增量周期调用的回调代码
forkSensitieWhile
{ callback
}
注册要在仿真过程的每个仿真增量周期调用的回调代码,而回调返回值为 true(意
味着应该为下一个仿真增量周期重新调度)


 


 

 

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千穹凌帝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值