记录验证环境采样rtl时序数据遇到的问题
需要解决的问题:
-
需要在每个时钟周期查看read_en信号是否生效,如果生效在下个周期拿出data
-
wave示例:

-
注释:read_en为3bit低有效数据,即当read_en != 'h7时读有效
遇到的问题:
-
错误示例:
{sv}forever begin @(posedge clk) if(read_en != 'h7) begin @(posegde clk) get_data(); end end -
错误分析:
- 在第一个read_en生效后,即read_en为0时,需要等待一个周期去拿去数据A,但这时候拿数的逻辑超过了1个周期,导致下次read_en没有被采样到,会跳过B直接去拿C
-
正确的做法:
{sv}event start_read; fork forever begin @(posedge clk) if(read_en != 'h7) -> stat_read end forever begin @(start_read); @(posedge clk) get_data(); end join- 分析:
- 将数据采样和采样的条件放在两个线程里,互不影响
- 分析: