workspace "VUT Device Characterization Platform" "YAML-driven orchestration of DC and CV measurements for NFET devices using GPIB/VISA instruments." { model { properties { "structurizr.groupSeparator" "/" } labOperator = person "Lab Operator" "Configures devices and measurement recipes, runs characterization, inspects exported data and plots." { tags "Person" } dataConsumer = person "Data Analyst" "Consumes exported datasets and plots for further analysis and reporting." { tags "Person" } visaRuntime = softwareSystem "VISA Runtime" "GPIB/VISA stack used to communicate with laboratory instruments (e.g., NI-VISA)." { tags "External,Infra" } keithley4200a = softwareSystem "Keithley 4200A-SCS" "SMU instrument controlled via GPIB/VISA. Config: k4200a.yaml." { tags "External,Hardware" } keysightB1500A = softwareSystem "Keysight B1500A" "SMU/CV instrument controlled via GPIB/VISA. Config: b1500a.yaml." { tags "External,Hardware" } lakeshore335 = softwareSystem "LakeShore 335" "Temperature controller controlled via GPIB/VISA. Config: lakeshore_1.yaml." { tags "External,Hardware" } fileStorage = softwareSystem "Results Storage" "Filesystem or network storage holding exported datasets and plots." { tags "External,DataStore" } characterizationPlatform = softwareSystem "Device Characterization Platform" "Runs DC Id-Vg and CV recipes defined in YAML against devices defined in YAML, controls instruments, exports results and plots." { tags "Internal,SoftwareSystem" operatorUI = container "Experiment Runner UI" "Entry point for selecting device/module/structure and measurement recipe, and triggering runs." "CLI / GUI / Notebook" { tags "Container" } configRepo = container "Configuration Repository" "YAML configuration set: device definitions (nfet.yaml), measurement recipes (DC_idvg.yaml, CV_idvg_leak.yaml), instrument configs (k4200a.yaml, b1500a.yaml, lakeshore_1.yaml), project metadata (project_2025_A1.yaml)." "YAML files (versioned)" { tags "Container,DataStore" } orchestrator = container "Experiment Orchestrator" "Loads YAML configs, plans executions, applies pad-role mappings, executes sweeps, collects outputs, and triggers export/plotting." "Application Service" { tags "Container" configLoader = component "Config Loader" "Parses and validates YAML configs; resolves cross-references (e.g., default temperature controller)." "YAML parser" { tags "Component" } deviceRegistry = component "Device Registry" "Resolves device/module/structure selection and pad mapping using role-to-pad mapping (G/D/S/B) and structure-specific overrides." "Domain component" { tags "Component" } recipePlanner = component "Recipe Planner" "Expands measurement recipes into execution plans: selects backend (k4200a/b1500a), maps SMU channels, expands frequency lists, and sweep ranges." "Domain component" { tags "Component" } executionEngine = component "Execution Engine" "Runs init sequences, fixed-bias steps, sweeps, and per-frequency loops; enforces compliance limits; collects raw readings." "Control loop" { tags "Component" } resultNormalizer = component "Result Normalizer" "Maps raw readings into the output schema (columns, units, sources) defined in recipe outputs." "ETL" { tags "Component" } runLogger = component "Run Logger" "Captures run metadata (wafer/module/device/measurement, setup id, temperature, instrument ids) and diagnostic logs." "Logging" { tags "Component" } } instrumentLayer = container "Instrument Abstraction Layer" "Backend adapters and command emitters for each instrument family; normalizes readings and errors." "Driver layer over VISA/GPIB" { tags "Container" visaTransport = component "VISA Transport" "Creates and manages GPIB/VISA sessions; sends commands; receives responses; retries and timeouts." "VISA API" { tags "Component" } k4200aAdapter = component "Keithley 4200A Adapter" "Implements SMU mapping (SMU1..SMU4) and init sequence defined in k4200a.yaml; performs DC Id-Vg execution." "Instrument adapter" { tags "Component" } b1500aAdapter = component "Keysight B1500A Adapter" "Implements SMU biasing plus CVU/MFCMU control; supports open/short corrections per recipe." "Instrument adapter" { tags "Component" } lakeshoreAdapter = component "LakeShore 335 Adapter" "Implements remote mode setup and temperature readings." "Instrument adapter" { tags "Component" } k4200aAdapter -> visaTransport "Uses" b1500aAdapter -> visaTransport "Uses" lakeshoreAdapter -> visaTransport "Uses" } exportPipeline = container "Export and Plotting Pipeline" "Writes tabular outputs per recipe (columns, units, sources) and renders plots per plotting definitions to PNG." "Batch export + plotting" { tags "Container" datasetWriter = component "Dataset Writer" "Writes tabular data using recipe output schema (e.g., Vg, Vd, Id, Ig, C, G, f, T, setup)." "Writer" { tags "Component" } plotRenderer = component "Plot Renderer" "Renders plots defined in recipes (defaults plus plot definitions, split/group rules) and exports images using filename templates." "Plotting" { tags "Component" } datasetWriter -> fileStorage "Writes datasets to" plotRenderer -> fileStorage "Writes plot images to" } } labOperator -> operatorUI "Runs experiments via" dataConsumer -> fileStorage "Reads exported datasets and plots from" operatorUI -> orchestrator "Start run / select device and recipe" orchestrator -> configRepo "Loads device, recipe, and instrument configs from" orchestrator -> instrumentLayer "Executes planned measurement steps via" orchestrator -> exportPipeline "Sends normalized results to" exportPipeline -> fileStorage "Exports datasets and plots to" instrumentLayer -> visaRuntime "Communicates via" visaRuntime -> keithley4200a "GPIB/VISA session" visaRuntime -> keysightB1500A "GPIB/VISA session" visaRuntime -> lakeshore335 "GPIB/VISA session" } views { systemContext characterizationPlatform "SystemContext" { description "System context for YAML-driven device characterization using GPIB/VISA lab instruments." include labOperator include dataConsumer include characterizationPlatform include visaRuntime include keithley4200a include keysightB1500A include lakeshore335 include fileStorage autolayout lr } container characterizationPlatform "Containers" { description "Containers for orchestration, configuration, instrument abstraction, and export/plotting." include * autolayout lr } component orchestrator "OrchestratorComponents" { description "Core orchestration components: config loading, device resolution, planning, execution, normalization, and logging." include * autolayout lr } component instrumentLayer "InstrumentLayerComponents" { description "Instrument abstraction layer components: VISA transport and instrument-specific adapters." include * autolayout lr } component exportPipeline "ExportAndPlottingComponents" { description "Export and plotting components producing datasets and PNG plots from recipe definitions." include * autolayout lr } dynamic characterizationPlatform "DC_IdVg_Run" { description "Typical DC Id-Vg run using SMU instrument and temperature controller." labOperator -> operatorUI "Selects module/structure and starts DC Id-Vg" operatorUI -> orchestrator "StartRun(device, recipe)" orchestrator -> configRepo "Load DC recipe + instrument configs + device mapping" orchestrator -> instrumentLayer "Initialize instruments (init sequence)" instrumentLayer -> visaRuntime "Open VISA session(s)" visaRuntime -> keithley4200a "Apply init sequence and SMU modes" visaRuntime -> lakeshore335 "Read temperature" orchestrator -> instrumentLayer "Execute Vg sweep at fixed Vd" visaRuntime -> keithley4200a "Set bias and measure Id/Ig per step" orchestrator -> exportPipeline "Normalize and export" exportPipeline -> fileStorage "Write dataset and plots" autolayout lr } dynamic characterizationPlatform "CV_Run" { description "Typical CV run using B1500A CVU with multi-frequency sweep and optional open/short corrections." labOperator -> operatorUI "Selects setup (Cgg/Cgs/Cgd/Cgb) and starts CV" operatorUI -> orchestrator "StartRun(device, recipe)" orchestrator -> configRepo "Load CV recipe + b1500a config + device mapping" orchestrator -> instrumentLayer "Initialize B1500A" visaRuntime -> keysightB1500A "Configure CVU (amp, range, integration, corrections)" orchestrator -> instrumentLayer "Set fixed DC biases" orchestrator -> instrumentLayer "For each frequency: execute Vg sweep and acquire C,G" orchestrator -> exportPipeline "Normalize and export" exportPipeline -> fileStorage "Write dataset and plots" autolayout lr } styles { element "Person" { shape Person } element "SoftwareSystem" { shape RoundedBox } element "Container" { shape RoundedBox } element "Component" { shape Box } element "External" { opacity 70 } element "Hardware" { shape Hexagon } element "DataStore" { shape Cylinder } } } }