Basic USB4 Validation Examples
This document provides fundamental examples for USB4 validation using the SerDes Validation Framework.
Simple Eye Diagram Analysis
Example 1: Basic Eye Diagram Measurement
from serdes_validation_framework.protocols.usb4 import USB4SignalAnalyzer
from serdes_validation_framework.protocols.usb4.constants import USB4SignalMode
# Initialize analyzer
analyzer = USB4SignalAnalyzer()
# Configure for Gen3x2 mode
analyzer.configure_signal_mode(USB4SignalMode.GEN3_X2)
# Load signal data (replace with your data source)
signal_data = analyzer.load_signal_data("usb4_capture.csv")
# Analyze eye diagram
eye_results = analyzer.analyze_eye_diagram(signal_data)
print(f"Eye Height: {eye_results.eye_height:.3f}")
print(f"Eye Width: {eye_results.eye_width:.3f}")
print(f"Quality Factor: {eye_results.quality_factor:.2f}")
# Check against USB4 specifications
from serdes_validation_framework.protocols.usb4.constants import USB4Specs
specs = USB4Specs()
if eye_results.eye_height >= specs.MIN_EYE_HEIGHT:
print("✓ Eye height meets specification")
else:
print("✗ Eye height below specification")
Example 2: Dual-Lane Skew Analysis
# Analyze lane skew
skew_results = analyzer.analyze_lane_skew(signal_data)
print(f"Lane Skew: {skew_results.skew_ps:.2f} ps")
print(f"Lane Correlation: {skew_results.correlation:.3f}")
# Check against specification
if abs(skew_results.skew_ps) <= specs.MAX_LANE_SKEW * 1e12:
print("✓ Lane skew within specification")
else:
print("✗ Lane skew exceeds specification")
Basic Compliance Testing
Example 3: Simple Compliance Check
from serdes_validation_framework.protocols.usb4 import USB4ComplianceValidator
# Initialize compliance validator
validator = USB4ComplianceValidator()
# Run basic compliance tests
results = validator.validate_signal_integrity(signal_data)
# Display results
passed_tests = sum(1 for r in results if r.status)
total_tests = len(results)
print(f"Compliance Results: {passed_tests}/{total_tests} tests passed")
for result in results:
status = "PASS" if result.status else "FAIL"
print(f" {result.test_name}: {status}")
Example 4: Custom Test Configuration
# Create custom test configuration
test_config = {
'signal_mode': USB4SignalMode.GEN2_X2,
'link_state': USB4LinkState.U0,
'enable_ssc': True,
'ssc_frequency': 33000, # Hz
'ssc_deviation': 0.005, # 0.5%
'test_duration': 60, # seconds
'temperature': 25.0, # °C
'voltage_tolerance': 0.05 # 5%
}
# Run targeted compliance tests
targeted_results = validator.validate_signal_integrity(
signal_data=signal_data,
config=test_config
)
print("Signal Integrity Test Results:")
for test_name, result in targeted_results.items():
print(f" {test_name}: {result.status} ({result.measured_value:.3f} {result.unit})")
Mock Mode Examples
Example 5: Development with Mock Data
import os
# Enable mock mode for development
os.environ['SVF_MOCK_MODE'] = '1'
# All classes now use mock implementations
from serdes_validation_framework.protocols.usb4 import USB4Validator
validator = USB4Validator()
# Generate mock signal data
mock_signal = validator.generate_mock_signal_data(
mode=USB4SignalMode.GEN3_X2,
duration=1e-6, # 1 microsecond
sample_rate=100e9 # 100 GSa/s
)
# Run validation with mock data
mock_results = validator.validate_compliance(mock_signal)
print("Mock validation completed successfully!")
print(f"Generated {len(mock_results)} test results")
# Display mock results
for result in mock_results[:5]: # Show first 5 results
status = "PASS" if result.status else "FAIL"
print(f" {result.test_name}: {status}")
Example 6: CI/CD Testing
def test_usb4_compliance():
"""Test function for CI/CD pipeline"""
# Ensure mock mode is enabled
os.environ['SVF_MOCK_MODE'] = '1'
validator = USB4Validator()
# Test all signal modes
modes = [USB4SignalMode.GEN2_X2, USB4SignalMode.GEN3_X2]
for mode in modes:
signal_data = validator.generate_mock_signal_data(mode)
results = validator.validate_compliance(signal_data)
# Assert all tests pass in mock mode
assert all(r.status for r in results), f"Mock tests failed for {mode}"
print("All CI/CD tests passed!")
# Run the test
if __name__ == "__main__":
test_usb4_compliance()
Basic Reporting
Example 7: Simple Report Generation
from serdes_validation_framework.reporting import USB4TestReporter
from datetime import datetime
# Initialize reporter
reporter = USB4TestReporter()
# Create test session
session = TestSession(
session_id="basic_test_001",
timestamp=datetime.now(),
test_type=ReportType.COMPLIANCE,
signal_mode=USB4SignalMode.GEN3_X2,
device_info={
"vendor": "Example Corp",
"model": "USB4-DEV-001"
}
)
reporter.add_test_session(session)
reporter.add_compliance_results(session.session_id, results)
# Generate HTML report
report_path = reporter.generate_compliance_report(session.session_id)
print(f"Report generated: {report_path}")
Example 8: JSON Report for API Integration
# Generate JSON report for API integration
json_template = ReportTemplate(
name="USB4 API Report",
format=ReportFormat.JSON,
sections=['summary', 'results'],
include_raw_data=True
)
json_report = reporter.generate_compliance_report(
session_id=session.session_id,
custom_template=json_template
)
# Load and process JSON data
import json
with open(json_report, 'r') as f:
report_data = json.load(f)
print(f"JSON report contains {len(report_data['test_results'])} test results")
Basic Visualization
Example 9: Eye Diagram Plotting
from serdes_validation_framework.visualization import USB4Visualizer
# Initialize visualizer
visualizer = USB4Visualizer()
# Plot eye diagram
eye_plot, eye_data = visualizer.plot_eye_diagram(
signal_data=signal_data,
config=PlotConfiguration(
title="USB4 Gen3x2 Eye Diagram",
width=1200,
height=800,
save_format=VisualizationFormat.PNG
)
)
print(f"Eye diagram saved to: {eye_plot}")
print(f"Eye height: {eye_data.eye_height:.3f}")
print(f"Eye width: {eye_data.eye_width:.3f}")
Example 10: Dual-Lane Signal Plot
# Plot dual-lane signals with skew analysis
lane_plot, skew_data = visualizer.plot_dual_lane_signals(
signal_data=signal_data,
config=PlotConfiguration(
title="USB4 Dual-Lane Analysis",
width=1400,
height=600
)
)
print(f"Lane analysis plot: {lane_plot}")
print(f"Measured skew: {skew_data.skew_ps:.2f} ps")
print(f"Lane correlation: {skew_data.correlation:.3f}")
Error Handling Examples
Example 11: Robust Error Handling
from serdes_validation_framework.exceptions import (
USB4ValidationError,
SignalAnalysisError,
ComplianceTestError
)
def robust_usb4_validation(signal_data):
"""Example of robust USB4 validation with error handling"""
try:
validator = USB4Validator()
results = validator.validate_compliance(signal_data)
return {
'success': True,
'results': results,
'error': None
}
except USB4ValidationError as e:
print(f"USB4 validation error: {e}")
return {
'success': False,
'results': None,
'error': str(e)
}
except SignalAnalysisError as e:
print(f"Signal analysis error: {e}")
return {
'success': False,
'results': None,
'error': str(e)
}
except Exception as e:
print(f"Unexpected error: {e}")
return {
'success': False,
'results': None,
'error': str(e)
}
# Usage
result = robust_usb4_validation(signal_data)
if result['success']:
print("Validation completed successfully")
# Process results
for test_result in result['results']:
print(f" {test_result.test_name}: {'PASS' if test_result.status else 'FAIL'}")
else:
print(f"Validation failed: {result['error']}")
Configuration Examples
Example 12: Environment Configuration
# Configure environment for USB4 testing
import os
# Set USB4-specific environment variables
os.environ['SVF_USB4_DEFAULT_MODE'] = 'GEN3_X2'
os.environ['SVF_USB4_SSC_ENABLED'] = 'true'
os.environ['SVF_REPORT_FORMAT'] = 'HTML'
# Load configuration
from serdes_validation_framework.config import ConfigManager
config = ConfigManager()
# Access USB4 configuration
usb4_mode = config.get('usb4.default_mode', 'GEN3_X2')
ssc_enabled = config.get('usb4.ssc_enabled', True)
print(f"USB4 Mode: {usb4_mode}")
print(f"SSC Enabled: {ssc_enabled}")
Example 13: Custom Test Limits
# Define custom test limits
custom_limits = {
'eye_height_min': 0.7, # 70% minimum
'eye_width_min': 0.7, # 70% minimum
'jitter_rms_max': 0.02, # 2% maximum
'lane_skew_max': 15e-12, # 15 ps maximum
}
# Apply custom limits to validator
validator = USB4ComplianceValidator(custom_limits=custom_limits)
# Run validation with custom limits
results = validator.validate_compliance(signal_data)
print("Validation with custom limits:")
for result in results:
status = "PASS" if result.status else "FAIL"
margin = result.margin if hasattr(result, 'margin') else 'N/A'
print(f" {result.test_name}: {status} (margin: {margin})")
Integration Examples
Example 14: Simple Hardware Integration
# Example with simulated hardware connection
class SimpleUSB4Tester:
def __init__(self):
self.validator = USB4Validator()
self.analyzer = USB4SignalAnalyzer()
def run_basic_test(self, device_id):
"""Run basic USB4 test on a device"""
print(f"Testing device: {device_id}")
# In real implementation, this would capture from hardware
# For this example, we'll use mock data
os.environ['SVF_MOCK_MODE'] = '1'
signal_data = self.analyzer.generate_mock_signal_data()
# Run compliance tests
results = self.validator.validate_compliance(signal_data)
# Analyze results
passed = sum(1 for r in results if r.status)
total = len(results)
print(f"Test Results: {passed}/{total} tests passed")
return {
'device_id': device_id,
'passed': passed,
'total': total,
'pass_rate': passed / total if total > 0 else 0,
'results': results
}
# Usage
tester = SimpleUSB4Tester()
test_result = tester.run_basic_test("USB4-DEV-001")
if test_result['pass_rate'] >= 0.95: # 95% pass rate required
print("✓ Device passed basic validation")
else:
print("✗ Device failed basic validation")
Next Steps
After mastering these basic examples:
Advanced Testing: Move to advanced testing examples
Certification: Follow the Thunderbolt 4 certification guide
Mock Testing: Explore mock testing examples
Reporting: Learn advanced reporting techniques
API Reference: Study the complete USB4 API documentation
Common Issues and Solutions
Issue 1: Import Errors
# Solution: Check mock mode and installation
import os
print(f"Mock mode: {os.environ.get('SVF_MOCK_MODE', '0')}")
try:
from serdes_validation_framework.protocols.usb4 import USB4Validator
print("✓ USB4 module imported successfully")
except ImportError as e:
print(f"✗ Import error: {e}")
print("Try: pip install serdes-validation-framework[all]")
Issue 2: No Signal Data
# Solution: Use mock mode for development
if not os.path.exists("usb4_capture.csv"):
print("No signal data file found, enabling mock mode")
os.environ['SVF_MOCK_MODE'] = '1'
validator = USB4Validator()
signal_data = validator.generate_mock_signal_data()
else:
analyzer = USB4SignalAnalyzer()
signal_data = analyzer.load_signal_data("usb4_capture.csv")
These basic examples provide a solid foundation for USB4 validation. For more complex scenarios, see the advanced testing examples.