lin-win-share/DA4008_V1.3/rtl/io/iopad.v

188 lines
8.6 KiB
Verilog

//+FHDR--------------------------------------------------------------------------------------------------------
// Company:
//-----------------------------------------------------------------------------------------------------------------
// File Name : iopad.v
// Department :
// Author : pwy
// Author's Tel :
//-----------------------------------------------------------------------------------------------------------------
// Relese History
// Version Date Author Description
// 1.2 2024-06-12 pwy Integrate a digital module and two SPI modules with PLL
// 1.3 2024-11-12 pwy Adding an Attenuator Configuration Interface
// 1.4 2025-08-14 pwy Modify IRQ output logic
//-----------------------------------------------------------------------------------------------------------------
// Keywords :
//
//-----------------------------------------------------------------------------------------------------------------
// Parameter
//
//-----------------------------------------------------------------------------------------------------------------
// Purpose :
//
//-----------------------------------------------------------------------------------------------------------------
// Target Device:
// Tool versions:
//-----------------------------------------------------------------------------------------------------------------
// Reuse Issues
// Reset Strategy:
// Clock Domains:
// Critical Timing:
// Asynchronous I/F:
// Synthesizable (y/n):
// Other:
//-FHDR--------------------------------------------------------------------------------------------------------
`include "../define/chip_define.v"
module iopad (
//+++++++++++++++++++++++++++++++++++++++++++++//
// PAD Strat //
//+++++++++++++++++++++++++++++++++++++++++++++//
input PI_async_rstn // hardware Reset, active low
//sync
,input PI_sync_in // Chip synchronization signal input, high pulse valid
,output PO_sync_out // Chip synchronization signal output, high pulse valid
//spi port
,input PI_sclk // Spi Clock
,input PI_csn // Spi Chip Select active low
,input PI_mosi // Spi Mosi
,output PO_miso // Spi Miso
//irq
,output PO_irq // Interrupt signal in the chip, high level active
//+++++++++++++++++++++++++++++++++++++++++++++//
// PAD End //
//+++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++//
// Internal signal Start //
//+++++++++++++++++++++++++++++++++++++++++++++//
,output async_rstn // hardware Reset, active low
//sync
,output sync_in // Chip synchronization signal to analog, high pulse valid
,input sync_out // Chip synchronization signal output, high pulse valid
//spi port
,output sclk // Spi Clock
,output csn // Spi Chip Select active low
,output mosi // Spi Mosi
,input miso // Spi Miso
,input oen // Spi Miso output enable
//irq
,input irq_n // Interrupt signal in the chip, high level active
);
`ifdef TSMC_IC
//++++++++++++++++++++++++++++++++++++++++++++++++++//
// ASIC PAD --> TSMC //
//++++++++++++++++++++++++++++++++++++++++++++++++++//
//PI_async_rstn,pull-up
PDUW04SDGZ_V_G PDUW08SDGZ_V_G_async_rstn (
.I ( 1'b0 )
,.OEN ( 1'b1 )
,.REN ( 1'b0 )
,.PAD ( PI_async_rstn )
,.C ( async_rstn )
);
//sync_in,pull-down
PDDW04SDGZ_V_G PDDW04SDGZ_V_G_sync_in (
.I ( 1'b0 )
,.OEN ( 1'b1 )
,.REN ( 1'b0 )
,.PAD ( PI_sync_in )
,.C ( sync_in )
);
//sync_out,pull-down
PDDW04SDGZ_V_G PDDW08SDGZ_V_G_sync_out (
.I ( sync_out )
,.OEN ( 1'b0 )
,.REN ( 1'b0 )
,.PAD ( PO_sync_out )
,.C ( )
);
//sclk,pull-up
PDUW04SDGZ_V_G PDUW04SDGZ_V_G_sclk (
.I ( 1'b0 )
,.OEN ( 1'b1 )
,.REN ( 1'b0 )
,.PAD ( PI_sclk )
,.C ( sclk )
);
//csn,pull-up
PDUW04SDGZ_V_G PDUW04SDGZ_V_G_csn (
.I ( 1'b0 )
,.OEN ( 1'b1 )
,.REN ( 1'b0 )
,.PAD ( PI_csn )
,.C ( csn )
);
//mosi,pull-up
PDUW08SDGZ_V_G PDUW08SDGZ_V_G_mosi (
.I ( 1'b0 )
,.OEN ( 1'b1 )
,.REN ( 1'b0 )
,.PAD ( PI_mosi )
,.C ( mosi )
);
//miso,pull-up
PDUW08SDGZ_V_G PDUW08SDGZ_V_G_miso (
.I ( miso )
,.OEN ( oen )
,.REN ( 1'b0 )
,.PAD ( PO_miso )
,.C ( )
);
//irq,pull-up
PDUW08SDGZ_V_G PDUW08SDGZ_V_G_irq (
.I ( 1'b0 )
,.OEN ( irq_n )
,.REN ( 1'b0 )
,.PAD ( PO_irq )
,.C ( )
);
`elsif XILINX_FPGA
//++++++++++++++++++++++++++++++++++++++++++++++++++//
// FPGA PAD --> Xlinx //
//++++++++++++++++++++++++++++++++++++++++++++++++++//
//async_rstn
assign async_rstn = PI_async_rstn ;
//sync_in
assign sync_to_analog = PI_sync_in ;
//sync_out
assign PO_sync_out = sync_out ;
//Feedback signal
assign ch0_feedback = PI_ch0_feedback ;
`ifdef CHANNEL_IS_FOUR
assign ch1_feedback = PI_ch1_feedback ;
assign ch2_feedback = PI_ch2_feedback ;
assign ch3_feedback = PI_ch3_feedback ;
`endif
//config chip id
assign cfgid = PI_cfgid ;
//spi port
assign sclk = PI_sclk ;
assign csn = PI_csn ;
assign mosi = PI_mosi ;
assign PO_miso = oen ? 1'bz : miso ;
//irq
assign PO_irq = irq_n ;
`ifdef CHANNEL_IS_FOUR
assign PO_ch0_att = ch0_att ;
assign PO_ch1_att = ch1_att ;
assign PO_ch2_att = ch2_att ;
assign PO_ch3_att = ch3_att ;
`endif
`endif
endmodule
`include "../define/chip_undefine.v"