Skip to content

Commit 7bb365a

Browse files
[#91875] vivado_ibert: Add DWELL configuration support
1 parent 975d72e commit 7bb365a

File tree

3 files changed

+43
-5
lines changed

3 files changed

+43
-5
lines changed

protoplaster/tests/bert/vivado_ibert/ibert_eyescan.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,26 @@
33
import shutil
44
import tempfile
55
import subprocess
6+
from typing import Literal, Optional
67

78
from jinja2 import DictLoader, Environment
89

910

1011
class EyeScan:
1112

1213
def __init__(self, vivado_cmd: str, hw_server: str, serial_number: str,
13-
channel_path: str, prbs_bits: int, loopback: bool) -> None:
14+
channel_path: str, prbs_bits: int, loopback: bool,
15+
dwell_mode: Optional[Literal["BER", "TIME"]],
16+
dwell_value: Optional[float]):
1417
self.eyescan_file = tempfile.NamedTemporaryFile(suffix=".csv")
1518
self.hw_server = hw_server
1619
self.serial_number = serial_number
1720
self.channel_path = channel_path
1821
self.prbs_bits = prbs_bits
1922
self.loopback = loopback
2023
self.report_file = tempfile.NamedTemporaryFile(suffix=".report")
24+
self.dwell_mode = dwell_mode
25+
self.dwell_value = dwell_value
2126

2227
# Check if Vivado is available
2328
if shutil.which(vivado_cmd) is None:
@@ -42,6 +47,8 @@ def __init__(self, vivado_cmd: str, hw_server: str, serial_number: str,
4247
str(self.prbs_bits),
4348
str(self.loopback),
4449
self.report_file.name,
50+
self.dwell_mode or "",
51+
str(self.dwell_value) if self.dwell_value is not None else "",
4552
]
4653
res = subprocess.run(vivado_argv,
4754
cwd=os.path.dirname(__file__),

protoplaster/tests/bert/vivado_ibert/ibert_eyescan.tcl

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
proc perform_eye_scan { outputPath hwServer serialNumber channelPath prbsBits loopback reportFile } {
1+
proc perform_eye_scan { outputPath hwServer serialNumber channelPath prbsBits loopback reportFile dwellMode dwellValue } {
22
# Connect to the emulator
33
open_hw_manager
44
connect_hw_server -url "$hwServer"
@@ -31,6 +31,18 @@ proc perform_eye_scan { outputPath hwServer serialNumber channelPath prbsBits lo
3131

3232
# Create, run, and save scan
3333
set xil_newScan [create_hw_sio_scan -description {Scan 0} 2d_full_eye [lindex [get_hw_sio_links $fullPath/TX->$fullPath/RX] 0 ]]
34+
35+
if { $dwellMode eq "BER" } {
36+
if { $dwellValue ne "" } {
37+
set_property DWELL_BER $dwellValue [get_hw_sio_scans $xil_newScan]
38+
}
39+
} elseif { $dwellMode eq "TIME" } {
40+
set_property DWELL TIME [get_hw_sio_scans $xil_newScan]
41+
if { $dwellValue ne "" } {
42+
set_property DWELL_TIME $dwellValue [get_hw_sio_scans $xil_newScan]
43+
}
44+
}
45+
3446
run_hw_sio_scan [get_hw_sio_scans $xil_newScan]
3547
wait_on_hw_sio_scan [get_hw_sio_scans $xil_newScan]
3648
write_hw_sio_scan -force $outputPath [get_hw_sio_scans $xil_newScan]
@@ -49,5 +61,7 @@ set channelPath [lindex $argv 3]
4961
set prbsBits [lindex $argv 4]
5062
set loopback [lindex $argv 5]
5163
set reportFile [lindex $argv 6]
64+
set dwellMode [lindex $argv 7]
65+
set dwellValue [lindex $argv 8]
5266

53-
perform_eye_scan $outputPath $hwServer $serialNumber $channelPath $prbsBits $loopback $reportFile
67+
perform_eye_scan $outputPath $hwServer $serialNumber $channelPath $prbsBits $loopback $reportFile $dwellMode $dwellValue

protoplaster/tests/bert/vivado_ibert/test.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,30 @@ def configure(self):
3535
vivado_cmd = getattr(self, "vivado_cmd", "vivado")
3636
hw_server = getattr(self, "hw_server", "localhost:3121")
3737
loopback = getattr(self, "loopback", True)
38+
dwell_mode = getattr(self, "dwell_mode", None)
39+
assert dwell_mode in ['BER', 'TIME', None], \
40+
"`dwell_mode` test attribute must be either 'BER' or 'TIME' when provided"
41+
try:
42+
value = getattr(self, "dwell_value", None)
43+
if value is not None:
44+
dwell_value = float(value)
45+
except (ValueError, TypeError):
46+
raise AssertionError(
47+
"`dwell_value` test attribute must be convertible to `float` when provided"
48+
)
49+
3850
if not hasattr(self, "test_name"):
51+
if dwell_mode == None:
52+
dwell_string = "DEFAULT DWELL"
53+
else:
54+
dwell_string = f"DWELL {dwell_mode}: {dwell_value}"
3955
self.test_name = (
4056
f"vivado_ibert eyescan: {self.prbs_bits}-bit PRBS "
4157
f"on {hw_server}/{self.serial_number}/{self.channel_path}, "
42-
f"{'' if loopback else 'no '} loopback")
58+
f"{'' if loopback else 'no '} loopback, {dwell_string}")
4359
self.eyescan = EyeScan(vivado_cmd, hw_server, self.serial_number,
44-
self.channel_path, self.prbs_bits, loopback)
60+
self.channel_path, self.prbs_bits, loopback,
61+
dwell_mode, dwell_value)
4562

4663
def test_transceiver_status(self):
4764
"""

0 commit comments

Comments
 (0)