25 / 63 · Esercitazione
Laboratorio: verifica esaustiva del MUX e uscita registrata
Applicare gli stessi ingressi ai percorsi combinatorio e registrato e verificarli con tabella e istante di campionamento.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Oggetto del laboratorio e osservazione
Con sel=0 y riceve a, con sel=1 riceve b. sampled_y memorizza y al fronte di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci e resta fermo fino al successivo anche se cambiano gli ingressi.
Prima di iniziare
Preparate un progetto Desktop in Digital Design Studio e assicuratevi di avere autorizzazioni di esecuzione valide. Salvate ogni esempio come rtl/top.sv in una cartella separata.
Impostate anzitutto a e b diversi. Verificate a con sel=0 e b con sel=1, poi confrontate ogni riga del file d'ingresso.
y = sel ? b : a
Sorgente SystemVerilog
module top (
input logic clk,
input logic a,
input logic b,
input logic sel,
output logic y,
output logic sampled_y
);
assign y = sel ? b : a;
// Explicit observation register: y remains purely combinational.
// The register makes this design eligible for logic-netlist-1 simulation.
always_ff @(posedge clk) sampled_y <= y;
endmoduleEsecuzione
In New analysis selezionate Two-state single-clock v1. Clock port è clk e il periodo è 1000ps. Con i valori seguenti eseguite Preflight, poi Run RTL simulation, e confrontate i risultati.
| Impostazione | Valore |
|---|---|
| Valori iniziali dei registri, dal LSB | [false] |
| Reset port | Vuoto |
| Maximum cycles / time | 8 / 8000ps |
Ogni colonna corrisponde a un elemento del file seguente. y atteso è 0,0,0,1,1,0,1,1. Il diagramma prevede la funzione secondo l'ordine degli ingressi e non include gli istanti di aggiornamento di sampled_y.
Mostra i dati della forma d’onda
| Segnale | Forma d’onda | Valori del bus |
|---|---|---|
| a | 0...1... | |
| b | 0.1.0.1. | |
| sel | 01010101 | |
| y expected | 0..1.01. |
Stimoli d'ingresso
[
{
"inputs": {
"a": [
false
],
"b": [
false
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
false
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
true
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
true
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
false
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
false
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
true
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
true
],
"sel": [
true
]
}
}
]Confronto dei risultati
8 cycles · y=1 · sampled_y=1. A 3000ps verificate y=1 e sampled_y=0.
Il laboratorio usa RTL 0/1 con un solo clock. Non include testbench con #delay, initial o X/Z. Il contrassegno di completamento documenta l’apprendimento, non un risultato di simulazione reale.
Scrivere prima i risultati attesi
Prima della simulazione calcolate per la sequenza indicata: . La sequenza copre tutte le otto combinazioni: verificarle fornisce più evidenza di un solo valore finale corretto.
L'uscita registrataRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci si aggiorna al fronte di salita, non quando cambiano gli stimoli. Annotate separatamente uscita combinatoria prima del fronte e uscita del registro dopo.
Qui l'ingresso campionato al fronte definisce lo stato successivo , cioè sampled_y. Anche sulla stessa coordinata temporale occorre verificare l'ordine fra applicazione dell'ingresso e aggiornamento del registro.
Tre verifiche per distinguere i difetti
- Selezione invertita: prima di sostituire con
sel ? a : b, prevedete il primo vettore che fallirà. I vettori con non rilevano il difetto. - Osservazione sbagliata: spiegate perché confrontare immediatamente
sampled_yal posto diycon la risposta combinatoria fa sembrare errato anche un circuito corretto. - Indipendenza dall'ingresso non scelto: cambiate solo quello e verificate che resti fermo. Deve invece seguire l'ingresso scelto.
Per ogni errore annotate ingresso, istante, valore atteso e reale. «La forma d'onda è strana» non distingue un errore di selezione da una latenza di un ciclo.
Estensione
Con dati a quattro bit lo spazio combinatorio è . La verifica esaustiva è ancora possibile, ma provate prima 0, massimo, 0101, 1010 e walking-one per evidenziare errori di posizione. Aggiornate anche impostazioni e file d'ingresso per la nuova larghezza.
Prova tu
Dopo aver acquisito , prima del fronte seguente si porta solo a 1. Calcolate dopo il ritardo logico e sampled_y prima e dopo il prossimo fronte di salita.
Leggi la spiegazione
. sampled_y resta 0 fino al prossimo fronte di salita e allora memorizza 1. Si assume che gli ingressi siano stabili per il tempo necessario al campionamento.