Está en la página 1de 30

Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN

(Lenguaje de Descripción de Hardware “Verilog”)

Construcción, Simulación e Implementación de Diversas


Aplicaciones con Lenguaje de Descripción de Hardware
(Verilog).

Objetivos

o Mostrar varios diseños realizados con lenguaje de descripción de


hardware_Verilog, simularlos e implementarlos.
o Utilizar las nuevas herramientas de diseño de circuitos digitales, WebPack 4.2
de Xilinx y El ModelSim 5.5.

Introducción

Los paquetes WebPack 4.2 y ModelSim XE/Starter 5.5e_p1 de Model Technology son
herramientas de Diseño Digitales que nos ayudan a optimizar a los Lenguajes de
Descripción de Hardware dentro de un nivel de compuerta interno equivalente y la
compilación de esta representación produce diseños optimizados de nivel de compuerta
para la tecnología de las FPGAs.

Lenguajes de Descripción de Hardware.

Los Lenguajes de Descripción de Hardware (HDL) describen la arquitectura y


comportamiento de sistemas electrónicos discretos.
Un HDL típico puede soportar diversos niveles de descripción en cada compuerta y
construye un netlist que es usado como la descripción funcional. Esta capacidad de poder
mezclar niveles sirve para describir la arquitectura de los sistemas de muy alto nivel de
abstracción e incrementa la perfección detallada del diseño de implementación en el nivel
de compuerta.

 Los diseños funcionales pueden ser verificados fácilmente en el proceso de


diseño. Un diseño escrito como HDL puede ser simulado inmediatamente. El
diseño de la simulación se hace en alto nivel, por lo tanto la implementación se
hace a nivel de compuerta, lo que permite evaluar la arquitectura y la decisión del
diseño.
 También permiten automáticamente convertir un diseño HDL a nivel de
compuerta e implementarlo en una tarjeta con tecnología FPGA.
 Un HDL provee documentación de tecnología independiente de un diseño y su
funcionalidad. Un HDL es más fácil de leer y comprender que un netlist o un
diagrama esquemático. Se dice que un diseño HDL tiene tecnología
independiente, ya que se puede rehusar para generar diseños en una tecnología
diferente sin tener que trasladarse desde la tecnología original.

1
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Un circuito de descripción con Verilog puede ser de dos tipos: estructural o funcional.

Una Descripción estructural explica la composición física del circuito, detallando


compuertas y las conexiones entre ellas. Los elementos estructurales de una descripción
estructural en Verilog se generan de compuertas lógicas, componentes de librerías
específicas, y componentes definidos por el usuario conectados por alambres. Una
descripción estructural de Verilog puede definir un rango de jerarquía y construcción de
niveles de compuertas, incluyendo definición de módulos, módulos de instancias y
conexiones netlist.

Una Descripción funcional, también se refiere al nivel de transferencias de registro


(RTL). Los elementos de una descripción funcional de Verilog son declaraciones de
funciones, declaración de tareas y bloques always. Estos elementos describen la
funcionalidad del circuito, pero no describen la composición física de la distribución.

Cuando usamos el estilo de descripción funcional, típicamente describimos las partes


combinacionales del diseño en las funciones, en los bloques always y en las asignaciones.
La complejidad de la lógica determina si usamos una o muchas funciones. Pero si podemos
mezclar las dos descripciones funcionales.

2
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Sumador Completo de 1 bit.

A continuación, presentamos el diseño de un circuito sumador completo de 1 bit. La


tabla de verdad se muestra en la tabla 1, en ella se reciben los dos bits de entrada a sumar y
el acarreo de entrada, el resultado se almacena en un bit de suma y un bit de acarreo de
salida (3 bits de entrada, 2 bits de salida). Esto debido a que la suma de dos números de un
bit puede dar como resultado un número de más de un bit, por esa razón es necesario llevar
un control del acarreo, ya sea para la entrada como para la salida como se muestra a
continuación:

ACARREO DE INPUT 2_A INPUT 1_B ACARREO SUMA


ENTRADA DE SALIDA
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

Tabla 1. Tabla de verdad de un Sumador Completo de 1 bit.

Variables de entrada a, b y Cin. Ecuaciones booleanas para las salidas Cout y Sum:

“Acarreo de Salida” Cout = Ci’ab + Cia’b + Ciab’ + Ciab


Cout = ab + Ci(a  b)

“Suma” Sum = Ci’a’b + Ci’ab’ + Cia’b’ + Ciab


Sum = Ci’(a  b) + Ci (a  b)’
Sum = Ci  (a  b)

Una vez que tenemos las ecuaciones de salida para la suma y el acarreo de salida, abrimos

nuestro software WebPACK Project Navigator 4.2WP3.x.lnk , y procedemos a crear un nuevo proyecto
en File  New Project..., aparece una ventana (Figura 1, Pág. 4) en la cual introducimos la
ruta donde deseamos almacenar el proyecto, el nombre del proyecto, se selecciona la
familia y el número de dispositivo que vamos a utilizar; el tipo de diseño que utilizaremos
es XST Verilog.

3
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Figura 1. Creación de un nuevo proyecto.

Una vez creado el nuevo proyecto, la ventana principal del Project Navigator queda de la
siguiente manera.

Figura 2. Ventana principal del Project Navigator.

4
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Ahora necesitamos añadir un programa fuente (archivo de Verilog). Seleccionamos del


menú Project  New Source..., Verilog Module (Figura 3) e introducimos un nombre
para el archivo, así como la ruta donde lo vamos a almacenar (de preferencia la misma
donde se almacenó el proyecto).

Figura 3. Nuevo modulo de Verilog.

En la Figura 4 se introducen los nombres de las variables de entrada y de salida que


ocuparemos en el sumador completo.

Figura 4. Ventana de definición de puertos del módulo fuente de Verilog...

5
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

En la Figura 5 se muestra la información del nuevo modulo de Verilog, el tipo de


archivo fuente, el nombre del archivo fuente y del módulo, así como la definición de los
puertos.

Figura 5. Información del nuevo programa fuente.

La Figura 6, muestra como queda el Project Navigator después de añadir el nuevo


modulo en Verilog del sumador completo, al cual todavía deben de añadírsele líneas de
código.

Figura 6. Ventana principal del Project Navigator.

6
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

El código modificado queda de la siguiente manera:

Figura 7. Ventana principal del Project Navigator, código añadido.

Para verificar que el programa no contenga ningún error de sintaxis, en la Figura 7


podemos seleccionar de la ventana Processes for Current Source  Synthesize, hacer
doble click sobre Check Syntax, en ese momento el programa comienza a compilar nuestro
archivo de Verilog, mostrando en la consola de abajo Done: completed successfully si no
existe ningún error.

Para comprobar que nuestro diseño funciona correctamente, necesitamos añadir un


archivo llamado banco de pruebas en el cual se asignarán valores a las señales de entrada y
en la simulación obtendremos las salidas correspondientes. Para añadir el archivo de banco
de pruebas, seleccionamos del menú Project  New Source... (Figura 8, siguiente página),
Test Bench Waveform e introducimos un nombre para dicho banco de pruebas, así como
seleccionar el directorio donde se va a almacenar. A continuación, nos pregunta conque
archivo fuente lo deseamos asociar en el caso de tener varios archivos de diseño en Verilog,
aquí solo muestra uno y seleccionamos ese por default (Figura 9); por último en la Figura
10, se muestra una ventana con la información del tipo de archivo que se está utilizando, su
nombre y el nombre del archivo al cual se asocia.

7
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Figura 8. Ventana para crear un nuevo archivo de banco de pruebas...

Figura 9. Ventana de asociación entre el banco de pruebas y el programa fuente en Verilog.

8
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Figura 10. Ventana de información del archivo de banco de pruebas.

Ahora aparece una nueva ventana (Figura 11), la cual se utiliza para ajustar los tiempos
del reloj (para circuitos secuénciales) en caso de que exista alguno en nuestro diseño, aquí
aparece deshabilitado porque nuestro diseño es un circuito combinatorio y no necesitamos
de un reloj.

Figura 11. Ventana de inicialización de tiempos del banco de pruebas.

En la Figura 12 se introducen los valores de entrada Cin, a , b, como se muestran en la


Tabla 1, una vez introducidos los valores se guardan las formas de onda y nos pregunta en

9
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

la Figura 13 cuantos ciclos de reloj deseamos ejecutar después de que se asigna la última
señal de entrada, podemos ignorar o aceptar (automáticamente ejecutará un ciclo de reloj
después de introducir la última señal de entrada).

Figura 12. Ventana de inicialización de tiempos.

Figura 13. Ciclos de reloj, después de finalizar el banco de pruebas.

Salimos del archivo banco de pruebas y regresamos al Project Navigator del WebPACK.

Procedemos a simular nuestro circuito de la siguiente manera:

En la Figura 14 seleccionamos el archivo de banco de pruebas de la ventana Sources in


Project, de la ventana Processes for Current Source  ModelSim Simulator hacemos
doble click sobre Simulate Behavioral Verilog Model, se abrirá el programa ModelSim y
se verán los datos de salidas simulados, de acuerdo a los datos de entrada, como se aprecia
en la Figura 15.

10
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Figura 14. Ventana principal del Project Navigator, para simulación.

Figura 15. Simulación del Sumador Completo en el ModelSim.

Nuevo ModelSim (Dic 2020)

11
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

File  New  Project, asignar nombre y localización donde se encontrará el proyecto.


No modificamos la librería por default work.

Aparecerá la siguiente pantalla Add items to the Pproject

Añadir el archivo sum*.v creado en Xilinx ISE Webpack,

De la pantalla anterior, se crea un nuevo archivo que servirá para simular, como se
aprecia a continuación

12
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Se escribe nombre, simulación de sumadorcompleto de 1b (simsumcom1b), se


selecciona tipo de archivo Verilog. Cerramos ventana Add items to the Project.
En la sección Project se encuentran los dos archivos verilog, se abre el archivo que
servirá para simulación simsumcom1b.v y se escribe lo siguiente:

13
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Se guarda el archivo, se selecciona del menú Compile  Compile All, Si todo está
bien, aparecerán dos palomas de color verde como estado de los archivos de verilog;
también, en la parte inferior aparecerá el mensaje: 2 compiles, 0 failed with no errors.

El módulo tendrá como nombre “t”, y se puede apreciar en la Librería work

A continuación, se escribe en el prompt:

14
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

VSIM > vsim work.t, comienza a cargar variables para simulación (parte de en medio azul)
VSIM > view wave, se visualiza diagramas de tiempo de las señales (parte negra a la derecha)
VSIM > add wave sim:/t/*, se cargan las variables en la ventana de señales (señales en la parte
gris en la ventana de señales)

Presionamos el botón RUN unas cuatro veces , se


acomodan las variables en orden para visualizar de manera correcta los valores producidos
(cin, a, b, cout, sum), se presiona el botón para dar zoom y visualizar mejor las señales.

15
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Una vez que analizamos la simulación y obtenemos los resultados deseados el siguiente
paso es bajar nuestro diseño al dispositivo FPGA ó CPLD según sea la tarjeta de
programación con la que contemos.
En la Figura 16 se muestra como seleccionar el dispositivo a programar; seleccionamos
del menú Source  Properties..., aparece una ventana con la información del dispositivo a
programar (Figura 17).

Figura 16. Selección del dispositivo a programar.

Figura 17. Información del dispositivo a programar.

16
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Contamos con una tarjeta programadora que contiene un CPLD CoolRunner XPLA3
CPL (XCR3256XL TQ144), en este caso no realizamos modificaciones y procedemos a
configurar los pines de entrada/salida de nuestro diseño con los pines físicos del CPLD.

En la Figura 18 seleccionamos el archivo fuente en verilog (*.v) de la ventana Sources


in Project, ahora de la ventana Processes for Current Source  Design Entry Utilities
 User Constraints hacemos doble click en Assign Pins (ChipViewer) y se abre el
programa Xilinx ChipViewer (Figura 19).

Figura 18. Asignación de pines del archivo Verilog al CPLD.

17
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

En la ventana del Xilinx ChipViewer hay una ventana que contiene las señales de
entrada y salida, seleccionamos cualquiera de las entradas o salidas y las arrastramos hasta
la posición que mejor convenga de acuerdo a la distribución física mostrada en la ventana
de la derecha, en la Figura 19 ya se hicieron tres asignaciones, el pin 99 del CPLD es por
donde entrará la señal de acarreo de entrada Cin, el pin 100 es la entrada de datos “a”, el
pin 101 será el dato de entrada “b”, el pin 102 será el dato de salida Sum y el pin 103
contendrá el acarreo de salida Cout, guardamos el archivo (*.ngd) y salimos.

Figura 19. Ventana del Xilinx ChipViewer.

Al regresar al Project Navigator posiblemente aparecerá una ventana que dice que
debemos resetear el proyecto para que el nuevo archivo *.ucf actualice el diseño y se debe
volver a correr la implementación del diseño desde la venta Processes for Current Source
 Implement Design, para verificar que efectivamente se hicieron las asignaciones de los
pines de entrada/salida a los pines físicos del CPLD, abrimos el Fitter Report, que se
encuentra en la misma ventana Processes for Current Source  Implement Design.
Mostrando algo como en la Figura 20.

18
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Figura 20. Ventana que muestra el Fitter Report.

Para poder bajar el programa al dispositivo físico, desde la ventana Processes for
Current Source  Generate Programming File hacemos doble click en Configure
Device (iMPACT), se ejecuta el programa iMPACT y lo podemos ver en la Figura 21.

Figura 21. Ejecución del programa iMPACT.

19
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Antes de bajar nuestro diseño, necesitamos verificar si el CPLD esta vacío


seleccionando del menú Operations  Blanck Check, en caso de estar vacía se procede a
grabar nuestro programa SumadorCompleto.jed al CPLD con Operation  Program...
(Figura 22); en caso que exista un programa ya grabado, se recupera dicho programa con
Operations  ReadBack... y se graba en algún lugar seguro.

Figura 22. Opciones de programación.

Para crear otro diseño de Verilog en el mismo proyecto, desde Project  New
Source..., seleccionamos Verilog Module, asignamos un nombre al nuevo diseño e
introducimos las entradas y salidas adecuadas.
Para verificar sintaxis, crear el banco de pruebas, simular, asignar pines y bajar el
programa al CPLD se hace de la misma manera que en el diseño anterior.
A continuación se presentan otras formas de representar el mismo Sumador completo de
1 bit.

module SumCompleto2(Cin, a, b, Cout, Sum);


input Cin, a, b;
output Cout, Sum;
wire aux1, aux2, aux3;

and inst1(aux1,a,b);
xor inst2(aux2,a,b);
and inst3(aux3,Cin,aux2);
or inst4(Cout,aux1,aux3);
xor inst5(Sum,Cin,aux2);

// assign Cout = (a & b) + (Cin & (a ^ b));


// assign Sum = Cin ^ (a ^ b);
endmodule

20
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

module SumadorCompleto(Cin, a, b, Cout, Sum);

input Cin, a, b;
output Cout, Sum;

assign Cout = (a & b) + (Cin & (a ^ b));


assign Sum = Cin ^ (a ^ b);

endmodule

module SumCompleto3 (Cin, a, b, Cout, Sum);

input Cin, a, b;
output Cout, Sum;

assign {Cout, Sum} = {1'b0,a} + {1'b0,b} + {1'b0,Cin};

endmodule

Sumador de 32 bits.

module Sum32bits(Cin,a, b, Cout, Sum);

input Cin;
input [31:0] a, b;
output Cout;
output [31:0] Sum;

assign {Cout, Sum} = {1'b0, a} + {1'b0, b} + {1'b0, Cin};

endmodule

21
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Multiplexor
Un multiplexor es un dispositivo lógico que recibe información por sus dos o más
entradas (de uno o mas bits de ancho) y mediante una señal de control decidimos cual de la
entradas aparece reflejada en la salida; esto es, un convertidor de paralelo a serie. Si tienen
una señal de habilitación "enable" hace que el multiplexor esté o no habilitado en su salida.

Figura 23. a) Funcionamiento de un multiplexor.

Todas las entradas de información están ordenadas desde la 0 hasta la 2 n-1, dando todas
las combinaciones que se podrían dar entre las variables de control. El número de entradas
de control le da nombre a los distintos multiplexores, un MUX-3 tiene tres entradas de
control.

module Mux8aUNO (Select, Busin, Out);

parameter Sizesel = 3, Sizebusin=8;

input [Sizesel-1:0] Select;


input [Sizebusin-1:0] Busin;
output Out;
reg Out;

always @ (Select)
begin
case (Select)
3'h0: Out = Busin[0];
3'h1: Out = Busin[1];
3'h2: Out = Busin[2];
3'h3: Out = Busin[3];
3'h4: Out = Busin[4];
3'h5: Out = Busin[5];
3'h6: Out = Busin[6];
3'h7: Out = Busin[7];
endcase
end // Fin del always

22
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

endmodule

Figura 23. b) Simulación del multiplexor ocho a uno.

Decodificador
Un decodificador es un circuito combinacional cuya característica fundamental es que,
para cada combinación de las entradas, sólo una de las salidas tiene un nivel lógico
diferente a las demás.

module DECO3_8(Select, Busout);

parameter Sizesel = 3, Sizebusout=8;

input [Sizesel-1:0] Select;


output [Sizebusout-1:0] Busout;
reg [Sizebusout-1:0] Busout;

always @ (Select)
begin
case (Select)
3'h0: Busout = 8'd1; // 8'h01 8'b00000001
3'h1: Busout = 8'd2; // 8'h02 8'b00000010
3'h2: Busout = 8'd4; // 8'h04 8'b00000100
3'h3: Busout = 8'd8; // 8'h08 8'b00001000
3'h4: Busout = 8'd16; // 8'h10 8'b00010000
3'h5: Busout = 8'd32; // 8'h20 8'b00100000
3'h6: Busout = 8'd64; // 8'h40 8'b01000000
3'h7: Busout = 8'd128; // 8'h80 8'b10000000
endcase
end // Fin del always

23
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

endmodule

Figura 24. Tabla de verdad de un decodificador.

Figura 25. a) Simulación de la operación del decodificador 3 a 8.

24
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Figura 25. b) Simulación de la operación del decodificador 3 a 8.

Registro D_Latch
Un registro de n bits es un dispositivo de estado que tiene capacidad de almacenar n bits.
Internamente están formados por biestables, tantos como bits sea capaz de almacenar el
registro. Normalmente estos dispositivos son síncronos siendo los biestables D los más
usados para la implementación interna.
Los registros se usan para almacenar una serie de bits relacionados, como un byte
(8 bits) de una computadora. En la figura 26 se muestra un registro de 3 bits.
La palabra A[0-2] solo aparece en la salida Q[0-2], si se produce el cambio de nivel del
biestable, mediante el cambio de nivel en el reloj CLK:

Figura 26. Registro Latch de 3 bits.

En cuanto a las operaciones básicas que se realizan sobre los registros destacamos
fundamentalmente dos: escritura (W) y lectura (R), aunque habitualmente se pueden
encontrar registros que incorporan operaciones como Set (q=1) y Reset (q=0).

module D_Latch1(d, q, q_not, set, reset, clk);

input d, set, reset, clk;


output q, q_not;
reg q;
wire set, reset;

assign q_not = ~q;

always @ (clk)
begin
if (reset)
q=0;
else
if (set)
q=1;
else
q=d;
end

25
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

endmodule

26
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Figura 27.Simulación del Registro D Latch de 3 bits.

27
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Flip- Flop tipo D de 32 bits.

module FlipFlop_D_32bits(d, q, set, reset, clk);

input set, reset, clk;


input [31:0] d;
output [31:0] q;
reg [31:0] q;

always @ (posedge clk) La palabra D[0-2] solo aparece


begin en la salida Q[0-2], si se produce
if (reset) el cambio en el flanco positivo del
q=0; biestable, en el reloj CLK:
else
if (set)
q=1;
else
q=d;
end
endmodule

28
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Figura 28. a) Simulación del Registro D de 32 bits.

Figura 28. b) Simulación del Registro D de 32 bits.

29
Escuela Superior de Ingeniería Mecánica y Eléctrica-SEPI-UPA-IPN
(Lenguaje de Descripción de Hardware “Verilog”)

Bibliografía
o

http://www.xilinx.com

Verilog HDL, Reference Manual


FPGA Compiler II / FPGA Express

Digital design and synthesis with Verilog HDL


Sternwheim, Eli
Edit. San Jose, CA: Automata Publishing Co.

Real world FPGA design with Verilog


Coffman, Ken
Edit. Upper Saddle River, NJ: Prentice Hall PTR.

Verilog digital computer design: algorithms into hardware


Arnold, Mark Gordon
Upper Saddle River, NJ: Prentice Hall PTR

Sistemas digitales principios y aplicaciones


Rocci, Ronald J.
Mexico: Prentice Hall Hispanoamericana

Sistemas digitales: organización y diseño del hardware


Hill, Fredrick J.
Mexico: Limusa

Digital design
Mano, M. Morris
Englewood Cliffs, N.J. : Prentice Hall.

30

También podría gustarte