Hola, pregunta de newbie en VHDL

44 views
Skip to first unread message

Alejandro Celery

unread,
May 21, 2015, 2:53:27 PM5/21/15
to Grupo Embebidos32
Hola, pregunta para los expertos en VHDL (lo bueno de que el grupo haya
crecido tanto es que mucha gente va a poder ayudar, lo malo es a la
cantidad de gente que uno jode por algo que seguro es una tontería...)

Pregunta 1: En una Spartan 3E entiendo que puedo sintetizar una
dual-port RAM. Quiero saber si puedo hacer esos dos ports de distinto
ancho y si los anchos tienen alguna restricción. Puntualmente, un port
de 8 bits y el otro de 6. Agradezco la respuesta y más aún un link a la
documentación de referencia.

Pregunta 2: Lo que tengo que sintetizar es esto:
- Tomar los datos del bus de 6 bits de la RAM.
- Aplicarles a todos una transformación que es buscar en una LUT.
- Volcar los resultados en otra RAM de iguales características, en el
bus de 6 bits.

No quiero abundar en detalles, pero básicamente en C sería:
for (i = 0; i < N; i++ )
{
out[i] = LUT [ in[i] ];
}

Pensaba sintetizar un bloque que haga la conversión y replicarlo con un
for N generate. La duda puntual es si tengo que sintetizar N luts para
que todo suceda en paralelo, o si puedo poner una sola y que sea una
suerte de global y si esto trae problemas cuando las N conversiones
ocurran en paralelo.
Entiendo que la gracia del for generate es que como de todos modos el
hardware se va a sintetizar en forma combinatoria, es más fácil de
controlar lo qeu se va a sintetizar si uso un for generate que si me
pongo a hacer un process, verdad?

Desde ya, acepto comentarios, tal vez hay maneras mucho más fáciles de
hacer esto pero fue lo más intuitivo que se me ocurrió. Seguramente me
falten conceptos claves en el tema, también acepto "andá a tal link".

Saludos y muchas gracias por su(s) tiempo(s).
Alejandro

Jerónimo F. Atencio

unread,
May 21, 2015, 2:59:31 PM5/21/15
to embeb...@googlegroups.com
Hola,

Te paso un documento que te sirve para la pregunta 1

Saludos
Jerónimo



Alejandro

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
--- Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Pedro Martos

unread,
May 21, 2015, 3:31:53 PM5/21/15
to embeb...@googlegroups.com
Hola,

Respondo intercalado en azul

El 21 de mayo de 2015, 3:53 p. m., Alejandro Celery<alejand...@gmail.com> escribió:
Hola, pregunta para los expertos en VHDL (lo bueno de que el grupo haya crecido tanto es que mucha gente va a poder ayudar, lo malo es a la cantidad de gente que uno jode por algo que seguro es una tontería...)
Pregunta 1: En una Spartan 3E entiendo que puedo sintetizar una dual-port RAM. Quiero saber si puedo hacer esos dos ports de distinto ancho y si los anchos tienen alguna restricción. Puntualmente, un port de 8 bits y el otro de 6. Agradezco la respuesta y más aún un link a la documentación de referencia.

Si, pueden ser de distinto ancho, pero uno condiciona al otro, en la app que te recomendo Jeronimo se explica esto de acuerdo a como queres que sea el intercambio (de donde hacia adonde, quien puede leer y escribir y quien puede solo leer).
 

Pregunta 2: Lo que tengo que sintetizar es esto:
- Tomar los datos del bus de 6 bits de la RAM.
- Aplicarles a todos una transformación que es buscar en una LUT.
- Volcar los resultados en otra RAM de iguales características, en el bus de 6 bits.

No quiero abundar en detalles, pero básicamente en C sería:
for (i = 0; i < N; i++ )
{
    out[i] = LUT [ in[i] ];
}

Pensaba sintetizar un bloque que haga la conversión y replicarlo con un for N generate. La duda puntual es si tengo que sintetizar N luts para que todo suceda en paralelo, o si puedo poner una sola y que sea una suerte de global y si esto trae problemas cuando las N conversiones ocurran en paralelo.

En general lo mejor es seleccionar el rango global que uno necesita y dejar a las herramientas que seleccionen cuantas luts necesitan para el proceso, salvo que los datos vengan de distintos lados, en cuyo caso generarias una memoria por cada origen de datos
 
Entiendo que la gracia del for generate es que como de todos modos el hardware se va a sintetizar en forma combinatoria, es más fácil de controlar lo qeu se va a sintetizar si uso un for generate que si me pongo a hacer un process, verdad?


En realidad la funcion del generate es tener un bloque de hardware parametrizable (algo asi como un template de c++), es decir, si tenes un bloque basico como un sumador con carry de 2 bits, usando un for generate podes hacer un sumador con carry de N bits, donde N se resuelve al momento de sintetizar el sistema.

 
Desde ya, acepto comentarios, tal vez hay maneras mucho más fáciles de hacer esto pero fue lo más intuitivo que se me ocurrió. Seguramente me falten conceptos claves en el tema, también acepto "andá a tal link".

Saludos y muchas gracias por su(s) tiempo(s).
Alejandro


Una pregunta: esto esta relacionado a este trabajo? (por los buses de 8 y 6 bits). Si es asi, te estas complicando demasiado y la seguimos por mail privado. Sino, disculpa la pregunta.

cordialmente,
Pedro Ignacio Martos

 
--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
--- Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.



--
Reply all
Reply to author
Forward
0 new messages