首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UVM设计模式(九)状态模式、Modelling Finite-State Machines in Testbench

FSM modeling

软件设计中,FSM(Finite-State Machine)分为3部分:状态(State),事件(Event),动作(Action)。

状态模式(State Pattern)是行为型(Behavioral)设计模式,将软件主机端的行为归类为各个状态,状态之间可以互相转化,每种状态的行为不相同;统一交给一个Context类型的模块负责调度各个状态的跳转;

硬件设计中的FSM,不仅是一种电路的描述工具,而且也是一种思想方法;数字逻辑本质上都可以归一化为FSM;RTL描述FSM可以归类为常用的几种方法,通常采用三段式的描述;

在我们的验证环境中,有时也需要一个组件专门负责FSM的建模;例如验证USB Device DUT时,验证环境需要模拟USB Host的行为;对于USB协议复杂的状态机,使用专门的FSM组件模拟,可以减少组件间的耦合;也可以将FSM组件的状态赋值到virtual interface上,通过波形协助debug;

并不是所有DUT模块中包含FSM,验证环境中就需要对应的FSM建模;RTL的硬件电路是cycle级的时序电路,采用FSM可以很好的描述算法运算;而验证环境都是事务级的基于事件的高级抽象模型,是否需要采用FSM根据验证环境而定;对于简单的设计,不需要模拟FSM;对于复杂的标准协议,VIP中都会采用FSM建模来完成,具有高内聚低耦合的好处。

Simple example

本篇对一个示例,分别使用两种方式来描述:

一个简单的FSM如下,分为4种状态;对于状态的跳转条件,本篇通过类型的事件触发,验证环境中的实际情况可以是事件,某一个signal状态,或者if的判断等;不同状态下的Action,仅使用一句display代表,验证环境中的实际情况可以调用某一个task,对signal的驱动,或者调用其他组件的API等;仅做结构上的演示;

在这里插入图片描述

通过产生激励sequence,遍历状态机跳转条件;

use task

类包含四个状态的task;通过函数实现状态跳转;每进入一个状态,对应一个线程,当跳出状态时,注意线程需要disable掉;

use Sate Pattern

采用状态模式的设计,每个状态继承于,实现各自的和;通过宏创建各个state实例;中执行;状态模式和策略模式的实现类似,都是使用OOP的组合 + 多态实现;

在这里插入图片描述

note

中还可以加入 函数控制FSM的更多行为;封装更多API供其他模块调用;加入assertion做基于cycle的条件判断;加入covergroup收集功能覆盖率;

参考

Modelling Finite-State Machines in the Verification Environment using Software Design Patterns

设计模式[20]-状态模式-State Pattern

source code : https://github.com/holdenQWER/systemverilog_design_pattern/tree/main/state

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230404A00VK500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券