Red de conocimiento informático - Problemas con los teléfonos móviles - Entorno de programación VHDL

Entorno de programación VHDL

Suponiendo que el reloj de entrada sea 6M,

Lo siguiente es lo que recompilé con algunos cambios. Después de la simulación, el estado es correcto.

Debido a que la división de frecuencia ahora es diez elevado a la sexta potencia, las herramientas de simulación ordinarias tardarán mucho tiempo en realizar una simulación real. La imitación duró más de una hora. Posteriormente cambié el divisor de frecuencia a varias divisiones de frecuencia (solo modifiqué los siguientes parámetros) y obtuve que la función de estado era correcta, pero la salida no era 1S y 0.5S, pero este requisito debe escribirse según el programa, porque hay No hay problema. Será mejor que busques una placa de desarrollo.

Establezco varios modos de visualización en un estado y luego cambio el estado. Si hay un problema, debería ser el problema de la división de frecuencia frontal.

Por supuesto que no hay ningún requisito. Puede suponer que el reloj de entrada es 0,5 S y luego dividirlo por 2 para obtener 0,1 S, lo que se puede simplificar mucho. Envíame un mensaje si tienes alguna pregunta.

Agregué algunos comentarios al final del programa.

Biblioteca ieee

Usa IEEE.STD_logic_1164.all;

Usa IEEE. STD_LOGIC_ARITH. Todos;

Utiliza IEEE. STD_LOGIC_UNSIGNED todos;

La entidad Punggye es el puerto (

restablecer, ajustar, clk: en STD_logic;

y: fuera STD_logic_vector (de 9 a 0));

Fin;

El comportamiento del edificio de Maple Creek es

Recuento de señales: rango de números enteros de 0 a 6000 - contador en segundos Unidad

Señal; milisegundo 1, milisegundo 2: rango de enteros de 0 a 500; - división de frecuencia, segundos

Señal segundo1, segundo 2: STD_logic; -1,5 segundos

Recuento de señales clk: STD_logic - estado; reloj de activación de la máquina

Señal y_out: STD_logic_vector(9 hasta 0);

El estado del tipo es (s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,

s12, s13, s14, s15, s16, s17, s18, s19, s20, s 21); - Generación de estados, generando los cambios requeridos en forma de máquina de estados. .

Estado de la señal: estado;

Iniciar

Proceso (CLK, reset)

Iniciar

Si RESET ='1 'luego cuenta lt=0; segundo 1 lt; ='0'; segundo2 lt='0';

Evento Elshef CLK y CLK='1 'luego

cuenta lt = cuenta 1; - milisegundos, ajustable al reloj deseado.

Si cuenta=6000, entonces

ms1lt;=ms1 1;

mslt=ms2 1;

Cuenta lt=0;

Finalizar si;

Si milisegundos 1 = 500 entonces-1 se puede ajustar al reloj que desee.

segundo 1 lt; = no segundo 1;

milisegundo 1 lt; = 0;

fin si

si milisegundo 2 = 250, entonces -0,5 s se pueden ajustar al reloj que desee.

segundo2 lt= no segundo2

Milisegundo lt=0

Finalizar si

Finalizar si

Finalizar el proceso;

Proceso (ajuste, reset) - ajuste de velocidad.

Iniciar

si (reset='1 ') luego countclk lt='0'; otro

Si ajustar='1 ', entonces countclk lt= segundo 1; finalizar si;

Si ajustar='0 ', entonces countclk lt= segundo2 finalizar si

Finalizar proceso; p>

Finalizar proceso;

Finalizar si p>

Proceso (reset) - transición de estado

Iniciar

if (reset='1) ') entonces

Estado lt= s0 otro

p>

si (flanco ascendente (reloj de conteo)) entonces

El estado del caso es

Cuando s0 = >; estado lt= s 1;

Cuando s 1 = gt; estado lt= s2

Cuando s2= >; /p>

Cuando s3 = >; estado lt= s4

Cuando s4= >; estado lt= s5

Cuando s5 = gt estado lt= s6

Cuando s6= >; estado lt= s7

Cuando s7 = >estado lt= s8

Cuando s8= >; Cuando s9 = gt estado lt= s 10;

Cuando s10 = >; estado lt = s 11

Cuando s 11 = gt; >

Cuando s12 = >estado lt = s 13;

p>

Cuando s13=>Estado lt= s 14;

Cuando s14=>Estado lt= s 15;

Cuando s15=>Estado lt= s 16;

Cuando s16= >estado lt= s 17;

Cuando s17 = >estado lt = s 18;

Cuando s18= >estado lt= s 19

Cuando s19= >estado lt= s20

Cuando s20 = gt estado lt= s 21;

Cuando S21= >; estado lt= S0

Fin de caso;

Fin si

Fin; /p>

Finalizar proceso;

Proceso (restablecer) -Salida de asignación de estado.

Iniciar

Si reset='1', entonces

y _ out lt="1111111111";

Otros

El estado del caso es

Cuando s0 = >;y_out lt="1111111111";

Cuando s 1 = gt;y_out lt="0111111111" ;

Cuando s2= >; y_out lt="0101111111";

Cuando s3= >; y_out lt="0101011111";

Cuando s4=>; "0101010111";

Cuando s5 = gty_out lt="0101010101";

Cuando s6=>; cuando _ out lt="1111111111"; s7= >y_out lt="1011111111";

Cuando s8= >; y_out lt="1010111111";

Cuando s9 = gty_out lt="1010101111 ";

Cuando s10 = >; y_out lt="1010101011";

Cuando s 11 = gt;y_out lt="1010101010";

Cuando s12= >y_out lt="1111111111";

Cuando s13= >y_out lt=" 0111111111";

Cuando s14= >y_out lt="0011111111";

Cuando s15= >y_out lt="0001111111";

Cuando s16= >y_out lt="0000111111";

Cuando s17= >y_out lt="0000011111" ;

Cuando s18= >y_out lt=" 0000001111";

Cuando s19 = >y_out lt="0000000111";

Cuando s20 = gty_out lt= "0000000011";

Cuando s21 => cuando;y_out lt="0000000001";

cuando otros = gty_out lt="ZZZZZZZZZZ

fin de caso;

finalizar si ;

y lt= y _ out

Finalizar el proceso;

Fin;