1 //-----------------------------------------------------------------------------
2 // The way that we connect things when transmitting a command to an ISO
3 // 15693 tag, using 100% modulation only for now.
5 // Jonathan Westhues, April 2006
6 //-----------------------------------------------------------------------------
9 pck0
, ck_1356meg
, ck_1356megb
,
10 pwr_lo
, pwr_hi
, pwr_oe1
, pwr_oe2
, pwr_oe3
, pwr_oe4
,
12 ssp_frame
, ssp_din
, ssp_dout
, ssp_clk
,
17 input pck0
, ck_1356meg
, ck_1356megb
;
18 output pwr_lo
, pwr_hi
, pwr_oe1
, pwr_oe2
, pwr_oe3
, pwr_oe4
;
22 output ssp_frame
, ssp_din
, ssp_clk
;
23 input cross_hi
, cross_lo
;
25 input shallow_modulation
;
27 // The high-frequency stuff. For now, for testing, just bring out the carrier,
28 // and allow the ARM to modulate it over the SSP.
34 always @(ck_1356megb
or ssp_dout
or shallow_modulation
)
36 if(shallow_modulation
)
38 pwr_hi
<= ck_1356megb
;
46 pwr_hi
<= ck_1356megb
& ssp_dout
;
54 // Then just divide the 13.56 MHz clock down to produce appropriate clocks
55 // for the synchronous serial port.
57 reg [6:0] hi_div_by_128
;
59 always @(posedge ck_1356meg
)
60 hi_div_by_128
<= hi_div_by_128
+ 1;
62 assign ssp_clk
= hi_div_by_128
[6];
64 reg [2:0] hi_byte_div
;
66 always @(negedge ssp_clk
)
67 hi_byte_div
<= hi_byte_div
+ 1;
69 assign ssp_frame
= (hi_byte_div
== 3'b000);
71 // Implement a hysteresis to give out the received signal on
72 // ssp_din. Sample at fc.
73 assign adc_clk
= ck_1356meg
;
75 // ADC data appears on the rising edge, so sample it on the falling edge
77 always @(negedge adc_clk
)
79 if(& adc_d
[7:0]) after_hysteresis
<= 1'b1;
80 else if(~(| adc_d
[7:0])) after_hysteresis
<= 1'b0;
84 assign ssp_din
= after_hysteresis
;