Newsgroup: it.hobby.elettronica.digitale
Titolo: VHDL buffer

Sto rimaneggiando un vecchio progetto fatto da altri
per portarlo su una FPGA e ho notato che nei port usa
spesso il modo buffer invece che i soliti in, out e inout
che io ho sempre usato.
Qualcuno saprebbe dirmi che cosa e' questo buffer?
E' lo stesso che usare out o c'e' qualche differenza nel modo
in cui viene sintetizzato? Grazie.

 nel modo in cui viene sintetizzato?
In pratica definisce una porta OUT che può anche
essere letta. Però non l'ho mai usato ne mai visto usare per
la sintesi, e non so cosa possa inferire un sintetizzatore in sua
presenza (un semplice collegamento prima degli OBUF?
Un FF o registro sui blocchi di I/O? Boh!).
Io preferirei mantenere uno stile pulito e farei le cose secondo
la tradizione (porta di modo solo OUT, e segnale interno per
le varie elaborazioni...), soprattutto se si tratta del top level.
Ciao,
A.D.

 le varie elaborazioni...), soprattutto se si tratta del top level.
Grazie della risposta, nel frattempo ho fatto qualche ricerca
e ho visto che effettivamente l'uso del modo buffer e' sconsigliato.
Pazienza, dovro' riscrivere i sorgenti aggiungendo una marea di
signal, sperando che non comporti altri cambiamenti. Ciao.

 cambiamenti.
Ho fatto qualche prova (con l'ISE di Xilinx che avevo a
portata di mano): lo accetta e non produce nessuna differenza
a livello di sintesi e mapping rispetto al metodo classico,
per cui se non hai esigenze particolari di riutilizzabilità del
codice, forse potresti lasciare i "buffer"...
A.D.

 Qualcuno saprebbe dirmi che cosa e' questo buffer?
Forse qualcosa tipo questo?
http://toolbox.xilinx.com/docsan/xilinx5/data/docs/lib/lib0064_48.html#wp1000977
In ogni caso MAP o PAR ti aggiungono i buffer giusti negli I/O se ti
dimentichi di metterli, e ti tolgono i buffer messi in modo inutile. Non
dovrebbero esserci problemi comunque.
-- 
asd


http://toolbox.xilinx.com/docsan/xilinx5/data/docs/lib/lib0064_48.html#wp100
0977
No, buffer e' un modo per il port in VHDL. Purtroppo gli stessi termini
hanno diversi significati anche nello stesso ambiente.
Comunque A.D. aveva capito il problema, il modo buffer rende le
le uscite leggibili dallo stesso modulo, cosa che molto spesso semplifica
la descrizione di componenti basati su flip-flop come per esempio i
contatori.
Usando il modo out, usato molto piu' comunemente, si e' invece costretti
a lavorare su segnali ausiliari.
Da quanto ho capito, buffer fa tutto quello che fa out con aggiunta la
possibilita' di rilettura del valore, percio' sembrerebbe molto piu' utile.
Purtroppo, per motivi per me misteriosi, il modo buffer viene sconsigliato
non solo per la sintesi, ma anche nell'uso piu' generale del VHDL.
Percio' anche se sembra essere sintetizzato correttamente, dovro'
farne a meno.
Grazie ad entrambi.

 non solo per la sintesi, ma anche nell'uso piu' generale del VHDL.
Vedi la FAQ! Lě spiega il motivo, sembra che si tratti di un baco
implementativo sistemato nel VHDL2000 (come se quest'ultimo fosse
supportato da qualcuno ;-)).
-- 
asd

 supportato da qualcuno ;-)).
Credo di aver capito, le uscite buffer non sono compatibili con altri
modi, percio' non e' possibile mischiare sulla stessa linea dispositivi
dichiarati in modi diversi, per esempio buffer e out. Quindi se un
componente di libreria e' stato dichiarato in un certo modo, si e'
obbligati ad accedervi solo in quel modo, a meno di non avere una
versione distinta della stessa libreria per ogni modo.
Percio' si e' stabilita la consuetudine di usare solo il modo out per le
uscite. Mentre col VHDL2000 si e' superata questa incompatibilita'.
Comunque il VHDL sembra veramente un linguaggio progettato da
un team di squilibrati.

 progettato da un team di squilibrati.
E' un pň contorto, questo č vero, ma ti sfido a trovargli
un limite (del tipo "questa cosa non si puň fare")! :-)
In molte occasioni sono rimasto colpito dal fatto che
anche esigenze stranissime che non avrei mai pensato
si potessero presentare avevano una soluzione nativa
e apparentemente fatta su misura in VHDL! :-)
Il difetto piů grosso č che non esistono libri decenti che
lo spiegano bene!!! Perfino i piů famosi, alla fine ti
illustrano la sintassi e poco piů, ma non ti fanno vedere
le tecniche ed i modi migliori per fare le cose...
A.D.

 le tecniche ed i modi migliori per fare le cose...
A proposito, sarebbe anche interessante trovare un libro o
qualche documento che illustri una metodologia per la
progettazione logica di un sistema usando il VHDL e
non solo, come dici giustamente anche tu, la sintassi con
qualche semplice esempio.
Io, per esempio, non riesco a pensare ad un circuito
direttamente in VHDL, lo devo prima disegnare o immaginare
come circuito elettrico, almeno come blocchi, e poi "tradurlo"
in VHDL, mentre sarebbe molto piu' semplice riuscire a
farlo immediatamente. Voi come fate?

 farlo immediatamente. Voi come fate?
Per me invece risulta estremamente più facile immaginare un circuito
digitale in base al suo scopo (quindi tramite un linguaggio descrittivo)
piuttosto che in base alla sua costruzione fisica. Probabilmente dipende
dal proprio "retaggio" professionale; se ad esempio si proviene più dal
mondo informatico che da quello elettronico, risulta molto più naturale
risolvere i problemi con linguaggi descrittivi di alto livello. Con la
potenza delle logiche programmabili attuali e la sempre maggiore
sofisticazione dei MAP e PAR automatici, è sempre meno necessario dover
ragionare tenendo a mente "cosa c'è effettivamente sotto", a meno che non
si sia davvero al limite di prestazioni o dimensioni.
Se hai esperienze di programmazione di alto livello, prova a immaginare a
come risolveresti il problema se lo dovessi fare in C.
-- 
asd

 farlo immediatamente. Voi come fate?
In effetti questo è il modo migliore di procedere se si vogliono
ottenere buoni risultati (in termini di occupazione di area,
velocità raggiungibile, riusabilità, testabilità, etc.): bisogna avere
tutto chiaro *prima* di mettersi a scrivere il codice, per lo meno
a livello di architettura e di rappresentazione black box delle
singole parti. Poi ogni "scatolina" la si può descrivere come viene
meglio, cercando semrpe di avere un'idea di quello che succede
a livello RTL. Bisogna infatti tenere presente sempre le regole
di buona progettazione digitale (non usare troppi clock, evitare
circuiti asincroni, spezzare i datapath troppo lunghi, etc...), e
questo si può fare solamente se non si fa una descrizione
troppo astratta.
Ho incontrato invece moltissime persone che scrivono il VHDL
come se fosse C! E poi tipicamente si lamentano che le FPGA
sono "lente" o che vanno bene per progetti sono troppo
complicati... :-)
A.D.