📄 virtexiipmgtboardinterface.v
字号:
/////////////////////////////////////////////////////////////////////////////////// File Name: VirtexIIpMGTBoardInterface.v// Version: 2.2// Date: 05/14/03// Model: VirtexIIp MGT Board Interface Circuits.// Circuits to implement a user friendly interface on the// MGT board.//// Company: Xilinx, Inc.// Contributor: Mike Matera//// Disclaimer: XILINX IS PROVIDING THIS DESIGN, CODE, OR// INFORMATION "AS IS" SOLELY FOR USE IN DEVELOPING// PROGRAMS AND SOLUTIONS FOR XILINX DEVICES. BY// PROVIDING THIS DESIGN, CODE, OR INFORMATION AS// ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,// APPLICATION OR STANDARD, XILINX IS MAKING NO// REPRESENTATION THAT THIS IMPLEMENTATION IS FREE// FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE// RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY// REQUIRE FOR YOUR IMPLEMENTATION. XILINX// EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH// RESPECT TO THE ADEQUACY OF THE IMPLEMENTATION,// INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR// REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE// FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR// PURPOSE.//// (c) Copyright 2003 Xilinx, Inc.// All rights reserved./////////////////////////////////////////////////////////////////////////////////`ifdef VIRTEXIIPMGTBOARDINTERFACE `else`define VIRTEXIIPMGTBOARDINTERFACE`timescale 100ps/10psmodule VirtexIIpMGTBoardInterface ( clock_rt_in, clock_direct0_in, clock_direct1_in, clock_select_in, clock_direct0_in_bot, clock_direct1_in_bot, clock_select_in_bot, mgt_clock_out, mgt_reset_out, mgt_reset_out_bot, pwm_locked_out,mgt_clock_out_bot, LEDs_in, LEDs_out, DIPs_in, DIPs_out, push_buttons_in, push_buttons_out, human_update_out, system_reset_in ); //------------------------------------------------------------- // // Port Summary: // // clock_rt_in (clock: unfuffered) // Real Time Clock: Must come directly from IO. // // clock_direct0_in (clock: unfuffered) // One reference clock for the GT: Must come directly from IO. // // clock_direct1_in (clock: unfuffered) // One reference clock for the GT: Must come directly from IO. // // clock_direct0_in_bot (clock: unfuffered) // One reference clock for the bottom GT: Must come directly from IO. // Used in top0bot3 configuration. // // clock_direct1_in_bot (clock: unfuffered) // One reference clock for the bottom GT: Must come directly from IO. // Used in top0bot3 configuration. // // clock_select_in (asynchronous) // Selectes which reference clock to use. // 0: use clock_direct0_in // 1: use clock_direct1_in. // // mgt_clock_out (clock: buffered (output)) // Digital clock for the TX side of the GT. // // mgt_clock_out_bot (clock: buffered (output)) // Digital clock for the TX side of the bottom GT. // Used in top0bot3 configuration. // // mgt_reset_out (synchronous: mgt_clock_out) // Reset signal for the TX side of the GT. // // LEDs_in[15:00] (asynchronous) // Digital inputs to the LEDs. // // LEDs_out[15:00] (asynchronous) // PWM outputs to be connected to LEDs. // // DIPs_in (asynchronous) // Connected to DIP Switches. // // DIPs_out (asynchronous) // Debounced DIP switches. // // push_buttons_in (asynchronous) // Connected to pushbutton Switches. // // push_buttons_out (asynchronous) // Debounced pushbutton switches. // // human_update_out (asynchronous) // High temporarily after DIP or pushbuttons have been actuated. // by a human (presumably). // // system_reset_in (asynchronous) // System asynchronous reset. This gets everything // //------------------------------------------------------------- output [15:00] LEDs_out; output [35:00] DIPs_out; output [03:00] push_buttons_out; output human_update_out, mgt_clock_out, mgt_reset_out, mgt_reset_out_bot, pwm_locked_out,mgt_clock_out_bot; input [15:00] LEDs_in; input [35:00] DIPs_in; input [03:00] push_buttons_in; input clock_direct0_in, clock_direct1_in, clock_select_in, clock_rt_in, system_reset_in; input clock_direct0_in_bot, clock_direct1_in_bot, clock_select_in_bot; wire PWMLocked, PWMClock, PWMReset; assign pwm_locked_out = PWMLocked; ClockManager clock_and_reset ( .clock_rt_in(clock_rt_in), .clock_direct0_in(clock_direct0_in), .clock_direct1_in(clock_direct1_in), .clock_select_in(clock_select_in), .clock_direct0_in_bot(clock_direct0_in_bot), .clock_direct1_in_bot(clock_direct1_in_bot), .clock_select_in_bot(clock_select_in_bot), .pwm_clock_out(PWMClock), .pwm_locked_out(PWMLocked), .pwm_reset_out(PWMReset), .mgt_clock_out(mgt_clock_out), .mgt_clock_out_bot(mgt_clock_out_bot), .mgt_reset_out(mgt_reset_out), .mgt_reset_out_bot(mgt_reset_out_bot), .system_reset_in(system_reset_in) ); HumanInterface HID ( .LEDs_in(LEDs_in), .LEDs_out(LEDs_out), .DIPs_in(DIPs_in), .DIPs_out(DIPs_out), .push_buttons_in(push_buttons_in), .push_buttons_out(push_buttons_out), .human_update_out(human_update_out), .clock_in(PWMClock), .reset_in(PWMReset) );endmodulemodule ClockManager ( clock_rt_in, clock_direct0_in, clock_direct1_in, clock_select_in, clock_direct0_in_bot, clock_direct1_in_bot, clock_select_in_bot, pwm_clock_out, mgt_clock_out, mgt_clock_out_bot, pwm_locked_out, system_reset_in, pwm_reset_out, mgt_reset_out, mgt_reset_out_bot ); output pwm_clock_out, mgt_clock_out, pwm_locked_out, pwm_reset_out, mgt_reset_out, mgt_reset_out_bot, mgt_clock_out_bot; input clock_direct0_in, clock_direct1_in, clock_select_in, system_reset_in, clock_rt_in; input clock_direct0_in_bot, clock_direct1_in_bot, clock_select_in_bot; wire mgt_locked_out; wire pwm_clock_feedback_unbuff, pwm_clock_unbuff; BUFG pwm_gbuff0 (.I(pwm_clock_feedback_unbuff), .O(pwm_clock_feedback)); BUFG pwm_gbuff1 (.I(pwm_clock_unbuff), .O(pwm_clock_out)); DCM pwm_dcm ( .CLKIN(clock_rt_in), .CLKFB(pwm_clock_feedback), .RST(system_reset_in), .CLKDV(pwm_clock_unbuff), .CLK0(pwm_clock_feedback_unbuff), .DSSEN(1'b0), .PSCLK(1'b0), .PSEN(1'b0), .PSINCDEC(1'b0), .LOCKED(pwm_locked_out) ); `ifdef USE_MGT_DCM // use a dedicated DCM to generate usrclk for the mgt wire mgt_clock,mgt_clock_bot, mgt_clock_unbuff; // attribute CLOCK_SIGNAL: mgt_clock; BUFGMUX mgt_gbuff0 ( .I0(clock_direct0_in), .I1(clock_direct1_in),.S(clock_select_in), .O(mgt_clock) ); BUFGMUX mgt_gbuff0_bot ( .I0(clock_direct0_in_bot), .I1(clock_direct1_in_bot),.S(clock_select_in_bot), .O(mgt_clock_bot) ); // attribute CLOCK_SIGNAL: mgt_clock_out; BUFGMUX mgt_gbuff1 (.I0(mgt_clock_unbuff), .I1(1'b0), .S(1'b0), .O(mgt_clock_out)); BUFGMUX mgt_gbuff1_bot (.I0(mgt_clock_unbuff_bot), .I1(1'b0), .S(1'b0), .O(mgt_clock_out_bot)); DCM mgt_dcm ( .CLKIN(mgt_clock), .CLKFB(mgt_clock_out), .RST(system_reset_in), .CLKDV(), .CLK0(mgt_clock_unbuff), .CLKFX(), .DSSEN(1'b0), .PSCLK(1'b0), .PSEN(1'b0), .PSINCDEC(1'b0), .LOCKED(mgt_locked_out) )/* synthesis xc_props = "DUTY_CYCLE_CORRECTION =TRUE, CLK_FEEDBACK =1X,DLL_FREQUENCY_MODE=LOW,CLKOUT_PHASE_SHIFT =NONE,STARTUP_WAIT =FALSE,DFS_FREQUENCY_MODE =LOW,CLKOUT_PHASE_SHIFT =NONE,PHASE_SHIFT =0" */; DCM mgt_dcm_bot ( .CLKIN(mgt_clock_bot), .CLKFB(mgt_clock_out_bot), .RST(system_reset_in), .CLKDV(), .CLK0(mgt_clock_unbuff_bot), .CLKFX(), .DSSEN(1'b0), .PSCLK(1'b0), .PSEN(1'b0), .PSINCDEC(1'b0), .LOCKED(mgt_locked_out_bot) )/* synthesis xc_props = "DUTY_CYCLE_CORRECTION =TRUE, CLK_FEEDBACK =1X,DLL_FREQUENCY_MODE=LOW,CLKOUT_PHASE_SHIFT =NONE,STARTUP_WAIT =FALSE,DFS_FREQUENCY_MODE =LOW,CLKOUT_PHASE_SHIFT =NONE,PHASE_SHIFT =0" */; `else // directly pass the bufg clock to the mgt // attribute CLOCK_SIGNAL: mgt_clock_out; BUFGMUX mgt_gbuff0 (.I0(clock_direct0_in), .I1(clock_direct1_in),.S(clock_select_in), .O(mgt_clock_out)); // attribute CLOCK_SIGNAL: mgt_clock_out; BUFGMUX mgt_gbuff0_bot (.I0(clock_direct0_in_bot), .I1(clock_direct1_in_bot),.S(clock_select_in_bot), .O(mgt_clock_out_bot)); assign mgt_locked_out = pwm_locked_out;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -