Sunteți pe pagina 1din 11

CODIGOS EJEMPLOS VERILOG

ING. YESID SANTAFE


BRILLO DE UN LED
module LED(clk, LED1);
input clk;
output LED1;

reg [23:0] cnt;


always @(posedge clk) cnt<=cnt+1;
wire [3:0] PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];
reg [4:0] PWM;

always @(posedge clk) PWM <= PWM[3:0]+PWM_input;

assign LED1 = PWM[4];

endmodule
Variando la intensidad del LED
module LEDblink(clk, LED);
input clk;
// reloj de tpicamente de 10 MHz a 50 M
output LED;
/ / Crear un contador binario
reg [32:0] cnt;

always @(posedge clk) cnt<=cnt+1;


assign LED = cnt[22];

/ / el LED parpadea en unos pocos Hz (cambiar el ndice de poco para


cambiar la velocidad intermitente)

endmodule
module LED_PWM(clk, PWM_input, LED);
input clk;
input [3:0] PWM_input; / / 16 niveles de intensidad

output LED; reg [4:0] PWM;


always @(posedge clk) PWM <= PWM[3:0]+PWM_input;
assign LED = PWM[4];

endmodule

Para el control de la intensidad ms LED, un PWM es una solucin ideal.


Contador decimal
module LED_7seg(clk, segA, segB, segC, segD, segE, segF, segG, segDP);
input clk;
output segA, segB, segC, segD, segE, segF, segG, segDP;
reg [23:0] cnt;
always @(posedge clk) cnt<=cnt+24'h1;
wire cntovf = &cnt; // BCD is a counter that counts from 0 to 9
reg [3:0] BCD;
always @(posedge clk) if(cntovf) BCD <= (BCD==4'h9 ? 4'h0 : BCD+4'h1);
reg [7:0] SevenSeg;
always @(*) case(BCD) 4'h0: SevenSeg = 8'b11111100;
4'h1: SevenSeg = 8'b01100000;
4'h2: SevenSeg = 8'b11011010;
4'h3: SevenSeg = 8'b11110010;
4'h4: SevenSeg = 8'b01100110;
4'h5: SevenSeg = 8'b10110110;
4'h6: SevenSeg = 8'b10111110;
4'h7: SevenSeg = 8'b11100000;
4'h8: SevenSeg = 8'b11111110;
4'h9: SevenSeg = 8'b11110110;
default: SevenSeg = 8'b00000000;
Endcase
assign {segA, segB, segC, segD, segE, segF, segG, segDP} = SevenSeg;
endmodule
Un monitor VGA requiere 5 seales para
mostrar una imagen:
R, G and B (red, green and blue signals).
R, G y B (seales rojo, verde y azul).

HS y VS (horizontal and vertical


synchronization).

SA y VS (sincronizacin horizontal y
vertical).
El R, G y B son las seales analgicas, mientras
que SA y VS son seales digitales.
Pines 13 y 14 del conector VGA (SA y VS) son seales
digitales, por lo que se puede conducir directamente a
partir de dos pines CPLD (o por medio de resistencias
de los valores bajos, como 10 o 20).

Los pines 1, 2 y 3 (R, G y B) son 75 seales analgicas


con valores nominales de 0.7V. Con salidas 3.3V FPGA,
utilizan tres 270 resistencias en serie.
Las resistencias forman divisores de tensin con las
resistencias de 75 en las entradas del monitor para
que sea 3.3V 3.3 * 75 / (270 +75) = 0.72V, muy cerca de
0.7V.

La excitacin de estos tres pines con diferentes


combinaciones de 0 y 1, nos da hasta 8 colores.

tierra son los pines 5, 6, 7, 8 y 10.


Frecuencia del generador

Un monitor muestra siempre una imagen


Eso es rgida, no se puede cambiar eso.
lnea por lnea, de arriba a abajo. Cada lnea
se dibuja de izquierda a derecha.

Sin embargo, se especifica cuando el dibujo


empieza por el envo de pulsos cortos en el SA
y VS a intervalos fijos. SA, hace una nueva lnea
para empezar a dibujar, mientras que VS dice
que el fondo se ha llegado (hace que el
monitor se remontan hasta la lnea superior).

Para el estndar de seal de Frecuencia vertical Frecuencia


vdeo VGA de 640x480, las (VS) Horizontal (SA)
frecuencias de los pulsos 60 Hz (= 60 pulsos 31,5 kHz (= 31.500
deben ser: por segundo) pulsos por segundo
CODIGO DE EJEMPLO

CODIGO VERILOG

CODIGO VHDL