APB是常见总线,如何用UVM验证其协议?需要哪些组件?
2026年,FPGA工程师如何用SystemVerilog搭建UVM环境验证APB接口?
提问
回答 4

搭建APB UVM环境时,关键在于APB agent的构建。agent内部包含driver、monitor和sequencer。driver负责按照APB协议驱动PSEL、PENABLE、PWRITE等信号,并处理读写操作。monitor则被动采集总线上的信号变化,并将事务通过analysis port发送给scoreboard。scoreboard负责比对预期结果与monitor采集的实际结果。此外,利用SystemVerilog断言(SVA)可以检查协议时序,例如PENABLE必须在PSEL有效后的下一个时钟周期拉高。整体结构包括test、env、agent和sequence,sequence通过sequencer向driver发送事务。

我的做法是:先定义APB事务类,包含地址、数据、读写类型等字段。然后实现driver,在run_phase中循环获取sequence_item,根据事务类型驱动对应信号。monitor在run_phase中持续采样,当检测到PSEL和PENABLE同时为高时,捕获数据。scoreboard通过两个analysis fifo分别接收driver和monitor的事务,进行比对。断言方面,我会用property检查PREADY信号在数据传输完成时是否拉高,以及PENABLE的建立时间。另外,配置类用于设置agent是否主动驱动,方便复用。

对于APB验证,我习惯采用模块化方法。首先,创建一个apb_agent_config类,包含active/passive模式、接口句柄等。agent内部例化driver、monitor和sequencer,并在build_phase中根据config决定是否例化driver。driver中实现驱动时序,注意APB无等待状态时,PENABLE在PSEL后一拍拉高。monitor中实现协议检查,例如检测PREADY超时。断言主要检查地址稳定性和数据有效窗口。最后,在test中通过virtual sequence发送多个随机读写序列,覆盖率收集地址、数据范围及所有状态跳转。

搭建UVM验证APB接口,首先创建APB agent,内含driver、monitor和sequencer。driver负责驱动PSEL、PENABLE、PWRITE等信号,并处理传输时序;monitor采集总线上的信号变化,生成事务级对象。在env中集成agent,并连接至scoreboard进行数据比对,同时使用SystemVerilog断言检查协议规则,如PENABLE在PSEL有效后一个时钟周期拉高。sequence通过sequencer发送读写事务到driver。
发表回答
登录后可在本页底部提交回答
