Revision f139c98a

/dev/null
1
#
2
# Copyright 2011 Ettus Research LLC
3
#
4

  
5
all: B100
6
	find -name "*.twr" | xargs grep constraint | grep met
7

  
8
clean:
9
	rm -rf build*
10

  
11
B100:
12
	make -f Makefile.$@ bin
13

  
14
.PHONY: all clean
/dev/null
1
## Main Clock
2
NET "CLK_FPGA_P"  LOC = "R7"  ;
3
NET "CLK_FPGA_N"  LOC = "T7"  ;
4

  
5
## UART
6
NET "FPGA_TXD"  LOC = "H16"  ;
7
NET "FPGA_RXD"  LOC = "H12"  ;
8

  
9
## I2C
10
NET "SDA_FPGA"  LOC = "T13"  ;
11
NET "SCL_FPGA"  LOC = "R13"  ;
12

  
13
## CGEN
14
NET "cgen_st_ld"  LOC = "M13"  ;
15
NET "cgen_st_refmon"  LOC = "J14"  ;
16
NET "cgen_st_status"  LOC = "P6"  ;
17
NET "cgen_ref_sel"  LOC = "T2"  ;
18
NET "cgen_sync_b"  LOC = "H15"  ;
19

  
20
## FPGA Config
21
#NET "fpga_cfg_din"  LOC = "T14"  ;
22
#NET "fpga_cfg_cclk"  LOC = "R14"  ;
23
#NET "fpga_cfg_init_b"  LOC = "T12"  ;
24

  
25
## MISC
26
#NET "mystery_bus<2>"  LOC = "T11"  ;
27
#NET "mystery_bus<1>"  LOC = "C4"  ;
28
#NET "mystery_bus<0>"  LOC = "E7"  ;
29
NET "reset_n"  LOC = "D5"  ;
30
NET "PPS_IN"  LOC = "M14"  ;
31
NET "reset_codec"  LOC = "B14"  ;
32

  
33
## GPIF
34
NET "GPIF_D<15>"  LOC = "P7"  ;
35
NET "GPIF_D<14>"  LOC = "N8"  ;
36
NET "GPIF_D<13>"  LOC = "T5"  ;
37
NET "GPIF_D<12>"  LOC = "T6"  ;
38
NET "GPIF_D<11>"  LOC = "N6"  ;
39
NET "GPIF_D<10>"  LOC = "P5"  ;
40
NET "GPIF_D<9>"  LOC = "R3"  ;
41
NET "GPIF_D<8>"  LOC = "T3"  ;
42
NET "GPIF_D<7>"  LOC = "N12"  ;
43
NET "GPIF_D<6>"  LOC = "P13"  ;
44
NET "GPIF_D<5>"  LOC = "P11"  ;
45
NET "GPIF_D<4>"  LOC = "R9"  ;
46
NET "GPIF_D<3>"  LOC = "T9"  ;
47
NET "GPIF_D<2>"  LOC = "N9"  ;
48
NET "GPIF_D<1>"  LOC = "P9"  ;
49
NET "GPIF_D<0>"  LOC = "P8"  ;
50

  
51
NET "GPIF_CTL<3>"  LOC = "N5"  ;
52
NET "GPIF_CTL<2>"  LOC = "M11"  ;
53
NET "GPIF_CTL<1>"  LOC = "M9"  ;
54
NET "GPIF_CTL<0>"  LOC = "M7"  ;
55

  
56
NET "GPIF_RDY<3>"  LOC = "N11"  ;
57
NET "GPIF_RDY<2>"  LOC = "T10"  ;
58
NET "GPIF_RDY<1>"  LOC = "T4"  ;
59
NET "GPIF_RDY<0>"  LOC = "R5"  ;
60

  
61
NET "FX2_PA7_FLAGD"  LOC = "P12"  ;
62
NET "FX2_PA6_PKTEND"  LOC = "R11"  ;
63
NET "FX2_PA2_SLOE"  LOC = "P10"  ;
64

  
65
NET "IFCLK"  LOC = "T8"  ;
66

  
67
## LEDs
68
NET "debug_led<2>"  LOC = "R2"  ;
69
NET "debug_led<1>"  LOC = "N4"  ;
70
NET "debug_led<0>"  LOC = "P4"  ;
71

  
72
## Debug bus
73
NET "debug_clk<0>"  LOC = "K15"  ;
74
NET "debug_clk<1>"  LOC = "K14"  ;
75
NET "debug<0>"  LOC = "K16"  ;
76
NET "debug<1>"  LOC = "J16"  ;
77
NET "debug<2>"  LOC = "C16"  ;
78
NET "debug<3>"  LOC = "C15"  ;
79
NET "debug<4>"  LOC = "E13"  ;
80
NET "debug<5>"  LOC = "D14"  ;
81
NET "debug<6>"  LOC = "D16"  ;
82
NET "debug<7>"  LOC = "D15"  ;
83
NET "debug<8>"  LOC = "E14"  ;
84
NET "debug<9>"  LOC = "F13"  ;
85
NET "debug<10>"  LOC = "G13"  ;
86
NET "debug<11>"  LOC = "F14"  ;
87
NET "debug<12>"  LOC = "E16"  ;
88
NET "debug<13>"  LOC = "F15"  ;
89
NET "debug<14>"  LOC = "H13"  ;
90
NET "debug<15>"  LOC = "G14"  ;
91
NET "debug<16>"  LOC = "G16"  ;
92
NET "debug<17>"  LOC = "F16"  ;
93
NET "debug<18>"  LOC = "J12"  ;
94
NET "debug<19>"  LOC = "J13"  ;
95
NET "debug<20>"  LOC = "L14"  ;
96
NET "debug<21>"  LOC = "L16"  ;
97
NET "debug<22>"  LOC = "M15"  ;
98
NET "debug<23>"  LOC = "M16"  ;
99
NET "debug<24>"  LOC = "L13"  ;
100
NET "debug<25>"  LOC = "K13"  ;
101
NET "debug<26>"  LOC = "P16"  ;
102
NET "debug<27>"  LOC = "N16"  ;
103
NET "debug<28>"  LOC = "R15"  ;
104
NET "debug<29>"  LOC = "P15"  ;
105
NET "debug<30>"  LOC = "N13"  ;
106
NET "debug<31>"  LOC = "N14"  ;
107

  
108
## ADC
109
NET "adc<11>"  LOC = "B15"  ;
110
NET "adc<10>"  LOC = "A8"  ;
111
NET "adc<9>"  LOC = "B8"  ;
112
NET "adc<8>"  LOC = "C8"  ;
113
NET "adc<7>"  LOC = "D8"  ;
114
NET "adc<6>"  LOC = "C9"  ;
115
NET "adc<5>"  LOC = "A9"  ;
116
NET "adc<4>"  LOC = "C10"  ;
117
NET "adc<3>"  LOC = "D9"  ;
118
NET "adc<2>"  LOC = "A3"  ;
119
NET "adc<1>"  LOC = "B3"  ;
120
NET "adc<0>"  LOC = "A4"  ;
121
NET "RXSYNC"  LOC = "D10"  ;
122

  
123
## DAC
124
NET "TXBLANK"  LOC = "K1"  ;
125
NET "TXSYNC"  LOC = "J2"  ;
126
NET "dac<0>"  LOC = "J1"  ;
127
NET "dac<1>"  LOC = "H3"  ;
128
NET "dac<2>"  LOC = "J3"  ;
129
NET "dac<3>"  LOC = "G2"  ;
130
NET "dac<4>"  LOC = "H1"  ;
131
NET "dac<5>"  LOC = "N3"  ;
132
NET "dac<6>"  LOC = "M4"  ;
133
NET "dac<7>"  LOC = "R1"  ;
134
NET "dac<8>"  LOC = "P2"  ;
135
NET "dac<9>"  LOC = "P1"  ;
136
NET "dac<10>"  LOC = "M1"  ;
137
NET "dac<11>"  LOC = "N1"  ;
138
NET "dac<12>"  LOC = "M3"  ;
139
NET "dac<13>"  LOC = "L4"  ;
140

  
141
## TX DB
142
NET "io_tx<0>"  LOC = "K4"  ;
143
NET "io_tx<1>"  LOC = "L3"  ;
144
NET "io_tx<2>"  LOC = "L2"  ;
145
NET "io_tx<3>"  LOC = "F1"  ;
146
NET "io_tx<4>"  LOC = "F3"  ;
147
NET "io_tx<5>"  LOC = "G3"  ;
148
NET "io_tx<6>"  LOC = "E3"  ;
149
NET "io_tx<7>"  LOC = "E2"  ;
150
NET "io_tx<8>"  LOC = "E4"  ;
151
NET "io_tx<9>"  LOC = "F4"  ;
152
NET "io_tx<10>"  LOC = "D1"  ;
153
NET "io_tx<11>"  LOC = "E1"  ;
154
NET "io_tx<12>"  LOC = "D4"  ;
155
NET "io_tx<13>"  LOC = "D3"  ;
156
NET "io_tx<14>"  LOC = "C2"  ;
157
NET "io_tx<15>"  LOC = "C1"  ;
158

  
159
## RX DB
160
NET "io_rx<0>"  LOC = "D7"  ;
161
NET "io_rx<1>"  LOC = "C6"  ;
162
NET "io_rx<2>"  LOC = "A6"  ;
163
NET "io_rx<3>"  LOC = "B6"  ;
164
NET "io_rx<4>"  LOC = "E9"  ;
165
NET "io_rx<5>"  LOC = "A7"  ;
166
NET "io_rx<6>"  LOC = "C7"  ;
167
NET "io_rx<7>"  LOC = "B10"  ;
168
NET "io_rx<8>"  LOC = "A10"  ;
169
NET "io_rx<9>"  LOC = "C11"  ;
170
NET "io_rx<10>"  LOC = "A11"  ;
171
NET "io_rx<11>"  LOC = "D11"  ;
172
NET "io_rx<12>"  LOC = "B12"  ;
173
NET "io_rx<13>"  LOC = "A12"  ;
174
NET "io_rx<14>"  LOC = "A14"  ;
175
NET "io_rx<15>"  LOC = "A13"  ;
176

  
177
## SPI
178
#NET "SEN_AUX"  LOC = "C12"  ;
179
#NET "SCLK_AUX"  LOC = "D12"  ;
180
#NET "MISO_AUX"  LOC = "J5"  ;
181
NET "SCLK_CODEC"  LOC = "K3"  ;
182
NET "SEN_CODEC"  LOC = "D13"  ;
183
NET "MOSI_CODEC"  LOC = "C13"  ;
184
NET "MISO_CODEC"  LOC = "G4"  ;
185

  
186
NET "MISO_RX_DB"  LOC = "E6"  ;
187
NET "SEN_RX_DB"  LOC = "B4"  ;
188
NET "MOSI_RX_DB"  LOC = "A5"  ;
189
NET "SCLK_RX_DB"  LOC = "C5"  ;
190

  
191
NET "MISO_TX_DB"  LOC = "J4"  ;
192
NET "SEN_TX_DB"  LOC = "N2"  ;
193
NET "MOSI_TX_DB"  LOC = "L1"  ;
194
NET "SCLK_TX_DB"  LOC = "G1"  ;
195

  
196
## Dedicated pins
197
#NET "TMS"  LOC = "B2"  ;
198
#NET "TDO"  LOC = "B16"  ;
199
#NET "TDI"  LOC = "B1"  ;
200
#NET "TCK"  LOC = "A15"  ;
201

  
202
#NET "fpga_cfg_prog_b"  LOC = "A2"  ;
203
#NET "fpga_cfg_done"  LOC = "T15"  ;
/dev/null
1
//
2
// Copyright 2011 Ettus Research LLC
3
//
4
// This program is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// This program is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License
15
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
//
17

  
18
`timescale 1ns / 1ps
19
//////////////////////////////////////////////////////////////////////////////////
20

  
21
module u1plus
22
  (input CLK_FPGA_P, input CLK_FPGA_N,  // Diff
23
   output [2:0] debug_led, output [31:0] debug, output [1:0] debug_clk,
24
   output FPGA_TXD, input FPGA_RXD,
25

  
26
   // GPIF
27
   inout [15:0] GPIF_D, input [3:0] GPIF_CTL, output [3:0] GPIF_RDY,
28
   output FX2_PA7_FLAGD, output FX2_PA6_PKTEND, output FX2_PA2_SLOE,
29
   input IFCLK,
30
   
31
   inout SDA_FPGA, inout SCL_FPGA, // I2C
32

  
33
   output SCLK_TX_DB, output SEN_TX_DB, output MOSI_TX_DB, input MISO_TX_DB,   // DB TX SPI
34
   output SCLK_RX_DB, output SEN_RX_DB, output MOSI_RX_DB, input MISO_RX_DB,   // DB TX SPI
35
   output SCLK_CODEC, output SEN_CODEC, output MOSI_CODEC, input MISO_CODEC,   // AD9862 main SPI
36

  
37
   input cgen_st_status, input cgen_st_ld, input cgen_st_refmon, output cgen_sync_b, output cgen_ref_sel,
38
   
39
   inout [15:0] io_tx, inout [15:0] io_rx,
40

  
41
   output [13:0] dac, output TXSYNC, output TXBLANK,
42
   input [11:0] adc, input RXSYNC,
43
  
44
   input PPS_IN,
45
   input reset_n, output reset_codec
46
   );
47

  
48
   assign reset_codec = 1;  // Believed to be active low
49
   
50
   // /////////////////////////////////////////////////////////////////////////
51
   // Clocking
52
   wire  clk_fpga, clk_fpga_in, reset;
53
   
54
   IBUFGDS #(.IOSTANDARD("LVDS_33"), .DIFF_TERM("TRUE")) 
55
   clk_fpga_pin (.O(clk_fpga_in),.I(CLK_FPGA_P),.IB(CLK_FPGA_N));
56

  
57
   BUFG clk_fpga_BUFG (.I(clk_fpga_in), .O(clk_fpga));
58
   
59
   reset_sync reset_sync(.clk(clk_fpga), .reset_in(~reset_n), .reset_out(reset));
60
   
61
   // /////////////////////////////////////////////////////////////////////////
62
   // SPI
63
   wire  mosi, sclk, miso;
64
   assign { SCLK_TX_DB, MOSI_TX_DB } = ~SEN_TX_DB ? {sclk,mosi} : 2'b0;
65
   assign { SCLK_RX_DB, MOSI_RX_DB } = ~SEN_RX_DB ? {sclk,mosi} : 2'b0;
66
   assign { SCLK_CODEC, MOSI_CODEC } = ~SEN_CODEC ? {sclk,mosi} : 2'b0;
67
   assign miso = (~SEN_TX_DB & MISO_TX_DB) | (~SEN_RX_DB & MISO_RX_DB) |
68
		 (~SEN_CODEC & MISO_CODEC);
69

  
70
   // /////////////////////////////////////////////////////////////////////////
71
   // TX DAC -- handle the interleaved data bus to DAC, with clock doubling DLL
72

  
73
   assign TXBLANK = 0;
74
   wire [13:0] tx_i, tx_q;
75

  
76
   genvar i;
77
   generate
78
      for(i=0;i<14;i=i+1)
79
	begin : gen_dacout
80
	   ODDR2 #(.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 
81
		   .INIT(1'b0),            // Sets initial state of the Q output to 1'b0 or 1'b1
82
		   .SRTYPE("SYNC"))        // Specifies "SYNC" or "ASYNC" set/reset
83
	   ODDR2_inst (.Q(dac[i]),      // 1-bit DDR output data
84
		       .C0(clk_fpga),  // 1-bit clock input
85
		       .C1(~clk_fpga), // 1-bit clock input
86
		       .CE(1'b1),      // 1-bit clock enable input
87
		       .D0(tx_i[i]),   // 1-bit data input (associated with C0)
88
		       .D1(tx_q[i]),   // 1-bit data input (associated with C1)
89
		       .R(1'b0),       // 1-bit reset input
90
		       .S(1'b0));      // 1-bit set input
91
	end // block: gen_dacout
92
      endgenerate
93
   ODDR2 #(.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 
94
	   .INIT(1'b0),            // Sets initial state of the Q output to 1'b0 or 1'b1
95
	   .SRTYPE("SYNC"))        // Specifies "SYNC" or "ASYNC" set/reset
96
   ODDR2_txsnc (.Q(TXSYNC),      // 1-bit DDR output data
97
		.C0(clk_fpga),  // 1-bit clock input
98
		.C1(~clk_fpga), // 1-bit clock input
99
		.CE(1'b1),      // 1-bit clock enable input
100
		.D0(1'b0),   // 1-bit data input (associated with C0)
101
		.D1(1'b1),   // 1-bit data input (associated with C1)
102
		.R(1'b0),       // 1-bit reset input
103
		.S(1'b0));      // 1-bit set input
104

  
105
   // /////////////////////////////////////////////////////////////////////////
106
   // RX ADC -- handles deinterleaving
107

  
108
   reg [11:0] rx_i, rx_q;
109
   wire [11:0] rx_a, rx_b;
110
   
111
   genvar      j;
112
   generate
113
      for(j=0;j<12;j=j+1)
114
	begin : gen_adcin
115
	   IDDR2 #(.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
116
		   .INIT_Q0(1'b0),         // Sets initial state of the Q0 output to 1’b0 or 1’b1
117
		   .INIT_Q1(1'b0),         // Sets initial state of the Q1 output to 1’b0 or 1’b1
118
		   .SRTYPE("SYNC"))        // Specifies "SYNC" or "ASYNC" set/reset
119
	   IDDR2_inst (.Q0(rx_a[j]),      // 1-bit output captured with C0 clock
120
		       .Q1(rx_b[j]),      // 1-bit output captured with C1 clock
121
		       .C0(clk_fpga),     // 1-bit clock input
122
		       .C1(~clk_fpga),    // 1-bit clock input
123
		       .CE(1'b1),         // 1-bit clock enable input
124
		       .D(adc[j]),        // 1-bit DDR data input
125
		       .R(1'b0),          // 1-bit reset input
126
		       .S(1'b0));         // 1-bit set input
127
	end // block: gen_adcin
128
   endgenerate
129
   
130
   IDDR2 #(.DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1"
131
	   .INIT_Q0(1'b0),         // Sets initial state of the Q0 output to 1’b0 or 1’b1
132
	   .INIT_Q1(1'b0),         // Sets initial state of the Q1 output to 1’b0 or 1’b1
133
	   .SRTYPE("SYNC"))        // Specifies "SYNC" or "ASYNC" set/reset
134
   IDDR2_sync (.Q0(rxsync_0),      // 1-bit output captured with C0 clock
135
	       .Q1(rxsync_1),      // 1-bit output captured with C1 clock
136
	       .C0(clk_fpga),     // 1-bit clock input
137
	       .C1(~clk_fpga),    // 1-bit clock input
138
	       .CE(1'b1),         // 1-bit clock enable input
139
	       .D(RXSYNC),        // 1-bit DDR data input
140
	       .R(1'b0),          // 1-bit reset input
141
	       .S(1'b0));         // 1-bit set input
142

  
143
   always @(posedge clk_fpga)
144
     if(rxsync_0)
145
       begin
146
	  rx_i <= rx_b;
147
	  rx_q <= rx_a;
148
       end
149
     else
150
       begin
151
	  rx_i <= rx_a;
152
	  rx_q <= rx_b;
153
       end
154
   
155
   // /////////////////////////////////////////////////////////////////////////
156
   // Main U1E Core
157
   u1plus_core u1p_c(.clk_fpga(clk_fpga), .rst_fpga(reset),
158
		     .debug_led(debug_led), .debug(debug), .debug_clk(debug_clk),
159
		     .debug_txd(FPGA_TXD), .debug_rxd(FPGA_RXD),
160
		     .gpif_d(GPIF_D), .gpif_ctl(GPIF_CTL), .gpif_rdy(GPIF_RDY),
161
		     .gpif_misc({FX2_PA7_FLAGD,FX2_PA6_PKTEND,FX2_PA2_SLOE}),
162
		     .gpif_clk(IFCLK),
163

  
164
		     .db_sda(SDA_FPGA), .db_scl(SCL_FPGA),
165
		     .sclk(sclk), .sen({SEN_CODEC,SEN_TX_DB,SEN_RX_DB}), .mosi(mosi), .miso(miso),
166
		     .cgen_st_status(cgen_st_status), .cgen_st_ld(cgen_st_ld),.cgen_st_refmon(cgen_st_refmon), 
167
		     .cgen_sync_b(cgen_sync_b), .cgen_ref_sel(cgen_ref_sel),
168
		     .io_tx(io_tx), .io_rx(io_rx),
169
		     .tx_i(tx_i), .tx_q(tx_q), 
170
		     .rx_i(rx_i), .rx_q(rx_q),
171
		     .pps_in(PPS_IN) );
172

  
173
endmodule // u1plus

Also available in: Unified diff