Zpět na domů

Ko-simulace Icarus Verilog a NGSpice: porovnání architektur

Článek analyzuje dvě architektury mostu pro ko-simulaci Icarus Verilog a NGSpice. Jsou zvážena fundamentální omezení každého přístupu a doporučení k použití v reálných projektech. Nástroj je již používán pro verifikaci smíšených obvodů.

Jak funguje most mezi Icarus Verilog a NGSpice pro ko-simulaci?
Advertisement 728x90

# Ko-simulace digitálních a analogových obvodů: dva přístupy k mostu Icarus Verilog a NGSpice

Moderní elektronické systémy vyžadují integraci digitálních a analogových komponent, což činí smíšené modelování klíčovým. Pro řešení této úlohy jsme implementovali most mezi Icarus Verilog a NGSpice a vyvinuli dvě architektury. Každá z nich má zásadní omezení, ale již nyní umožňuje řešit reálné úkoly od SAR ADC po sigma-delta modulátory.

Základy smíšeného modelování: události versus kontinuita

Digitální obvody se modelují událostně: simulátor se aktivuje pouze při změnách signálů (přechody taktu, přepínání flip-flopů). Tak fungují Icarus Verilog a další digitální simulátory – mezi událostmi systém „spí“, což zajišťuje vysoký výkon. Analogové obvody vyžadují kontinuální modelování: SPICE enginy (NGSpice, Spectre) dělí čas na malé kroky a řeší diferenciální rovnice pro každý interval. Tento přístup je přesný, ale náročný na zdroje, zejména při ostrých přechodech nebo zpětné vazbě.

Klíčovým problémem ko-simulace je sladění zásadně odlišných paradigm. Digitální simulátor pracuje s diskrétními událostmi, zatímco analogový potřebuje plynulý časový tok. Při pokusu o sjednocení SAR ADC (kde analogový komparátor interaguje s digitální logikou) vzniká dilema: jak předávat data mezi enginy bez ztráty kritických událostí?

Google AdInline article slot

Architektura mostu: společné principy

Obě implementace využívají stejné technologie:

  • VPI (Verilog Procedural Interface) pro interakci s Icarus
  • Dynamickou knihovnu libngspice.so
  • Proudový mechanismus se semafory
  • Samostatný výkonný proud pro NGSpice

Centrálním prvkem je systémová úloha $spice_sync(), která se volá při přechodech taktového signálu. Provádí celý cyklus výměny: přenos digitálních hodnot do SPICE příkazy alter, dotaz analogových napětí a aktualizaci real proměnných v Verilogu. To umožňuje zobrazovat analogové signály v GTKWave na společné časové ose s digitálními.

always @(posedge clk_fast) begin
    $spice_sync();
    if (tb.Vcmp > vref_th) begin
        // Reakce na událost
        ...
    end
end

Mechanismus expose_analog_N automaticky synchronizuje analogové proměnné a činí je dostupnými pro digitální logiku. Pro modelování přechodů a zpoždění se používají obalové objekty na obou stranách mostu.

Google AdInline article slot

Klasický přístup: synchronní polling

V této implementaci Verilog iniciuje výměnu při každém volání $spice_sync(). Simulátor zaznamená aktuální čas, zablokuje se na semaforu, předá řízení NGSpice, který simuluje do uvedeného okamžiku a vrátí data.

Výhody:

  • Plná determinovanost
  • Předvídatelný výkon
  • Jednoduchost implementace (asi 2000 řádků kódu)

Kritická omezení:

Google AdInline article slot
  • Plná neviditelnost analogových událostí mezi taktovými přechody. Například pokud se komparátor přepne v 5,2 ns a další takt je v 10,0 ns, digitální logika změnu zjistí až po 4,8 ns, což znemožňuje fungování zpětné vazby v SAR ADC nebo DC-DC měničích.
  • Nutné přehnané převzorkování: pro zachycení rychlých událostí je třeba uměle zvyšovat frekvenci taktu (např. na 500 MHz), což snižuje výkon.

Tento přístup je životaschopný jen pro úlohy, kde analogové události probíhají synchronně s taktovými přechody, nebo při použití vysokofrekvenčního taktu pro synchronizaci.

Alternativní přístup: lookahead analýza

Pro překonání omezení klasické metody byl implementován lookahead mechanismus. NGSpice dostane právo „vybíhat dopředu“ na daný interval a sleduje analogové události pomocí konfigurovatelných senzorů. Příklad pravidla v mixed_bridge.cfg:

analog_event_0 = threshold outp rising 1.2 | time_var=tb.analog_event_time id_var=tb.analog_event_id

Při splnění podmínky SPICE zastaví a iniciuje událost v Verilogu přes callback cbAfterDelay.

Výhody:

  • Možnost detekce asynchronních analogových událostí
  • Flexibilita konfigurace (prahové hodnoty, délky, energetické podmínky)
  • Snížení zátěže při řídkých taktech

Zásadní nevýhody:

  • Ztráta událostí mezi kroky SPICE kvůli diskrétnosti časové integrace
  • Porušení kauzality: příkazy alter (změna digitálních signálů) se aplikují až v další fázi modelování, což je kritické pro DAC
  • Omezení na jednu událost za analytické okno
  • Nedeterminovanost kvůli heuristikám volby délky lookahead intervalu
  • Složitost implementace (3500+ řádků kódu + parser konfigurace)

Klíčové rozdíly ve srovnání

Hlavní kompromisy mezi architekturami se projevují v pěti aspektech:

  • Detekce událostí: Klasická metoda úplně přehlíží události mezi takty, alternativní je částečně zachytí, ale s rizikem ztrát
  • Kauzalita: V klasickém přístupu je vazba DAC→analog správná, v alternativním mohou nastat časové nesoulady
  • Výkon: Synchronní metoda poskytuje stabilní rychlost, lookahead analýza se může prudce zpomalit při krátkých intervalech
  • Determinovanost: Pouze klasická implementace zaručuje reprodukovatelnost výsledků
  • Složitost integrace: Alternativní přístup vyžaduje jemné ladění heuristik a analýzu časových charakteristik obvodu

Co je důležité: klíčové závěry

  • Ideální řešení neexistuje: Obě architektury mají neodstranitelné omezení kvůli zásadním rozdílům v modelovacích paradigmatech
  • Výběr závisí na úloze: Pro sigma-delta modulátory s řídkými impulsy je vhodná alternativní metoda, pro SAR ADC s přísnými časovými požadavky klasická s přehnaným převzorkováním
  • Reálná použitelnost: Nástroj se již používá pro verifikaci digitální logiky v analogovém prostředí a počítání impulsů
  • Vizualizace: Obě implementace zajišťují společné zobrazení signálů v GTKWave a gnuplot na jediné časové ose
  • Perspektivy: Integrace fronty událostí a použití cbNextSimTime mohou omezení částečně zmírnit

Praktická implementace a příklad použití

Prozkoumejme použití mostu pro sigma-delta modulátor. Analogová část generuje krátké impulsy, které má digitální čítač spočítat. V klasickém přístupu stačí volat $spice_sync() s frekvencí převyšující délku impulsů. Příklad Verilog kódu:

module DSMCounter(
    input i_clk,
    input i_rst,
    input i_Qbar,
    output reg[31:0] o_cntQbar,
    output reg o_ready
);
parameter CNT_CLK = 22;
reg [31:0] cnt;
reg [31:0] cntQbar;

always @(posedge i_clk) begin
    if(i_rst) begin
        cnt <= 0;
        cntQbar <= 0;
        o_cntQbar <= 0;
        o_ready <= 0;
    end else begin
        o_ready <= 0;
        if(i_Qbar == 1) begin
            cntQbar <= cntQbar + 1;
        end
        if(cnt == CNT_CLK-1) begin
            o_cntQbar <= cntQbar;
            o_ready <= 1;
            cnt <= 0;
            cntQbar <= 0;
        end else begin
            cnt <= cnt + 1;
        end
    end
end
endmodule

V alternativní implementaci lze snížit frekvenci synchronizace pomocí pravidel detekce impulsů přes analog_event. Vyžaduje však pečlivé nastavení lookahead parametrů pro prevenci ztrát.

Pro spuštění je nutná shared verze NGSpice (kompilace s --with-ngshared). Konfigurace mostu se zadává v mixed_bridge.cfg, kde se definují body synchronizace a pravidla detekce událostí. Obě implementace jsou volně dostupné, ale vyžadují testování pro konkrétní úlohu.

Perspektivní směry vývoje zahrnují implementaci fronty událostí místo jediného příznaku, integraci maxstep do konfigurace mostu a použití cbNextSimTime pro přesnější řízení času. Plnohodnotné řešení je možné jen při přidání událostního API do NGSpice.

— Editorial Team

Advertisement 728x90

Číst dál