Red de conocimiento informático - Conocimiento sistemático - Programación de velocidad en baudios para generador de velocidad en baudios

Programación de velocidad en baudios para generador de velocidad en baudios

La velocidad en baudios se refiere a la velocidad de modulación de la señal de datos a la portadora, que está representada por el número de veces que el estado de modulación de la portadora cambia por unidad de tiempo.

El generador de velocidad en baudios no genera un reloj de velocidad en baudios. La frecuencia del reloj en baudios/factor de velocidad en baudios = velocidad en baudios.

La función del generador de velocidad en baudios es convertir la velocidad en baudios requerida desde el reloj de entrada

Un generador de velocidad en baudios completo implementado por verilog:

módulo baud_gen(

clk_50MHz, rst_p, bclk

);

entrada clk_50MHz; /*Reloj del sistema de entrada, 50MHz*/

entrada rst_p; /*Restablecer pulso, nivel alto válido*/

/* Multiplique el valor de frecuencia 16 veces la velocidad en baudios de 9600, es decir, 9600*16=153600, para obtener la tasa de baudios real. la frecuencia de la señal de salida del dispositivo es 153,6 kbit/s */

output bclk; // Señal de salida: salida de pulso de reloj mediante generador de velocidad en baudios UART (puerto serie), frecuencia: 153,60 kbps

//Es decir, 1536000 pulsos por segundo, *Bloqueo de pulsos de salida del generador de velocidad en baudios, nota: además de la división de frecuencia principal,

//también determina el ciclo de trabajo de esta señal, en este por ejemplo, el ciclo de trabajo de la señal de salida es 1:325

reg bclk; //Registrar tipo de datos bclk

reg [8:0] cnt //Registrar tipo de datos cnt, 9 bits; , UART lo usa para registrar el número de pulsos de frecuencia principal recibidos.

//Tenga en cuenta que al modificar el valor de la velocidad en baudios de salida, si el ciclo de trabajo es inferior a 1:511, debe aumentar este valor. número de dígitos ocupados por la variable

//La siguiente declaración utiliza un contador síncrono para completar la división de frecuencia del reloj,

siempre @(posedge clk_50MHz) comienza /* Siempre que el nivel de la señal clk_50MHz cambia, ejecute la siguiente instrucción*/

if(rst_p) start /* Si la señal de pulso de reinicio es de nivel alto, ejecute la siguiente instrucción*/

cnt lt; = 0; // Para el contador de señal de frecuencia principal, cnt realiza una asignación de reinicio sin bloqueo y la asignación es 0 lógico. Después de eso, cambia cada vez que llega la señal del reloj.

bclk lt; = 0; /* A la variable de registro bclk se le asigna un valor de 0 lógico, que restablece la señal de pulso al nivel bajo, comenzando con el nivel bajo*/

end

else comienza

/* 50MHz dividido por 153600 (frecuencia UART real) es igual a 325,5, es decir, 50_000_000 /153600 = 325,5 (divisor de velocidad en baudios) */

if (cnt gt; 324) comenzar /*Si el valor de cnt es mayor que 324, es decir, el número de pulsos de conteo de cnt es igual a 325 (0-324 pulsos)*/

cnt lt; /* Valor cnt del contador de señal de frecuencia principal de 50 MHz, reinicio en modo sin bloqueo */

bclk lt = 1 /*La señal de pulso del reloj de velocidad en baudios del puerto serie; se le asigna un valor lógico 1, lo que hace que la señal de pulso salte al nivel alto Period */

end

else start

cnt lt = cnt 1; /* El valor cnt del contador de señal de frecuencia principal de 50 MHz se asigna incrementalmente sin bloqueo (Agregar 1) */

bclk lt = 0 //La señal de pulso del reloj del generador de velocidad en baudios es bclk; se le asigna un valor de '0' sin bloqueo,

//Uso La señal de pulso salta al período de nivel bajo*/

fin

fin

fin

endmodule