UVM (Universal Verification Methodology) Test Sequence Generator

UVM Test Sequence Generator

Automated generation of reusable SystemVerilog/UVM transaction sequences.

Sequence Definition

Sequence Item List

Define the sequence of transactions to be executed by the driver.

No items defined yet.

'; return; } sequenceItems.forEach(item => { let constraintDisplay = item.constraint === 'rand' ? 'Randomize' : (item.constraint === 'constrain' ? 'Constrained' : 'Default'); const itemDiv = document.createElement('div'); itemDiv.className = 'uvm-list-item'; itemDiv.innerHTML = ` ${escapeHtml(item.name)} ${constraintDisplay} `; list.appendChild(itemDiv); }); } // --- Code Generation --- window.uvmGenerateCode = function() { const seqName = document.getElementById('uvm-seq-name').value.trim() || "my_base_seq"; const itemType = document.getElementById('uvm-item-type').value.trim() || "my_tr"; const date = new Date().toLocaleDateString('en-US'); const author = "UVM Test Sequence Generator"; let bodyCode = ''; sequenceItems.forEach((item, index) => { bodyCode += ` // Step ${index + 1}: ${item.description} begin ${itemType} ${item.name}; // Create the transaction object (Sequence Item) ${item.name} = ${itemType}::type_id::create("${item.name}"); // Start of item execution if (!${item.name}.randomize() with { addr inside { min_addr: max_addr }; }) begin \`uvm_fatal(get_full_name(), "Randomization failed!"); end // Send the transaction to the sequencer/driver start_item(${item.name}); finish_item(${item.name}); end\n`; }); if (sequenceItems.length === 0) { bodyCode = ` // No sequence items defined. Add items in the Builder tab. return;`; } // Final Code Structure const finalCode = ` //---------------------------------------------------------------------- // Title: ${seqName}.sv // Generated by: ${author} // Date: ${date} // Description: Executes a sequence of ${sequenceItems.length} ${itemType} transactions. //---------------------------------------------------------------------- class ${seqName} extends uvm_sequence#(${itemType}); \`uvm_object_utils(${seqName}) function new(string name = "${seqName}"); super.new(name); endfunction task body(); ${bodyCode} endtask : body endclass : ${seqName} `; document.getElementById('uvm-code-output').innerHTML = finalCode; }; // --- PDF Download --- window.uvmDownloadPDF = function() { const element = document.getElementById('uvm-code-output'); const seqName = document.getElementById('uvm-seq-name').value || "uvm_sequence"; // Ensure code is generated before downloading if(element.innerHTML.includes('No sequence items')) { alert("Please generate the sequence code before downloading."); return; } document.body.classList.add('uvm-generating-pdf'); const opt = { margin: [0.5, 0.5], filename: `${seqName}_seq.pdf`, image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, useCORS: true }, jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' } }; html2pdf().set(opt).from(element).save().then(() => { document.body.classList.remove('uvm-generating-pdf'); }); }; // Utility: HTML Escape function escapeHtml(text) { if (!text) return ''; return text.replace(/[&<>"']/g, function(m) { switch (m) { case '&': return '&'; case '<': return '<'; case '>': return '>'; case '"': return '"'; case "'": return '''; default: return m; } }); }
Scroll to Top