PDLP 01
PDLP 01
Unidad Temática: I
Competencia Específica:
Implementa los circuitos descritos con HDL y su software en los DLP (FPGA).
Contenido:
En esta práctica usted aprenderá a implementar los siguientes circuitos y máquinas de estado:
• Implementar y simular las funciones de la table 1.1, escritas en HDL (VHDL y
Verilog).
• Implementar y simular un registro de 8 bits basados en los FF tipo D.
• Implementar y simular un contador up-down de 4 bits con salida a display 7 seg.
• Implementar dos sirenas (policía, ambulancia) junto con sus etapas de potencia de
audio con control on-off.
• Top Level Design.
• Implementar un circuito de prueba para un encoder mecánico rotatorio y el
PmodALS.
Content:
In this practice, you will learn to implement combinatorial and sequential circuits, and also
Finite State Machines, with the next characteristics:
• Implement and simulate the functions of table 1.1, written with HDL.
• Implement and simulate a 8 bit register based on a D flip-flop circuit.
• Implement and simulate a 4bit up-down counter with 7 segment display output.
• Implement two sirens (police, ambulance), with the power circuit and on-off control.
• Top Level Design.
• Implement a test circuit for a rotary mechanical encoder and the PmodALS.
1
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Pre-reporte uno.
Previous work one.
Desarrollar los siguientes puntos como trabajo previo para el buen progreso de la práctica
[máximo 15 cuartillas si se solicita impreso (Letra Times New Roman de 12ptos,
interlineado sencillo)]:
1. Investigar las características de los HDL así como también las de los CPLD y FPGA.
2. Diseñar y construir los circuitos externos que necesite la tarjeta para cada punto del
desarrollo, particularmente un circuito amplificador de audio para una bocina de 4 u 8 ohms,
de por lo menos ½ W.
3. Escribir los códigos de VHDL y Verilog para programar las funciones de salida mostradas
en la entidad de la figura 1.1, que cumpla con la tabla 1.1. Compilar o sintetizar para tener
los archivos que se programarán en el dispositivo lógico programable que contiene su sistema
de desarrollo.
Tabla 1.1. Tabla de verdad de las funciones de salida S. Algunas funciones se propondrán
por el profesor en el salón.
ABC S1 S2 S3 S4 S5 S6
000 0 0 1
001 1 1 1
010 1 1 0
011 0 1 0
100 1 1 0
101 0 1 0
110 0 1 1
111 1 1 1
4. Escribir en VHDL y Verilog los códigos para programar (a) un registro de 8 bits basado
en un flip-flop tipo D, mostrado en la figura 1.2, y (b) un contador binario de 4 bits
ascendente-descendente con salida a display de 7 segmentos de ánodo común (0-9 y A-F),
con botón de sentido, reten (hold) y reset en bajo, como la entidad de la figura 1.3.
2
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
NOTA: En caso de no entregar el pre-reporte y/o de no traer el material (con los circuitos
armados), los alumnos NO TENDRÁN derecho a entrar al laboratorio. Los circuitos deben
de armarse de acuerdo con la indicación del archivo de restricciones. Coloque las preguntas
con su numeración en los pre-reportes y reportes.
Material y Equipo.
Equipment and components.
Nota: las cantidades de componentes depende de los diseños que se realicen, además de
corroborar los componentes que se tengan en una tarjeta de desarrollo.
Introducción.
Introduction.
Loa lenguajes existentes de descripción de hardware se dividen en dos, los que abarcan
sistemas continuos o analógicos y los que trabajan sistemas discretos o digitales (binarios).
Por ejemplo, los primeros pueden utilizar los FPAA (Field Programmable Analog Array) y
los segundos emplean los FPGA (Field Programmable Gate Array).
3
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
La gente encargada del desarrollo de esta tecnología logra el diseño de dispositivos más
potentes en espacios muy pequeños, lo cual se realiza por medio de algunas de las siguientes
técnicas: diseño totalmente a la medida (Full Custom Design), al diseñar transistor por
transistor hasta su implementación final en el circuito integrado (CI); diseño de los ASIC
(Application Specific Integrated Circuit), que propone la implementación de los diseños
sobre celdas programables. Dentro de ésta última se encuentra la familia de los Dispositivos
Lógicos Programables (PLD), tanto pequeños como los complejos (CPLD), cuyo nivel de
integración histórico se puede representar primeramente por los arreglos lógicos
programables (PAL), arreglos lógicos genéricos (GAL Generic Array Logic) hasta llegar a
los CPLD y los FPGA (arreglos lógicos programables en campo). Debido a su conectividad
han hecho posible la facilidad y factibilidad de disminuir los costos.
Los elementos mínimos necesarios para poder utilizar estas tecnologías se restringen a la
existencia y uso de una computadora con el software apropiado (por ejemplo: ISE de Xilinx)
y la tarjeta de desarrollo que ya contiene la interfaz, el programador y los elementos
conectados de entrada y salida junto con conectores disponibles para entradas y salidas de
otros componentes, como la mostrada en la figura 1.6.
4
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Ambos lenguajes describen con códigos los modelos de un hardware digital en distintos
niveles de abstracción. Dichos modelos requieren:
• Especificaciones
• Documentación
• Pruebas utilizando un simulador
• Verificación formal
• Síntesis
• Implementación
Como resultado de esto se obtiene un proceso de diseño muy confiable con el mínimo costo
y tiempo invertidos, evitando errores de diseño al aplicar una metodología eficaz.
Los estilos y niveles de abstracción con los cuales se describe un circuito son:
Esta es una descripción de bajo nivel donde el diseño es descrito con compuertas básicas
como AND, NAND, OR, NOR, XOR XNOR y NOT, conectadas Corresponde a una
descripción a bajo nivel del diseño, también a través de señales o alambres (wire). Los valores
que pueden tomar son ‘0’, ‘1’, ‘X’ o ‘Z’. A continuación, se muestran unos ejemplos.
5
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
//multiplexor 2 a 1
module mux(f,a,b,sel);
//entradas y salidas
input a,b,sel;
output f;
//wire nsel,f1,f2;
and g1(f1,a,nsel),
g2(f2,b,sel);
or g3(f,f1,f2);
not g4(nsel,sel);
endmodule
xor(s1,x,y);
xor(s,cin,s1);
and(c1,x,y);
and(c2,y,cin);
and(c3,x,cin);
or(cout,c1,c2,c3);
endmodule
//Full Adder
6
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
module full_adder(X,Y,Cin,S,Cout);
input X,Y,Cin;
output S,Cout;
wire s1,c1,c2;
//full adder body
half_adder ha1(X,Y,s1,c1);
half_adder ha2(Cin,s1,S,c2);
or(Cout,c1,c2);
endmodule
//Full Adder
module full_adder(X,Y,Cin,S,Cout);
input X,Y,Cin;
output S,Cout;
wire s1,c1,c2;
//full adder body
half_adder ha1(X,Y,s1,c1);
half_adder ha2(Cin,s1,S,c2);
or(Cout,c1,c2);
endmodule
7
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
//and de 3 entradas
module and_gate(a,b,c,out) ;
input a,b,c;
output out ;
wire out ;
//asignación
assign out = a&b&c ;
endmodule
8
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
//Sumador de 4 bits
//Descripción por flujo de datos
module adder4(A,B,Cin,SUM,Cout);
input [3:0] A,B;
input Cin;
output [3:0] SUM;
output Cout;
assign {Cout,SUM}=A+B+Cin;
endmodule
Comportamental (Behavioral)
En este nivel (Behavioral level) se define el comportamiento del sistema mediante algoritmos
(típimamente en paralelo), descritos con distintas estructuras de lenguaje (if-then-else, case-
when, when-else, etc.).
always @(a or b or s)
if (s==1) Mout=a;
else Mout=b;
endmodule
9
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
else
Yout=4'b0000;
end
endmodule
//Días en el mes
module DiasEnElMes(mes, dias) ;
input [3:0] mes ;
output [4:0] dias ;
reg [4:0] dias ;
//proceso de asignación
always @(*)
begin
case(mes)
0,13,14,15: dias = 5'b00000 ;
2: dias = 5'd28 ;
4,6,9,11: dias = 5'd30 ;
default: dias = 5'd31 ;
endcase
end
endmodule
Estructural (Structural)
10
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Un objetivo de estas prácticas del laboratorio y del curso es el de manejar y aplicar el lenguaje
de programación VHDL (lenguaje de descripción en hardware) y Verilog, los cuales son
considerados como las herramientas de diseño por las industrias y las universidades de todo
el mundo, pues presenta grandes ventajas en la planeación y diseño de los sistemas
electrónicos digitales.
Por último, es bueno saber que el manejo de bits en HDL (Verilog y VHDL) se realiza por
medio de operadores (mostrados más adelante), recomendando revisar las palabras
reservadas, los modos, tipos y estilos, entre otras cosas, que se utilizan para la descripción de
los sistemas digitales en cada lenguaje existente.
Desarrollo.
Procedure
Práctica Guiada.
Guided practice.
Recuerde MOSTRAR sus circuitos funcionando a su profesor para la valoración del trabajo
de laboratorio (TL1).
Tabla 1.1. Tabla de verdad de las funciones de salida S. Algunas funciones se propondrán
por el profesor en el salón.
ABC S1 S2 S3 S4 S5 S6
000 0 0 1
001 1 1 1
010 1 1 0
011 0 1 0
100 1 1 0
101 0 1 0
110 0 1 1
111 1 1 1
Antes de continuar, recordamos que los operadores para el manejo de bits son:
11
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
? Condicional,
(condición) ? true_expr :
false_expr
(a) Abrir el programa “ISE Project Navigator” y crear un nuevo proyecto seleccionando
HDL (VHDL) y las características del componente a utilizar, por ejemplo, para la Nexys
12
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Nota: En el listado, los números del lado izquierdo no pertenecen al código en VHDL, solo
se utilizan para hacer una referencia a los renglones.
13
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Las líneas 16 a 24 declaran un proceso, que para este caso no es necesario ponerse,
porque es una asignación con ecuaciones booleanas. En las líneas 18 a la 23 se declaran
dichas ecuaciones, haciendo notar el uso de asignación ‘<=’hacia la izquierda y
terminándola con punto y coma ‘;’. Y finalmente se termina con el comando ‘end
nombre_arquitectura’ en la línea 25.
(b) Generar el archivo de programación de las funciones, después de asignar los elementos
que se conectarán al FPGA (ver asignación de terminales). Programar el dispositivo con
el archivo *.bit para un FPGA o un archivo *.jed para un CPLD, ya sea desde el ISE de
Xilinx o bien desde el programa Adept de Digilent y probar el funcionamiento.
#######################################
## Asignación de terminales de la nexys2 ##
#######################################
14
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
(c) Con el simulador elegido, probar todos los cambios de las entradas y obtener la
simulación mostrada en la figura 1.7. En un reporte se editarán las fotos o imágenes con
texto explicativo.
Figura 1.7. Simulación de las tres entradas (a,b,c) para generar las salidas (s1,s2,s3).
(a) Abrir el programa “ISE Project Navigator” y crear un nuevo proyecto seleccionando
HDL (Verilog), colocando las características del FPGA a utilizar (i.e. en la Nexys 2:
Spartan 3E, XC3S500E, FG320, XST (VHDL/Verilog), ISim (VHDL/Verilog)).
Escribir el código en Verilog en donde se declaran las entradas y salidas solicitadas.
Nota: En el listado, los números del lado izquierdo no pertenecen al código en Verilog, solo
se utilizan para hacer una referencia a los renglones.
15
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
(b) Generar el archivo de programación de las funciones, después de asignar los elementos
que se conectarán al FPGA (ver asignación). Programar el dispositivo con el archivo
*.bit para un FPGA o un archivo *.jed para un CPLD, ya sea desde el ISE de Xilinx o
bien desde el programa Adept de Digilent y probar el funcionamiento.
#######################################
## Asignación de terminales de la nexys2 ##
#######################################
16
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
(c) Con el simulador elegido, probar todos los cambios de las entradas y obtener la
simulación, como se mostró en la figura 1.7. En un reporte se editarán las fotos o
imágenes con texto explicativo.
(a) Abrir un proyecto en el “ISE Project Navigator” seleccionando HDL (primero VHDL y
en otro Verilog), poner las características del componente a utilizar y escribir los códigos
en los dos lenguajes para declarar el FF-D para sintetizarlos.
(b) Simular el funcionamiento del FF para obtener algo parecido a lo mostrado en la figura
1.8.
(c) Crear el archivo de restricciones de usuario y generar el archivo *.bit para programar el
dispositivo. Probar el funcionamiento en la tarjeta con el archivo *.bit, esto para ambos
lenguajes. En un reporte se colocan los códigos comentados y fotos editadas con texto
explicativo.
Se muestra a continuación una forma de realizar un solo FF-D, tanto en VHDL como en
Verilog, así como la asignación de terminales para la Nexys 2.
-- Flip-flop tipo D
-- código en VHDL
library ieee;
use ieee.std_logic_1164.all;
17
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
// Flip-flop tipo D
// código en Verilog
module ff_d (d, clk, q, q_bar);
input d, clk; //entradas
output q, q_bar; //salidas
wire d, clk; //entradas alambradas
reg q, q_bar; //salidas registradas
#######################################
## Asignación de terminales de la nexys2 ##
#######################################
18
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
(a) Abrir un proyecto en el “ISE Project Navigator” seleccionando HDL (primero VHDL y
en otro Verilog), poner las características del componente a utilizar y escribir los códigos
en los dos lenguajes para declarar el contador binario.
process (clk)
begin
-- cada vez que existe un flanco de subida se realiza lo siguiente:
-- si hab = '1' contará según dir
-- si dir = '1' contará hacia arriba, si dir = '0' contará hacia abajo
if rising_edge(clk) then
if hab = '1' and dir = '1' cont <= cont + 1; -- cuenta ascendente
elsif hab = '1' and dir = '0' cont <= cont - 1; -- cuenta descendente
else cont <= cont;
end if;
end if;
cnt <= cont; -- se actualiza el contador cnt con la señal cont
end process; --fin del proceso
// contador en Verilog
module contador (clk, hab, dir, cnt); //reloj, reset, habilitación, dirección, conteo
input clk, hab, dir; //entradas
output [3:0] cnt; //salidas
19
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
//si está habilitado hab = '1' se revisa dir, con dir = '1' cuenta ascendente
always @(posedge clk)
if (hab) cnt <= dir ? cnt+1 : cnt-1;
endmodule
/*otra forma de poner el always es:
always @(posedge clk)
if (hab == '0') cnt <= cnt;
else if (dir == '1') cnt <= cnt+1;
else cnt <= cnt-1;
*/
#######################################
## Asignación de terminales de la nexys2 ##
#######################################
20
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
4. Implementar un circuito para tocar la sirena (i) de policía y (ii) de una ambulancia con
distintos barridos de tonos, controlando en encendido y apagado con un interruptor.
Reportar códigos y fotos.
Implement a circuit to play the siren of (i) police and (ii) an ambulance with different
sweeps of tones, controlling then on and off with a switch. Report codes and photos.
// Pmod ALS en JA
NET "JA1" LOC = "L15"; // JA1
NET "JA2" LOC = "K12"; // JA2
NET "JA3" LOC = "L17"; // JA3
NET "JA4" LOC = "M15"; // JA4
5. Implementar el diseño de dos circuitos utilizando alto nivel (Top Level Design), uno
con VHDL y uno con Verilog. Reportar códigos y fotos. Nota: deben se distintos a los
otros puntos entregados.
Implement the design of two circuits using high level (Top Level Design), one with VHDL
and one with Verilog. Report codes and photos. Note: must be different to another point
reviewed.
6. Implementar con TLD un circuito de prueba del giro de un encoder mecánico rotatorio,
mostrado en las referencias y uno para el PmodALS. En caso de no tener los módulos
periféricos para implementar, realizar solo la simulación. Reportar códigos y fotos.
21
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Implement using TLD a test circuit for rotatory mechanical encoder, showing in
references and one for the PmodALS. If you do not have the peripheral modules, realize
only the simulation. Repor codes and photos.
NOTA: Respetar la numeración de cada punto de este formato en el reporte escrito [máximo
15 cuartillas si se entrega impreso (Letra Times New Roman de 12ptos, interlineado
sencillo)].
Diseñar y construir una ALU con 4 operaciones lógicas y 4 operaciones aritméticas, por lo
menos, manejando datos de nibles, bytes y words.
Design and build an ALU with 4 logical operations and 4 arithmetic operations, at least,
handling data of nibles, bytes and words.
always @(posedge c)
if (r == 1) cnt <= 0;
else if(h) cnt <= d ? cnt+1 : cnt-1;
22
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
endmodule
reg speaker;
always @(posedge clk) if(counter==0) speaker <= ~speaker;
endmodule
reg speaker;
always @(posedge clk) if(counter==0) speaker <= ~speaker;
endmodule
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
23
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
--SIGNALS
signal spkr: std_logic;
signal tone: std_logic_vector(22 downto 0);
signal ramp: std_logic_vector(6 downto 0);
signal clkdivider: std_logic_vector(14 downto 0);
signal counter: std_logic_vector(22 downto 0);
-- tono --
process (clk)
begin
if clk'event and clk='1' then
tone <= tone + '1';
end if;
end process;
-- rampa y divisor --
process (tone)
begin
if tone(22) = '1' then ramp <= tone(21 downto 15);
else ramp <= not(tone(21 downto 15));
end if;
clkdivider <= "01" & ramp & "000000";
end process;
--contador up-down --
process (clk)
begin
if clk'event and clk='1' then
if counter = x"00000"&"00" then counter <= "00000000" & clkdivider;
else counter <= counter - '1';
end if;
end if;
end process;
--contador up-down --
process (clk, spkr)
begin
if clk'event and clk='1' then
if (counter = x"00000"&"00") then spkr <= not spkr;
24
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
end if;
end if;
speaker <= spkr;
end process;
end music;
Pmod ALS
Figura 1.9. Pmod ALS Módulo periférico con sensor de luz ambiental PmodALS, diagrama
esquemático y distribución de terminales.
El protocolo de comunicación empleado con la tarjeta es SPI de solo lectura, nunca se envía
información (datos) hacia el Pmod. Utiliza un ADC de 8 bits cuyo valor está relacionado al
nivel de luz ambiental.
Como se muestra en la figura 1.10, el dato viene conformado en una trama de 15 bits, siendo
los primeros 3 bits de valor cero, los bits del 4 al 11 son la información del nivel de luz con
el primer bit como MSB, los últimos 4 bits del 12 al 15 son ceros. Sin embargo, hay 16 pulsos
de reloj asociados con la operación de este Pmod. La comunicación comienza con un flanco
de bajada del selector del chip CS y la toma de datos se realiza con el siguiente flanco de
subida del reloj serial SCLK, es necesario dejar 50 ns o más para tQUIET esto para asegurar
una mejor conversión.
25
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Para el manejo de los tiempos, se recomienda que el reloj serial corra entre 1 y 4 MHz con
un ciclo de trabajo del 50%.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity SPI_ctrl_ALS is
generic(
N : integer := 8; -- number of bit to serialize
MAX : integer := 333_333 -- number of us to sample
);
port (
--FPGA clock and button
clk : in std_logic; -- 50MHz
rst : in std_logic; -- reset
--PmodALS
CS : out std_logic; -- Pmod chip selec
SDO : in std_logic; -- Pmod Serial Data Output
SCK : out std_logic; -- Pmod Serial Clock
-- led output
data : out std_logic_vector(N-1 downto 0):=x"00"; -- received data
-- Display "abcdefgP"
DISPLAY: out STD_LOGIC_VECTOR(7 DOWNTO 0); -- segmentos del display
AN: out STD_LOGIC_VECTOR(3 DOWNTO 0):="0111" -- ánodos del display
);
end SPI_ctrl_ALS;
--------------------------------------------------------------------------------
26
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
begin
--------------------------------------------------------------------------------
div : process(rst,clk,clkdiv,counter)
begin
-- divisor 1MHz (1us)
if(rst='1') then clkdiv <= '0';
elsif(rising_edge(clk)) then
if cnt = "11000" then cnt <= "00000"; -- 0 a 24
clkdiv <= not clkdiv; -- 0.5us alto, 0.5us bajo
else cnt <= cnt + '1';
end if;
end if;
SCK <= clkdiv;
end process div;
--------------------------------------------------------------------------------
cnter : process(rst,counter,clkdiv)
begin
-- divisor 1MHz (1us)
if(rst='1' or counter = MAX) then counter <= 0;
elsif(rising_edge(clkdiv)) then counter <= counter + 1 ;
end if;
--------------------------------------------------------------------------------
receive : process(clkdiv,counter,tempo,SDO,rst)
begin
--
if(rst='1') then tempo <= (others => '0');
elsif(rising_edge(clkdiv)) then
case counter is
when 0 => CS <= '1';
when 1 => CS <= '1';
when 2 => CS <= '0';
when 3 => tempo(0) <= SDO; --0
when 4 => tempo(1) <= SDO; --0
27
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
--ciclo de inicialización
FOR I IN 0 TO 17 LOOP --
C_D_U(I):='0'; -- se inicializa con 0
END LOOP;
28
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
-- realiza el corrimiento
C_D_U(17 DOWNTO 1):= C_D_U(16 DOWNTO 0);
END LOOP;
END PROCESS;
--UNIDADES
UNI<=P(3 DOWNTO 0);
--DECENAS
DEC<=P(7 DOWNTO 4);
--CENTENAS
CEN<="00"&P(9 DOWNTO 8);
29
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
end behav;
#######################################
## Asignación de terminales de la nexys2 ##
#######################################
//RESET--PUSH BUTTON
NET "RST" LOC = "H13"; // btn3 RST
// Pmod ALS en JA
NET "CS" LOC = "L15"; // JA1
#NET "NC" LOC = "K12"; // JA2
NET "SDO" LOC = "L17"; // JA3
NET "SCK" LOC = "M15"; // JA4
30
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
//DISPLAYS
NET "DISPLAY(7)" LOC = "L18"; // a
NET "DISPLAY(6)" LOC = "F18"; // b
NET "DISPLAY(5)" LOC = "D17"; // c
NET "DISPLAY(4)" LOC = "D16"; // d
NET "DISPLAY(3)" LOC = "G14"; // e
NET "DISPLAY(2)" LOC = "J17"; // f
NET "DISPLAY(1)" LOC = "H14"; // g
NET "DISPLAY(0)" LOC = "C17"; // P
//ANODOS
NET "AN(3)" LOC = "F17"; // AN0
NET "AN(2)" LOC = "H17"; // AN1
NET "AN(1)" LOC = "C18"; // AN2
NET "AN(0)" LOC = "F15"; // AN3
Código verilog
module FFD(d, clk, q); module FFDTL(ledq,swd,clock);
input d, clk; //entradas input clock;
output q; //salidas input wire [7:0] swd;
wire d, clk; //entradas alambradas output wire [7:0] ledq;
reg q; //salidas registradas
FFD U1
always @ (posedge clk) (.d(swd[0]),
begin .q(ledq[0]),
q = d; .clk(clock));
end
endmodule FFD U2
( .d(swd[1]),
.q(ledq[1]),
.clk(clock));
FFD U3
( .d(swd[2]),
.q(ledq[2]),
.clk(clock));
FFD U4
( .d(swd[3]),
.q(ledq[3]),
.clk(clock));
FFD U5
( .d(swd[4]),
31
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
.q(ledq[4]),
.clk(clock));
FFD U6
( .d(swd[5]),
.q(ledq[5]),
.clk(clock));
FFD U7
( .d(swd[6]),
.q(ledq[6]),
.clk(clock));
FFD U8
( .d(swd[7]),
.q(ledq[7]),
.clk(clock)
);
endmodule
Código vhdl
library IEEE; library ieee;
use ieee.std_logic_1164.all; use IEEE.STD_LOGIC_1164.ALL;
32
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
d => swd(2),
q => ledq(2) );
Referencias.
References.
33
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
[Link]
SPI: The serial peripheral interface, con sultado en enero-2023, disponible en:
[Link]
Bcharset%3DUTF-8
34
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Práctica 1
Lab Tarjeta de desarrollo
DLP Pto 1 Pto 2 Pto 3 Pto 4 Pto 5/6 (Práctica guiada)
Func. TLD/
VHDL FF-D Cont. encoder Comments LW1
Nombre mesa Empresa Verilog HDL. HDL sirena PmALS Comentarios TL1 R1 P1
1
1
1
2
2
2
3
3
3
4
4
4
5
5
5
Fechas 4.5hr. 6ptos 6pts
1. Funciones de la tabla 1.1 escritas en HDL, simulación e implementación.
1. Table 1.1 write in HDL, simulation and implementation.
2. Implementación y simulación de un registro de 8 bits (FF D).
2. Implement and simulate a 8 bit register (FF-D).
3. Implementación y simulación de un contador UD de 4 bits,
salida a display de 7seg.
3. Implementation and simulation of a 4 bit UD counter, 7seg
display output.
4. Sirenas (policía, ambulancia) y etapa de potencia.
4. Sirens (pólice and ambulance) and power stage
5 circuitos en Top Level Design.
5 TLD circuits.
6 Encoder test. PmodALS.
6 Encoder test. PmodALS
35
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Página dejada
en blanco
Page left
in blank
36