Commit Graph

18 Commits

Author SHA1 Message Date
Sean Anderson 5e1dabf601 tb: pmd: Add helper for printing data
This adds a helper for printing input/output serial data. Early errors
might not have had the offending bits printed, since slicing
doesn't work with negative indices.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 21:47:21 -04:00
Sean Anderson 16dfe09fba tb: pmd: Wait on signal_status and not valid
valid is an internal signal which isn't available in post-synthesis
simulation. Use signal_status instead, which is externally available.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 21:47:21 -04:00
Sean Anderson 24ec0a4150 tb: pmd: Don't die if pmd.delay is absent
We set this signal for debugging purposes, so don't die if it's absent
(such as in a post-synthesis simulation).

Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 21:47:21 -04:00
Sean Anderson e79807cdff tb: pmd: Ensure signal_detect starts low
To make sure that pmd.signal_status comes up at the right time, keep
signal_detect low at the start of simulation. We don't need to set
pmd.rx, because X is the default value (or rather Z is, but it's the
same for our purposes).

Fixes: 1d65661 ("Add pmd")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 21:47:21 -04:00
Sean Anderson 8f7c797800 pcs: Fix incorrect assignment type
This is the wrong kind of assignment to use. Fix it.

Fixes: 1d65661 ("Add pmd")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 21:47:21 -04:00
Sean Anderson d8ce1652ae pmd: Delay signal_status/detect until data is valid
The data yielded by the PMD is not really valid until it has made its
way through the pipeline. Delay it until the data is valid. As a side
effect, this should also eliminate any metastability. This is not
necessary for real hardware, but it allows us to to post-synthesis
simulation (where we can't reach in and probe the internal valid
signal).

Additionally, ensure that the state is known by resetting it when we
don't have a signal.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 21:47:21 -04:00
Sean Anderson fafce4df00 pmd: Use correct SB_IO clock names
The clock signals are not named correctly. Fix this.

Fixes: 1d65661 ("Add pmd")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 21:47:21 -04:00
Sean Anderson 01539759d6 tb: pcs: Send packet spacing packets immediately
This avoids a period of Xs on the inputs.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 21:47:21 -04:00
Sean Anderson d27d0089e6 tb: pcs: Wait for rx_ce when receiving errors
Without .value, pcs.rx_ce always evaluates as truthy.

Fixes: d351291 ("Initial commit")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 15:29:32 -04:00
Sean Anderson fdf3953ce9 tb: pcs: Remove unnecessary parentheses
This is python, not C :)

Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 15:28:52 -04:00
Sean Anderson ac69f9208e tb: pcs: Initialize inputs before clocks
Ensure all inputs are initialized before starting the clocks. This
avoids any problems which might occur due to everything being
initialized at once.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 15:27:31 -04:00
Sean Anderson 2b752c4bc1 tb: pcs: Specify clock periods directly
Instead of calculating clock periods based on the desired frequncy,
specify the periods diretly. This silences the following kind of error
caused by floating point rounding:

Unable to accurately represent 8000.000000000001(sec) with the simulator precision of 1e-12

Fixes: d351291 ("Initial commit")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 15:24:47 -04:00
Sean Anderson 93e91e3eb0 pcs: Fix some lint
There were two unused variables; remove them. The wrong type of
assignments were used; fix them.

Fixes: d351291 ("Initial commit")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 15:21:15 -04:00
Sean Anderson d2b4f9b061 pcs: rx: Add premature end state
Without this state, receiving would immediately go low. However, figure
24-11 shows that receiving should go low only after an additional code
group (the second idle) is received.

Fixes: d351291 ("Initial commit")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 15:18:26 -04:00
Sean Anderson e4bbc08620 pcs: tx: Calculate idle correctly when there is no new data
When the PMA has no new data for us, idle should be determined based on
raw_bits[11:2]. However, we just calculated that last cycle, so we can
reuse it.

Fixes: d351291 ("Initial commit")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 14:54:04 -04:00
Sean Anderson 0dea0304af pcs: tx: Process link failure synchronously
There's no strict requirement for us to handle linke failures immediately.
The PMA's link timer will ensure the signal stays low, so we don't have to
worry about missing it. This fixes some strange Xs during initialization.

Fixes: d351291 ("Initial commit")
Signed-off-by: Sean Anderson <seanga2@gmail.com>
2022-08-06 14:51:23 -04:00
Sean Anderson 1d65661bd3 Add pmd 2022-08-06 14:02:44 -04:00
Sean Anderson d351291ff8 Initial commit 2022-05-23 20:57:03 -04:00