From 3fd792940be0d4958bdd4c3d881766b93953a7f2 Mon Sep 17 00:00:00 2001 From: iceman1001 Date: Wed, 25 Oct 2017 13:59:49 +0200 Subject: [PATCH] FIX: @satsuoni fixes with pm3 offical version. --- fpga/Makefile | 6 +- fpga/fpga_hf.bit | Bin 42175 -> 42175 bytes fpga/fpga_hf.v | 24 +----- fpga/fpga_hfo.v | 191 ++++++++++++++++++++++++++++++++++++++++++++++ fpga/fpga_lf.bit | Bin 42175 -> 42175 bytes fpga/hi_read_tx.v | 16 +--- 6 files changed, 198 insertions(+), 39 deletions(-) create mode 100644 fpga/fpga_hfo.v diff --git a/fpga/Makefile b/fpga/Makefile index f0b058eeb..578518f7f 100644 --- a/fpga/Makefile +++ b/fpga/Makefile @@ -1,6 +1,6 @@ include ../common/Makefile.common -all: fpga_lf.bit fpga_hf.bit fpga_nfc.bit +all: fpga_lf.bit fpga_hf.bit clean: $(DELETE) *.bgn *.drc *.ncd *.ngd *_par.xrpt *-placed.* *-placed_pad.* *_usage.xml xst_hf.srp xst_lf.srp $(DELETE) *.map *.ngc *.xrpt *.pcf *.rbt *_auto_* *.bld *.mrp *.ngm *.unroutes *_summary.xml netlist.lst xst @@ -9,10 +9,6 @@ fpga_hf.ngc: fpga_hf.v fpga.ucf xst_hf.scr util.v hi_simulate.v hi_read_tx.v hi_ $(DELETE) $@ $(XILINX_TOOLS_PREFIX)xst -ifn xst_hf.scr -fpga_nfc.ngc: fpga_nfc.v fpga.ucf xst_nfc.scr util.v hi_flite.v - $(DELETE) $@ - $(XILINX_TOOLS_PREFIX)xst -ifn xst_nfc.scr - fpga_lf.ngc: fpga_lf.v fpga.ucf xst_lf.scr util.v clk_divider.v lo_edge_detect.v lo_read.v lo_passthru.v lp20khz_1MSa_iir_filter.v min_max_tracker.v lf_edge_detect.v $(DELETE) $@ diff --git a/fpga/fpga_hf.bit b/fpga/fpga_hf.bit index f74ca9236ab30b37af4bde23b6a5eafaac20912c..6388281dc9036282b01ff5bbbf70f65d3a477750 100644 GIT binary patch literal 42175 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 WK-IGvFf0I1!$HhBh?tgw8Ug^TdmiWj literal 42175 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, June 2014 +//----------------------------------------------------------------------------- + +`include "hi_read_tx.v" +`include "hi_read_rx_xcorr.v" +`include "hi_simulate.v" +`include "hi_iso14443a.v" +`include "hi_sniffer.v" +`include "hi_flite.v" + +`include "util.v" + +module fpga_hf( + 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, + output dbg +); + +//----------------------------------------------------------------------------- +// The SPI receiver. This sets up the configuration word, which the rest of +// the logic looks at to determine how to connect the A/D and the coil +// drivers (i.e., which section gets it). Also assign some symbolic names +// to the configuration bits, for use below. +//----------------------------------------------------------------------------- + +reg [15:0] shift_reg; +reg [7:0] conf_word; + +// We switch modes between transmitting to the 13.56 MHz tag and receiving +// from it, which means that we must make sure that we can do so without +// glitching, or else we will glitch the transmitted carrier. +always @(posedge ncs) +begin + case(shift_reg[15:12]) + 4'b0001: conf_word <= shift_reg[7:0]; // FPGA_CMD_SET_CONFREG + endcase +end + +always @(posedge spck) +begin + if(~ncs) + begin + shift_reg[15:1] <= shift_reg[14:0]; + shift_reg[0] <= mosi; + end +end + +wire [2:0] major_mode; +assign major_mode = conf_word[7:5]; + +// For the high-frequency transmit configuration: modulation depth, either +// 100% (just quite driving antenna, steady LOW), or shallower (tri-state +// some fraction of the buffers) +wire hi_read_tx_shallow_modulation = conf_word[0]; + +// For the high-frequency receive correlator: frequency against which to +// correlate. +wire hi_read_rx_xcorr_848 = conf_word[0]; +// and whether to drive the coil (reader) or just short it (snooper) +wire hi_read_rx_xcorr_snoop = conf_word[1]; +// divide subcarrier frequency by 4 +wire hi_read_rx_xcorr_quarter = conf_word[2]; + +wire [1:0] hi_read_tx_speed= conf_word [2:1]; +// For the high-frequency simulated tag: what kind of modulation to use. +wire [2:0] hi_simulate_mod_type = conf_word[2:0]; + +//----------------------------------------------------------------------------- +// And then we instantiate the modules corresponding to each of the FPGA's +// major modes, and use muxes to connect the outputs of the active mode to +// the output pins. +//----------------------------------------------------------------------------- + +hi_read_tx ht( + pck0, ck_1356meg, ck_1356megb, + ht_pwr_lo, ht_pwr_hi, ht_pwr_oe1, ht_pwr_oe2, ht_pwr_oe3, ht_pwr_oe4, + adc_d, ht_adc_clk, + ht_ssp_frame, ht_ssp_din, ssp_dout, ht_ssp_clk, + cross_hi, cross_lo, + ht_dbg, + hi_read_tx_shallow_modulation,hi_read_tx_speed, 1'b1 +); + + +hi_read_rx_xcorr hrxc( + pck0, ck_1356meg, ck_1356megb, + hrxc_pwr_lo, hrxc_pwr_hi, hrxc_pwr_oe1, hrxc_pwr_oe2, hrxc_pwr_oe3, hrxc_pwr_oe4, + adc_d, hrxc_adc_clk, + hrxc_ssp_frame, hrxc_ssp_din, ssp_dout, hrxc_ssp_clk, + cross_hi, cross_lo, + hrxc_dbg, + hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop, hi_read_rx_xcorr_quarter +); + +hi_simulate hs( + pck0, ck_1356meg, ck_1356megb, + hs_pwr_lo, hs_pwr_hi, hs_pwr_oe1, hs_pwr_oe2, hs_pwr_oe3, hs_pwr_oe4, + adc_d, hs_adc_clk, + hs_ssp_frame, hs_ssp_din, ssp_dout, hs_ssp_clk, + cross_hi, cross_lo, + hs_dbg, + hi_simulate_mod_type +); + +hi_iso14443a hisn( + pck0, ck_1356meg, ck_1356megb, + hisn_pwr_lo, hisn_pwr_hi, hisn_pwr_oe1, hisn_pwr_oe2, hisn_pwr_oe3, hisn_pwr_oe4, + adc_d, hisn_adc_clk, + hisn_ssp_frame, hisn_ssp_din, ssp_dout, hisn_ssp_clk, + cross_hi, cross_lo, + hisn_dbg, + hi_simulate_mod_type +); + +hi_sniffer he( + pck0, ck_1356meg, ck_1356megb, + he_pwr_lo, he_pwr_hi, he_pwr_oe1, he_pwr_oe2, he_pwr_oe3, he_pwr_oe4, + adc_d, he_adc_clk, + he_ssp_frame, he_ssp_din, ssp_dout, he_ssp_clk, + cross_hi, cross_lo, + he_dbg, + hi_read_rx_xcorr_848, hi_read_rx_xcorr_snoop, hi_read_rx_xcorr_quarter +); + +hi_flite hfl( + pck0, ck_1356meg, ck_1356megb, + hfl_pwr_lo, hfl_pwr_hi, hfl_pwr_oe1, hfl_pwr_oe2, hfl_pwr_oe3, hfl_pwr_oe4, + adc_d, hfl_adc_clk, + hfl_ssp_frame, hfl_ssp_din, ssp_dout, hfl_ssp_clk, + cross_hi, cross_lo, + hfl_dbg, + hi_simulate_mod_type +); + +// Major modes: + +// 000 -- HF reader, transmitting to tag; modulation depth selectable +// 001 -- HF reader, receiving from tag, correlating as it goes; frequency selectable +// 010 -- HF simulated tag +// 011 -- HF ISO14443-A +// 100 -- HF Snoop +// 101 -- HF demod test +// 110 -- Felica modulation, reusing HF reader +// 111 -- everything off + +//mux8 mux_ssp_clk (major_mode, ssp_clk, ht_ssp_clk, hrxc_ssp_clk, hs_ssp_clk, hisn_ssp_clk, he_ssp_clk, hfl_ssp_clk, hmf_ssp_clk, 1'b0); +//mux8 mux_ssp_din (major_mode, ssp_din, ht_ssp_din, hrxc_ssp_din, hs_ssp_din, hisn_ssp_din, he_ssp_din, hfl_ssp_din, hmf_ssp_din, 1'b0); +//mux8 mux_ssp_frame (major_mode, ssp_frame, ht_ssp_frame, hrxc_ssp_frame, hs_ssp_frame, hisn_ssp_frame, he_ssp_frame, hfl_ssp_frame, hmf_ssp_frame, 1'b0); +//mux8 mux_pwr_oe1 (major_mode, pwr_oe1, ht_pwr_oe1, hrxc_pwr_oe1, hs_pwr_oe1, hisn_pwr_oe1, he_pwr_oe1, hfl_pwr_oe1, hmf_pwr_oe1, 1'b0); +//mux8 mux_pwr_oe2 (major_mode, pwr_oe2, ht_pwr_oe2, hrxc_pwr_oe2, hs_pwr_oe2, hisn_pwr_oe2, he_pwr_oe2, hfl_pwr_oe2, hmf_pwr_oe2, 1'b0); +//mux8 mux_pwr_oe3 (major_mode, pwr_oe3, ht_pwr_oe3, hrxc_pwr_oe3, hs_pwr_oe3, hisn_pwr_oe3, he_pwr_oe3, hfl_pwr_oe3, hmf_pwr_oe3, 1'b0); +//mux8 mux_pwr_oe4 (major_mode, pwr_oe4, ht_pwr_oe4, hrxc_pwr_oe4, hs_pwr_oe4, hisn_pwr_oe4, he_pwr_oe4, hfl_pwr_oe4, hmf_pwr_oe4, 1'b0); +//mux8 mux_pwr_lo (major_mode, pwr_lo, ht_pwr_lo, hrxc_pwr_lo, hs_pwr_lo, hisn_pwr_lo, he_pwr_lo, hfl_pwr_lo, hmf_pwr_lo, 1'b0); +//mux8 mux_pwr_hi (major_mode, pwr_hi, ht_pwr_hi, hrxc_pwr_hi, hs_pwr_hi, hisn_pwr_hi, he_pwr_hi, hfl_pwr_hi, hmf_pwr_hi, 1'b0); +//mux8 mux_adc_clk (major_mode, adc_clk, ht_adc_clk, hrxc_adc_clk, hs_adc_clk, hisn_adc_clk, he_adc_clk, hfl_adc_clk, hmf_adc_clk, 1'b0); +//mux8 mux_dbg (major_mode, dbg, ht_dbg, hrxc_dbg, hs_dbg, hisn_dbg, he_dbg, hfl_dbg, hmf_dbg, 1'b0); + + +mux8 mux_ssp_clk (major_mode, ssp_clk, ht_ssp_clk, hrxc_ssp_clk, hs_ssp_clk, hisn_ssp_clk, he_ssp_clk, hfl_ssp_clk, 1'b0, 1'b0); +mux8 mux_ssp_din (major_mode, ssp_din, ht_ssp_din, hrxc_ssp_din, hs_ssp_din, hisn_ssp_din, he_ssp_din, hfl_ssp_din, 1'b0, 1'b0); +mux8 mux_ssp_frame (major_mode, ssp_frame, ht_ssp_frame, hrxc_ssp_frame, hs_ssp_frame, hisn_ssp_frame, he_ssp_frame, hfl_ssp_frame, 1'b0, 1'b0); +mux8 mux_pwr_oe1 (major_mode, pwr_oe1, ht_pwr_oe1, hrxc_pwr_oe1, hs_pwr_oe1, hisn_pwr_oe1, he_pwr_oe1, hfl_pwr_oe1, 1'b0, 1'b0); +mux8 mux_pwr_oe2 (major_mode, pwr_oe2, ht_pwr_oe2, hrxc_pwr_oe2, hs_pwr_oe2, hisn_pwr_oe2, he_pwr_oe2, hfl_pwr_oe2, 1'b0, 1'b0); +mux8 mux_pwr_oe3 (major_mode, pwr_oe3, ht_pwr_oe3, hrxc_pwr_oe3, hs_pwr_oe3, hisn_pwr_oe3, he_pwr_oe3, hfl_pwr_oe3, 1'b0, 1'b0); +mux8 mux_pwr_oe4 (major_mode, pwr_oe4, ht_pwr_oe4, hrxc_pwr_oe4, hs_pwr_oe4, hisn_pwr_oe4, he_pwr_oe4, hfl_pwr_oe4, 1'b0, 1'b0); +mux8 mux_pwr_lo (major_mode, pwr_lo, ht_pwr_lo, hrxc_pwr_lo, hs_pwr_lo, hisn_pwr_lo, he_pwr_lo, hfl_pwr_lo, 1'b0, 1'b0); +mux8 mux_pwr_hi (major_mode, pwr_hi, ht_pwr_hi, hrxc_pwr_hi, hs_pwr_hi, hisn_pwr_hi, he_pwr_hi, hfl_pwr_hi, 1'b0, 1'b0); +mux8 mux_adc_clk (major_mode, adc_clk, ht_adc_clk, hrxc_adc_clk, hs_adc_clk, hisn_adc_clk, he_adc_clk, hfl_adc_clk, 1'b0, 1'b0); +mux8 mux_dbg (major_mode, dbg, ht_dbg, hrxc_dbg, hs_dbg, hisn_dbg, he_dbg, hfl_dbg, 1'b0, 1'b0); + +// In all modes, let the ADC's outputs be enabled. +assign adc_noe = 1'b0; + +endmodule diff --git a/fpga/fpga_lf.bit b/fpga/fpga_lf.bit index 89ed6ee03514a5cf225d91950e4eeb872766f99d..44ef60365e23b68c25c2a068972265ff4f8ea495 100644 GIT binary patch delta 26 icmdmgl4<`*rU^E@rVJ?zoQ9TGrUq7~1{*!gmH+^Eu?S26 delta 26 icmdmgl4<`*rU^E@CJZSIoJK}gCKgu4#v47$mH+^EnFvh) diff --git a/fpga/hi_read_tx.v b/fpga/hi_read_tx.v index e4c433415..fc309cde6 100644 --- a/fpga/hi_read_tx.v +++ b/fpga/hi_read_tx.v @@ -12,7 +12,7 @@ module hi_read_tx( ssp_frame, ssp_din, ssp_dout, ssp_clk, cross_hi, cross_lo, dbg, - shallow_modulation, speed, power + shallow_modulation ); input pck0, ck_1356meg, ck_1356megb; output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; @@ -23,8 +23,6 @@ module hi_read_tx( input cross_hi, cross_lo; output dbg; input shallow_modulation; - input [1:0] speed; - input power; // low frequency outputs, not relevant assign pwr_lo = 1'b0; @@ -38,8 +36,6 @@ reg pwr_oe3; reg pwr_oe4; always @(ck_1356megb or ssp_dout or shallow_modulation) -begin -if (power) begin if(shallow_modulation) begin @@ -56,14 +52,6 @@ begin pwr_oe4 <= 1'b0; end end -else -begin - pwr_hi <= 1'b0; - pwr_oe1 <= 1'b0; - pwr_oe3 <= 1'b0; - pwr_oe4 <= ~ssp_dout; -end -end // Then just divide the 13.56 MHz clock down to produce appropriate clocks @@ -74,7 +62,7 @@ reg [6:0] hi_div_by_128; always @(posedge ck_1356meg) hi_div_by_128 <= hi_div_by_128 + 1; -assign ssp_clk = speed[1]? (speed[0]? hi_div_by_128[3]: hi_div_by_128[4]) : (speed[0]? hi_div_by_128[5]: hi_div_by_128[6]); +assign ssp_clk = hi_div_by_128[6]; reg [2:0] hi_byte_div;