Add Verific support for SVA nexttime properties
authorClifford Wolf <clifford@clifford.at>
Fri, 22 Nov 2019 15:11:56 +0000 (16:11 +0100)
committerClifford Wolf <clifford@clifford.at>
Fri, 22 Nov 2019 15:11:56 +0000 (16:11 +0100)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
frontends/verific/verificsva.cc

index 225fd3e4a20a4246616cda1ecd0246ef1ef0a1f0..49c0c40acce7d0dd3f5018d121fc7763b8c8d12d 100644 (file)
@@ -36,6 +36,8 @@
 // basic_property:
 //   sequence
 //   not basic_property
+//   nexttime basic_property
+//   nexttime[N] basic_property
 //   sequence #-# basic_property
 //   sequence #=# basic_property
 //   basic_property or basic_property           (cover only)
@@ -1264,6 +1266,26 @@ struct VerificSvaImporter
                        return node;
                }
 
+               if (inst->Type() == PRIM_SVA_NEXTTIME || inst->Type() == PRIM_SVA_S_NEXTTIME)
+               {
+                       const char *sva_low_s = inst->GetAttValue("sva:low");
+                       const char *sva_high_s = inst->GetAttValue("sva:high");
+
+                       int sva_low = atoi(sva_low_s);
+                       int sva_high = atoi(sva_high_s);
+                       log_assert(sva_low == sva_high);
+
+                       int node = start_node;
+
+                       for (int i = 0; i < sva_low; i++) {
+                               int next_node = fsm.createNode();
+                               fsm.createEdge(node, next_node);
+                               node = next_node;
+                       }
+
+                       return parse_sequence(fsm, node, inst->GetInput());
+               }
+
                if (inst->Type() == PRIM_SVA_SEQ_CONCAT)
                {
                        const char *sva_low_s = inst->GetAttValue("sva:low");