Loading documents preview...
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 típicamente 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 más LED, un PWM es una solución 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 señales para mostrar una imagen: R, G and B (red, green and blue signals). R, G y B (señales rojo, verde y azul). HS y VS (horizontal and vertical synchronization).
SA y VS (sincronización horizontal y vertical). El R, G y B son las señales analógicas, mientras que SA y VS son señales digitales.
Pines 13 y 14 del conector VGA (SA y VS) son señales 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Ω señales analógicas con valores nominales de 0.7V. Con salidas 3.3V FPGA, utilizan tres 270Ω resistencias en serie. Las resistencias forman divisores de tensión 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 excitación 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 línea por línea, de arriba a abajo. Cada línea se dibuja de izquierda a derecha.
Eso es rígida, no se puede cambiar eso.
Sin embargo, se especifica cuando el dibujo empieza por el envío de pulsos cortos en el SA y VS a intervalos fijos. SA, hace una nueva línea para empezar a dibujar, mientras que VS dice que el fondo se ha llegado (hace que el monitor se remontan hasta la línea superior).
Para el estándar de señal de vídeo VGA de 640x480, las frecuencias de los pulsos deben ser:
Frecuencia vertical (VS)
Frecuencia Horizontal (SA)
60 Hz (= 60 pulsos por segundo)
31,5 kHz (= 31.500 pulsos por segundo
CODIGO DE EJEMPLO CODIGO VERILOG CODIGO VHDL