OpenFPGA/openfpga_flow/openfpga_cell_library/verilog/gpio.v

98 lines
3.4 KiB
Verilog

//-----------------------------------------------------
// Design Name : General Purpose I/Os
// File Name : gpio.v
// Coder : Xifan TANG
//-----------------------------------------------------
//-----------------------------------------------------
// Function : A minimum general purpose I/O
//-----------------------------------------------------
module GPIO (
input A, // Data output
output Y, // Data input
inout PAD, // bi-directional pad
input DIR // direction control
);
//----- when direction enabled, the signal is propagated from PAD to data input
assign Y = DIR ? PAD : 1'bz;
//----- when direction is disabled, the signal is propagated from data out to pad
assign PAD = DIR ? 1'bz : A;
endmodule
//-----------------------------------------------------
// Function : A minimum general purpose I/O with config_done signal
// which can block signals during configuration phase
//-----------------------------------------------------
module GPIO_CFGD (
input CONFIG_DONE, // Control signal to block signals
input A, // Data output
output Y, // Data input
inout PAD, // bi-directional pad
input DIR // direction control
);
//----- when direction enabled, the signal is propagated from PAD to data input
assign Y = CONFIG_DONE ? (DIR ? PAD : 1'bz) : 1'bz;
//----- when direction is disabled, the signal is propagated from data out to pad
assign PAD = CONFIG_DONE ? (DIR ? 1'bz : A) : 1'bz;
endmodule
//-----------------------------------------------------
// Function : A minimum input pad
//-----------------------------------------------------
module GPIN (
inout A, // External PAD signal
output Y // Data input
);
assign Y = A;
endmodule
//-----------------------------------------------------
// Function : A minimum output pad
//-----------------------------------------------------
module GPOUT (
inout Y, // External PAD signal
input A // Data output
);
assign Y = A;
endmodule
//-----------------------------------------------------
// Function : A minimum embedded I/O
// just an overlay to interface other components
//-----------------------------------------------------
module EMBEDDED_IO (
input SOC_IN, // Input to drive the inpad signal
output SOC_OUT, // Output the outpad signal
output SOC_DIR, // Output the directionality
output FPGA_IN, // Input data to FPGA
input FPGA_OUT, // Output data from FPGA
input FPGA_DIR // direction control
);
assign FPGA_IN = SOC_IN;
assign SOC_OUT = FPGA_OUT;
assign SOC_DIR = FPGA_DIR;
endmodule
//-----------------------------------------------------
// Function : An embedded I/O with an protection circuit
// which can force the I/O in input mode
// The enable signal IO_ISOL_N is active-low
//-----------------------------------------------------
module EMBEDDED_IO_ISOLN (
input SOC_IN, // Input to drive the inpad signal
output SOC_OUT, // Output the outpad signal
output SOC_DIR, // Output the directionality
output FPGA_IN, // Input data to FPGA
input FPGA_OUT, // Output data from FPGA
input FPGA_DIR, // direction control
input IO_ISOL_N // Active-low signal to set the I/O in input mode
);
assign FPGA_IN = IO_ISOL_N ? SOC_IN : 1'bz;
assign SOC_OUT = IO_ISOL_N ? FPGA_OUT : 1'bz;
// Direction signal is set to logic '0' when in input mode
assign SOC_DIR = IO_ISOL_N ? FPGA_DIR : 1'b0;
endmodule