2016-03-10 28 views
6

Ho trovato la simulazione utilizzando iverilog come metodo non adatto, posso simulare progetti che non sintetizzano e inversamente progettano che non solo sintetizzano ma funzionano anche come destinato all'hardware fisico, non si sintetizza con iverilog per la simulazione.È possibile creare una forma d'onda di simulazione dall'output di yosys

Quello che sto cercando di fare idealmente prendere l'uscita di yosys (un file blif) e creare una forma d'onda di simulazione (VCD) che io possa avere una migliore fiducia.

+0

Forse offtopic, ma se VHDL è un'opzione, non ho mai avuto un problema con le forme d'onda ghdl. – xvan

+1

Che cos'è yosys? Non ne ho mai sentito parlare. – Paebbels

+0

yosys fa parte della catena di strumenti Verilog open source per l'iCEstick e la scheda –

risposta

8

Così si desidera eseguire post-sintesi simulazione di netlist BLIS di iCE40.

Si consideri il seguente disegno semplice esempio (test.v):

module test(input clk, resetn, output reg [3:0] y); 
    always @(posedge clk) 
    y <= resetn ? y + 1 : 0; 
endmodule 

E il suo banco di prova (test_tb.v):

module testbench; 
    reg clk = 1, resetn = 0; 
    wire [3:0] y; 

    always #5 clk = ~clk; 

    initial begin 
    repeat (10) @(posedge clk); 
    resetn <= 1; 
    repeat (20) @(posedge clk); 
    $finish; 
    end 

    always @(posedge clk) begin 
    $display("%b", y); 
    end 

    test uut (
    .clk(clk), 
    .resetn(resetn), 
`ifdef POST_SYNTHESIS 
    . \y[0] (y[0]), 
    . \y[1] (y[1]), 
    . \y[2] (y[2]), 
    . \y[3] (y[3]) 
`else 
    .y(y) 
`endif 
); 
endmodule 

Esecuzione di simulazione pre-sintesi è ovviamente semplice:

$ iverilog -o test_pre test.v test_tb.v 
$ ./test_pre 

Per la simulazione post-sintesi dobbiamo prima eseguire il synth ESIS:

$ yosys -p 'synth_ice40 -top test -blif test.blif' test.v 

Poi dobbiamo convertire la netlist BLIF ad una netlist Verilog in modo che possa essere letta da Icarus Verilog:

$ yosys -o test_syn.v test.blif 

Ora siamo in grado di costruire i binari di simulazione dal banco di prova, il sintetizzato progettazione e modelli di simulazione ICE40, ed eseguirlo:

$ iverilog -o test_post -D POST_SYNTHESIS test_tb.v test_syn.v \ 
         `yosys-config --datdir/ice40/cells_sim.v` 
$ ./test_post 

[..] non sarà sintetizzare con iverilog per la simulazione.

Questo è più probabile perché Yosys non è così severo come iverilog quando si tratta di far rispettare lo standard Verilog. Ad esempio, in molti casi, Yosys eccetto i file Verilog con la parola chiave reg mancante da fili che richiederebbe la parola chiave reg in base allo standard Verilog. Ad esempio, yosys accetterà la seguente digitazione, anche se non è valido il codice Verilog:

module test(input a, output y); 
    always @* y = !a; 
endmodule 

Per Icarus Verilog si deve aggiungere il mancante reg:

module test(input a, output reg y); 
    always @* y = !a; 
endmodule 
+0

grazie per il suggerimento di iverilog post sintesi (per non parlare degli ottimi strumenti!) ad essere sincero ho altrettanti problemi con il codice iverilog valido non sintetizzare come ho l'altro modo il giro! (la maggior parte di questo è perché sto facendo cose attraverso l'ignoranza con verilog che potrebbe arricciare le dita dei piedi !!!) BTW è ice40/cells_sim.v ok per la scheda 8k? –

+0

@ChrisCamacho Aprire un ticket su github o una domanda qui su stackoverflow se si dispone di codice verilog che si ritiene debba funzionare ma viene rifiutato da yosys.E sì, 'ice40/cells_sim.v' è ok per i dispositivi iCE40 1K, 4K e 8K. – CliffordVienna