16.7 Sequences
- ##[*] 等价于 ##[0:$]
- ##[+] 等价于 ##[1:$]
- a ##N b //a为真,则过N拍b为真;
- (a ##1 b ##1 c) ##0 (d ##1 e ##1 f ) 等价于 a ##1 b ##1 c && d ##1 e ##1 f
- req ## [4:32] gnt //延迟可以是时间窗范围内任何值;
- req ## [4:$] gnt //使用$将时间窗扩展到无穷;
- a ##1 b ##1 c ##3 `true //`define true 1,序列可以通过连接`true来无条件扩展。
16.8 Declaring sequences
序列可以在module、interface、program、clocking block、package、compilation-unit scope、checker、generate block声明。
例如,仅当实际参数是细化时间常数时,对非类型化形式参数的引用可能出现在循环延迟范围、布尔值或序列的规范中。
//例1
sequence delay_example(x, y, min, max, delay1);
x ##delay1 y[*min:max];
endsequence
// Legal
a1: assert property (@(posedge clk) delay_example(x, y, 3, $, 2));
int z, d;
// Illegal: z and d are not elaboration-time constants
a2_illegal: assert property (@(posedge clk) delay_example(x, y, z, $, d));
下例,命名序列s1和s2在clk的连续posedge事件上进行计算,命名序列s3在clk的连续negedge事件上进行计算,命名序列s4在clk的连续交替posedge和negedge事件上进行计算:
//例2
sequence s1;
@(posedge clk) a ##1 b ##1 c;
endsequence
sequence s2;
@(posedge clk) d ##1 e ##1 f;
endsequence
sequence s

本文详细介绍了SystemVerilog中的序列声明与使用方法,包括序列的定义、不同类型的序列示例、序列间的依赖关系及序列声明中的形式参数等内容。
最低0.47元/天 解锁文章
2193

被折叠的 条评论
为什么被折叠?



