Diseño del sistema digital y notas de revisión Verilog HDL Uno

Capítulo 1 Descripción general de la tecnología EDA

Los dispositivos digitales han pasado de SSI, MSI, LSI a VLSI, hasta ahora SoC (System on Ship, sistema de chip).
SSI: circuito integrado de pequeña escala
MSI: circuito integrado de mediana escala
LSI: circuito integrado de gran escala
VLSI: circuito integrado de muy gran escala

PAL: matriz lógica programable
GAL: lógica de matriz general
PCB: placa de circuito impreso
FPGA: matriz de compuerta programable en campo
CPLD: dispositivo lógico programable complejo

CAD: diseño asistido por computadora
CAE: ingeniería asistida por computadora
EDA: automatización de diseño electrónico
RTL: nivel de transferencia de registro

HDL: lenguaje de descripción de hardware
ASIC: circuito integrado específico de la aplicación

SoPC: sistema de chip programable
DSP: procesamiento de señal digital

1.1 Diseño de
arriba hacia abajo El diseño de arriba hacia abajo es un diseño de arriba hacia abajo. Divida y estructura el diagrama de bloques funcional en la capa superior para evitar el desperdicio de trabajo de diseño, reducir la carga de trabajo y aumentar la tasa de éxito.
Durante el proceso de diseño, se requieren múltiples simulaciones y verificaciones para modificar continuamente el diseño.
1.2
Diseño de fondo El diseño de fondo es un diseño de abajo hacia arriba. Llame a la unidad básica y combínela paso a paso hasta que se diseñe un sistema que cumpla con los requisitos, que sea ineficiente y propenso a errores.

1.3 El núcleo IP se divide en núcleo duro, núcleo sólido y núcleo blando.
Núcleo IP: un módulo de función de circuito con un número prediseñado utilizado en ASIC o FPGA.
Soft core: utilizado en Verilog HDL y otros módulos de funciones de lenguaje de descripción de hardware, pero no involucra ningún componente de circuito específico para lograr estas funciones.
Hardcore: Proporcione el producto final en la etapa de diseño.
Núcleo sólido: completó un bloque funcional completo.

1.4 Proceso de diseño digital
Entrada de diseño-> síntesis-> lugar y ruta-> simulación->
síntesis de configuración de programación : el proceso de convertir automáticamente la descripción del diseño en un nivel superior de abstracción en una descripción de nivel inferior.
La diferencia esencial entre un sintetizador de hardware y un compilador de software: el código de programa escrito en un lenguaje de descripción de hardware genera una estructura de lista de circuitos del circuito; y un compilador de software genera flujos de código de datos / instrucciones de la CPU.
1.5 Colocación y cableado: también conocido como adaptación
1.6 Configuración de programación
La descarga de dispositivos CPLD basados ​​en la estructura no volátil del proceso EEPROM generalmente se llama programación, y la descarga de dispositivos FPGA basados ​​en la estructura de proceso SRAM se llama configuración.
1.7 Software de herramientas EDA de uso común
1) Herramientas de desarrollo FPGA / CPLD integradas
Intel (Altera): Max + Plus II, Quartus II, Quartus prime;
Xilinx: ISE, Vivado;
Lattice: ispLEVER, Classic, Diamond.
2) Sintetizador lógico
Sinopsis: FPGA Express, FPGA Compiler y FPGA Compiler II;
Synplicity: Synpify Pro / Synoplify;
Mentor: Leonardo Spectrum.
... (herramientas de simulación, herramientas integrales)

Capítulo 2 dispositivos FPGA / CPLD

2.1 Descripción general de
dispositivos PLD 2.1.1 Clasificación de dispositivos PLD
1) Clasificación por nivel de integración
PLD simple (SPLD) <-750—> PLD de alta densidad (HDPLD)
Dispositivo lógico programable simple (SPLD)

SPLD incluye PROM, PLA, PAL y GAL;
PROM: memoria de solo lectura
programable PLA: matriz lógica programable
PAL: lógica de matriz programable
GAL: lógica de matriz programable general

Dispositivo lógico programable de alta densidad (HDPLD)
HDPLD incluye CPLD, FPGA;

2) Clasificación según las características de programación.

Según los tiempos de programación:

El dispositivo de programación de una sola vez (OTP)
puede programar el dispositivo varias veces

Las características de los dispositivos OTP son: solo permite que el dispositivo se programe una vez y no se puede modificar; y el dispositivo multiprogramable permite la programación múltiple, adecuado para su uso en investigación y desarrollo científico.

Según diferentes elementos de programación y procesos de programación.

Un dispositivo que utiliza un elemento fuse_program.
Dispositivo
con elemento de programación antifusible (antifusible) Dispositivo con borrado ultravioleta y programación eléctrica
Tipo EEPROM Tipo de
memoria flash (Flash)
Dispositivo de estructura con memoria estática (SRAM)

Los primeros cinco tipos de dispositivos de estructura de proceso de programación se denominan dispositivos no volátiles, y el último tipo son dispositivos volátiles.
3) Clasificación según características estructurales.

Dispositivo PLD
basado en la estructura del término de multiplicación Dispositivo PLD basado en la estructura de la tabla de búsqueda

2.2 El principio y la estructura del PLD de baja densidad
1) PROM tiene
una tasa de utilización de defectos baja, fija y matriz, matriz de compuerta programable (o matriz);
2) PLA tiene una
alta tasa de utilización, ahorra área de chip, desventajas, el desarrollo de software es difícil y el algoritmo es complejo .
Programable y matriz, o matriz (programable)
3) PAL
y matriz pueden realizarse, o la matriz es fija
4) GAL
2.3CPLD
CPLD es y / o estructura de matriz.
2.4 El principio y la estructura de
FPGA FPGA es una estructura de tabla de búsqueda

Las similitudes y diferencias entre CPLD y FPGA
CPLD es una estructura AND o matriz (macrocelda), que es un dispositivo lógico programable, que el usuario puede definir de acuerdo con sus necesidades una vez que se completa la fabricación.
FPGA es una estructura de tabla de búsqueda, que resuelve las deficiencias de los circuitos personalizados y supera las deficiencias del circuito de compuerta de dispositivo programable original.

2.5 Tecnología de prueba de escaneo de límites
VLSI: Circuito integrado a muy gran escala
JTAG: Grupo de acción de prueba conjunta
BST: Prueba de escaneo de límites
2.6 Programación y configuración de FPGA / CPLD
ISP: Programable en el sistema

Capítulo 3 Diseño preliminar de Verilog

plantilla de verilog:

module <顶层模块名>(<输入输出端口列表>);
input 输入端口列表;				//输入端口声明
ouput 输出端口列表;			//输出端口声明
/*定义数据,信号的类型,函数声明,用关键字定义*/
wire 信号名;
reg 信号名;
//逻辑功能定义
assign <结果信号名>=<表达式>;
//用always块描述逻辑功能
always @(<敏感信号表达式>)
begin 
//过程赋值
//if-else,case语句
end
endmodule

Función del votante:

module voter(pass,vote);
input [6:0]vote;
output pass;
reg[2:0] sum;integer i;reg pass;
always @(vote)
begin sum=0;
for(i=0;i<=6;i=i+1)
if(vote[i])sum=sum+1;
if(sum[2])pass=1;
else pass=0;
end
endmodule

Realizando dos multiplicadores de 8 bits con for

module  mult_for(a,b,outcome);
parameter size=8;
input [size-1:0] a,b;
output reg [2*size-1:0] outcome;
integer i;
always @(a or b)
	begin 
	outcome<=0;
		for(i=1;i<=2*size;i=i+1)
			outcome<=outcome+(a<<(i-1));
	end
endmodule

Use la repetición para multiplicar dos números binarios de 8 bits.

module mult_repeat 
							#(parameter size=8)
							(input [size-1:0] a,b,output reg [2*size-1:0] result);
		reg [2*size-1:0] temp_a;reg [size-1:0]temp_b;
		always @ (a or b)
			begin
				result =0;temp_a=a;temp_b=b;
				repeat(size)
				begin
					if (temp_b[1])
						result=result+temp_a;
						temp_a=temp_a<<1;
						temp_b=temp_b>>1;
				end
		end
endmodule

Sumador:

module adder(cin,a,b,sum,cout);
input cin;
input [7:0] a,b;
output [7:0] sum;
ouput cout;
assign {cout,sum}=a+b+cin;
endmodule

Una víbora:

module add(a,b,cin,sum,cout);
input a,b,cin;
output sum,cout;
always @*
	begin
	{cout,sum}=a+b+cin;
	end
endmodule

¡siempre se puede usar en circuitos combinados!

La instrucción siempre procedimiento generalmente tiene una condición de activación. El activador se escribe en la expresión de señal sensible. Solo cuando se cumple la condición de activación, se pueden ejecutar las instrucciones posteriores.

Hablando sobre el circuito, ¿tienes que hablar sobre la diferencia entre las variables reg y wire?
El cable es una variable de datos de tipo red de uso común. Los datos de tipo de red equivalen a varias conexiones físicas en circuitos de hardware. En pocas palabras, el cable es equivalente a un cable, que se usa comúnmente en un circuito combinado. La variable de tipo reg pertenece a la variable de tipo variable y debe colocarse en la declaración de proceso. El valor se asigna a través de la declaración de asignación de proceso, que es común en registros y circuitos secuenciales.

Capítulo 4 Elementos del lenguaje

Solo lee el programa, ¿qué bicicleta quieres?

  1. Personajes en blanco, decoración del programa, lo más hermosa posible
  2. Comentario, no hay mucho que decir como C /// y / * * /
  3. El identificador, un poco diferente, puede existir en $, no lo he visto en C
  4. Palabras clave, lo que ves
  5. Operadores, en matemáticas, en C

Constante

· Entero +/- <tamaño> '<base> <valor>
· Número real
· Cadena

4.1
· Binario (b / B)
· Octal (o / O)
· Decimal (d / D)
· Hexadecimal (h / H)
Ejemplo: 8'b11000101,
se permite un binario ancho de ocho bits entre la base y el valor Hay espacios, pero no espacios entre 'y hexadecimal, y valores.

4.2 Valores
: 0: nivel bajo, lógica 0 o lógica no
• 1: nivel alto, lógica 1 o "verdadero"
• z / Z: estado de alta resistencia
• x / X: estado desconocido
4.3 Parámetro

Capítulo 5 Sintaxis de la declaración Verilog

Qué gramática se requiere, puede usar la
declaración de caso para describir el selector de datos 4 select 1

module  mux4_1(out,in0,in1,in2,in3,sel);
input in0,in1,in2,in3;
input [1:0] sel;
ouput reg out;
always @ (in0 or in1 or in2 or in3 or sel)
	case(sel)
	2'b00:out=in0;
	2'b01:out=in1;
	2'b10:out=in2;
	2'b11:out=in3;
	default:out=2'bx;
	endcase
end
endmodule

Decodificador de tubo de código de segmento BCD code-7

module decode7(D,a,b,c,d,e,f,g);
input [3:0] D;
output reg a,b,c,d,e,f,g;
always @*
	begin
		case(D)
		4'd0:{a,b,c,d,e,f,g}=7'b1111_110;
		4'd1:{a,b,c,d,e,f,g}=7'b0110_000;
		4'd2:{a,b,c,d,e,f,g}=7'b1101_101;
		4'd3:{a,b,c,d,e,f,g}=7'b1111_001;
		4'd4:{a,b,c,d,e,f,g}=7'b0110_011;
		4'd5:{a,b,c,d,e,f,g}=7'b0110_011;
		4'd6:{a,b,c,d,e,f,g}=7'b1011_111;
		4'd7:{a,b,c,d,e,f,g}=7'b1110_000;
		4'd8:{a,b,c,d,e,f,g}=7'b1111_111;
		4'd9:{a,b,c,d,e,f,g}=7'b1111_110;
		default:{a,b,c,d,e,f,g}=7'b1111_110;
		endcase
	end
endmodule

Multiplique dos números de 8 dígitos con for

module mult_for(a ,b,outcome);
input [7:0]a,b;
output reg[15:0] outcome;
integer i;
always @(a or b)
 	begin outcome <=0;
 	for(i=1;i<=8;i=i+1)
 	if(b[i]) outcome <=outcome+(a<<(i-1));
	end
 endmodule

Multiplica dos números binarios de 8 bits con repetición

module mult_repeat
								#(parameter size = 8)
								(input [size:1] a,b;
								output reg[2*size:1] result);
	reg [2*size:] temp_a;reg[size:1] temp_b;
	always @)(a or b)
	begin
	result=0; temp_a=a;temp_b=b;temp_b=b;
	always(size)
		begin
			if(temp_b[1])
				result=result+temp_a;
				temp_a=temp_a<<1;
				temp_b=temp_b>>1;
		end
	end
	endmodule

Estamos acostumbrados a multiplicar dos números con un bucle for, y parece que se entiende mejor. Cuando el número en b es 1, entonces a se mueve hacia la izquierda.

Dispositivo de votación

module voter7(input [6:0] vote,output reg pass);
reg [2:0] sum; integer i;
always @ (vote)
	begin sum=0;
		for(i=0;i<=6;i=i+1)
			if(vote[i]) sum=sum+1;
				if(sum[2]) pass=1;
				else pass=0;
	end
endmodule
19 artículos originales publicados · Me gusta2 · Visitas 1098

Supongo que te gusta

Origin blog.csdn.net/qq_42692319/article/details/102764759
Recomendado
Clasificación