Qué lenguaje de HDL me recomendais??
Qué lenguaje de HDL me recomendais??
Pues eso... Soy electrónico y hace tiempo que me interesé un poco por las FPGA, aunque por la falta de tiempo no he hecho nada aún.
Tengo que aclarar que soy de FP2, por lo que soy reparador superior en electrónica de comunicaciones, y aunque estudié tanto electrónica analógica como digital, en esta última no vi mucho más alla de los circuitos combinacionales, multiplexores, demultiplexadores, flip-flops.... etc... Pero no llegué a tocar nada de electrónica programable.
Ya cuando terminé los estudios y todavía tenía algo de tiempo para mí después del trabajo, me empecé a interesar por los microcontroladores, y tras
probar varios lenguajes de programación me decanté por el ensamblador y por JALv2.
Ahora y gracias al quiero empezar a tocar algo de FPGA y hace unos meses compré un libro sobre VHDL, que aún no he abierto.
Me gustaría que me recomendaseis algún lenguaje, ya que hasta donde yo sé hay varios y los principales son VHDL, Verilog y ABEL HDL.
Así que no sé cual es el que más interesa aprender. Ya que cuando empecé con los microcontroladores me dí cuenta que no siempre el mejor lenguaje es
la mejor elección, ya que además del lenguaje en sí también cuenta, y mucho, la cantidad de recursos disponibles para tal lenguaje.
Yo soy de Linux, y aunque no me tiempla el pulso a la hora de utilizar herramientas Windows bajo Wine, en un VirtualBox o incluso arrancar la máquina física con Windows para trabajar, si alguien sabe de herramientas útiles para trabajar con FPGA desde Linux sería la leche que me dijese cuales.
En fin me pongo en vusestras manos para que me ilustréis.
Gracias una vez más.
Tengo que aclarar que soy de FP2, por lo que soy reparador superior en electrónica de comunicaciones, y aunque estudié tanto electrónica analógica como digital, en esta última no vi mucho más alla de los circuitos combinacionales, multiplexores, demultiplexadores, flip-flops.... etc... Pero no llegué a tocar nada de electrónica programable.
Ya cuando terminé los estudios y todavía tenía algo de tiempo para mí después del trabajo, me empecé a interesar por los microcontroladores, y tras
probar varios lenguajes de programación me decanté por el ensamblador y por JALv2.
Ahora y gracias al quiero empezar a tocar algo de FPGA y hace unos meses compré un libro sobre VHDL, que aún no he abierto.
Me gustaría que me recomendaseis algún lenguaje, ya que hasta donde yo sé hay varios y los principales son VHDL, Verilog y ABEL HDL.
Así que no sé cual es el que más interesa aprender. Ya que cuando empecé con los microcontroladores me dí cuenta que no siempre el mejor lenguaje es
la mejor elección, ya que además del lenguaje en sí también cuenta, y mucho, la cantidad de recursos disponibles para tal lenguaje.
Yo soy de Linux, y aunque no me tiempla el pulso a la hora de utilizar herramientas Windows bajo Wine, en un VirtualBox o incluso arrancar la máquina física con Windows para trabajar, si alguien sabe de herramientas útiles para trabajar con FPGA desde Linux sería la leche que me dijese cuales.
En fin me pongo en vusestras manos para que me ilustréis.
Gracias una vez más.
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Qué lenguaje de HDL me recomendais??
Los lenguajes estrella, a día de hoy, son VHDL y Verilog. Usar uno u otro es casi una cuestión personal más que una cuestión de productividad, ya que, salvando algunas excepciones, ambos lenguajes hacen esencialmente lo mismo con un nivel de descripción comparable.
En Linux tienes como opción el poder usar el entorno de Xilinx (ISE Webpack) de forma nativa, ya que este SO está soportado por Xilinx. Sin embargo, para comenzar trasteando, y sobre todo poder hacerlo sin preocuparte de tener o no un dispositivo físico, puedes usar el Icarus Verilog y GTKWave para visualizar cronogramas. Icarus soporta Verilog y SystemVerilog, pero sólo lo puedes usar para simular, no vale para sintetizar.
En mi caso particular, pues me decanté por Verilog, en parte porque para alguien que viene del C me pareció más directo que VHDL. Antes de Verilog había hecho alguna cosa con Handel-C, que es un lenguaje de muy alto nivel para lógica programable.
Si quieres trastear sin siquiera instalar nada, hay editores online que te permiten escribir diseños y probarlos. Visita la web de EDA Playground.
http://www.edaplayground.com
Pero antes, familiarízate con los conceptos de diseño (módulo o entidad según el lenguaje que uses) y testbench (otro módulo o entidad que se encarga de suministrar señales de entrada al módulo/entidad que está siendo probado y comprobando que el resultado se ajusta a lo que debe hacer).
Un ejemplo sencillo: un multiplexor de 8 bits y dos canales en Verilog:
Un decodificador 2 a 4:
Un flip flop tipo D simple disparado por flanco positivo:
Una sofisticación del anterior. Esto modela un flip-flop tipo D, disparado por flanco positivo, con preset y clear síncronos.
En Linux tienes como opción el poder usar el entorno de Xilinx (ISE Webpack) de forma nativa, ya que este SO está soportado por Xilinx. Sin embargo, para comenzar trasteando, y sobre todo poder hacerlo sin preocuparte de tener o no un dispositivo físico, puedes usar el Icarus Verilog y GTKWave para visualizar cronogramas. Icarus soporta Verilog y SystemVerilog, pero sólo lo puedes usar para simular, no vale para sintetizar.
En mi caso particular, pues me decanté por Verilog, en parte porque para alguien que viene del C me pareció más directo que VHDL. Antes de Verilog había hecho alguna cosa con Handel-C, que es un lenguaje de muy alto nivel para lógica programable.
Si quieres trastear sin siquiera instalar nada, hay editores online que te permiten escribir diseños y probarlos. Visita la web de EDA Playground.
http://www.edaplayground.com
Pero antes, familiarízate con los conceptos de diseño (módulo o entidad según el lenguaje que uses) y testbench (otro módulo o entidad que se encarga de suministrar señales de entrada al módulo/entidad que está siendo probado y comprobando que el resultado se ajusta a lo que debe hacer).
Un ejemplo sencillo: un multiplexor de 8 bits y dos canales en Verilog:
Código: Seleccionar todo
module mux8 (
input wire [7:0] a,
input wire [7:0] b,
input wire sel,
output reg [7:0] y
);
always @* begin
if (sel == 1'b0)
y = a;
else
y = b;
end
endmodule
Código: Seleccionar todo
module dec2a4 (
input wire [1:0] in,
output reg [3:0] out
);
always @* begin
case (in)
2'b00 : out = 4'b0001;
2'b01 : out = 4'b0010;
2'b10 : out = 4'b0100;
2'b11 : out = 4'b1000;
default: out = 4'b0000;
endcase
end
endmodule
Código: Seleccionar todo
module flipflop (
input wire clk,
input wire d,
output wire q
);
reg ff = 1'b0;
assign q = ff;
always @(posedge clk) begin
ff <= d;
end
endmodule
Código: Seleccionar todo
module flipflop (
input wire clk,
input wire d,
input wire pre,
input wire clr,
output wire q
);
reg ff = 1'b0;
assign q = ff;
always @(posedge clk) begin
if (clr == 1'b1)
ff <= 1'b0;
else if (pre == 1'b1)
ff <= 1'b1;
else
ff <= d;
end
endmodule
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
Re: Qué lenguaje de HDL me recomendais??
Sin ir mas lejos, en el caso del programa XILINX, el que usamos para las Spartan (3 o 6 para el ZXUNO), se puede usara indistintamente Verilog y VHDL mezclados sin miedo alguno. No mezclados en el sentido de usar en el mismo módulo, sino de usar módulos de uno y otro y llamarlos entre sí, sin miedo a errores. Solo es conocer ambos lenguajes, y adaptar uno al otro. Si conoces las bases de ambos lenguajes, puedes hacer virguerias juntando módulos diferentes. En mas de una ocasión, he cogido un proyecto completo en VHDL, le quité el módulo principal, el que llama a los demas, y le reescribí en verilog, llamando al resto de módulos VHDL.
En el ZXUNO usamos principalmente el Verilog, pero mezclado con dos o tres módulos VHDL. Esto es así, por que algunos módulos no los hemos escrito nosotros, sino cogidos de OpenCore o parecidos, y no vas a volver a inventar la rueda, si viene en VHDL, así lo usas, tal cual, solo cambiando la forma de llamar a VHDL desde Verilog.
Ejemplos de llamadas (instanciaciones) a un módulo VHDL desde verilog, y desde VHDL:
en verilog
el mismo en VHDL
Si los comparas verás similitudes y facilidad de adaptación en un unos segundos.
En el ZXUNO usamos principalmente el Verilog, pero mezclado con dos o tres módulos VHDL. Esto es así, por que algunos módulos no los hemos escrito nosotros, sino cogidos de OpenCore o parecidos, y no vas a volver a inventar la rueda, si viene en VHDL, así lo usas, tal cual, solo cambiando la forma de llamar a VHDL desde Verilog.
Ejemplos de llamadas (instanciaciones) a un módulo VHDL desde verilog, y desde VHDL:
en verilog
Código: Seleccionar todo
VGA_SCANCONV inst_scan_conv
(
.I_VIDEO ( {s_red,s_grn,s_blu} ),
.I_HSYNC ( hs_int),
.I_VSYNC ( vs_int),
//
.O_VIDEO ( O_VIDEO ),
.O_HSYNC ( hsync ),
.O_VSYNC ( vsync ),
.O_CMPBLK_N ( blank ),
//
.CLK ( clk7 ),
.CLK_x2 ( clk14 )
);
Código: Seleccionar todo
inst_scan_conv : entity VGA_SCANCONV
generic map (
port map (
I_VIDEO => s_blu,
I_HSYNC => hs_int,
I_VSYNC => vs_int,
--
O_VIDEO => O_VIDEO,
O_HSYNC => hsync ,
O_VSYNC => vsync ,
O_CMPBLK_N => blank,
--
CLK => clk7,
CLK_x2 => clk14
);
Re: Qué lenguaje de HDL me recomendais??
Muchas gracias tanto a mcleod_ideafix como a jepalza por la rápida y completa respuesta que me habéis dado, señores... me quito el sombrero ante vosotros.
Creo que de momento empezaré con VHDL. ya que como dispongo de un libro introductorio a este lenguaje creo que me será más fácil y me dará idea de
algunos conceptos.
En cuanto a los ejemplos que me habéis puesto... creo intuir algunas cosas, como por ejemplo las señales que entran y salen, pero no entiendo nada, estoy en ese punto en el que al leer el código me parece que es cosa de magia el que funcione.
En fin.... espero que el libro solvente este problema.
Creo que de momento empezaré con VHDL. ya que como dispongo de un libro introductorio a este lenguaje creo que me será más fácil y me dará idea de
algunos conceptos.
En cuanto a los ejemplos que me habéis puesto... creo intuir algunas cosas, como por ejemplo las señales que entran y salen, pero no entiendo nada, estoy en ese punto en el que al leer el código me parece que es cosa de magia el que funcione.
En fin.... espero que el libro solvente este problema.
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Qué lenguaje de HDL me recomendais??
El truco consiste en olvidarse de que estás leyendo un código. Realmente no estás leyendo un código concebido para ser "ejecutado", sino que estás leyendo una descripción: un código que describe el funcionamiento de algo, no un código que sigue un algoritmo secuencial. En los HDL no hay, por lo general, secuencialidad, sino que todo ocurre al mismo tiempo. Mira por ejemplo este sumador completo que suma dos números de 1 bit más un acarreo de entrada, dando un valor de salida y un acarreo de salida.k_mirror escribió:estoy en ese punto en el que al leer el código me parece que es cosa de magia el que funcione.
En fin.... espero que el libro solvente este problema.
Código: Seleccionar todo
module sumador (
input wire a,
input wire b,
input wire cin,
output wire o,
output wire cout
);
assign o = a^b^cin;
assign cout = (a & b) | (a & cin) | (b & cin);
endmodule
Visto así, incluso se puede considerar un handicap el que alguien sepa usar un lenguaje de programación, ya que se piensa que esto funciona igual, y no es así. Lo que sí es una gran ventaja es que de antes sepas qué pinta tiene un flip-flop, un decodificador, un multiplexor, o como en este caso, un sumador completo.
Mira qué pasa cuando le decimos al sintetizador que "genere" un circuito para un diseño como el del sumador anterior: puedes verlo en el editor online de EDA Playground (y cacharrear con él)
http://www.edaplayground.com/x/4Py
El circuito generado es éste: Si dibujado así te lía un poco, no hay más que redibujarlo con componentes más comunes, y seguro que así lo pillas. En concreto he usado este editor online de esquemáticos:
http://www.digikey.com/schemeit/#21zu
El resultado, que es el mismo circuito anterior, que viene de haber sintetizado el módulo (diseño) original, es éste:
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
Re: Qué lenguaje de HDL me recomendais??
Gracias una vez más McLeod, como me sigas dando esas explicaciones tan elaboradas voy a tener que empezar a pagarte pos las clases.
Lo de que en las FPGA ocurre todo al mismo tiempo es algo que ya sabía, cuando estudié electrónica diseñé gran cantidad de circuitos combinacionales y se que el tiempo empleado en que se realice una función depende sólo de los tiempos que tardan las puertas lógicas en pasar de la tensión de un estado a otro, los famosos flancos de bajada y de subida. Se como son internamente las FPGA, se que son un gran numero de puertas lógicas que se interconectan unas con otras según la descripción que haces con el lenguaje utilizado.
Se que por ejemplo un flip-flop de tipo D está hecho internamente de las siguiente forma:
Y en un momento dado se podría sustituir el inversor por una puerta NAND con sus entradas puenteadas entre sí.
Incluso se que realmente solo existen 3 tipos de puertas lógicas, y que el resto de ellas realmente se crean combinando este tipo de puertas ( no me refiero a dentro de las FPGA, si no electrónicamente) estas tres puertas básicas son la AND, la OR y la NOT ó INVERSOR.
Así por ejemplo un chip 7400 contiene 4 puertas NAND, pero este chip internamente lo que lleva realmente son 4 puertas AND con sus salidas conectadas a un NOT y la salida de esta puerta NOT es la que va conectada a la correspondiente patilla de salida del chip.
Mi problema es que como todavía no he empezado a hacer nada, y mucho menos de forma práctica, pues no entiendo todavía las descripciones.
No entiendo cómo se le dice a la FPGA que por ejemplo, en el gran ejemplo que me has puesto arriba del sumador, como se le dice que patilla del chip va a ser la entrada a, b ó cin, y cuales van a ser las patillas o y cout.
Resumiendo.... Tengo en la mente un cacao maravillao que no creo que se me quite hasta que no empiece a estudiar un poco y sobre todo a toquetear
físicamente.
Así que os dejaré tranquilos hasta que ya tenga algo de base.
Lo de que en las FPGA ocurre todo al mismo tiempo es algo que ya sabía, cuando estudié electrónica diseñé gran cantidad de circuitos combinacionales y se que el tiempo empleado en que se realice una función depende sólo de los tiempos que tardan las puertas lógicas en pasar de la tensión de un estado a otro, los famosos flancos de bajada y de subida. Se como son internamente las FPGA, se que son un gran numero de puertas lógicas que se interconectan unas con otras según la descripción que haces con el lenguaje utilizado.
Se que por ejemplo un flip-flop de tipo D está hecho internamente de las siguiente forma:
Y en un momento dado se podría sustituir el inversor por una puerta NAND con sus entradas puenteadas entre sí.
Incluso se que realmente solo existen 3 tipos de puertas lógicas, y que el resto de ellas realmente se crean combinando este tipo de puertas ( no me refiero a dentro de las FPGA, si no electrónicamente) estas tres puertas básicas son la AND, la OR y la NOT ó INVERSOR.
Así por ejemplo un chip 7400 contiene 4 puertas NAND, pero este chip internamente lo que lleva realmente son 4 puertas AND con sus salidas conectadas a un NOT y la salida de esta puerta NOT es la que va conectada a la correspondiente patilla de salida del chip.
Mi problema es que como todavía no he empezado a hacer nada, y mucho menos de forma práctica, pues no entiendo todavía las descripciones.
No entiendo cómo se le dice a la FPGA que por ejemplo, en el gran ejemplo que me has puesto arriba del sumador, como se le dice que patilla del chip va a ser la entrada a, b ó cin, y cuales van a ser las patillas o y cout.
Resumiendo.... Tengo en la mente un cacao maravillao que no creo que se me quite hasta que no empiece a estudiar un poco y sobre todo a toquetear
físicamente.
Así que os dejaré tranquilos hasta que ya tenga algo de base.
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Qué lenguaje de HDL me recomendais??
Esto es como nos enseñan en la teoría como funciona un flip-flop, ya que se parte del biestable más común que es el R-S, y a partir de ahí lo van sofisticando hasta conseguir el flip-flop D disparado por flanco (o sea, un maestro-esclavo), pero en realidad los flip-flops no se construyen (con lógica CMOS) de esa forma. Llevaría demasiados transistores para algo que requiere menos. A la hora de hacer un flip flop "de verdad" hay algunas simplificaciones que no llegan a verse cuando estudias el circuito teórico (que es lo que has puesto). Por ejemplo: se usa mucho la llamada "lógica de paso", que consiste en usar transistores MOS "en serie" para dejar pasar o no determinadas señales.k_mirror escribió:Se que por ejemplo un flip-flop de tipo D está hecho internamente de las siguiente forma:
Y en un momento dado se podría sustituir el inversor por una puerta NAND con sus entradas puenteadas entre sí.
Por ejemplo, el latch que has dibujado se implementa en realidad más parecido a esto: El que tú has dibujado usa 18 transistores (4 por cada una de las 4 NANDs más 2 del inversor). La versión que he dibujado usa 10 transistores (2 por cada uno de los 4 inversores, más los 2 transistores que aparecen de forma explícita).
Aquí, la célula de memoria es realmente U1 y U2 que se realimentan entre sí, y que hacen el mismo papel que tus dos NANDs con las entradas y salidas entrecruzadas. Hay dos transistores MOS, uno de canal N (Q1) y otro de canal P (Q2). Esencialmente funcionan como interruptores: cuando en la puerta de Q2 hay un nivel alto (un 1 lógico), el transistor se comporta como un circuito cerrado entre drenador y fuente. Q1 funciona al revés: se cierra cuando en la puerta hay una tensión de 0V. Dado que ambos están controlados por la misma señal, CLK, pues resulta que cuando uno se cierra, el otro se abre, y veceversa.
Cuando CLK=1, Q2 se cierra y Q1 se abre, con lo que el dato D ingresa a la red de inversores, apareciendo unos instantes después en Q y Q negada. Mientras CLK siga siendo 1, el latch estará en modo transparente, con Q y /Q siguiendo las variaciones de D.
Cuando CLK=0, Q2 se abre y Q1 se cierra, haciendo que U1 y U2 se realimenten entre sí, manteniendo entre los dos el último valor que llegó desde D hasta justo el momento en que CLK bajó a 0. El latch deja de seguir a la señal D de entrada, y retiene el último valor de ésta, apareciendo en Q y /Q.
Los transistores Q1 y Q2 son dos ejemplos clásicos del uso de "lógica de paso" en circuitos CMOS.
Por cierto, este mismo circuito, un latch D, se puede describir así: fíjate que no aparecen por ninguna parte ni las puertas NAND ni los inversores de mi versión "optimizada". Lo que se describe es cómo debe comportarse. La implementación la lleva a cabo el propio sintetizador con los recursos de la FPGA de que disponga: si la FPGA dispone de latches físicos, los usa. Si no, los sintetiza usando puertas lógicas, LUTs, multiplexores, o lo que sea.
Código: Seleccionar todo
module latch_d (
input wire clk,
input wire d,
output reg q,
output reg q_n
);
always @* begin
if (clk == 1'b1) begin
q = d;
q_n = !d;
end
end
endmodule
En realidad, en muchos circuitos de tipo gate array (como por ejemplo el gate array del Inves Spectrum+ o del SAM Coupé) sólo hay un único tipo de puerta: puertas NAND (o puertas NOR), ya que el resto de puertas se pueden hacer únicamente con este tipo de puertas.k_mirror escribió:Incluso se que realmente solo existen 3 tipos de puertas lógicas, y que el resto de ellas realmente se crean combinando este tipo de puertas ( no me refiero a dentro de las FPGA, si no electrónicamente) estas tres puertas básicas son la AND, la OR y la NOT ó INVERSOR.
Hay también otro tipo de lógica, que se llama "lógica de multiplexor", y que basicamente dice que cualquier circuito lógico se puede construir únicamente con multiplexores de dos entradas. Muchas FPGAs lo emplean como lógica interna, ya que disponen internamente de muchísimos multiplexores, o los pueden implementar fácilmente.
Para los chips con puertas simples, como el 7400, el 7432, etc, probablemente lleven ya a nivel de transistores la puerta que han de implementar, y no la hagan concatenando la salida de una puerta a la entrada de otra. No lo hacen así primero porque no hace falta, y segundo porque si lo hicieran estarían aumentando el tiempo de propagación, el espacio en silicio, y la energía consumida en régimen dinámico. Para chips semicustom, basados en gate array, tienen hechos a priori las puertas NAND y es el cliente quien con la capa de metalización final conecta las puertas que le interesen, creando con ellas todo tipo de circuitos lógicos.k_mirror escribió:Así por ejemplo un chip 7400 contiene 4 puertas NAND, pero este chip internamente lo que lleva realmente son 4 puertas AND con sus salidas conectadas a un NOT y la salida de esta puerta NOT es la que va conectada a la correspondiente patilla de salida del chip.
En lógica CMOS, por ejemplo, una NAND son 4 transistores. Un inversor son 2 transistores. Pero una puerta AND no la hacen concatenando una NAND con un inversor, sino que la hacen directamente, ocupando también la AND 4 transistores. De hecho todas las puertas simples (AND, OR, NAND, NOR) usan 4 transistores, y la puerta NOT usa 2 transistores. Una puerta XOR usa en teoría dos puertas NOT, dos puertas AND y una puerta OR, lo que supondría usar 16 transistores. En realidad, y sin usar virguerías como la mencionada lógica de paso, se puede construir con 8 transistores. Un diseño completamente full-custom puede llegar perfectamente a 3 transistores para implementar una XOR.
Eso no es asunto del lenguaje HDL. Los HDL (VHDL y Verilog) son "device agnostic", o sea, que describen un circuito pero no se ocupan de detalles tales como qué patillas físicas van a ser entradas y salidas en una FPGA, o qué niveles de tensión corresponden al 1 y al 0 lógicos. En el caso de Xilinx, eso se describe en un fichero aparte llamado UCF (User Constraints File). Busca en cualquiera de los tests del ZX-Uno (mejor usa el primero, el test1, para verlo más sencillo) un fichero con extensión UCF y allí verás la correspondencia entre los puertos de entrada y salida del "top level design" y las patillas físicas de la FPGA. Si no usas un UCF, el propio software de Xilinx elige por tí las que le parece que son las mejores opciones para los pines de entrada y salida, y tú puedes ver qué ha elegido en uno de los informes que ofrece cuando termina la síntesis.k_mirror escribió:No entiendo cómo se le dice a la FPGA que por ejemplo, en el gran ejemplo que me has puesto arriba del sumador, como se le dice que patilla del chip va a ser la entrada a, b ó cin, y cuales van a ser las patillas o y cout.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
Re: Qué lenguaje de HDL me recomendais??
Creo que me voy a acostar...
Sabía que era un ignorante, pero no sabía hasta que punto.
En fin... Intentaré hacer lo que pueda.
Enviado desde mi XT1068 mediante Tapatalk
Sabía que era un ignorante, pero no sabía hasta que punto.
En fin... Intentaré hacer lo que pueda.
Enviado desde mi XT1068 mediante Tapatalk
- mcleod_ideafix
- Mensajes: 831
- Registrado: 27 Sep 2015, 00:14
- Ubicación: Jerez de la Frontera
- Contactar:
Re: Qué lenguaje de HDL me recomendais??
¡Eh eh! Nada de eso Que haga puntualizaciones no implica que te esté llamando ignorante. Nada de eso La mayoría de estas cosas no las sabía hasta el curso pasado, cuando empecé el máster de sistemas nanométricos (que no he acabado. De ahí si que he salido con la sensación de ser un ignorante total)k_mirror escribió:Creo que me voy a acostar...
Sabía que era un ignorante, pero no sabía hasta que punto.
En fin... Intentaré hacer lo que pueda.
La moraleja de toda esta conversación que estamos teniendo es que:
- Para no perderte con los HDL debes recordar que estás describiendo un comportamiento en hardware, no un programa secuencial que vaya a ser ejecutado
- La descripción se puede escribir de muchas formas y a muchos niveles, pero por lo general, no conviene especificar al detalle qué puertas lógicas pretendes usar, ya que es posible que el elemento lógico que quieres describir no se implemente de forma eficiente con esa elección de puertas lógicas que has hecho. Todo depende de a dónde quieras meter ese diseño.
Ejemplo de esto último: si quieres hacer un sumador de 4 bits, puedes hacerlo usando 4 sumadores de 1 bit cada uno, conectándolos en cascada, como se enseña en cualquier curso de diseño digital. Es decir:
Código: Seleccionar todo
module FullAdder (
input wire [3:0] a,
input wire [3:0] b,
input wire ci,
output wire [4:0] s
);
wire [2:0] co;
Adder ADD1(a[0],b[0],ci,s[0],co[0]);
Adder ADD2(a[1],b[1],co[0],s[1],co[1]);
Adder ADD3(a[2],b[2],co[1],s[2],co[2]);
Adder ADD4(a[3],b[3],co[2],s[3],s[4]);
endmodule
Código: Seleccionar todo
module Adder (
input wire a,
input wire b,
input wire cin,
output wire s,
output wire cout
);
assign s = a ^ b ^ cin;
assign cout = (a & b) | (cin & a) | (cin & b);
endmodule
Código: Seleccionar todo
module FullAdder (
input wire [3:0] a,
input wire [3:0] b,
input wire ci,
output wire [4:0] s
);
assign s = a + b + ci;
endmodule
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA
Re: Qué lenguaje de HDL me recomendais??
Sé que no me estás llamando ignorante, pero como dijo un famoso filósofo "Sólo sé que no sé nada", y no es la primera vez que cuanto más aprendo más claro tengo que no sé nada, y la falta de conocimiento es la ignorancia.¡Eh eh! Nada de eso  Que haga puntualizaciones no implica que te esté llamando ignorante.
No te puedes hacer una idea de lo agradecido que estoy con el interés con el cual respondes, cualquier otro habría dicho "Eso no es así, estás equivocado." y ahí habría terminado la respuestas, tú en cambio razonas las respuestas con lo cual consigues que no sólo vea que estoy un poco equivocado, consigues que vea por qué y más importante aún, que aprenda. Se nota que te gusta enseñar, ojalá hubiese tenido más profesores así, a los que les gusta enseñar en lugar de soltar la parrafada y si no te enteras es tu problema.
No pensé que hubiese nadie capaz de tomarse tantas molestias y sobre todo tanto tiempo para solventarme las dudas de un completo desconocido.
Y eso que en un principio lo que buscaba era tan solo saber que lenguaje escoger para empezar con las FPGA.
Supongo que habrá alguna razón por la que nos enseñan las cosas de una forma distintas a como son en realidad, como por ejemplo en el caso delLa mayoría de estas cosas no las sabía hasta el curso pasado
flip-flop dito D, yo to contento explicando algo basado en algo que me enseñaron, por lo cual lo daba por cierto, y después te enteras de que no es del todo correcto.
Recuerdo que cuando empezamos con la electrónica digital lo primero que hicimos fue montar en las placas de prototipo las puertas lógicas elementales con transistores (bipolares) y diodos, para que viesemos como funcionaba la electrónica digital, no entiendo por qué no hicieron lo mismo con tantas otras cosas.
En fin.... un saludo, muchas gracias... y si alguna vez bajas a Huelva estás invitado a unas cervezas y unas gambas.