当前位置:首页 > EDA > 电子设计自动化
[导读]在芯片验证中,SystemVerilog Assertions(SVA) 是动态监测接口时序是否符合协议的利器。相比在testbench中写 if 判断,SVA能自动在仿真过程中报告违例,并精确指示发生时刻。本文以APB和AXI4-Lite为例,给出可直接复用的SVA断言模板。



在芯片验证中,SystemVerilog Assertions(SVA) 是动态监测接口时序是否符合协议的利器。相比在testbench中写 if 判断,SVA能自动在仿真过程中报告违例,并精确指示发生时刻。本文以APB和AXI4-Lite为例,给出可直接复用的SVA断言模板。


一、SVA基本结构回顾


property name_of_property;

   @(posedge clk) disable iff (!rst_n)

       sequence_expr |-> consequence_expr;

endproperty


assert property(name_of_property);



• |->:重叠蕴含(前提成立时,同一时钟沿检查结论)


• |=>:非重叠蕴含(前提成立时,下一时钟沿检查结论)


二、APB协议检查实战


APB写传输的基本时序:PSEL 拉高 → PENABLE 拉高 → 下一周期完成。


2.1 PSEL与PENABLE不能同时拉低


property psel_penable_not_both_low;

   @(posedge PCLK) disable iff (!PRESETn)

       !(PSEL == 0 && PENABLE == 1);  // 使能必须在选中时才有意义

endproperty

assert_psel_penable: assert property(psel_penable_not_both_low);



2.2 PENABLE必须在PSEL之后拉高


property penable_after_psel;

   @(posedge PCLK) disable iff (!PRESETn)

       $rose(PSEL) |=> ##0 PENABLE;  // 下一周期PENABLE必须为高

endproperty

assert_penable_after_psel: assert property(penable_after_psel);



2.3 传输完成时PREADY必须为高


property pready_at_completion;

   @(posedge PCLK) disable iff (!PRESETn)

       (PSEL && PENABLE && PREADY) |=> $fell(PSEL);  // 完成后退回IDLE

endproperty

assert_pready_at_completion: assert property(pready_at_completion);



三、AXI4-Lite协议检查实战


AXI4-Lite比APB复杂,关键是VALID与READY的握手规则。


3.1 AWVALID与AWREADY握手(地址通道)


// VALID不能依赖READY(VALID必须先拉高)

property awvalid_independent;

   @(posedge ACLK) disable iff (!ARESETn)

       $rose(AWVALID) |-> ##[1:$] AWREADY;  // 最终必须收到READY

endproperty

assert_awvalid_independent: assert property(awvalid_independent);


// 一旦VALID拉高,必须保持直到READY为高

property awvalid_stable_until_ready;

   @(posedge ACLK) disable iff (!ARESETn)

       AWVALID && !AWREADY |=> AWVALID;  // 下一周期VALID不能变低

endproperty

assert_awvalid_stable: assert property(awvalid_stable_until_ready);



3.2 写数据通道(WVALID与WREADY)


// WLAST必须在最后一笔数据时拉高

property wlast_with_last_data;

   @(posedge ACLK) disable iff (!ARESETn)

       WVALID && WREADY && WLAST |=> !WVALID;  // 最后一笔后WVALID应撤

endproperty

assert_wlast_with_last_data: assert property(wlast_with_last_data);



3.3 写响应通道(BVALID与BREADY)


// 响应必须在地址和数据都完成后才发出

property bvalid_after_aw_and_w;

   @(posedge ACLK) disable iff (!ARESETn)

       BVALID |-> $past(AWVALID && WVALID && WREADY);  // 简化:上一拍应有写请求

endproperty

assert_bvalid_after_aw_and_w: assert property(bvalid_after_aw_and_w);



四、调试技巧


4.1 用$error输出详细信息


assert property(@(posedge clk) disable iff (!rst_n)

   req |-> ##[1:3] ack)

else $error("Req without ack within 3 cycles at time %0t", $time);



4.2 用cover统计覆盖率


cover property(@(posedge clk) $rose(PSEL) ##1 PENABLE);

// 确认APB传输是否发生过



4.3 层次化断言


将断言写在接口(interface)中,绑定到DUT,实现复用:

interface apb_assertions(input logic PCLK, PRESETn, PSEL, PENABLE, PREADY);

   property psel_to_penable;

       @(posedge PCLK) $rose(PSEL) |=> PENABLE;

   endproperty

endinterface


bind dut apb_assertions u_apb_assert(.PCLK(PCLK), ...);



五、常见错误与规避


错误 原因 修正


断言在复位期间误触发 未加 disable iff (!rst_n) 在所有property中加入复位条件


|-> 与 |=> 用错 混淆重叠与非重叠蕴含 明确时序关系:同拍用 |->,隔拍用 |=>


断言一直不触发 序列表达式从未满足 用 cover property 确认前提是否出现过


仿真卡死 断言中 ##[0:$] 范围过大 限制最大延迟,如 ##[1:5]


六、结语


SVA断言的核心价值在于将协议规则转化为可自动检查的时序表达式。APB和AXI4-Lite的实践表明:抓住VALID/READY握手、PSEL/PENABLE时序、数据完成标志这几个关键点,就能覆盖大部分接口协议违例。将断言封装在interface中并通过bind注入DUT,是工程中最推荐的复用方式。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在芯片验证领域,UVM(Universal Verification Methodology)已成为行业标准,其核心优势在于通过模块化设计实现验证环境的可复用性。然而,当验证场景涉及复杂随机约束时,约束冲突导致的随机化失...

关键字: SystemVerilog 芯片验证 UVM

在FPGA验证领域,Verilog与SystemVerilog的选择常引发争议。前者作为硬件描述语言的基石,以简洁的语法和强大的RTL设计能力著称;后者作为其超集,通过面向对象编程、约束随机化和功能覆盖率等特性,成为现代...

关键字: Verilog SystemVerilog FPGA

在芯片验证领域,大量遗留的VHDL代码库如同“技术债务”,随着项目复杂度提升,其验证效率低下的问题日益凸显。将这些代码迁移至SystemVerilog(SV)并集成到UVM(通用验证方法学)环境中,不再是简单的语言翻译,...

关键字: VHDL SystemVerilog

在复杂数字电路设计中,传统仿真验证需要编写海量测试向量,却仍可能遗漏边界场景。形式验证技术通过数学方法穷举所有可能状态,而断言(SystemVerilog Assertions, SVA)作为其核心工具,能在不依赖测试向...

关键字: SVA Bug 数字电路

在高速数字系统设计中,AXI-Lite总线作为轻量级内存映射接口,广泛应用于寄存器配置场景。其严格的握手时序要求使得传统验证方法效率低下,而SystemVerilog断言(SVA)凭借其时序描述能力,成为AXI-Lite...

关键字: SystemVerilog AXI-Lite

在航空航天、汽车电子等高可靠性领域,FPGA算法验证的完备性直接决定系统安全性。传统仿真测试仅能覆盖约60%的代码路径,而形式化验证通过数学建模可实现100%状态空间覆盖。本文提出基于SystemVerilog断言(SV...

关键字: SystemVerilog FPGA算法 断言验证
关闭