diff options
author | Clifford Wolf <clifford@clifford.at> | 2017-07-27 14:05:09 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2017-07-27 14:05:09 +0200 |
commit | c1cfca8f54ba75c455580467223b609b72f0f58c (patch) | |
tree | c284a9bbeaedd2902b875dfbcb28feec68c00e39 | |
parent | 877ff1f75ecca4a1d9eece8243f1cde658c14c40 (diff) | |
download | yosys-c1cfca8f54ba75c455580467223b609b72f0f58c.tar.gz yosys-c1cfca8f54ba75c455580467223b609b72f0f58c.tar.bz2 yosys-c1cfca8f54ba75c455580467223b609b72f0f58c.zip |
Improve Verific SVA importer
-rw-r--r-- | frontends/verific/verific.cc | 34 | ||||
-rw-r--r-- | tests/sva/counter.sv | 15 |
2 files changed, 42 insertions, 7 deletions
diff --git a/frontends/verific/verific.cc b/frontends/verific/verific.cc index 5f7d973a9..e56d4531e 100644 --- a/frontends/verific/verific.cc +++ b/frontends/verific/verific.cc @@ -1275,6 +1275,40 @@ struct VerificSvaImporter return; } + if (inst->Type() == PRIM_SVA_SEQ_CONCAT) + { + int sva_low = atoi(inst->GetAttValue("sva:low")); + int sva_high = atoi(inst->GetAttValue("sva:low")); + + if (sva_low != sva_high) + log_error("Ranges on SVA sequence concatenation operator are not supported at the moment.\n"); + + parse_sequence(seq, inst->GetInput1()); + + for (int i = 0; i < sva_low; i++) + sequence_ff(seq); + + parse_sequence(seq, inst->GetInput2()); + return; + } + + if (inst->Type() == PRIM_SVA_CONSECUTIVE_REPEAT) + { + int sva_low = atoi(inst->GetAttValue("sva:low")); + int sva_high = atoi(inst->GetAttValue("sva:low")); + + if (sva_low != sva_high) + log_error("Ranges on SVA consecutive repeat operator are not supported at the moment.\n"); + + parse_sequence(seq, inst->GetInput()); + + for (int i = 1; i < sva_low; i++) { + sequence_ff(seq); + parse_sequence(seq, inst->GetInput()); + } + return; + } + if (!importer->mode_keep) log_error("Unsupported Verific SVA primitive %s of type %s.\n", inst->Name(), inst->View()->Owner()->Name()); log_warning("Unsupported Verific SVA primitive %s of type %s.\n", inst->Name(), inst->View()->Owner()->Name()); diff --git a/tests/sva/counter.sv b/tests/sva/counter.sv index 5e4b77e69..4f949115e 100644 --- a/tests/sva/counter.sv +++ b/tests/sva/counter.sv @@ -11,19 +11,20 @@ module top (input clk, reset, up, down, output reg [7:0] cnt); default clocking @(posedge clk); endclocking default disable iff (reset); - assert property (up |=> cnt == $past(cnt) + 8'd1); - // assert property (up [*2] |=> cnt == $past(cnt, 2) + 8'd2); - // assert property (up ##1 up |=> cnt == $past(cnt, 2) + 8'd2); + assert property (up |=> cnt == $past(cnt) + 8'd 1); + assert property (up [*2] |=> cnt == $past(cnt, 2) + 8'd 2); + assert property (up ##1 up |=> cnt == $past(cnt, 2) + 8'd 2); `ifndef FAIL assume property (down |-> !up); `endif - assert property (down |=> cnt == $past(cnt) - 8'd1); + assert property (up ##1 down |=> cnt == $past(cnt, 2)); + assert property (down |=> cnt == $past(cnt) - 8'd 1); property down_n(n); - down [*n] |=> cnt == $past(cnt, n) + n; + down [*n] |=> cnt == $past(cnt, n) - n; endproperty - // assert property (down_n(3)); - // assert property (down_n(5)); + assert property (down_n(8'd 3)); + assert property (down_n(8'd 5)); endmodule |