EDA (Quartus II) -Diseño de contador de adición decimal

Tabla de contenido

Objetivo:

Vista previa del experimento:

Explicación del experimento 1:

Descripción de VerilogHDL de flip-flops y cierres D:

Explicación del experimento 2:

Diseño de flip-flop D

Contenido del experimento: diseño de contador de suma decimal

Resumen del experimento


Objetivo:

  1. Familiarizarse con el uso del software Quartus II y dominar el proceso EDA;
  2. Dominar los métodos de diseño de circuitos lógicos secuenciales básicos;
  3. Aprenda el diseño del contador de suma decimal para sentar las bases para el diseño de circuitos lógicos secuenciales complejos.

Vista previa del experimento:

  1. Dominar el principio de diseño del contador de suma decimal;
  2. Realización de circuitos síncronos y asíncronos;
  3. Uso de la declaración if.

Explicación del experimento 1:

Descripción de VerilogHDL de flip-flops y cierres D:

module D_ff(D,clk,q);    //D触发器
input D,clk;
output reg q;
always@(posedge clk)
q<=D;
end
endmodule

module latchl(D,clk,q);    //锁存器
input D,clk;
output reg q;
always@(D or clk)
if(clk)
q<=D;
end
endmodule

El punto común del pestillo y el flip-flop: tiene dos estados estables de 0 y 1. Una vez que se confirma el estado, puede mantenerse. Un pestillo / flip-flop puede almacenar un bit de código binario.

La diferencia entre pestillos y flip-flops: pestillos --- circuitos de almacenamiento que son sensibles al nivel de pulso y cambian de estado bajo la acción de un nivel de pulso de entrada específico. Flip-flop --- Un circuito de memoria sensible al borde de un pulso, que cambia su estado en el momento del cambio del borde ascendente o descendente del pulso del reloj.

Punto de sintaxis 1:

Descripción icónica de temporización posedge clk: Todos los componentes de temporización activados por flanco deben utilizar posedge (negedge) clk, y los circuitos de temporización generados sin esta descripción son circuitos de temporización sensibles al nivel. Entre ellos, posedge clk significa disparador de flanco ascendente y negedge clk significa disparador de flanco descendente.

Explicación del experimento 2:

Diseño de flip-flop D

module d_ff(rst,D,clk,q);//异步
input rst,D,clk;
output reg q;
always@ (posedge clk or posedge rst)
begin 
if(rst)
q<=0;
else 
q<=D;
end
endmodule
 Forma de onda de simulación de flip-flop D de reinicio asíncrono
module d_fft(rst,D,clk,q);//同步
input rst,D,clk;
output reg q;
always@ (posedge clk  )
begin 
if(rst)
q<=0;
else 
q<=D;
end
endmodule
Forma de onda simulada del flip-flop D de reinicio síncrono

Punto de sintaxis 2: asincrónico y sincrónico

Asíncrono: Se refiere al terminal de control de reinicio independiente del control del reloj. Es decir, en cualquier momento, siempre que rst = 1 o 0, la salida del flip-flop se borra inmediatamente a 0, independientemente del estado del reloj.

Declaración utilizada:

siempre @ (posedge clk o posedge primero)

comenzar

      si (primero) q <= 0;

      si no q <= D;

fin

Sincronización: no solo el primero es válido, sino que el flanco ascendente del reloj debe llegar antes de que se borre la salida del flip-flop;

Declaración utilizada

siempre @ (posedge clk)

comenzar

      si (primero) q <= 0;

      si no q <= D;

fin

La descripción del proceso del reloj de Verilog señala que: cuando no hay una palabra clave posedge o negedge en la tabla de señales sensibles, no es válido intentar cambiar la función lógica cambiando la ubicación de la señal sensible. Cuando la tabla de señales sensibles contiene palabras clave posedge o negedge, el resultado completo puede verse afectado cambiando la ubicación de la señal sensible.

Punto de sintaxis 3 : declaración condicional (declaración if)

La declaración condicional es determinar la siguiente operación en función de si se establece la condición. La expresión condicional después de si es generalmente una expresión lógica o una expresión relacional y debe colocarse entre paréntesis.

Cuando se ejecuta la instrucción if, primero se calcula el valor de la expresión. Si el resultado es 0, xo z, se procesa como "falso"; si el resultado es 1, se procesa como "verdadero" y el correspondiente se ejecuta la sentencia.

Hay 3 formas de declaración if en el lenguaje Verilog:

El formato 1 es una declaración condicional incompleta, que se utiliza para generar circuitos secuenciales, como se muestra a continuación:

if (condition_expr) true_statement;

El formato 2 es una declaración condicional completa que genera un circuito lógico combinacional; se genera un circuito secuencial en una situación específica, como las señales sensibles al borde expresadas por posedge CLK, como se muestra a continuación:

if (condition_expr) true_statement;

else sentencia_falla;

 El formato 3 es una declaración condicional anidada múltiple, que puede producir una descripción de condición más rica, que puede producir tanto circuitos secuenciales como circuitos combinacionales.

if (condition_expr1) true_statement1;

else if (condition_expr2) true_statement2;

else if (condition_expr3) true_statement3;

       ……

else default_statement;

Contenido del experimento: diseño de contador de suma decimal

Requisitos de diseño experimental: Diseñe un contador de suma decimal con restablecimiento asíncrono y habilitación síncrona. Entre ellos, RST es una señal de reinicio asíncrona, EN es una señal de habilitación síncrona y CLK es una señal de reloj. CQ es la salida de conteo y COUT es la salida de acarreo.

Programa fuente de ajuste del contador de suma decimal:

module cnt_10(rst,en,clk,q,cout);//十进制加法器
input rst,en,clk;
output reg[3:0] q;
output reg cout;
always@(posedge clk or negedge rst)
begin
if(~rst) begin q<=4'b0000; cout<=1'b0;end//是0就执行此行
		else if(en)
		if(q==4'b1001) begin q<=4'b0000;cout<=1'b1; end
				else begin q<=q+1'b1; cout<=1'b0;end
end
endmodule

Punto de sintaxis 4: declaración de asignación de proceso (equivalente a asignación de variable en VHDL)

La instrucción de asignación de procedimiento aparece en las instrucciones de bloque inicial y siempre, el símbolo de asignación es "=" y el formato es:

                      Variable de asignación = expresión;

En la instrucción de asignación del procedimiento, la variable de asignación a la izquierda del signo de asignación "=" debe ser una variable reg (registro), y su valor se puede obtener al final de la instrucción. Si una sentencia de bloque contiene varias sentencias de asignación de procedimiento, estas sentencias de asignación de procedimiento se ejecutan una por una de arriba a abajo en el orden en que se escriben las sentencias. Si la sentencia anterior no se completa, la siguiente sentencia no se puede ejecutar, ya que si está bloqueado mismo. Por lo tanto, la instrucción de asignación de procedimiento también se denomina instrucción de asignación de bloqueo.

En la estructura de proceso del programa Verilog, la asignación de bloqueo es una transmisión de datos idealizada que ocurre inmediatamente sin ningún comportamiento de demora.

En la misma estructura de proceso, se permiten múltiples asignaciones a la misma variable de destino, es decir, se permiten múltiples fuentes de variador para la misma variable de destino.

Tiene las características de asignación secuencial, es decir, la secuencia de las sentencias de asignación de bloqueo en el proceso afectará directamente al resultado final o al resultado integral.

Punto de sintaxis 5: declaración de asignación sin bloqueo (equivalente a asignación de señal en VHDL)

Las instrucciones de asignación sin bloqueo también aparecen en las instrucciones de bloqueo inicial y siempre, el símbolo de asignación es "<=" y el formato es:

                  Variable de asignación <= expresión;

 En una instrucción de asignación sin bloqueo, la variable de asignación en el lado izquierdo del signo de asignación "<=" también debe ser una variable reg. Su valor no es como en una instrucción de asignación de procedimiento, que está disponible inmediatamente al final de la declaración, pero solo se puede obtener al final de la declaración de bloque.

Recomendación: en el diseño de circuitos lógicos secuenciales, utilice instrucciones de asignación sin bloqueo.

En el proceso del programa Verilog, la declaración de asignación sin bloqueo está más cerca de la asignación y salida del circuito real, tiene una operación de retardo especial y no afecta las operaciones de asignación de otras declaraciones similares durante el proceso de asignación. Al igual que el bloqueo de la asignación, se permiten múltiples asignaciones o la conducción de la misma señal de destino. Verilog estipula que la variable de destino asignada acepta los datos de la fuente de conducción más cercana al final del proceso.

Por ejemplo, en la siguiente declaración de bloque contiene 4 declaraciones de asignación

siempre @ (reloj posedge)

m = 3;

n = 75;

n <= m;

r = n;

Después de que se ejecuta la instrucción, el valor de r es 75, no 3, porque la tercera línea es una instrucción de asignación sin bloqueo "n <= m" Esta instrucción no cambiará hasta el final de la instrucción de bloque.

Tarea experimental 1:

Los estudiantes se dan cuenta de la entrada de código, síntesis y simulación de software del contador de suma decimal, analizan cuidadosamente los resultados de la simulación de software y modifican el diseño a través de los resultados de la simulación de software;

Tarea experimental 2:

Los estudiantes seleccionan el modo de circuito de acuerdo con los puertos de entrada y salida del contador de adición decimal y realizan el bloqueo de pines correspondiente, la descarga de programación y la verificación del hardware.

[El reloj es ingresado por el clkB0 o B1 del sistema, la señal de habilitación y la señal de reinicio se ingresan con el botón, la salida cout se muestra con la luz LED y el resto se muestra con el tubo digital]

Resumen del experimento

 

 

Supongo que te gusta

Origin blog.csdn.net/XZ_ROU/article/details/113436361
Recomendado
Clasificación