对于搞验证的同学来讲,UVM里面中关于寄存器的概念自然是耳熟能详,对于搞设计的小伙伴来讲,也许我们对于使用的场景和UVM寄存器模型对照并没有太过关注,而在SpinalHDL中regif库里,其使用也是借鉴基于UVM中寄存器模型概念进行设计的。 》UVM中支持的寄存器存取方式 在UVM里,共支持了25种寄存器存取方式:
这里面诸如RO、RW、RC、RS、WRC、WRS、WC、WS、WSRC、WCRS、WO、WOC、WOS、W1、WO1这些实现想必小伙伴们实现起来都比较容易,不再做过多赘述。这里来看下除了这些剩下的寄存器类型的实现方式。为方便描述,这里定义如下几个变量:hitWrite:写命中 hitRead:读命中 wdata:待写入数据 targetReg:目标寄存器 》W1C W1C为写1时清零,写0时无影响,则可以表示为:
》W1S W1S为写1设置所有的位,写0时无影响,读取时无影响。那么可以表示为:
》W1T W1T为写1入时会翻转,写0时无影响,读取时无影响。那么可以表示为:
》W0C W0C为写0清零,写1时无影响,读取时无影响。那么可以表示为:
》W0S W0S为写0设置所有的位,写1时无影响,读取时无影响。那么可以表示为:
》W0T W0T为写0入时会翻转,写1时无影响,读取时无影响。那么可以表示为:
》W1SRC W1SRC为写1设置所有的位,写0时无影响,读清零。那么可以表示为:
》W1CRS W1CRS为写1清零,写0时无影响,读设置所有位。那么可以表示为:
》W0SRC W0SRC为写0设置所有的位,写1时无影响,读清零。那么可以表示为:
》W0CRS W0SRC为写0清零,写1时无影响,读设置所有位。那么可以表示为:
》写在最后 相比于用if判断去实现,这种方式应该更友好些。而这里面用到的最基本的数字电路知识,便是卡诺图了。
原作者:玉骐
|