⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dcm_adv.v

📁 DDR2源代码 DDR2源代码 DDR2源代码
💻 V
📖 第 1 页 / 共 4 页
字号:
// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/virtex4/DCM_ADV.v,v 1.37.4.1 2008/01/04 00:30:55 yanx Exp $///////////////////////////////////////////////////////////////////////////////// Copyright (c) 1995/2004 Xilinx, Inc.// All Right Reserved./////////////////////////////////////////////////////////////////////////////////   ____  ____//  /   /\/   /// /___/  \  /    Vendor : Xilinx// \   \   \/     Version : 10.1//  \   \         Description : Xilinx Functional Simulation Library Component//  /   /                  Digital Clock Manager with Advanced Features// /___/   /\     Filename : DCM_ADV.v// \   \  /  \    Timestamp : Thu Mar 25 16:43:43 PST 2004//  \___\/\___\//// Revision://    03/23/04 - Initial version.//    04/11/05 - Add parameter DFS_OSCILLATOR_MODE to support R.//    04/22/05 - Change DRP set clkfx M/D value effected on RST=1, not rising//               edge. (CR 206731)//    05/11/05 - Add parameter DCM_AUTOCALIBRATION (CR 208095).//             - Add clkin alignment check control to remove the glitch when//               clkin stopped. (CR207409).//    05/19/05 - Add initial to all clock outputs. (CR 208380).//    05/25/05 - Seperate clock_second_pos and neg to another process due to//               wait caused unreset. Set fb_delay_found after fb_delay computed.//               (CR 208771)//    07/05/05 - Use counter to generate clkdv_out to align with clk0_out. (CR211465).//    07/25/05 - Set CLKIN_PERIOD default to 10.0ns to (CR 213190).//    12/02/05 - Add warning for un-used DRP address use. (CR 221885)//    12/22/05 - LOCKED = x when RST less than 3 clock cycles (CR 222795)//    01/06/06 - Remove GSR from 3 cycle check. (223099).//    01/12/06 - Remove GSR from reset logic. (223099).//    01/12/06 - Add rst_in to period_div and period_ps block to handle clkin frequency //               change case. (CR 221989).//    01/26/06 - Remove $finish from DRP Warning and change invalid to unsupported//               address. (CR 224743)//               Add reset to maximum period check module (CR224287).//    02/28/06 - Add SIM_DEVICE generic to support V5 and V4 M and D for CLKFX (BT#1003).//               Add integer and real to parameter declaration.//    03/10/06 - Add wire declaration for lock_period_dly signal (CR 227126)//    08/10/06 - Set PSDONE to 0 when CLKOUT_PHASE_SHIFT=FIXED (CR 227018).//    03/07/07 - Change DRP CLKFX Multiplier to bit 15 to 8 and Divider to bit 7 to 0.//               (CR 435600).//    04/06/07 - Enable the clock out in clock low time after reset in model//               clock_divide_by_2  (CR 437471).//    06/04/07 - Add wire declaration for internal signals, Remove buf from unisim.//    09/20/07 - Use 1.5 factor for clock stopped check when CLKIN divide by 2 set(CR446707).//    11/01/07 - Add DRP DFS_FREQUENCY_MODE and DLL_FREQUENCY_MODE read/write support (CR435651)//    12/20/07 - Add DRP CLKIN_DIVIDE_BY_2 read/write support (CR457282)// End Revision`timescale  1 ps / 1 ps`define CLKFX_MULTIPLY_ADDR 80`define CLKFX_DIVIDE_ADDR  82`define PHASE_SHIFT_ADDR 85`define PHASE_SHIFT_KICK_OFF_ADDR 17`define DCM_DEFAULT_STATUS_ADDR 0`define DFS_FREQ_MODE_ADDR 65`define DLL_FREQ_MODE_ADDR 81`define CLKIN_DIV_BY2_ADDR 68module DCM_ADV (        CLK0,        CLK180,        CLK270,        CLK2X,        CLK2X180,        CLK90,        CLKDV,        CLKFX,        CLKFX180,        DO,        DRDY,        LOCKED,        PSDONE,        CLKFB,        CLKIN,        DADDR,        DCLK,        DEN,        DI,        DWE,        PSCLK,        PSEN,        PSINCDEC,        RST);parameter real CLKDV_DIVIDE = 2.0;parameter integer CLKFX_DIVIDE = 1;parameter integer CLKFX_MULTIPLY = 4;parameter CLKIN_DIVIDE_BY_2 = "FALSE";parameter real CLKIN_PERIOD = 10.0;                  // non-simulatableparameter CLKOUT_PHASE_SHIFT = "NONE";parameter CLK_FEEDBACK = "1X";parameter DCM_AUTOCALIBRATION = "TRUE";parameter DCM_PERFORMANCE_MODE = "MAX_SPEED";   // non-simulatableparameter DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS"; // non-simulatableparameter DFS_FREQUENCY_MODE = "LOW";parameter DLL_FREQUENCY_MODE = "LOW";parameter DUTY_CYCLE_CORRECTION = "TRUE";parameter FACTORY_JF = 16'hF0F0;                // non-simulatablelocalparam integer MAXPERCLKIN = 1000000;                // non-modifiable simulation parameterlocalparam integer MAXPERPSCLK = 100000000;              // non-modifiable simulation parameterparameter integer PHASE_SHIFT = 0;localparam integer SIM_CLKIN_CYCLE_JITTER = 300;         // non-modifiable simulation parameterlocalparam integer SIM_CLKIN_PERIOD_JITTER = 1000;       // non-modifiable simulation parameterparameter SIM_DEVICE ="VIRTEX4";parameter STARTUP_WAIT = "FALSE";               // non-simulatablelocalparam DFS_OSCILLATOR_MODE = "PHASE_FREQ_LOCK";output CLK0;output CLK180;output CLK270;output CLK2X180;output CLK2X;output CLK90;output CLKDV;output CLKFX180;output CLKFX;output DRDY;output LOCKED;output PSDONE;output [15:0] DO;input CLKFB;input CLKIN;input DCLK;input DEN;input DWE;input PSCLK;input PSEN;input PSINCDEC;tri0 GSR = glbl.GSR;input RST;input [15:0] DI;input [6:0] DADDR;reg CLK0;reg CLK180;reg CLK270;reg CLK2X180;reg CLK2X;reg CLK90;reg CLKDV;reg CLKFX180;reg CLKFX;wire [15:0] di_in;wire [6:0] daddr_in;wire clkfb_in, clkin_in, dssen_in;wire psclk_in, psen_in, psincdec_in, rst_in, gsr_in, rst_input ;wire locked_out_out;wire dwe_in, den_in, dclk_in, clkin_lost_out, clkfx_lost_out, clkfb_lost_out;reg rst_flag;reg clk0_out;reg clk2x_out, clkdv_out;reg clkfx_out, locked_out, psdone_out, ps_overflow_out;reg clkfx_out_avg, clkfx_out_ph;reg ps_lock;reg drdy_out;wire [15:0] do_out;reg [15:0]  do_out_s, do_out_drp, do_out_drp1;reg do_stat_en;reg [6:0] daddr_in_lat;reg valid_daddr;reg [1:0] clkfb_type;reg [8:0] divide_type;reg clkin_type_i;wire clkin_type;reg [2:0] ps_type;reg [3:0] deskew_adjust_mode;wire dfs_mode_type;reg dfs_mode_type_i;wire [1:0] dll_mode_type;reg [1:0] dll_mode_type_i;reg sim_device_type;reg clk1x_type;integer ps_in, ps_min, ps_max;integer ps_in_ps, ps_in_psdrp, ps_in_curr;integer ps_delay_ps, ps_delay_drp;integer clkdv_cnt;reg lock_period, lock_delay, lock_clkin, lock_clkfb;reg [1:0] lock_out;reg lock_out1_neg;reg lock_fb, lock_ps, lock_ps_dly;reg fb_delay_found;reg clock_stopped;reg clkin_chkin, clkfb_chkin;wire chk_enable, chk_rst;wire clkin_div;wire locked_out_tmp;wire lock_period_pulse;wire lock_period_dly;reg clkin_ps;reg clkin_fb;time FINE_SHIFT_RANGE;time ps_delay;time delay_edge;time clkin_period [2:0];time period;time period_div;time period_orig;time period_stop_ck;time period_ps;time clkout_delay;time fb_delay;time period_fx, remain_fx;time period_fxtmp, period_fxavg;time period_dv_high, period_dv_low;time cycle_jitter, period_jitter;time clkin_div_edge, clkin_ps_edge, clkin_edge;time tap_delay_step;reg clkin_window, clkfb_window;reg [2:0] rst_reg;reg [12:0] numerator, denominator, gcd;reg [23:0] i, n, d, p;reg first_time_locked;reg en_status;reg [1521:0] mem_drp;reg drp_lock;reg drp_lock1;reg ps_drp_lock, ps_drp_lock_tmp;integer ps_drp, ps_in_drp;reg  ps_kick_off_cmd;reg single_step_lock, single_step_lock_tmp, single_step_done;integer clkfx_multiply_drp, clkfx_divide_drp;reg [7:0] clkfx_m_reg, clkfx_d_reg;reg [15:0] clkfx_md_reg, dfs_mode_reg, dll_mode_reg, clkin_div2_reg;reg inc_dec;real clock_stopped_factor;reg notifier;initial begin    #1;    if ($realtime == 0) begin	$display ("Simulator Resolution Error : Simulator resolution is set to a value greater than 1 ps.");	$display ("In order to simulate the DCM_ADV, the simulator resolution must be set to 1ps or smaller.");	$finish;    endendinitial begin    case (CLKDV_DIVIDE)	1.5  : divide_type = 'd3;	2.0  : divide_type = 'd4;	2.5  : divide_type = 'd5;	3.0  : divide_type = 'd6;	3.5  : divide_type = 'd7;	4.0  : divide_type = 'd8;	4.5  : divide_type = 'd9;	5.0  : divide_type = 'd10;	5.5  : divide_type = 'd11;	6.0  : divide_type = 'd12;	6.5  : divide_type = 'd13;	7.0  : divide_type = 'd14;	7.5  : divide_type = 'd15;	8.0  : divide_type = 'd16;	9.0  : divide_type = 'd18;	10.0 : divide_type = 'd20;	11.0 : divide_type = 'd22;	12.0 : divide_type = 'd24;	13.0 : divide_type = 'd26;	14.0 : divide_type = 'd28;	15.0 : divide_type = 'd30;	16.0 : divide_type = 'd32;	default : begin	    $display("Attribute Syntax Error : The attribute CLKDV_DIVIDE on DCM_ADV instance %m is set to %0.1f.  Legal values for this attribute are 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, or 16.0.", CLKDV_DIVIDE);	    $finish;	end    endcase//    if (DFS_OSCILLATOR_MODE == "AVE_FREQ_LOCK") //       if ((CLKFX_DIVIDE <= 0) || (4096 < CLKFX_DIVIDE)) begin//	   $display("Attribute Syntax Error : The attribute CLKFX_DIVIDE on DCM_ADV instance %m is set to %d.  Legal values for this attribute are 1 ... 4096.", CLKFX_DIVIDE);//	   $finish;//       end//    else       if ((CLKFX_DIVIDE <= 0) || (32 < CLKFX_DIVIDE)) begin	   $display("Attribute Syntax Error : The attribute CLKFX_DIVIDE on DCM_ADV instance %m is set to %d.  Legal values for this attribute are 1 ... 32.", CLKFX_DIVIDE);	   $finish;       end//    if (DFS_OSCILLATOR_MODE == "AVE_FREQ_LOCK")//       if ((CLKFX_MULTIPLY <= 1) || (4096 < CLKFX_MULTIPLY)) begin//   	  $display("Attribute Syntax Error : The attribute CLKFX_MULTIPLY on DCM_ADV instance %m is set to %d.  Legal values for this attribute are 2 ... 4096.", CLKFX_MULTIPLY);//   	  $finish;//       end//    else        if ((CLKFX_MULTIPLY <= 1) || (32 < CLKFX_MULTIPLY)) begin   	  $display("Attribute Syntax Error : The attribute CLKFX_MULTIPLY on DCM_ADV instance %m is set to %d.  Legal values for this attribute are 2 ... 32.", CLKFX_MULTIPLY);   	  $finish;       end    case (CLKIN_DIVIDE_BY_2)	"FALSE" : begin                    clkin_type_i = 0;                    clock_stopped_factor = 2.0;                  end	"TRUE"  : begin                    clkin_type_i = 1;                    clock_stopped_factor = 1.5;                  end	default : begin	    $display("Attribute Syntax Error : The attribute CLKIN_DIVIDE_BY_2 on DCM_ADV instance %m is set to %s.  Legal values for this attribute are TRUE or FALSE.", CLKIN_DIVIDE_BY_2);	    $finish;	end    endcase    case (CLKOUT_PHASE_SHIFT)	"NONE"     : begin		ps_in = 0 + 256;		ps_type = 3'b000;	end	"FIXED"    : begin	    ps_in = PHASE_SHIFT + 256;	    ps_max = 255 + 256;	    ps_min = -255 + 256;	    ps_type = 3'b001;            if ( DCM_PERFORMANCE_MODE == "MAX_RANGE" )               FINE_SHIFT_RANGE = 10000;            else               FINE_SHIFT_RANGE = 7000;    	    if ((PHASE_SHIFT < -255) || (PHASE_SHIFT > 255)) begin		$display("Attribute Syntax Error : The attribute PHASE_SHIFT on DCM_ADV instance %m is set to %d.  Legal values for this attribute are -255 ... 255.", PHASE_SHIFT);		$display("Error : PHASE_SHIFT = %d is not -255 ... 255.", PHASE_SHIFT);		$finish;	    end	end	"VARIABLE_POSITIVE" : begin	    ps_in = PHASE_SHIFT + 256;	    ps_max = 255 + 256;	    ps_min = 0 + 256;	    ps_type = 3'b011;            if ( DCM_PERFORMANCE_MODE == "MAX_RANGE" )               FINE_SHIFT_RANGE = 10000;            else               FINE_SHIFT_RANGE = 7000;    	    if ((PHASE_SHIFT < 0) || (PHASE_SHIFT > 255)) begin		$display("Attribute Syntax Error : The attribute PHASE_SHIFT on DCM_ADV instance %m is set to %d.  Legal values for this attribute are 0 ... 255.", PHASE_SHIFT);		$display("Error : PHASE_SHIFT = %d is not 0 ... 255.", PHASE_SHIFT);		$finish;	    end	end	"VARIABLE_CENTER" : begin	    ps_in = PHASE_SHIFT + 256;	    ps_max = 255 + 256;	    ps_min = -255 + 256;	    ps_type = 3'b100;            if ( DCM_PERFORMANCE_MODE == "MAX_RANGE" )               FINE_SHIFT_RANGE = 5000;            else               FINE_SHIFT_RANGE = 3500;    	    if ((PHASE_SHIFT < -255) || (PHASE_SHIFT > 255)) begin		$display("Attribute Syntax Error : The attribute PHASE_SHIFT on DCM_ADV instance %m is set to %d.  Legal values for this attribute are -255 ... 255.", PHASE_SHIFT);		$display("Error : PHASE_SHIFT = %d is not -255 ... 255.", PHASE_SHIFT);		$finish;	    end	end	"DIRECT" : begin	    ps_in = PHASE_SHIFT;            ps_max = 1023;            ps_min = 0;	    ps_type = 3'b101;            if (DCM_PERFORMANCE_MODE == "MAX_RANGE")            begin                  tap_delay_step = 18;                FINE_SHIFT_RANGE = 10000;            end            else            begin                tap_delay_step = 11;                FINE_SHIFT_RANGE = 7000;            end    	    if ((PHASE_SHIFT < 0) || (PHASE_SHIFT > 1023)) begin		$display("Attribute Syntax Error : The attribute PHASE_SHIFT on DCM_ADV instance %m is set to %d.  Legal values for this attribute is 0 to 1023.", PHASE_SHIFT);		$display("Error : PHASE_SHIFT = %d is not 0 to 1023.", PHASE_SHIFT);		$finish;	    end	end	default : begin	    $display("Attribute Syntax Error : The Attribute CLKOUT_PHASE_SHIFT on DCM_ADV instance %m is set to %s.  Legal values for this attribute are NONE, FIXED, VARIABLE_POSITIVE, VARIABLE_CENTER or DIRECT.", CLKOUT_PHASE_SHIFT);	    $finish;	end    endcase    ps_in_curr = ps_in;    ps_in_ps = ps_in;    ps_in_psdrp = ps_in;    case (CLK_FEEDBACK)	"NONE" : begin                   clkfb_type = 0;                   $display("Attribute CLK_FEEDBACK is set to value NONE.");                   $display("In this mode, the output ports CLK0, CLK180, CLK270, CLK2X, CLK2X180, CLK90 and  CLKDV can have any random phase relation w.r.t. input port CLKIN");                 end	"1X"   : clkfb_type = 1;	default : begin	    $display("Attribute Syntax Error : The attribute CLK_FEEDBACK on DCM_ADV instance %m is set to %s.  Legal values for this attribute are NONE or 1X.", CLK_FEEDBACK);	    $finish;	end    endcase    case (DCM_PERFORMANCE_MODE)        "MAX_SPEED" : ;        "MAX_RANGE" : ;        default : begin            $display("Attribute Syntax Error : The Attribute DCM_PERFORMANCE_MODE on DCM_ADV instance %m is set to %s.  Legal values for this attribute are MAX_SPEED or MAX_RANGE.", DCM_PERFORMANCE_MODE);            $finish;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -