Introduzione ai Serdi ad alta velocità in VHDL

I moduli Serialiser/deserialiser (SerDes) sono blocchi fondamentali per la costruzione di moderni sistemi di comunicazione dati ad alta velocità. Essi convertono flussi di dati paralleli in formato seriale per la trasmissione su un unico paio differenziale o fibra ottica, e poi ricostruiscono i dati paralleli al ricevitore.

SerDes Architettura Fondamenti

Un SerDes completo può essere diviso in quattro sottosistemi chiave: il serializzatore, il deserializzatore, il recupero di dati dell'orologio (CDR), e l'allineamento/framing circuiti. Mentre il trasmettitore laterale serializza i dati paralleli, il lato del ricevitore deve recuperare l'orologio bit dal flusso seriale in entrata e allineare i confini dei dati.

Serializzatore (Conversione di linea)

Il serializzatore prende una parola parallela larga N] e produce i bit uno alla volta alla linea. L'orologio parallelo () è tipicamente N tempi più lenti rispetto all'orologio seriale (]]).

Deserializer (Conversione seriale-a-Parallel)

Il deserializzatore esegue l'operazione inversa: riceve un flusso di bit seriale e ricostruisce la parola parallela. I bit in entrata vengono spostati in un registro su ogni bordo di orologio seriale. Quando la parola completa viene assemblata, viene presentato sul bus di uscita parallelo con una bandiera valida associata. Il deserializzatore deve anche gestire l'allineamento bit; se il flusso di dati non ha un modello di inquadratura noto, l'allineamento viene raggiunto tramite caratteri virgolari o intestazioni di pacchetti.

Recupero Dati di Orologio (CDR)

CDR estrae l'orologio seriale dal flusso di dati in arrivo. Questo è fondamentale perché il ricevitore e il trasmettitore non sono bloccati in frequenza in molti sistemi. In SerDes ad alta velocità, CDR è tipicamente implementato come un loop bloccata in fase (PLL) o loop bloccato in ritardo (DLL) che regola un oscillatore locale per corrispondere alle transizioni dei dati in arrivo.

Allineamento e Framing di parole

Molti protocolli incorporano un modello distinto (ad esempio, K28.5 in 8b/10b) che il deserializer utilizza per individuare i confini byte. La logica di allineamento VHDL include una macchina statale che cerca il modello e poi sposta il flusso bit fino a quando il modello non è abbinato.

Sfide nel design di SerDes ad alta velocità

SerDes ad alta velocità operano a velocità multi-gigabit, spesso superiore a 10 Gbps per corsia. A queste velocità, le sfide di progettazione fisica e digitale diventano pronunciate.

Chiusura di sincronizzazione e Metastability

Il serializzatore e il deserializzatore devono trasferire i dati tra domini di orologio (parallele e seriale). La metastability può verificarsi se vengono violati i tempi di configurazione/hold. I progettisti VHDL devono inserire i sincronizzatori e con attenzione vincolare lo strumento di sintesi per soddisfare i tempi.

Jitter e Skew

Nel serializzatore, lo skew dell'orologio tra i domini paralleli e seriali porta a un ordine a bit errato. Per contrastare questo, i progetti SerDes ad alta velocità spesso utilizzano segnali differenziali, pre-enfasi e equalizzazione. Da un punto di vista VHDL, i progettisti devono ridurre al minimo la logica combinariale nel percorso di dati seriali; il ritiro (moving flip-flops to balance delays) è una tecnica comune.

Consumo di energia

Le strategie di riduzione dell'energia includono il gating dell'orologio, abbassando la tensione di alimentazione (se la tecnologia di destinazione permette), e utilizzando seriali con larghezze parallele inferiori (ad esempio, spostando 8 bit contro 32 bit) per ridurre la frequenza dell'orologio seriale.

Tecniche di implementazione VHDL per SerDes ad alta velocità

Per ottenere un funzionamento affidabile a velocità multi-gigabit, il codice VHDL deve essere sintetizzato in risorse hardware dedicate, le seguenti sezioni presentano tecniche ed esempi pratici di codifica.

Utilizzo di SerDes Dedicato Macros Hard

La maggior parte dei moderni FPGA include i transceivers SerDes induriti (ad esempio, Xilinx GTY, Intel E-tile). Questi blocchi contengono PLL, CDR, deserializzatori e circuiti di equalizzazione.

Attuazione dei SerDes Morbidi (velocità dei Moderati)

Per le tariffe fino a poche centinaia di megahertz, è possibile utilizzare un SerDes completamente morbido in VHDL. La chiave è quella di utilizzare registri e contatori a turni che vengono implementati con infradito dedicati ed evitare lunghe catene combinatorie.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity Serializer_8to1 is
 Port (
 clk_ser : in STD_LOGIC; -- serial clock
 clk_par : in STD_LOGIC; -- parallel clock (1/8 rate)
 rst : in STD_LOGIC;
 data_in : in STD_LOGIC_VECTOR(7 downto 0);
 load : in STD_LOGIC;
 serial_out : out STD_LOGIC;
 busy : out STD_LOGIC
 );
end Serializer_8to1;

architecture Behavioral of Serializer_8to1 is
 signal shift_reg : STD_LOGIC_VECTOR(7 downto 0);
 signal bit_cnt : integer range 0 to 7;
begin
 process(clk_ser, rst)
 begin
 if rst = '1' then
 shift_reg <= (others => '0');
 bit_cnt <= 0;
 busy <= '0';
 elsif rising_edge(clk_ser) then
 if load = '1' then
 shift_reg <= data_in;
 bit_cnt <= 7;
 busy <= '1';
 elsif bit_cnt > 0 then
 shift_reg <= shift_reg(6 downto 0) & '0';
 bit_cnt <= bit_cnt - 1;
 else
 busy <= '0';
 end if;
 end if;
 end process;

 serial_out <= shift_reg(7);
end Behavioral;

Questo serializzatore utilizza l'orologio seriale per tutte le operazioni. Il segnale [] deve essere sincronico a [; in pratica, è necessario un circuito di attraversamento di un dominio di clock dal dominio parallelo.

Diserializzatore con allineamento di Word

Il deserializzatore deve estrarre la parola parallela e identificare i confini. L'esempio seguente include una semplice macchina di stato di allineamento che cerca un modello noto (ad esempio, ).

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity Deserializer_8b10b is
 Port (
 clk_ser : in STD_LOGIC;
 rst : in STD_LOGIC;
 serial_in : in STD_LOGIC;
 data_out : out STD_LOGIC_VECTOR(9 downto 0);
 aligned : out STD_LOGIC
 );
end Deserializer_8b10b;

architecture Behavioral of Deserializer_8b10b is
 signal shift_reg : STD_LOGIC_VECTOR(9 downto 0);
 signal bit_cnt : integer range 0 to 10;
 signal lock : STD_LOGIC := '0';
begin
 process(clk_ser, rst)
 begin
 if rst = '1' then
 shift_reg <= (others => '0');
 bit_cnt <= 0;
 lock <= '0';
 aligned <= '0';
 elsif rising_edge(clk_ser) then
 shift_reg <= shift_reg(8 downto 0) & serial_in;
 if bit_cnt < 10 then
 bit_cnt <= bit_cnt + 1;
 end if;
 -- check for alignment pattern at any bit position
 if lock = '0' then
 if bit_cnt = 10 then
 if shift_reg = "1111000010" then -- comma pattern
 lock <= '1';
 aligned <= '1';
 end if;
 end if;
 else
 -- After locked, output parallel word every 10 clocks
 if bit_cnt = 10 then
 data_out <= shift_reg;
 bit_cnt <= 0;
 end if;
 end if;
 end if;
 end process;
end Behavioral;

In un sistema reale, la logica di allineamento deve anche gestire bit scivolando e più caratteri virgola per pacchetto. L'orologio CDR viene assunto recuperato; se non, è necessario un blocco PLL.

Dominio dell'orologio Strategie incrociate

I progetti SerDes ad alta velocità si incrociano inevitabilmente dal più lento orologio parallelo al clock seriale veloce. L'approccio più sicuro è quello di utilizzare un buffer FIFO (primo in, primo in) per decouplare i domini. In VHDL, il FIFO può essere implementato come una RAM a doppio porto con puntatori di lettura e scrittura sincronizzati tra gli orologi.

Simulazione e verifica

La simulazione di un SerDes ad alta velocità richiede un'attenta progettazione del banco di prova. Il banco di prova dovrebbe generare modelli di dati, iniettare jitter (per valutare i margini di tempo e CDR), e verificare che i dati trasmessi corrispondano ai dati ricevuti dopo la formazione.

  • generazione dei dati:[] Utilizzare PRBS (sequenze bit pseudo-random) per emulare il traffico realistico.
  • Modellare l'orologio seriale con un rumore di fase realistico. La maggior parte dei simulatori digitali possono approssimare il jitter utilizzando un periodo variabile in banchi di prova VHDL (ad esempio, con piccole variazioni casuali).
  • Verifica basata su tesi[[]: Inserisci le asserzioni VHDL per verificare le violazioni dei protocolli, come i codici dei caratteri non validi nella codifica o nel disallineamento di 8b/10b dopo un numero definito di cicli di clock.
  • Test basati su cavi:[] Eseguire simulazioni lunghe per garantire che la macchina di stato di allineamento può bloccare il modello di virgola in varie fasi iniziali. La copertura funzionale può essere registrata utilizzando SystemVerilog se disponibile, o tramite contatori VHDL personalizzati.

I venditori come Xilinx e Intel forniscono librerie di simulazione per i primitivi SerDes. Utilizzando queste librerie accelera la verifica perché modellano il comportamento analogico del PLL e la equalizzazione.

Argomenti avanzati: Pre-enfasi, Parimentazione e Considerazioni PCB

Mentre il codice VHDL non può alterare il comportamento dello strato fisico, il controller SerDes può regolare le impostazioni di equalizzazione se il ricetrasmettitore li supporta. I transceiver FPGA moderni hanno pre-enfasi del trasmettitore programmabile e equalizzazione del ricevitore. In VHDL, questi sono configurati scrivendo per controllare i registri tramite un bus interno (ad esempio, AXI-Lite).

Il layout PCB è altrettanto critico: le tracce seriali devono essere controllate dall’impedenza (di solito il differenziale di 100 Ω), e la distribuzione dell’orologio dovrebbe ridurre al minimo lo skew tra l’orologio di riferimento e l’ingresso dedicato del ricetrasmettitore. Questi vincoli fisici sono al di fuori del VHDL, ma il designer digitale deve fornire chiare linee guida all’ingegnere PCB, come le specifiche di tolleranza e di perdita di ritorno.

Case study: implementare un servizio Ethernet Gigabit in VHDL

Gigabit Ethernet (1000BASE-X) utilizza uno schema di codifica 8b/10b e una velocità di linea di 1.25 Gbps. I SerDes devono serializzare una parola parallela a 8 bit più un bit di controllo (per la distinzione di caratteri K/D) in un flusso seriale a 10 bit. Il ricevitore esegue il recupero di clock dai dati e allinea i confini delle parole utilizzando la virgola (binary [[

  1. Un codificatore 8b/10b (può essere implementato come una tabella di ricerca) che converte i dati a 8 bit e i segnali di controllo in gruppi di codice a 10 bit.
  2. Un serializzatore che prende il gruppo di codice a 10 bit e lo emette serialmente a 1.25 Gbps.
  3. Un deserializzatore che si sposta in bit e cerca il modello di virgola.
  4. Un blocco CDR (solitamente istantaneo da un venditore primitivo) che genera un orologio recuperato 125 MHz (per il lato parallelo) dal flusso in entrata 1.25 Gbps.
  5. Un FIFO per trasferire i dati ricevuti dal dominio orologio recuperato al dominio orologio di sistema.

Questa architettura può essere descritta interamente in VHDL, ad eccezione del CDR analogico e del driver/ricevitore lineare. Molti progetti open source forniscono tali implementazioni per scopi educativi, ma per la produzione, i ricetrasmettitori induriti sono fortemente raccomandati.

Conclusioni

L'implementazione di SerDes ad alta velocità in VHDL è un compito impegnativo ma gratificante che collega logica digitale e design analogico ad alta frequenza. Il codice VHDL deve essere scritto con vincoli di sintesi, chiusura dei tempi e passaggio del dominio dell'orologio in mente.Per i tassi superiori a 1 Gbps, sfruttando le macro transceiver dedicate è essenziale; per i tassi più bassi, un SerDes completamente morbido può essere costruito utilizzando i registri di turni e controri.


Riferimenti esterni[]