|
1 | 1 | [[header]] |
2 | 2 | :description: RISC-V Trace Control Interface |
3 | 3 | :company: RISC-V.org |
4 | | -:revdate: June 06, 2024 |
5 | | -:revnumber: 1.0.0_rc37 |
| 4 | +:revdate: June 20, 2024 |
| 5 | +:revnumber: 1.0.0_rc38 |
6 | 6 | :revremark: Stable state (waiting for Freeze) |
7 | 7 | :url-riscv: http://riscv.org |
8 | 8 | :doctype: book |
@@ -52,8 +52,9 @@ Change is extremely unlikely. |
52 | 52 |
|
53 | 53 | PDF generated on: {localdatetime} |
54 | 54 |
|
55 | | -=== Version 1.0.0_rc37 |
56 | | -* 2024-06-05 |
| 55 | +=== Version 1.0.0_rc38 |
| 56 | +* 2024-06-20 |
| 57 | +** Small clarifications (as discussed by email). |
57 | 58 | ** Waiting for official Freeze |
58 | 59 |
|
59 | 60 | [Preface] |
@@ -842,6 +843,7 @@ All registers with offsets 0x400 .. 0x7FC are designated for additional trace en |
842 | 843 | Trace encoder filters are an optional feature that can be used to control the generated trace in various ways. |
843 | 844 |
|
844 | 845 | The registers below divide the filter logic into filters and comparators to provide maximum flexibility at low cost. The number of filters and comparators depends on the system. Each filter unit can specify filtering against instruction and optionally against data trace inputs from the hart. When filter __i__ is implemented, the registers `trTeFilter__i__Control` and `trTeInstFilters` must be implemented to enable it. And to apply filter __i__ to the data trace, the `trTeDataFilters` register must also be present. And if a match bit in the `trTeFilter__i__Control` register can be set to 1 (= enabling a filter option), the corresponding register from the bit's description must have a correct value already set as otherwise the trigger may fire unintentionally. Each of the mentioned comparator units is actually a pair of comparators (primary and secondary, or P and S), so a limited range can be matched with a single comparator unit if needed. |
| 846 | +Each enabled filter define independent condition where trace is enabled - if several filters are enabled they act as `logical OR`. Several conditions for single filter act as `logical AND`. |
845 | 847 |
|
846 | 848 | NOTE: Filter and comparator registers refer to values of some signals (as *priv*, *itype*, *ecause*, *dtype*, *dsize*, ...) available on Trace Ingress Port. See E-Trace specification for details of encoding of these values. |
847 | 849 |
|
@@ -922,13 +924,15 @@ When set, match *dsize* values as specified by `trTeFilterMatchChoiceDsize` fiel |
922 | 924 | |31:26 |--|Reserved|--|0 |
923 | 925 | |=== |
924 | 926 |
|
| 927 | +NOTE: Handling of `trTeFilterMatchEcause` and `trTeFilterMatchInterrupt` should include a count of nested traps. The size of the counter is implementation dependent. If the number of nested traps exceeds the number that can be counted, the counter will saturate, meaning that the filtering will turn off prematurely. |
| 928 | + |
925 | 929 | .*Register: trTeFilter__i__MatchInst : Filter _i_ Instruction Match Control Register (trBaseEncoder+0x404 + 0x20__i__)* |
926 | 930 | [cols="6%,30%,~,7%,7%",options="header"] |
927 | 931 | |=== |
928 | 932 | |*Bit* |*Field* |*Description* |*RW* |*Reset* |
929 | 933 | |7:0 |trTeFilterMatchChoicePrivilege | |
930 | 934 | When `trTeFilterMatchPrivilege` field for filter #__i__ is set, match all privilege |
931 | | -levels for which the corresponding bit is set. For example, if bit N is 1, then match if the *priv* value is N |
| 935 | +levels for which the corresponding bit is set. For example, if bit N is 1, then match if the *priv* value at ingress port is N. Setting several bits allow matching several provileges. |
932 | 936 | |WARL|<<Undef,Undef>> |
933 | 937 | |8 |trTeFilterMatchValueInterrupt | |
934 | 938 | When `trTeFilterMatchInterrupt` field for filter #__i__ is set, match *itype* of 2 or 1 depending on whether this bit is 1 or 0 |
|
0 commit comments