source: PlatformSupport/CustomPeripherals/pcores/fmc_bb_4da_bridge_v1_00_b/hdl/verilog/fmc_bb_4da_bridge.v

Last change on this file was 1907, checked in by murphpo, 11 years ago
File size: 4.2 KB
Line 
1module 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
33parameter USER_DAC_A_BITS = 12;
34parameter USER_DAC_B_BITS = 12;
35parameter USER_DAC_C_BITS = 12;
36parameter USER_DAC_D_BITS = 12;
37
38parameter 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
42assign DAC_AB_PINMD = 1'b1;
43assign DAC_AB_CLKMD = 1'b0;
44assign DAC_AB_FORMAT = 1'b1;
45assign DAC_AB_PWDN = 1'b0;
46
47assign DAC_CD_PINMD = 1'b1;
48assign DAC_CD_CLKMD = 1'b0;
49assign DAC_CD_FORMAT = 1'b1;
50assign DAC_CD_PWDN = 1'b0;
51
52//Output the DAC clocks using ODDRs, to minimize skew between clock and data outputs
53ODDR #(
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
67ODDR #(
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
83wire [0:17] user_DAC_A_pad;
84wire [0:17] user_DAC_B_pad;
85wire [0:17] user_DAC_C_pad;
86wire [0:17] user_DAC_D_pad;
87
88assign user_DAC_A_pad[0:USER_DAC_A_BITS-1] = user_DAC_A;
89assign user_DAC_A_pad[USER_DAC_A_BITS:17] = 0;
90
91assign user_DAC_B_pad[0:USER_DAC_B_BITS-1] = user_DAC_B;
92assign user_DAC_B_pad[USER_DAC_B_BITS:17] = 0;
93
94assign user_DAC_C_pad[0:USER_DAC_C_BITS-1] = user_DAC_C;
95assign user_DAC_C_pad[USER_DAC_C_BITS:17] = 0;
96
97assign user_DAC_D_pad[0:USER_DAC_D_BITS-1] = user_DAC_D;
98assign 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
104genvar ii;
105generate
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
134endgenerate
135
136endmodule
Note: See TracBrowser for help on using the repository browser.