1 | module fmc_bb_4da_bridge |
---|
2 | ( |
---|
3 | //Input sampling clocks - User design must provide these clock signals |
---|
4 | |
---|
5 | // sys_samp_clk_Tx requirements: |
---|
6 | // -Synchronous to and valid for capturing user_DAC_x ports |
---|
7 | input sys_samp_clk, |
---|
8 | |
---|
9 | // sys_samp_clk_Tx_90 must be 90 degree phase shift of sys_samp_clk (used to generate DAC clock outputs) |
---|
10 | input sys_samp_clk_90, |
---|
11 | |
---|
12 | input [0:USER_DAC_A_BITS-1] user_DAC_A, |
---|
13 | input [0:USER_DAC_B_BITS-1] user_DAC_B, |
---|
14 | input [0:USER_DAC_C_BITS-1] user_DAC_C, |
---|
15 | input [0:USER_DAC_D_BITS-1] user_DAC_D, |
---|
16 | |
---|
17 | output [0:13] DAC_AB_DB, |
---|
18 | output [0:13] DAC_CD_DB, |
---|
19 | output DAC_AB_CLK, |
---|
20 | output DAC_CD_CLK, |
---|
21 | |
---|
22 | output DAC_AB_PINMD, |
---|
23 | output DAC_AB_CLKMD, |
---|
24 | output DAC_AB_FORMAT, |
---|
25 | output DAC_AB_PWDN, |
---|
26 | |
---|
27 | output DAC_CD_PINMD, |
---|
28 | output DAC_CD_CLKMD, |
---|
29 | output DAC_CD_FORMAT, |
---|
30 | output DAC_CD_PWDN |
---|
31 | ); |
---|
32 | |
---|
33 | parameter USER_DAC_A_BITS = 12; |
---|
34 | parameter USER_DAC_B_BITS = 12; |
---|
35 | parameter USER_DAC_C_BITS = 12; |
---|
36 | parameter USER_DAC_D_BITS = 12; |
---|
37 | |
---|
38 | parameter C_FAMILY = "virtex6"; |
---|
39 | |
---|
40 | //Tie the control signals to sensible defaults |
---|
41 | // With these values the DACs will always be running with 2's complement input data |
---|
42 | assign DAC_AB_PINMD = 1'b1; |
---|
43 | assign DAC_AB_CLKMD = 1'b0; |
---|
44 | assign DAC_AB_FORMAT = 1'b1; |
---|
45 | assign DAC_AB_PWDN = 1'b0; |
---|
46 | |
---|
47 | assign DAC_CD_PINMD = 1'b1; |
---|
48 | assign DAC_CD_CLKMD = 1'b0; |
---|
49 | assign DAC_CD_FORMAT = 1'b1; |
---|
50 | assign DAC_CD_PWDN = 1'b0; |
---|
51 | |
---|
52 | //Output the DAC clocks using ODDRs, to minimize skew between clock and data outputs |
---|
53 | ODDR #( |
---|
54 | .DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" |
---|
55 | .INIT(1'b0), // Initial value of Q: 1'b0 or 1'b1 |
---|
56 | .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" |
---|
57 | ) OBUFDDR_DACCLK_AB ( |
---|
58 | .Q(DAC_AB_CLK), // 1-bit DDR output |
---|
59 | .C(sys_samp_clk_90), // 1-bit clock input |
---|
60 | .CE(1'b1), // 1-bit clock enable input |
---|
61 | .D1(1'b1), // 1-bit data input (positive edge) |
---|
62 | .D2(1'b0), // 1-bit data input (negative edge) |
---|
63 | .R(1'b0), // 1-bit reset |
---|
64 | .S(1'b0) // 1-bit set |
---|
65 | ); |
---|
66 | |
---|
67 | ODDR #( |
---|
68 | .DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" |
---|
69 | .INIT(1'b0), // Initial value of Q: 1'b0 or 1'b1 |
---|
70 | .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" |
---|
71 | ) OBUFDDR_DACCLK_CD ( |
---|
72 | .Q(DAC_CD_CLK), // 1-bit DDR output |
---|
73 | .C(sys_samp_clk_90), // 1-bit clock input |
---|
74 | .CE(1'b1), // 1-bit clock enable input |
---|
75 | .D1(1'b1), // 1-bit data input (positive edge) |
---|
76 | .D2(1'b0), // 1-bit data input (negative edge) |
---|
77 | .R(1'b0), // 1-bit reset |
---|
78 | .S(1'b0) // 1-bit set |
---|
79 | ); |
---|
80 | |
---|
81 | //Create intermediate nets to tie unused bits to zero |
---|
82 | // Params USER_DAC_x_BITS must be <= 16 |
---|
83 | wire [0:17] user_DAC_A_pad; |
---|
84 | wire [0:17] user_DAC_B_pad; |
---|
85 | wire [0:17] user_DAC_C_pad; |
---|
86 | wire [0:17] user_DAC_D_pad; |
---|
87 | |
---|
88 | assign user_DAC_A_pad[0:USER_DAC_A_BITS-1] = user_DAC_A; |
---|
89 | assign user_DAC_A_pad[USER_DAC_A_BITS:17] = 0; |
---|
90 | |
---|
91 | assign user_DAC_B_pad[0:USER_DAC_B_BITS-1] = user_DAC_B; |
---|
92 | assign user_DAC_B_pad[USER_DAC_B_BITS:17] = 0; |
---|
93 | |
---|
94 | assign user_DAC_C_pad[0:USER_DAC_C_BITS-1] = user_DAC_C; |
---|
95 | assign user_DAC_C_pad[USER_DAC_C_BITS:17] = 0; |
---|
96 | |
---|
97 | assign user_DAC_D_pad[0:USER_DAC_D_BITS-1] = user_DAC_D; |
---|
98 | assign user_DAC_D_pad[USER_DAC_D_BITS:17] = 0; |
---|
99 | |
---|
100 | //Instantiate all the DDR registers for DAC DB outputs |
---|
101 | // User-supplied values become MSB of 14-bit outputs |
---|
102 | // Unused LSB tied to zero |
---|
103 | // 14-bit outputs are used in case FMC-BB-4DA has AD9117 |
---|
104 | genvar ii; |
---|
105 | generate |
---|
106 | for(ii=0; ii<14; ii=ii+1) begin: DDR_REGS_RFA_RFB |
---|
107 | ODDR #( |
---|
108 | .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" |
---|
109 | .INIT(1'b0), // Initial value of Q: 1'b0 or 1'b1 |
---|
110 | .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" |
---|
111 | ) ODDR_DAC_AB_DB ( |
---|
112 | .Q(DAC_AB_DB[ii]), // 1-bit DDR output |
---|
113 | .C(sys_samp_clk), // 1-bit clock input |
---|
114 | .CE(1'b1), // 1-bit clock enable input |
---|
115 | .D1(user_DAC_A_pad[ii]), // 1-bit data input (positive edge) |
---|
116 | .D2(user_DAC_B_pad[ii]), // 1-bit data input (negative edge) |
---|
117 | .R(1'b0), // 1-bit reset |
---|
118 | .S(1'b0) // 1-bit set |
---|
119 | ); |
---|
120 | ODDR #( |
---|
121 | .DDR_CLK_EDGE("SAME_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" |
---|
122 | .INIT(1'b0), // Initial value of Q: 1'b0 or 1'b1 |
---|
123 | .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" |
---|
124 | ) ODDR_DAC_CD_DB ( |
---|
125 | .Q(DAC_CD_DB[ii]), // 1-bit DDR output |
---|
126 | .C(sys_samp_clk), // 1-bit clock input |
---|
127 | .CE(1'b1), // 1-bit clock enable input |
---|
128 | .D1(user_DAC_C_pad[ii]), // 1-bit data input (positive edge) |
---|
129 | .D2(user_DAC_D_pad[ii]), // 1-bit data input (negative edge) |
---|
130 | .R(1'b0), // 1-bit reset |
---|
131 | .S(1'b0) // 1-bit set |
---|
132 | ); |
---|
133 | end |
---|
134 | endgenerate |
---|
135 | |
---|
136 | endmodule |
---|