cosa c'è di sbagliato nel mio codice Verilog?

V

vaf20

Guest
salve
questa è la mia domanda di fondo
Supponiamo di avere 3 segnale denominato A, B come input e C come output.
C dovrebbe essere elevato da bordo positiva di B e dovrebbero essere bassi margini negativi di codice a.nel più semplice è la seguente:
/ /
sempre @ (posedge B) C <= 1'b1;
sempre @ (negedge A C) <= 1'b0;
/ /
o altro modo
/ /
sempre @ (B)
iniziare
if (B) C <= 1;
fine
sempre @ (A)
iniziare
if (! A C) <= 0;
fine

Qual è il mio errore in quanto non attuato in una CPLD e hanno un errore di sintesi:

ERRORE: xst: 528 - Multi-source in Unità <.> Il <C> segnale
Fonti sono:
Segnale <C> in Unità <.> È assegnato al VCC

tnx

 
Ostatnio nowe wydawane karty graficzne to raczej modele oparte na procesorze GeForce GTX 970 i GTX 980. Jednak firma ASUS postanowiła zaskoczyć swoich klientów i wypuściła na rynek kartę GeForce GTX 750 DirectCU Silent. Jak już sama nazwa wskazuje, karta jest bezgłośna, bo wyposażona w pasywny system chłodzenia. Składa się on ze sporych rozmiarów r...

Read more...
 
la tua vale a dire il primo caso,
sempre @ (posedge B) C <= 1'b1;
sempre @ (negedge A C) <= 1'b0;

Strumento di sintesi più quando vedono posedge tenta di sintetizzare una flipflop con l'orologio uguale al paramenter nella lista sentivity.Ma tu hai 2 condizioni, in cui B è quello di essere usato come orologio e altri in cui A è utilizzato come orologio.Ciò non è possibile.Anche per la simulazione solo scopo non è questo il best .. codicea causa della condizione di competizione.Cosa succede se posedge di B e negedge di A succedere al tempo stesso ??????
------
La tua seconda parte del codice
sempre @ (B)
iniziare
if (B) C <= 1;
fine
sempre @ (A)
iniziare
if (! A C) <= 0;
fine

Prima ne deduce sempre un MUX caso che B è selezionare la linea di un MUX 2 ingressi, l'ingresso [1] è la connessione a VCC.e input [0] del mux viene lasciato .. apertae l'output è collegato a 'C', lo stesso tipo di circuito è infered dalla seconda sempre di blocco, tranne qui input [0] è collegato a GND e input [1] è aperto e l'output è collegato a 'C' ...questo è chiaramente un caso in cui si sta cercando di guidare un punto 'C' da più postazioni di conseguenza l'errore!Anche in questo caso anche per la simulazione solo scopo questo provoca una condizione di competizione ...Si prega di provare a sincronizzare con A e B con qualche orologio se si mira a rendere un codice corretto ...Se questo è un pezzo di codice che fa parte di un codice più grande ...mettere i vostri .. problemaprobalby possiamo arrivare a qualche altra soluzione

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Sorriso" border="0" />

Ha aggiunto, dopo 1 ora 32 minuti:Sorry ho avuto la seconda analisi sbagliata questo non produce muxes come avevo suggerito, ma creerà Chiusure con ingresso collegato a VCC per primo sempre e Fermo collegato a GND per la seconda sempre, e la CLK nel primo caso è B e secondo caso è un ed entrambi cercheranno di guidare il punto C ...Multiple driver a 'C'.Questo è il problema!

 
sempre @ (A o B)
iniziare
if (B) C <= 1;
altro
if (! A C) <= 0;
fine

proprio come DFF con il set e reset.

 
Alcuni stili di codifica deve essere rispettata se correggere i risultati di sintesi sono attesi.
(1) non si assegna lo stesso segnale in più di procedure parallele.altrimenti le informazioni sull'errore che le fonti più con un segnale verrà generato.
(2) sempre con bordo blocco attivato sarà dedurre registri.
(3) se la logica combinatoria è necessario, non utilizzare non-blocking incarichi (consigliato)

 
Risposta semplice ....

Che cosa succede se l'aumento bordo del B e fronte di discesa di A si verificano allo stesso tempo ....??Come il codice ur dovrebbe funzionare ??????

 
evitare sempre bigrillo sul processo stesso ..

Vorrei suggerire di suddividere il PGT e la NGT in due diversi processi ...e poi utilizzare i risultati ...

saluti

Maxer

 
Hi vaf20,
Credo che questo sia quello che stai cercando!Codice:Modulo phase_detector (A, B, C);

ingresso A, B;

uscita C;reg C;

reg D;reset_n filo = ~ (C & D);/ / FF 1 con A come clk

sempre @ (posedge A o negedge reset_n)

if (! reset_n)

C <= 1'b0;

altro

C <= 1'b1;

/ / FF 2 con B come clk

sempre @ (B posedge o reset_n negedge)

if (! reset_n)

D <= 1'b0;

altro

D <= 1'b1;

/ endmodule / phase_detector
 
tipo,

juat come jay_ec_engg detto, ci dovrebbe essere una logica di risoluzione, quando entrambi gli eventi si stanno verificando al tempo stesso.
perché due blocchi alwasys sono Disegno lo stesso flip-plop, sia cercherà di spingere la logica contraria-stati, e l'output sarà stato indeterminato.

meglio non utilizzare posedge e negedge, in un momento nel design.

"Buon lavoro"

 

Welcome to EDABoard.com

Sponsor

Back
Top