2023-05-31 01:47:27 +08:00
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Copyright (C) Proxmark3 contributors. See AUTHORS.md for details.
|
2021-08-22 05:43:06 +08:00
|
|
|
//
|
2023-05-31 01:47:27 +08:00
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
2021-08-22 05:43:06 +08:00
|
|
|
//
|
2023-05-31 01:47:27 +08:00
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU General Public License for more details.
|
2021-09-04 05:05:45 +08:00
|
|
|
//
|
2023-05-31 01:47:27 +08:00
|
|
|
// See LICENSE.txt for the text of the license.
|
|
|
|
//-----------------------------------------------------------------------------
|
2021-08-22 05:43:06 +08:00
|
|
|
//
|
2023-05-31 01:47:27 +08:00
|
|
|
// The FPGA is responsible for interfacing between the A/D, the coil drivers,
|
|
|
|
// and the ARM. In the low-frequency modes it passes the data straight
|
|
|
|
// through, so that the ARM gets raw A/D samples over the SSP. In the high-
|
|
|
|
// frequency modes, the FPGA might perform some demodulation first, to
|
|
|
|
// reduce the amount of data that we must send to the ARM.
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
module fpga_top(
|
|
|
|
input spck,
|
|
|
|
output miso,
|
|
|
|
input mosi,
|
|
|
|
input ncs,
|
|
|
|
input pck0,
|
|
|
|
input ck_1356meg,
|
|
|
|
input ck_1356megb,
|
|
|
|
output pwr_lo,
|
|
|
|
output pwr_hi,
|
|
|
|
output pwr_oe1,
|
|
|
|
output pwr_oe2,
|
|
|
|
output pwr_oe3,
|
|
|
|
output pwr_oe4,
|
|
|
|
input [7:0] adc_d,
|
|
|
|
output adc_clk,
|
|
|
|
output adc_noe,
|
|
|
|
output ssp_frame,
|
|
|
|
output ssp_din,
|
|
|
|
input ssp_dout,
|
|
|
|
output ssp_clk,
|
|
|
|
input cross_hi,
|
|
|
|
input cross_lo,
|
2021-08-22 05:43:06 +08:00
|
|
|
output dbg,
|
2021-09-05 06:49:57 +08:00
|
|
|
output PWR_LO_EN,
|
|
|
|
input FPGA_SWITCH
|
2021-08-22 05:43:06 +08:00
|
|
|
);
|
2021-09-04 05:05:45 +08:00
|
|
|
|
|
|
|
|
2023-05-31 01:47:27 +08:00
|
|
|
fpga_hf hfmod(
|
2021-08-22 05:43:06 +08:00
|
|
|
hfspck, hfmiso, hfmosi, hfncs,
|
|
|
|
hfpck0, hfck_1356meg, hfck_1356megb,
|
|
|
|
hfpwr_lo, hfpwr_hi,
|
|
|
|
hfpwr_oe1, hfpwr_oe2, hfpwr_oe3, hfpwr_oe4,
|
|
|
|
adc_d, hfadc_clk, hfadc_noe,
|
|
|
|
hfssp_frame, hfssp_din, hfssp_dout, hfssp_clk,
|
|
|
|
hfcross_hi, hfcross_lo,
|
2023-05-31 01:47:27 +08:00
|
|
|
hfdebug
|
2021-08-22 05:43:06 +08:00
|
|
|
);
|
|
|
|
|
2023-05-31 01:47:27 +08:00
|
|
|
fpga_lf lfmod(
|
2021-08-22 05:43:06 +08:00
|
|
|
lfspck, lfmiso, lfmosi, lfncs,
|
|
|
|
lfpck0, lfck_1356meg, lfck_1356megb,
|
|
|
|
lfpwr_lo, lfpwr_hi,
|
|
|
|
lfpwr_oe1, lfpwr_oe2, lfpwr_oe3, lfpwr_oe4,
|
|
|
|
adc_d, lfadc_clk, lfadc_noe,
|
|
|
|
lfssp_frame, lfssp_din, lfssp_dout, lfssp_clk,
|
|
|
|
lfcross_hi, lfcross_lo,
|
2023-05-31 01:47:27 +08:00
|
|
|
lfdebug,
|
2021-09-05 06:49:57 +08:00
|
|
|
lfPWR_LO_EN
|
2021-08-22 05:43:06 +08:00
|
|
|
);
|
|
|
|
|
2021-09-05 06:49:57 +08:00
|
|
|
mux2_oneout mux_spck_all (FPGA_SWITCH, spck, hfspck, lfspck);
|
|
|
|
mux2_one mux_miso_all (FPGA_SWITCH, miso, hfmiso, lfmiso);
|
|
|
|
mux2_oneout mux_mosi_all (FPGA_SWITCH, mosi, hfmosi, lfmosi);
|
|
|
|
mux2_oneout mux_ncs_all (FPGA_SWITCH, ncs, hfncs, lfncs);
|
|
|
|
mux2_oneout mux_pck0_all (FPGA_SWITCH, pck0, hfpck0, lfpck0);
|
|
|
|
mux2_oneout mux_ck_1356meg_all (FPGA_SWITCH, ck_1356meg, hfck_1356meg, lfck_1356meg);
|
|
|
|
mux2_oneout mux_ck_1356megb_all (FPGA_SWITCH, ck_1356megb, hfck_1356megb, lfck_1356megb);
|
|
|
|
mux2_one mux_pwr_lo_all (FPGA_SWITCH, pwr_lo, hfpwr_lo, lfpwr_lo);
|
|
|
|
mux2_one mux_pwr_hi_all (FPGA_SWITCH, pwr_hi, hfpwr_hi, lfpwr_hi);
|
|
|
|
mux2_one mux_pwr_oe1_all (FPGA_SWITCH, pwr_oe1, hfpwr_oe1, lfpwr_oe1);
|
|
|
|
mux2_one mux_pwr_oe2_all (FPGA_SWITCH, pwr_oe2, hfpwr_oe2, lfpwr_oe2);
|
|
|
|
mux2_one mux_pwr_oe3_all (FPGA_SWITCH, pwr_oe3, hfpwr_oe3, lfpwr_oe3);
|
|
|
|
mux2_one mux_pwr_oe4_all (FPGA_SWITCH, pwr_oe4, hfpwr_oe4, lfpwr_oe4);
|
|
|
|
mux2_one mux_adc_clk_all (FPGA_SWITCH, adc_clk, hfadc_clk, lfadc_clk);
|
|
|
|
mux2_one mux_adc_noe_all (FPGA_SWITCH, adc_noe, adc_noe, lfadc_noe);
|
|
|
|
mux2_one mux_ssp_frame_all (FPGA_SWITCH, ssp_frame, hfssp_frame, lfssp_frame);
|
|
|
|
mux2_one mux_ssp_din_all (FPGA_SWITCH, ssp_din, hfssp_din, lfssp_din);
|
|
|
|
mux2_oneout mux_ssp_dout_all (FPGA_SWITCH, ssp_dout, hfssp_dout, lfssp_dout);
|
|
|
|
mux2_one mux_ssp_clk_all (FPGA_SWITCH, ssp_clk, hfssp_clk, lfssp_clk);
|
|
|
|
mux2_oneout mux_cross_hi_all (FPGA_SWITCH, cross_hi, hfcross_hi, lfcross_hi);
|
|
|
|
mux2_oneout mux_cross_lo_all (FPGA_SWITCH, cross_lo, hfcross_lo, lfcross_lo);
|
2023-05-31 01:47:27 +08:00
|
|
|
mux2_one mux_dbg_all (FPGA_SWITCH, dbg, hfdebug, lfdebug);
|
2021-09-05 06:49:57 +08:00
|
|
|
mux2_one mux_PWR_LO_EN_all (FPGA_SWITCH, PWR_LO_EN, 1'b0, lfPWR_LO_EN);
|
2021-08-22 05:43:06 +08:00
|
|
|
|
|
|
|
endmodule
|