| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- //------------------------------------------------------------------------------------------
- // ____ ____
- // / /\/ /
- // /___/ \ /
- // \ \ \/ � Copyright 2019 Xilinx, Inc. All rights reserved.
- // \ \ This file contains confidential and proprietary information of Xilinx, Inc.
- // / / and is protected under U.S. and international copyright and other
- // /___/ /\ intellectual property laws.
- // \ \ / \
- // \___\/\___\
- //
- //-------------------------------------------------------------------------------------------
- // Device: 7-Series
- // Author: Tatsukawa, Defossez
- // Entity Name: top_mmcme2_tb
- // Purpose: This is a basic demonstration that drives the MMCM_DRP
- // ports to trigger two reconfiguration events, one for
- // each state.
- // Tools: QuestaSim_10.7d or newer
- // Limitations:
- //
- // Vendor: Xilinx Inc.
- // Version: 0.01
- // Filename: top_mmcme2_tb.v
- // Date Created: 30-Jul-2014
- // Date Last Modified: 26-Jun-2019
- //-------------------------------------------------------------------------------------------
- // Disclaimer:
- // This disclaimer is not a license and does not grant any rights to the materials
- // distributed herewith. Except as otherwise provided in a valid license issued to you
- // by Xilinx, and to the maximum extent permitted by applicable law: (1) THESE MATERIALS
- // ARE MADE AVAILABLE "AS IS" AND WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL
- // WARRANTIES AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED
- // TO WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR
- // PURPOSE; and (2) Xilinx shall not be liable (whether in contract or tort, including
- // negligence, or under any other theory of liability) for any loss or damage of any
- // kind or nature related to, arising under or in connection with these materials,
- // including for any direct, or any indirect, special, incidental, or consequential
- // loss or damage (including loss of data, profits, goodwill, or any type of loss or
- // damage suffered as a result of any action brought by a third party) even if such
- // damage or loss was reasonably foreseeable or Xilinx had been advised of the
- // possibility of the same.
- //
- // CRITICAL APPLICATIONS
- // Xilinx products are not designed or intended to be fail-safe, or for use in any
- // application requiring fail-safe performance, such as life-support or safety devices
- // or systems, Class III medical devices, nuclear facilities, applications related to
- // the deployment of airbags, or any other applications that could lead to death,
- // personal injury, or severe property or environmental damage (individually and
- // collectively, "Critical Applications"). Customer assumes the sole risk and
- // liability of any use of Xilinx products in Critical Applications, subject only to
- // applicable laws and regulations governing limitations on product liability.
- //
- // THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE AT ALL TIMES.
- //
- // Contact: e-mail hotline@xilinx.com phone + 1 800 255 7778
- //-------------------------------------------------------------------------------------------
- // Revision History:
- // Rev: 30-Jul-20149 - Tatsukawa
- // Initial version of this design - source code.
- // Rev: 26-Jun-2019 - Defossez
- // Make sure the simulation works after modifications to the design.
- //-------------------------------------------------------------------------------------------
- //
- `timescale 1ps / 1ps
- //-------------------------------------------------------------------------------------------
- module top_tb ();
- reg SSTEP, RST, CLKin, STATE;
- wire SRDY, clk0out, clk1out, clk2out, clk3out, clk4out, clk5out, clk6out;
- //-------------------------------------------------------------------------------------------
- top_mmcme2 U1
- (
- .SSTEP (SSTEP),
- .STATE (STATE),
- .RST (RST),
- .CLKIN (CLKin),
- .SRDY (SRDY),
- .LOCKED_OUT (locked),
- .CLK0OUT (clk0out),
- .CLK1OUT (clk1out),
- .CLK2OUT (clk2out),
- .CLK3OUT (clk3out),
- .CLK4OUT (clk4out),
- .CLK5OUT (clk5out),
- .CLK6OUT (clk6out)
- );
- //-------------------------------------------------------------------------------------------
- localparam one_ns = 1000;
- localparam clock_period = 10;
- parameter [1:0] STARTUP = 0, STATE0 = 1, STATE1 = 2, UNDEFINED = 3;
- reg [1:0] SM = STARTUP ;
- always @ (posedge CLKin)
- begin
- if (RST)
- SM = STARTUP;
- else
- case (SM)
- STARTUP:
- begin
- SM = STATE0;
- SSTEP=1'b0;
- STATE=1'b0;
- end
- STATE0:
- begin
- if (locked == 1 )
- begin
- #(1 * clock_period * one_ns) SSTEP= 1'b1;
- #(1 * clock_period * one_ns) SSTEP=1'b0;
- #(100 * clock_period * one_ns) SM = STATE1 ;
- STATE=1'b1;
- end
- end
- STATE1:
- begin
- if (locked == 1 )
- begin
- #(1 * clock_period * one_ns) SSTEP= 1'b1;
- #(1 * clock_period * one_ns) SSTEP=1'b0;
- #(100 * clock_period * one_ns) SM = STATE0;
- STATE=1'b0;
- end
- end
- UNDEFINED: SM= STARTUP;
- endcase
- end
- //
- initial
- begin
- CLKin = 0;
- RST = 1;
- #50000 RST = 0;
- end
- always
- # (clock_period * one_ns / 2) CLKin = ~CLKin;
- //
- //-------------------------------------------------------------------------------------------
- endmodule
- //
|