aggiunta "ritardi porta" su circuito combinatorio VHDL

Sezione dedicata al linguaggio di descrizione hardware per logiche programmabili

aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby Ludo69 » 22 Apr 2012, 15:29

Salve,
eccomi quì per la prima volta a rivolgervi una domanda forse insolita.
Sono alle prime armi con il QuartusII, il VHDL e le CPLD.
Ne sto programmando una con una logica combinatoria descritta in VHDL e mi serve che una delle uscita sia ritardata rispetto alle altre di 1 o n "ritardi porta".
Anche se metto descrittivamente delle porte logiche in uscita che mi fanno funzioni logiche anche non ridondanti il buon compilatore VHD mi sintetizza il tutto ottimizzando la topologia interna fino ad annientare quell'effetto di ritardo che oggettivamente è normalmente non voluto, ma nel mio caso è richiesto!

Lo so, potrei far uscire il segnale da un pin fisico e farlo rientrare in un'altro pin chiamandolo in modo diverso per poter farlo passare da più livelli porta, ma visto che chi escogita questi linguaggi non è fesso, mi chiedevo se esistesse una maniera in VHDL di inserire degli obblighi al compilatore sulla non semplificazione della rete espressa dal testo o da una sua parte.

Dimenticavo: intanto grazie per avermi letto, se mi rispondete un'altro grazie aggiuntivo.....
Ludo69
 
Posts: 32
Joined: 22 Apr 2012, 15:09
Location: Bracciano (RM)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby deluca » 22 Apr 2012, 20:34

Benvenuto nel forum a Ludo69,

I ritardi così realizzati per mezzo del concatenamento di porte logiche dipendono fortemente dal tipo di fpga utilizzata specialmente dallo speed grade, e dalla zona interessata tra le lut e i pin d'uscita.
Non puoi avere il controllo sui ritardi dopo aver processato fitter, il place and route poichè a quel punto hai perso il controllo sul comportamento del codice di descrizione. (Il sintetizzatore ottimizza e crea il modello rtl)

Per la "simulazione" non c'è problema basta inserire un modello di ritardo inerziale come nell'esempio sotto riportato:
Code: Select all
entity inverter_inerziale is
     port (a:in bit; y:out bit);
end entity inverter_inerziale;
architecture behav of inverter_inerziale is
begin
process (a)
begin
--supponiamo di voler usare il modello inerziale in una
--situazione in cui il tempo
--di propagazione basso alto sia 10 ns e il tempo di
--propagazione alto basso sia 20 ns;
   if (a='0') then
       y<= inertial '1' after 10 ns;
  else
       y<= inertial '0' after 20 ns;
  end if;
end process;
end architecture behav;


ed il gioco è fatto,
ma se vuoi inserire un vero ritardo devi inserire logica sequenziale sincrona (ad esempio un counter) in modo da sincronizzare gli stati delle uscite con il clock. A quel punto puoi decidere di ottenere uno stato d'uscita n cicli di clock dopo che un ingresso è cambiato di stato .... così da avere un controllo ridondante sul tempo di delay che vuoi ottenere.

Chiaramente con clock di 50Mhz (periodo pari a 20nsec) il tempo minimo di ritardo sarebbe proprio 20 nsec .... ma se usi un pll interno e vai a moltiplicare la freq che proviene dall'oscillatore puoi aumentare la risoluzione del tempo di ritardo.

Ciao
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby Ludo69 » 22 Apr 2012, 21:12

Intanto grazie,
ma sto MOLTO alle prime armi con il VHDL e le logiche programmabili: sto cercando di sostituire la PLA che governa della logica nel Commodore 64 con una CPLD della ALTERA tipo Max7032, ovvero ho trovato on-line già fatta la descrizione in VHDL del mio componente, ma il problema nasce sull'uscita che và a pilotarmi il /CAS delle memorie dinamiche, il progetto originale ipotizzava un ritardo tipico della PLA di circa 35 nS e se scendo sotto i 30nS dò il comando di /cas prima che i multiplex degli indirizzi rendano questi stessi correttamente stabili, ovvero la mia CPLD è (per questo solo pin) TROPPO veloce.
Ho anche pensato di postporre una rete RC all'uscita e poi far rientrare il segnale per riproporlo di nuovo squadrato su un'altro pin di uscita (la CPLD è sovrabbondante di pin rispetto alla PLA originale...).
Ricordo che la mia è una logica puramente combinatoria e che sullo zoccolo del chip da "emulare" non c'è nessun clock con cui alimentare registri di uscita.

Credevo che nel costrutto del VHDL, o nelle strategie di compilazione/ottimizzazione del testo VHDL, vi fosse la possibilità di dettare un vincolo che avesse come risultato la possibilità di poter avere dei ritardi porta aggiuntivi ove richiesto. sapevo che era una cosa particolare, ma non credevo fosse un problema.....

Comunque da bravo neofita-curiosone intanto mi studio quanto riportato neol riquadro "codice"
Last edited by Ludo69 on 23 Apr 2012, 07:12, edited 2 times in total.
Ludo69
 
Posts: 32
Joined: 22 Apr 2012, 15:09
Location: Bracciano (RM)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby deluca » 23 Apr 2012, 07:10

Vediamo se possiamo risolvere il tuo problema ......
Il codice modulo PLA che stai usando è questo ?

Code: Select all
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY PLA_MODULE IS
   PORT
   (
   P_A12      : IN  STD_LOGIC;       -- pin 27
   P_A13      : IN  STD_LOGIC;         -- pin  2
   P_A14      : IN  STD_LOGIC;         -- pin  3
   P_A15      : IN  STD_LOGIC;         -- pin  4
   P_VA12     : IN  STD_LOGIC;         -- pin 20
   P_VA13     : IN  STD_LOGIC;         -- pin 21
   P_VA14_N   : IN  STD_LOGIC;         -- pin  5
   P_LORAM_N  : IN  STD_LOGIC;         -- pin  8
   P_HIRAM_N  : IN  STD_LOGIC;         -- pin  7
   P_CHAREN_N : IN  STD_LOGIC;         -- pin  6
   P_CAS_N    : IN  STD_LOGIC;         -- pin  9
   P_GAME_N   : IN  STD_LOGIC;         -- pin 22
   P_EXROM_N  : IN  STD_LOGIC;         -- pin 23
   P_RW_N     : IN  STD_LOGIC;         -- pin 24
   P_AEC_N    : IN  STD_LOGIC;         -- pin 25
   P_BA       : IN  STD_LOGIC;         -- pin 26

   P_CHAROM_N : OUT STD_LOGIC;         -- pin 15
   P_KERNAL_N : OUT STD_LOGIC;         -- pin 16
   P_BASIC_N  : OUT STD_LOGIC;         -- pin 17
   P_ROMH_N   : OUT STD_LOGIC;         -- pin 10
   P_ROML_N   : OUT STD_LOGIC;         -- pin 11
   P_GRW_N    : OUT STD_LOGIC;         -- pin 13
   P_CASRAM_N : OUT STD_LOGIC;         -- pin 18
   P_IO_N     : OUT STD_LOGIC          -- pin 12
   );
END PLA_MODULE;



Puoi confermare ?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby Ludo69 » 23 Apr 2012, 07:13

A prima vista direi proprio di si!

P.S.
Sto utilizzando il mio vecchio C64 come sprono alla sperimentazione delle CPLD, per ora sono arrivato quì:
http://youtu.be/vRo7PXk9aA8

e vorrei arrivare a saper programmare una CPLD tanto da integrare il mio vecchio progetto tutto dentro un CHIP (tranne l'ADC...):
http://ready64.it/articoli/leggi/idart/ ... mmodore-64

Ecco, questo sarebbe il mio cammino autodidattico che mi sono posto di percorrere nel tempo libero, nel mentre mi si era posto il problema che il vecchio C64 aveva la PLA rovinata, per ora và cona una EPROM al suo posto, ma visto che l'appetito vien mangiando.....
Ludo69
 
Posts: 32
Joined: 22 Apr 2012, 15:09
Location: Bracciano (RM)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby Ludo69 » 25 Apr 2012, 07:30

Nel caso fosse necessario ottenere il ritardo all'esterno di quel blocco VHDL avrei pensato a qualcosa tipo:
Image
image hosting

Ho preferito mettere un FF perchè preferisco rendermi insensibile alle eventuali instabilità e rimbalzi che potrebbero essere catturati dall'ingresso connesso al condensatore quando la tensione scende fino allo sfiorare della ViL: come si resetta il FF il relativo ingresso di !CLR torna ad essere ininfluente sul segnale di uscita.

Per la circuiteria che il segnale "F0" dovrà pilotare ho SCELTO di non ritardare il fronte di salita ma solo quello di discesa.
Ludo69
 
Posts: 32
Joined: 22 Apr 2012, 15:09
Location: Bracciano (RM)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby flz47655 » 25 Apr 2012, 09:44

Diciamo che mi aggancio alla discussione per segnalare le funzionalità "slew rate" e "programmable delay" sui pin di I/O che non ho ancora mai usato ma sembra possano contribuire in questa situazione http://www.altera.com/support/devices/io/features/io-features.html#ProgrammableSlewRateControl

Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby deluca » 25 Apr 2012, 10:14

flz,
Programmable I/O Features of the Cyclone FPGA Series -> il "programmable delay" per quanto riguarda il controllo dello "slewrate" può essere applicato a partire della famiglia cyclone e non sulle cpld tipo la epm7032 che sta usando Ludo69. (se non ricordo male).

Il sistema descritto da ludo a prima vista mi sembra funzionale.... un pò accroccato visto i componenti passivi esterni per la determinazione del ritardo ..... ma potrebbe essere ok.

Fammi sapere..... non si sa mai, anche io possiedo un C64c che attualmente è perfettamente funzionante.


Ciao
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby Ludo69 » 25 Apr 2012, 10:24

anche io avrei preferito una maniera più "pulita" per integrare dei ritardi sfruttando la logica inutilizzata nella CPLD senza porre componentistica "analogica" esterna, ed era il senso dell'apertura di questa discussione, ma in mancanza di alternative una soluzione tocca pur trovarla.....

Intanto il mio C64 và con una Eprom 27C512 (NECESSARIAMENTE prodotta dalla ST per problemi di stabilità del dato quando cambiano ALTRI ingressi ADDRES) montata su controzoccolo adattatore, quindi non ho urgenze di provare a realizzare il circuito proposto, il tutto era poco più di una scusa per imparare ad usare gli (eventuali) strumenti che il VHDL mette a disposizione del progettista, ma mi pare di aver capito che mentre per la simulazione c'è qualche possibilità di implementare dei ritardi, nella sisntesi il compilatore semplifica tutto all'osso senza lasciare margine di manovra al programmatore sull'aggiunta nel tracciato della variabile di porte e/o ritardi porte.

Anche la mia CPLD può limitare lo slew rate sui pin di uscita, ma questo si traduce in un'aggiunta di circa 5nS (se ho letto bene, in pratica serve a generare meno rumore) mentre io vorrei un tempo di prolungamento dell'impulso di 20..30nS.

Voglio provare a vedere cosa succede se mettendo dei buffer 3S uno dietro all'altro fino a consumare i pin/macrocelle disponibili (mettendone gli !OE su pin che metto in HW sempre attivi) in quanto credo che non sia possibile semplificare una rete siffatta e visto che il 3S è una funzione che ha solo la macrocella (ricordo che non uso i FF) il dato dovrà transitare per una cella ed essere riportato indietro per ogni volta che potrò mettere nel percorso del segnale un 3S collegato ad un pin di uscita.....
Provo vedo e domani sera vi faccio sapere....
Last edited by Ludo69 on 25 Apr 2012, 10:35, edited 1 time in total.
Ludo69
 
Posts: 32
Joined: 22 Apr 2012, 15:09
Location: Bracciano (RM)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby flz47655 » 25 Apr 2012, 10:30

Si, ho controllato ora il Device Family Datasheet per la serie MAX7000 e purtroppo le EPM7032 non hanno queste feature, al limite altre CPLD della solita serie MAX7000 hanno lo "Slew-rate control" e basta.

Grazie, mi era sfuggito il modello ed ero convinto che era simil-Cyclone :shock:

"Casualmente" :) sono incappato in questa discussione: http://www.fpgarelated.com/usenet/fpga/show/10459-1.php e sembra che esista un attributo keep che può essere utile http://quartushelp.altera.com/11.1/mergedProjects/hdl/vhdl/vhdl_file_dir_keep.htm, cosa ne pensate?

Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby deluca » 25 Apr 2012, 10:39

Confermo che sulla famiglia MAX7000 lo SlowSlewRate è abilitabile on/off ma effettivamente il tempo di ritardo è limitato.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby Ludo69 » 25 Apr 2012, 12:46

Allora, se ho ben capito potrei usare l'Attribute "keep"
http://quartushelp.altera.com/11.1/merg ... r_keep.htm
in quanto dovrebbe fare SIA per la simulazione CHE per la sintesi quanto detto a pag 16-17 di questo documento:
ftp://ftp.altera.com/up/pub/Tutorials/D ... hdlDE2.pdf

Ho capito bene che NON è SOLO per la simulazione ma che verranno implementati sulla sintesi HW?
Ludo69
 
Posts: 32
Joined: 22 Apr 2012, 15:09
Location: Bracciano (RM)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby flz47655 » 25 Apr 2012, 13:41

Si secondo me è proprio quello che cercavi, dice al sintetizzatore di tenere il segnale

Ciao
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby Ludo69 » 26 Apr 2012, 19:09

ebbene no, "keep" col quartus (almeno con i settaggi standard) NON genera ritardi ma OLTRE a sintetizzare come se il "keep" non ci fosse ci sovrappone della logica (presumo per la sola analisi) che da pari ingressi tira fuori le variabili sotto "keep".

Ho invece risolto (come suggerito in un link) di usare i buffer LCELL nello schematico, settando opportunamente Ignore LCELL Buffers=OFF come descritto quì:
http://quartushelp.altera.com/9.1/merge ... _lcell.htm
sono riuscito nell'intento.
Certo è che come mamma Altera ammonisce i ritardi sono molto variabili sia in base al chip fisico in cui si implemnterà che alla temperatura, ecc. ecc. ma non pretendo ritardi precisi, solo un minimo e un massimo da poter far collimare con le tempistiche che mi servono!

A meno di precisazioni ulteriori reputo la discussione chiusa e ringrazio vivamente l'amm. DeLuca e flz47655 per il loro contributo alla soluzione del mio problema.

P.S.
Purtroppo il C64c (versione"c", quello bianco piatto simile al C128) monta un'elettronica appena più moderna e integrata dei normali C64 e la PLA è BEN diversa...... sorry!
Ludo69
 
Posts: 32
Joined: 22 Apr 2012, 15:09
Location: Bracciano (RM)

Re: aggiunta "ritardi porta" su circuito combinatorio VHDL

Postby deluca » 26 Apr 2012, 19:46

Grazie per i ringraziamenti e Ben felice di averti in qualche modo aiutato.

Mi farà piacere averti tra i sostenitori del forum ........

Ciao e a presto.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)


Return to VHDL x FPGA

Who is online

Users browsing this forum: No registered users and 12 guests

cron