ARM技术论坛
直播中

张敏

7年用户 1589经验值
私信 关注
[经验]

在SpinalHDL中关于casez的使用

SpinalHDL中的switch

在之前的文章中曾提到过SpinalHDL中switch的使用:

通常情况下,switch对应着我们日常Verilog代码中的case。像下面的代码:

其生成的RTL代码为:

没什么大的问题。但我们知道,在Verilog中,存在case,casez,casex三种语法(本篇不做三种语法的区分与讨论,对此感兴趣的小伙伴可以自行百度)。像下面的这种代码:

我们在写Verilog代码时还是很少会直接这么来写的,往往通常采用casez来进行描述:

那么在SpinalHDL中,我们是否也可以这么描述呢?

SpinalHDL中的don't care

像Verilog代码中,casez里我们常常采用?表示我们不关心的位,而在SpinalHDL中,也存在这么一种表示方式。

SpinalHDL整体的数据结构如下图所示:

针对BitVector及其子类,SpinalHDL定义了一种特殊的类型用于在比较中表示不关心的bit:

像上面的例子里只要myits的bit7,bit6,bit2为0,bit3为1那么itMatch即为True。

而通过这种形式,我们即可在switch中实现类似casez的功能:

其对应的Verilog代码为:

可以看到,在生成的Verilog代码里,这里换成了casez。

使用需谨慎

像上面在switch中使用M"----1----"没有什么问题,然而在其他地方,使用则需谨慎。像下面的代码逻辑:

其在生成RTL代码时会采用下面的逻辑:

从资源的利用角度来讲反而增加了面积开销,还是老老实实的采用常规形式比较好:

原作者:玉骐

更多回帖

发帖
×
20
完善资料,
赚取积分