Tabla de contenido
Explicaciones y ejercicios experimentales:
1. El programa fuente del multiplexor que elige 1 de 4:
2. Conocimientos gramaticales:
Contenido del experimento: diseño de decodificador de pantalla digital
Programa fuente del decodificador de pantalla digital de 7 segmentos:
Forma de onda de simulación del decodificador de pantalla digital de 7 segmentos:
Verificación de hardware del decodificador de pantalla digital de 7 segmentos:
Objetivo:
1. Familiarizarse con el uso del software QuartusⅡ y dominar el proceso EDA;
2. Dominar los métodos de diseño de circuitos lógicos combinacionales básicos;
3. Aprenda el diseño de decodificadores de pantallas digitales para sentar las bases para el diseño de sistemas digitales complejos.
Requisitos de vista previa:
1. Dominar el proceso de diseño de FPGA EDA (entrada de texto);
2. Dominar la estructura básica de los programas VerilogHDL, el uso de declaraciones de procedimiento always @ y declaraciones de casos;
3. Dominar los principios de diseño de los decodificadores de pantallas digitales.
Explicaciones y ejercicios experimentales:
1. El programa fuente del multiplexor que elige 1 de 4:
module mux41_a(a,b,c,d,s0,s1,y);
input a,b,c,d,s0,s1;
output y;
reg y;
always@ (*)
begin
case ({s0,s1})
2'b00:y<=a;
2'b01:y<=b;
2'b10:y<=c;
2'b11:y<=d;
default y<=a;
endcase
end
endmodule
2. Conocimientos gramaticales:
(1) Estructura básica del programa VerilogHDL:
La estructura del programa guiada por la palabra clave module_endmodule del lenguaje Verilog puede expresar completamente un módulo de circuito o la estructura y función del puerto de un ASIC de circuito integrado específico de la aplicación, es decir, si es un 74LS138 o una CPU, debe incluirse en la declaración de descripción del módulo module_endmodule.
Identificador: una cadena utilizada para nombrar objetos (como nombres de módulos, puertos de entrada y salida de circuitos, variables, etc.). El nombre solo puede contener los cuatro símbolos de letras, números, guiones bajos y $ en inglés ; tenga en cuenta que debe comenzar con letras o guiones bajos en inglés. Por ejemplo, clk, counter8, _net, bus_A. Los identificadores distinguen entre mayúsculas y minúsculas, es decir, el sistema distingue entre mayúsculas y minúsculas.
Se recomienda que el nombre del archivo del programa sea coherente con el nombre del módulo del programa en la medida de lo posible (para QuartusII , este requisito debe cumplirse), el nombre del archivo debe distinguir entre mayúsculas y minúsculas, el nombre del archivo no debe ser nombrado en chino o en números, y el programa Verilog debe almacenarse en la carpeta de archivos (requiere un nombre de carpeta que no sea chino), no existe en el directorio raíz o en el escritorio.
(2) siempre declaración de procedimiento
Punto de sintaxis 1: La estructura de oraciones de procedimiento guiada por always @ es una de las estructuras de oraciones más utilizadas e importantes en el lenguaje Verilog.
Punto de sintaxis 2: ¿Enunciado secuencial y enunciado paralelo en Verilog?
Declaraciones paralelas: no importa cuántas líneas de declaraciones se ejecuten al mismo tiempo, no tiene nada que ver con el orden de las declaraciones;
Sentencia secuencial: similar al método de ejecución de programa del software ordinario, se ejecuta en secuencia de acuerdo con la secuencia de las sentencias.
Punto de sintaxis 3: La instrucción de procedimiento always es una instrucción paralela, y cualquier instrucción secuencial debe colocarse en la estructura de instrucción de procedimiento.
Punto de sintaxis 4: siempre formato de declaración de procedimiento:
always @ ( expresión de señal sensible )
comenzar
// Declaración de asignación de procedimiento ;
// sentencia if , sentencia case ;
// para instrucción, while instrucción, repetir instrucción ;
fin
Punto de sintaxis 5: cuando cambia cualquier señal en la expresión de la señal sensible, la instrucción en el bloque se ejecutará una vez.
Punto gramatical 6: La expresión de señales sensibles:
(a) Conecte todas las señales sensibles con texto o, expresado como siempre @ (a o b o c o d o s0 o s1);
(b) Utilice comas para distinguir y conectar todas las señales sensibles, expresadas como siempre @ (a, b, c, d, s0, s1);
(c) La forma omitida se expresa como siempre @ (*). Los sintetizadores Verilog de corriente principal enumeran todas las señales que deben incluirse en la declaración de procedimiento predeterminada. always @ (*) cumple con la especificación verilog HDL2001, por lo que no es válido intentar cambiar el diseño lógico mediante la inclusión selectiva de señales sensibles.
(3) Declaración de bloque begin_end
La instrucción de bloque begin_end en sí misma no tiene función y su uso está limitado en la estructura de instrucción secuencial. Por lo general, se usa para combinar instrucciones secuenciales, por lo que se denomina bloque secuencial. La instrucción de bloque begin_end solo es equivalente a un paréntesis, y se considera que las declaraciones entre "corchetes" pertenecen al mismo módulo de operación.
Verilog estipula que si una estructura de declaración contiene solo una declaración y no es necesario definir variables locales, la declaración de bloque se usa por defecto y no hay necesidad de definir explícitamente el bloque; si contiene múltiples declaraciones, debe usar la instrucción explícita estructura de begin_end para combinarlos. "Adjunto".
Formato de inicio de sentencia de bloque:
comenzar [: nombre del bloque ]
Declaración 1 ; Declaración 2 ; ... Declaración n ;
fin
Entre ellos, se puede omitir [: nombre del bloque].
(4) declaración de caso
Punto de sintaxis 1: Es una declaración de selección condicional de múltiples ramas, que es una declaración secuencial y debe usarse en una declaración de procedimiento.
Punto de gramática 2: Hay tres formas. Su forma general es la siguiente:
caso (caso_expr)
item_expr1: comenzar sentencia1; fin
item_expr2: comenzar sentencia2; fin
……
predeterminado: comenzar default_statement; fin
caso final
Punto de sintaxis 3: ¿Qué significa la declaración predeterminada?
A menos que el valor de selección en todos los enunciados condicionales pueda cubrir completamente el valor de la expresión en el enunciado del caso, el enunciado predeterminado debe agregarse a la selección en el último enunciado condicional.
Se recomienda agregar una declaración predeterminada, porque en Verilog, cualquier variable tiene 4 valores de estado lógico diferentes: 0, 1, zyx, por lo que el valor de {S1, S0} no es solo 00, 01, 10 y 11, si no se agregan, algunos sintetizadores agregarán módulos de temporización innecesarios.
(5) Operador de empalme de bits {}
La función es empalmar algunos bits de dos o más señales en un nuevo operando para realizar operaciones aritméticas. Establecer A = 1'b1, B = 2'b10, C = 2'b00
Entonces {B, C} = 4'b1000
{A, B [1], C [0]} = 3'b110
{A, B, C, 3'b101} = 8'b11000101。
El empalme repetido del mismo operando también puede usar el operador formado por llaves dobles { {}}
Por ejemplo, {4 {A}} = 4'b1111, {2 {A}, 2 {B}, C} = 8'b11101000.
(6) Expresión digital en Verilog
Representa el formato general de un número binario.
<ancho de bit> '<base> <número>
Ancho de bit: el número de bits en el sistema binario de los datos;
Base: representa la base de los datos, donde B representa binario, O representa octal, D representa decimal, H representa hexadecimal y no distingue entre mayúsculas y minúsculas.
Ejemplo: 2'b10 4'b1011 4'hA 3'D7
Contenido del experimento: diseño de decodificador de pantalla digital
El procesamiento de datos y la operación en el sistema digital son binarios, por lo que las expresiones de salida son todas hexadecimales; para cumplir con la decodificación y visualización de números hexadecimales, la forma más conveniente es utilizar el programa de decodificación para implementar en FPGA / CPLD.
El circuito de decodificación general se describe mediante sentencias de casos .
Requisitos de diseño: la entrada es un número binario de 4 dígitos (es decir, 0-15) y la salida es un número binario de 7 dígitos, que se utiliza para iluminar la luz LED y mostrar la fuente de 0 a 15. Por supuesto, del 10 al 15 están representados por las letras de la A a la F.
Programa fuente del decodificador de pantalla digital de 7 segmentos:
module decode_1(A, LEDS);
input[3:0] A;
output reg[6:0] LEDS;
always@ (A)
begin
case (A)
4'b0000:LEDS<=7'b0111111; //"0"
4'b0001:LEDS<=7'b0000110; //"1"
4'b0010:LEDS<=7'b1011011; //"2"
4'b0011:LEDS<=7'b1001111; //"3”
4'b0100:LEDS<=7'b1100110; //"4"
4'b0101:LEDS<=7'b1101101; //"5"
4'b0110:LEDS<=7'b1111101; //"6"
4'b0111:LEDS<=7'b0000111; //"7"
4'b1000:LEDS<=7'b1111111; //"8"
4'b1001:LEDS<=7'b1101111; //"9"
4'b1010:LEDS<=7'b1110111; //"A"
4'b1011:LEDS<=7'b1111100; //"b"
4'b1100:LEDS<=7'b0111001; //"c"
4'b1101:LEDS<=7'b1011110; //"d"
4'b1110:LEDS<=7'b1111001; //"E"
4'b1111:LEDS<=7'b1110001; //"F"
default:LEDS<=7'b0111111; //"0"
endcase
end
endmodule
Forma de onda de simulación del decodificador de pantalla digital de 7 segmentos:
Verificación de hardware del decodificador de pantalla digital de 7 segmentos:
- Se recomienda elegir el modo experimental 6; [En cuanto al método de selección del modo, según las necesidades del circuito y la función del modo]
- Diagrama esquemático de asignación de pines [bloqueo de acuerdo con el manual de pines correspondiente del modo] , donde A [3: 0] es la entrada clave y LEDS [6: 0] es la salida de tubo digital de siete segmentos.
Resumen del experimento