spinalenum其实一直很少直接使用,前段时间做avalon总线的仿真偶尔用到,初上手仿真还略微耽误了我几分钟,今天就spinalenum的仿真简单share下。
》关于spinalenum spinalenum说白了就是一个枚举类型,像spinalhdl中所提供的fsm lib其状态的表示均采用的spinalenum。使用其好处是我们在查看波形时能够所见即所得,看到波形的状态,像下面的样子:
而关于spinalenum在设计中的使用方式,在spinalhdl document中所提及到的已足够设计使用了。之前也曾分享过一篇spinalenum中的一些tips:
《enum几个值得了解的tips》。今天着重分享下在仿真中如何对spinalenum类型进行操作。为简单起见,我们这里的dut采取如下逻辑:
import spinal.core._object num extends spinalenum{val one,two,three,four=newelement()}case class enumdemo() extends component{val io=new bundle{val datain=in(num)val dataout=out(num) } noioprefix() io.dataout:=io.datain}》常用的四行仿真代码
对于仿真而言,无非是数据激励的注入与信号的读取。而针对spinalenum,数据的注入与读取可以采用如下方式:
import spinal.core.sim._object enumdemoapp extends app{simconfig.withfstwave.compile(enumdemo()).dosim{dut=> dut.io.datain#=num.two sleep(10)println(sio.dataout value=${dut.io.dataout.toenum})println(sio.dataout value=${dut.io.dataout.tobigint})println(dut.io.dataout.toenum==num.two) }}
先看仿真结果:
这里信号驱动与读取代码一共牵涉到四行。对于spinalenum的信号驱动(第4行),我们需用所声明的num中具体的element进行赋值。而在读取信号时(第6、7行),则可以采用toenum/tobigint两种方式进行。同时对于spinalenum信号的判断,则可以直接用num中的element进行对比判断(第8行)。
探讨华为战略布局AI芯片的背后
如何做好水库大坝实时安全监测
TXGA SIM卡座,满足用户的多种插卡方式需求
SaberRD导入FMU的步骤概述
区块链游戏《块西游》让你真正拥有虚拟世界
如何对SpinalEnum类型进行操作
移动网络区域的划分规则
IC Insights :二季度半导体销售预期环比下降5%
智能魔镜系统的应用,开启美好生活的每一天
APView500系列电能质量监测装置电压波动监测,电压骤降闪变监测
5G的普及有可能会比4G更快主要体现在两方面原因
酒店网络高清监控系统整体解决方案
日本UONI由利蒸汽拖把,实用性超乎你想象
模拟鸟叫电路原理图
flyme告诉你智能功能到底有什么用
下一波便携式智能诊疗设备让人人成为家庭医生
海尔彩电维修措施(1)
LTE路由器与普通路由器相比有哪些优点
企业级数据可视化分析需要哪些权限管理
5G独立组网和非独立组网的8种方式怎么进行网络部署?