Browse Source

Fix SERE, replacing within with && operator

master
T. Meissner 4 years ago
parent
commit
d2db77183e
3 changed files with 16 additions and 15 deletions
  1. +2
    -1
      README.md
  2. +8
    -8
      src/psl_sere_non_consecutive_goto_repetition.vhd
  3. +6
    -6
      src/psl_sere_non_consecutive_repeat_repetition.vhd

+ 2
- 1
README.md View File

@ -51,6 +51,7 @@ The next lists will grow during further development
* Consecutive repetition operator ([*], [+], [*n], [*i to j])
* Non consecutive repetition operator ([=n], [=i to j])
* Non consecutive goto repetition operator ([->], [->n], [->i to j])
* Length-matching and operator (&&)
* within operator
## PSL features not yet supported by GHDL:
@ -61,4 +62,4 @@ The next lists will grow during further development
## PSL features under investigation
* before_ operator (Seems that LHS & RHS of operator have to be active at same cycle, see psl_before.vhd)
* next_event_a[i to j] operator (Behaviour currently under investigation)
* next_event_a[i to j] operator

+ 8
- 8
src/psl_sere_non_consecutive_goto_repetition.vhd View File

@ -46,20 +46,20 @@ begin
SERE_2_a : assert always {req} |=> {busy[->5]; done};
-- Non consecutive repetition of 3 cycles without padding
-- busy has to hold on 3 cycles between req & and the first done
-- This is a more exact version of the assertions before using the
-- within SERE operator (busy[*3] has to hold during done don't holds)
-- busy has to hold on exactly 3 cycles between req & and the first done
-- This is a more exact version of the assertions before using
-- the length-matching and SERE operator &&
-- This assertion holds
SERE_3_a : assert always {req} |=> {{{busy[->3]} within {not done[+]}}; done};
SERE_3_a : assert always {req} |=> {{{busy[->3]} && {not done[+]}}; done};
-- Non consecutive repetition of 4 cycles without padding
-- busy has to hold on 4 cycles between req & and the first done
-- busy has to hold on exactly 4 cycles between req & and the first done
-- This assertion doesn't hold at cycle 7
SERE_4_a : assert always {req} |=> {{{busy[->4]} within {not done[+]}}; done};
SERE_4_a : assert always {req} |=> {{{busy[->4]} && {not done[+]}}; done};
-- At least one occurance of busy directly in the cycle before done holds
-- Equivalent to SERE_3_a
-- This assertion holds
SERE_5_a : assert always {req} |=> {{{busy[->]} within {not done[+]}}; done};
SERE_5_a : assert always {req} |=> {{{busy[=2]; busy[->]} && {not done[+]}}; done};
end architecture psl;

+ 6
- 6
src/psl_sere_non_consecutive_repeat_repetition.vhd View File

@ -46,16 +46,16 @@ begin
SERE_2_a : assert always {req} |=> {busy[=5]; done};
-- Non consecutive repetition of 3 cycles with possible padding
-- busy has to hold on 3 cycles between req & and the first done
-- This is a more exact version of the assertions before using the
-- within SERE operator (busy[*3] has to hold during done don't holds)
-- busy has to hold on exactly 3 cycles between req & and the first done
-- This is a more exact version of the assertions before using
-- the length-matching and SERE operator &&
-- This assertion holds
SERE_3_a : assert always {req} |=> {{{busy[=3]} within {not done[+]}}; done};
SERE_3_a : assert always {req} |=> {{{busy[=3]} && {not done[+]}}; done};
-- Non consecutive repetition of 4 cycles with possible padding
-- busy has to hold on 4 cycles between req & and the first done
-- busy has to hold on exactly 4 cycles between req & and the first done
-- This assertion doesn't hold at cycle 8
SERE_4_a : assert always {req} |=> {{{busy[=4]} within {not done[+]}}; done};
SERE_4_a : assert always {req} |=> {{{busy[=4]} && {not done[+]}}; done};
end architecture psl;

Loading…
Cancel
Save