📄 altmemddr_phy_alt_mem_phy_ciii.v
字号:
//`ifdef ALT_MEM_PHY_DEFINES`else`include "alt_mem_phy_defines.v"`endif//module altmemddr_phy_alt_mem_phy_ciii ( // Clock and reset : pll_ref_clk, global_reset_n, soft_reset_n, reset_request_n, phy_clk, reset_phy_clk_n, // Local interface (Avalon or other) inputs to MUX : local_address, local_read_req, local_wdata, local_write_req, local_size, local_be, local_refresh_req, local_burstbegin, // MUX outputs to Local interface (Avalon or other) : local_ready, local_wdata_req, local_refresh_ack, // NB. rdata is potentially delayed in the controller and then passed-thru : local_rdata, local_rdata_valid, local_init_done, // Outputs from the MUX to the controller : ctl_address, ctl_read_req, ctl_wdata, ctl_write_req, ctl_size, ctl_be, ctl_refresh_req, ctl_burstbegin, // Inputs to the MUX, from the controller : ctl_ready, ctl_wdata_req, // Pass-thru inputs from controller - delayed versions of ctl_mem_rdata: ctl_rdata, ctl_rdata_valid, ctl_refresh_ack, // Controller interface // Controller outputs to the Phy, to be re-timed and de-muxed to memory : ctl_mem_addr_h, ctl_mem_addr_l, ctl_mem_ba_h, ctl_mem_ba_l, ctl_mem_cas_n_h, ctl_mem_cas_n_l, ctl_mem_cke_h, ctl_mem_cke_l, ctl_mem_cs_n_h, ctl_mem_cs_n_l, ctl_mem_odt_h, ctl_mem_odt_l, ctl_mem_ras_n_h, ctl_mem_ras_n_l, ctl_mem_we_n_h, ctl_mem_we_n_l, ctl_mem_be, ctl_mem_dqs_burst, ctl_mem_wdata, ctl_mem_wdata_valid, //QDRII signals - UNUSED FOR CIII ctl_mem_wps_n, ctl_mem_rps_n, // Read path from memory, through Phy and output back to controller : ctl_mem_rdata, ctl_mem_rdata_valid, // Local interface inputs from the controller to the PHY : ctl_init_done, ctl_doing_rd, ctl_add_1t_ac_lat, ctl_add_1t_odt_lat, ctl_add_intermediate_regs, ctl_negedge_en, // PHY output to the controller or system indicating ready : ctl_usr_mode_rdy, // DIMM outputs : mem_addr, mem_ba, mem_cas_n, mem_cke, mem_cs_n, mem_d, mem_dm, mem_odt, mem_ras_n, mem_we_n, mem_clk, mem_clk_n, mem_reset_n, mem_doff_n, // Bidirectional DIMM signals: mem_dq, mem_dqs, mem_dqsn, // QDRII outputs : mem_rps_n, mem_wps_n, // Sequencer debug outputs : resynchronisation_successful, postamble_successful, tracking_successful, tracking_adjustment_up, tracking_adjustment_down, // DLL import/export ports - !UNUSED for SIII! dqs_delay_ctrl_import, dqs_delay_ctrl_export, dll_reference_clk, // PLL reconfig interface - !UNUSED for CIII! pll_reconfig_clk, pll_reconfig_reset, pll_reconfig_data_out, pll_reconfig_busy, // PLL reconfig inputs for HCII : pll_reconfig_enable, pll_reconfig_counter_type, pll_reconfig_counter_param, pll_reconfig_data_in, pll_reconfig_read_param, pll_reconfig_write_param, pll_reconfig );// Default parameter values :parameter AC_PHASE = "MEM_CLK";parameter ADDR_CMD_ADD_INTERMEDIATE_REGS = "EXT_SELECT";parameter ADDR_CMD_ADD_1T = "EXT_SELECT";parameter ADDR_CMD_NEGEDGE_EN = "EXT_SELECT";parameter ADDR_CMD_2T_EN = 1;parameter ADDR_COUNT_WIDTH = 4;parameter BIDIR_DPINS = 1;parameter CAPTURE_MIMIC_PATH = 0;parameter CLOCK_INDEX_WIDTH = 3;parameter DDR_MIMIC_PATH_EN = 1;parameter DEDICATED_MEMORY_CLK_EN = 0;parameter DLL_EXPORT_IMPORT = "NONE";parameter DLL_DELAY_BUFFER_MODE = "HIGH";parameter DLL_DELAY_CHAIN_LENGTH = 10;parameter DQS_OUT_MODE = "DELAY_CHAIN2";parameter DQS_PHASE = 72;parameter DQS_PHASE_SETTING = 2;parameter DWIDTH_RATIO = 4;parameter ENABLE_DEBUG = 0;parameter FAMILY = "Cyclone III";parameter GENERATE_WRITE_DQS = 1;parameter LOCAL_IF_CLK_PS = 4000;parameter LOCAL_IF_AWIDTH = 26;parameter LOCAL_IF_BURST_LENGTH = 1;parameter LOCAL_IF_DWIDTH = 256;parameter LOCAL_IF_DRATE = "HALF";parameter [39:0] LOCAL_IF_TYPE_AVALON_STR = "true";parameter LOCAL_BURST_LEN_BITS = 1;parameter MEM_ADDR_CMD_BUS_COUNT = 1;parameter MEM_TCL = "1.5";parameter MEM_IF_MEMTYPE = "DDR";parameter MEM_IF_DQSN_EN = 1;parameter MEM_IF_DWIDTH = 64;parameter MEM_IF_ROWADDR_WIDTH = 13;parameter MEM_IF_BANKADDR_WIDTH = 3;parameter MEM_IF_PHY_NAME = "STRATIXII_DQS";parameter MEM_IF_CS_WIDTH = 2;parameter MEM_IF_BE_WIDTH = 32;parameter MEM_IF_DM_WIDTH = 8;parameter MEM_IF_DM_PINS_EN = 1;parameter MEM_IF_DQ_PER_DQS = 8;parameter MEM_IF_DQS_CAPTURE_EN = 0;parameter MEM_IF_DQS_WIDTH = 8;parameter MEM_IF_OCT_EN = 0;parameter MEM_IF_POSTAMBLE_EN_WIDTH = 8;parameter MEM_IF_CLK_PAIR_COUNT = 3;parameter MEM_IF_CLK_PS = 4000;parameter MEM_IF_CLK_PS_STR = "4000 ps";parameter MIF_FILENAME = "PLL.MIF";parameter MIMIC_DEBUG_EN = 0;parameter MIMIC_PATH_TRACKING_EN = 1;parameter NUM_MIMIC_SAMPLE_CYCLES = 6;parameter NUM_DEBUG_SAMPLES_TO_STORE = 4096;parameter ODT_ADD_1T = "EXT_SELECT";parameter PLL_EXPORT_IMPORT = "NONE";parameter PLL_REF_CLK_PS = 4000;parameter PLL_STEPS_PER_CYCLE = 24;parameter PLL_TYPE = "ENHANCED";parameter PLL_RECONFIG_PORTS_EN = 0;parameter POSTAMBLE_INITIAL_LAT = 16;parameter POSTAMBLE_AWIDTH = 6;parameter POSTAMBLE_CALIBRATION_AND_SETUP_EN = 1;parameter POSTAMBLE_HALFT_EN = 0;parameter POSTAMBLE_RESYNC_LAT_CTL_EN = 0;parameter RDP_INITIAL_LAT = 6;parameter RDP_RESYNC_LAT_CTL_EN = 0;parameter RESYNC_CALIBRATION_AND_SETUP_EN = 1;parameter RESYNC_CALIBRATE_ONLY_ONE_BIT_EN = 0;parameter RESYNC_PIPELINE_DEPTH = 2; parameter READ_LAT_WIDTH = 6;parameter SPEED_GRADE = "C3";parameter TRAINING_DATA_WIDTH = 32;parameter SCAN_CLK_DIVIDE_BY = 2;parameter USE_MEM_CLK_FOR_ADDR_CMD_CLK = 1;parameter ENABLE_DDR3_SEQUENCER = "FALSE";parameter QDRII_MEM_DLL_NUM_CLK_CYCLES = 2048; parameter DQS_DELAY_CTL_WIDTH = 6;parameter REG_DIMM = "FALSE";// I/O Signal definitions :// Clock and reset I/O :input wire pll_ref_clk;input wire global_reset_n;input wire soft_reset_n;// This is the PLL locked signal :output wire reset_request_n;// The controller must use this phy_clk to interface to the PHY. It is// optional as to whether the remainder of the system uses it :output wire phy_clk;output wire reset_phy_clk_n;// Local interface I/O :input wire [LOCAL_IF_AWIDTH - 1 : 0] local_address;input wire local_read_req;input wire [LOCAL_IF_DWIDTH - 1 : 0] local_wdata;input wire local_write_req;input wire [LOCAL_BURST_LEN_BITS - 1 : 0] local_size;// For v6.1, byte enables are supported, but nibble enables (aka x4 DM support)// is unsupported :input wire [(LOCAL_IF_DWIDTH/8) - 1 : 0] local_be;input wire local_refresh_req;input wire local_burstbegin;output wire local_ready;output wire [LOCAL_IF_DWIDTH - 1 : 0] local_rdata;output wire local_rdata_valid;output wire local_init_done;output wire local_refresh_ack;// This is the output from the MUX that shall be either ctl_wdata_req or// tied low, it may not be called ctl_wdata_req, as this is the existing// input.output wire local_wdata_req;// Output addr, wdata etc. to the controller, these are sourced either from the// local interface or the sequencer.// So the whole datapath for address and wdata is that the ctl_address and ctl_wdata// here are simply pass-throughs of either local_address/wdata or the sequencer// address and wdata outputs. They are input to the controller, which then a few// clocks later shall output the same data but timed and formatted as required for the// memory on ctl_mem_addr_h/l and ctl_mem_wdata :output wire [LOCAL_IF_AWIDTH - 1 : 0] ctl_address;output wire ctl_read_req;output wire [LOCAL_IF_DWIDTH - 1 : 0] ctl_wdata;output wire ctl_write_req;// The "size" and byte enable outputs to the controller shall either be tied// if the sequencer is driving the controller, or shall reflect the local_if// size and 'be' signalsoutput wire [LOCAL_BURST_LEN_BITS - 1 : 0] ctl_size;// For v6.1, byte enables are supported, but nibble enables (aka x4 DM support)// is unsupported :output wire [(LOCAL_IF_DWIDTH/8) - 1 : 0] ctl_be;output wire ctl_refresh_req;output wire ctl_burstbegin;input wire ctl_ready;input wire ctl_wdata_req;input wire [LOCAL_IF_DWIDTH - 1 : 0] ctl_rdata;input wire ctl_rdata_valid;input wire ctl_refresh_ack;input wire [MEM_IF_ROWADDR_WIDTH -1:0] ctl_mem_addr_h;input wire [MEM_IF_ROWADDR_WIDTH -1:0] ctl_mem_addr_l;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -