Altifigence Academy

40 / 63 · Esercitazione

Laboratorio: movimento seriale e ordine dei bit

Verificare direzione, bit persi e latenza dopo reset con sequenze binarie e riferimento intero.

Oggetto del laboratorio e osservazione

A ogni fronte di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci i due bit bassi del vecchio q scorrono a sinistra e din entra al bit 0. Confrontate il percorso inserendo 1,0,1,1.

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.

Sorgente SystemVerilog

SystemVerilog
module top (
    input logic clk,
    input logic rst,
    input logic din,
    output logic [2:0] q
);
    // Old q[1:0] and din are captured together at each rising edge.
    always_ff @(posedge clk)
        if (rst) q <= 3'b000;
        else q <= {q[1:0], din};
endmodule

Esecuzione

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.

ImpostazioneValore
Valori iniziali dei registri, dal LSB[false, false, false]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

Stimoli d'ingresso

json
[
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  }
]

Ogni colonna registra un fronte di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci. Gli ingressi sono quelli immediatamente precedenti; gli stati indicati con «after» sono quelli subito dopo l’aggiornamento. Le colonne indicano l’ordine dei campioni, non il ritardo fisico di propagazioneRitardo di propagazione Tempo dalla variazione d’ingresso all’assestamento corretto dell’uscita. Equivalenza logica e proprietà temporali sono distinte. Approfondisci. La prima colonna è resetReset Controllo che riporta allo stato iniziale specificato. Occorre definirne sincronicità e priorità rispetto agli altri controlli. Approfondisci: din=0 non conta come dato acquisito. Confrontate i quattro ingressi successivi con l'ordine JSON.

Stimoli di ingresso e scorrimento dello stato dei tre bit
Mostra i dati della forma d’onda
Dati della forma d’onda: ogni carattere è un intervallo; il punto mantiene lo stato precedente; p è un ciclo di clock.
SegnaleForma d’ondaValori del bus
edge23452E0 → E1 → E2 → E3 → E4
reset10...
din0101.
q after23452000 → 001 → 010 → 101 → 011

Confronto dei risultati

5 cycles · q=011. A ogni fronte: 000 → 001 → 010 → 101 → 011.

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.

Verificare la concatenazione indipendentemente

Copiare la concatenazioneConcatenazione Accoda sequenze di bit. La larghezza risultante è la somma delle larghezze, non un’addizione numerica. Approfondisci RTL come risposta del test può duplicare l'errore. Usate un riferimento basato su interi unsignedUnsigned Interpretazione dei bit come intero non negativo. Il campo a n bit è 0–2^n−1 e può differire dalla lettura signed degli stessi bit. Approfondisci.

Qk+1=(2Qk+dk) mod 8Q_{k+1}=(2Q_k+d_k)\bmod 8

Dopo reset, 1,0,1,1 danno 0→1→2→5→30\to1\to2\to5\to3. In binario a tre bit devono coincidere con la forma d'onda. Nell'ultimo passo 2⋅5+1=112\cdot5+1=11; conservando tre bit bassi resta 3.

Bit ricevutiIngressoq dopo il fronteIntero
0Reset0000
110011
200102
311015
410113

Con reset=0, enable=1 scegliete din=1,0,1,1 e avanzate ogni volta: q=001,010,101,011. Prevedete con questo modello a passi, poi confrontate il risultato RTL reale. Enable permette anche di provare lo stop nell'estensione.

Prevedere l’ordine dei bit prima di eseguire l’RTL

Il reset sincrono ha priorità su enable. Con enable=0, il valore memorizzato viene mantenuto. q=000; q_next = (2q + din) mod 8

Seguire un solo bit per verificare la direzione

Dopo reset inserite una volta 1 e tre volte 0: 001 → 010 → 100 → 000. Il primo 1 attraversa bit 0,1,2 e scompare. Schemi uniformi di soli 0 o 1 possono nascondere la direzione errata.

Se il primo ingresso viene acquisito al fronte kk, in un registroRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci a tre stadi raggiunge il bit 2 al fronte k+2k+2. Contando invece dal lancio di un registro esterno cambia il riferimento: dichiarate partenza e arrivo nel rapporto.

Estensione: spostare solo ingressi validi

Supponete di aggiungere valid. Mantenere q con valid=0 differisce da una pipeline che muove ogni ciclo dati e un valid separato. La prima avanza secondo i bit accettati, la seconda secondo i cicli trascorsi. Non verificate entrambe con la stessa sequenza di stati attesi.

Prova tu

Dopo reset i bit validi sono 1,0,1. Prima e dopo il secondo c’è un ciclo invalid che mantiene q. Spiegate q finale e l’arrivo del primo 1 al bit 2.

Leggi la spiegazione

Solo tre ingressi validi cambiano lo stato: q finale=101. Il primo 1 raggiunge bit 2 al fronte del terzo dato valido. Dopo la prima acquisizione servono due spostamenti aggiuntivi; i due cicli invalid allungano il tempo reale.

Lesson files

shift-top.sv ↓shift-inputs.json ↓

La scelta vale per questo browser. Puoi modificarla in qualsiasi momento dal piè di pagina.