Implementación FPGA de la sincronización de comunicación del puerto paralelo EXMC del chip ARM de la serie Huada Semiconductor HC32F4A0

Implementación FPGA de la sincronización de comunicación del puerto paralelo EXMC del chip ARM de la serie Huada Semiconductor HC32F4A0

Introducción a EXMC

El controlador de memoria externo EXMC es un módulo independiente que se utiliza para acceder a varias memorias fuera del chip e implementar el intercambio de datos. EXMC puede convertir la interfaz del protocolo AMBA interno en varios tipos de interfaces de protocolo de comunicación de memoria fuera del chip dedicadas mediante la configuración.
Entre ellos, el controlador Flash SRAM/PSRAM/NOR se define como SMC (controlador de memoria estática), el controlador SDRAM se define como DMC (controlador de memoria dinámica) y el controlador Flash NAND se define como NFC (controlador de memoria Flash NAND). Este artículo estará en FPGA Implemente el modo SMC entre los tres modos.

Análisis de tiempo de lectura EXMC-SMC

Insertar descripción de la imagen aquí
La Figura 4-2 muestra el tiempo de lectura del puerto paralelo EXMC del chip ARM. El ancho de bits de datos de la comunicación entre el puerto paralelo y la FPGA se puede dividir en 8 bits, 16 bits y 32 bits. Específicamente, este artículo tomará como ejemplo para el análisis datos de recepción de 16 bits de ancho (que reciben 2 bytes de datos a la vez).
Primero, es necesario comprender el significado de las señales de la interfaz en la imagen. La señal SMC_CS se representa como una señal de selección de chip, SMC_OE es una señal de habilitación de lectura, SMC_BLS es una señal estroboscópica de bytes (esta señal no se utiliza en este diseño), SMC_ADD es una señal de dirección y SMC_DATA son datos de 16 bits.
El siguiente paso es analizar el tiempo en la figura. Se puede ver en la figura que la señal de selección del chip SMC_CS permanece baja durante todo el proceso de lectura de datos y se bloqueará en cada flanco descendente de la señal de habilitación de lectura SMC_OE. Operación de dirección (cada flanco descendente bloquea una dirección), los datos se leerán en cada flanco ascendente de SMC_OE (se lee un dato de 16 bits en cada flanco ascendente), por lo que es relativamente sencillo convertir el contenido del análisis anterior en código Verilog.

Análisis de tiempo de escritura EXMC-SMC

Insertar descripción de la imagen aquí
La Figura 4-3 muestra el tiempo de escritura del puerto paralelo EXMC del chip ARM. El ancho de bits de datos para la comunicación entre el puerto paralelo y la FPGA se puede dividir en 8 bits, 16 bits y 32 bits. De manera similar, este artículo tomará como ejemplo para el análisis el envío de datos de 16 bits de ancho (envío de 2 bytes de datos a la vez).
La señal SMC_CS representa la señal de selección de chip, SMC_WE es la señal de habilitación de escritura, SMC_BLS es la señal estroboscópica de bytes (esta señal no se utiliza en este diseño), SMC_ADD es la señal de dirección y SMC_DATA son datos de 16 bits.
Como se puede ver en la figura, la señal de selección de chip SMC_CS permanece baja durante todo el proceso de escritura de datos, y la operación de bloqueo de dirección se realizará en el flanco descendente de la señal de habilitación de escritura SMC_WE. Al realizar una operación de bloqueo de dirección, proporcionará continuamente 4 direcciones (Agregar, Agregar+1, Agregar+2, Agregar+3 en la imagen), pero en este momento solo los datos correspondientes a la primera dirección Agregar son válidos, y luego Los datos correspondientes a las tres direcciones están todos en el estado indefinido X, por lo que en la secuencia de escritura, solo bloqueamos la primera dirección en el flanco descendente de cada habilitación de escritura y escribimos los datos correspondientes a esta dirección. La siguiente es la implementación Verilog del tiempo de lectura y escritura EXMC.

Implementación de Verilog de temporización de lectura y escritura EXMC-SMC

module HC32_EXMC_SMC #(
	parameter AD_WIDTH = 12,
	parameter DATA_WIDTH = 16,
)(
	input wire clk,
	input wire rst,	
	inout wire [15:0] ARM_DATA_Inout,
	input wire [AD_WIDTH -1:0] ARM_ADDR_In,
	input wire ARM_NOE_In,
	input wire ARM_NWE_In,
	input wire ARM_NCE_In,
	
	output reg [AD_WIDTH -1:0] FPGA_ad,
	input wire [DATA_WIDTH -1:0] FPGA_data_in,
	output reg [DATA_WIDTH -1:0] FPGA_data_out
);

reg noe;
reg noe_dly1;
reg noe_diy2;
reg nwe_dly1;
reg nwe_diy2;
reg nce_dly1;
reg nce_diy2;
reg noe_neg;
reg nce_neg;
reg nwe_neg;
reg nwe_cnt;

//第一步:取片选、读写使能边沿、打拍防止亚稳态
always @(posedge clk)
begin
	if(rst)
	begin
		noe_dly1 <= 1;
		noe_dly2 <= 1;
	end
	else
	begin
		noe_dly1 <= ARM_NOE_In;						//读使能打两拍
		noe_dly2 <= noe_dly1  ;
		noe_neg  <= noe_dly2  & ~noe_dly1;		//取读使能下降沿
		noe_pos  <= ~noe_dly2  & noe_dly1;		//取读使能上升沿
	end
end

always @(posedge clk)
begin
	if(rst)
	begin
		nwe_dly1 <= 1;
		nwe_dly2 <= 1;
		nce_dly1 <= 1;
		nce_dly2 <= 1;
	end
	else
	begin
		nce_dly1 <= ARM_NCE_In;					//片选信号打两拍
		nce_dly2 <= nce_dly1  ;
		nce_neg  <= nce_dly2  & ~nce_dly1;	//取片选下降沿

		nwe_dly1 <= ARM_NWE_In;				//写使能打两拍
		nwe_dly2 <= nwe_dly1  ;
		nwe_neg  <= nwe_dly2  & ~nwe_dly1;	//取写使能下降沿
	end
end

//第二步:锁读写地址
always @(posedge clk)
begin
	if(rst)
		nwe_cnt <= 2'b0;
	else if(nce_neg)
		nwe_cnt <= 2'b0;
	else if(nwe_neg && !nce_dly1)	
		nwe_cnt <= nwe_cnt +1'b1;	
	else if(nwe_cnt== 2'd4)				//会给出连续4个地址,只锁第一个地址,后三个地址无效
		nwe_cnt <= 2'b0;				
	else
		nwe_cnt <=nwe_cnt ;				
end

always @(posedge clk)
begin
	if(nce_dly1 == 0)
	begin
		if((noe_neg) || (nwe_neg && (nwe_cnt  == 0)))			//会给出连续4个地址,只锁第一个地址,后三个地址无效
		begin
			FPGA_ad <= ARM_ADDR_In;				
		end
	end			
end

//写数据
always @(posedge clk)
begin
	if(nce_dly1 == 0)
	begin
		if(nwe_neg  && (nwe_cnt  == 0))			
		begin
			FPGA_data_out<= ARM_DATA_Inout;				
		end
	end			
end

//读数据
always @(posedge clk)
begin
	if(rst)
	begin
		noe <= 1;
	end
	else
	begin
		if(!nce_dly1 && noe_pos)
		begin
			noe <= 0;
		end
		else if(nce_dly1 && !noe_pos)
			noe <= 1;
		else
			noe <= noe;
	end		
end

assign ARM_DATA_Inout = (ARM_NCE_In ==0 && noe == 0) ? FPGA_data_in :'bz;

endmodule

Diagrama de forma de onda de simulación de temporización de lectura y escritura EXMC

Insertar descripción de la imagen aquí

La figura muestra el diagrama de forma de onda de simulación de sincronización de lectura y escritura de la interfaz EXMC, que es consistente con la sincronización en la hoja de datos.

Supongo que te gusta

Origin blog.csdn.net/m0_51575600/article/details/130712494
Recomendado
Clasificación