📄 altmemddr_phy_alt_mem_phy_ciii.v
字号:
input wire [MEM_IF_BANKADDR_WIDTH - 1:0] ctl_mem_ba_h;input wire [MEM_IF_BANKADDR_WIDTH - 1:0] ctl_mem_ba_l;input wire ctl_mem_cas_n_h;input wire ctl_mem_cas_n_l;input wire [MEM_IF_CS_WIDTH - 1:0] ctl_mem_cke_h;input wire [MEM_IF_CS_WIDTH - 1:0] ctl_mem_cke_l;input wire [MEM_IF_CS_WIDTH - 1:0] ctl_mem_cs_n_h;input wire [MEM_IF_CS_WIDTH - 1:0] ctl_mem_cs_n_l;input wire [MEM_IF_CS_WIDTH - 1:0] ctl_mem_odt_h;input wire [MEM_IF_CS_WIDTH - 1:0] ctl_mem_odt_l;input wire ctl_mem_ras_n_h;input wire ctl_mem_ras_n_l;input wire ctl_mem_we_n_h;input wire ctl_mem_we_n_l;// For v6.1, byte enables are supported, but nibble enables (aka x4 DM support)// is unsupported :input wire [(LOCAL_IF_DWIDTH/8) - 1 : 0] ctl_mem_be;input wire ctl_mem_dqs_burst;// The controller buffers/registers its "ctl_wdata" input to produce this output :input wire [MEM_IF_DWIDTH * DWIDTH_RATIO - 1 : 0 ] ctl_mem_wdata;input wire ctl_mem_wdata_valid;// QDRII has seperate read and write addresses that are multiplexed// onto the ctl_mem_addr output :input wire [MEM_IF_CS_WIDTH -1:0] ctl_mem_wps_n;input wire [MEM_IF_CS_WIDTH -1:0] ctl_mem_rps_n;// Output captured, resynchronised and de-muxed read data to the controller :output wire [LOCAL_IF_DWIDTH - 1 : 0] ctl_mem_rdata;// Indicate to the controller that the calibration sequence has completed and the// read path output is valid :output wire ctl_mem_rdata_valid;input wire ctl_init_done;input wire ctl_doing_rd;// Functionally orthogonal from the rest of the controller I/O, this adds one clock// of latency to the address and command path :input wire ctl_add_1t_ac_lat;// Functionally orthogonal from the rest of the controller I/O, this adds one clock// of latency to the ODT path :input wire ctl_add_1t_odt_lat;// Functionally orthogonal from the rest of the controller I-O, this adds extra// register stages to the address / command - to help cross clock domains input wire ctl_add_intermediate_regs;// Functionally orthogonal from the rest of the controller I/O, this changes the// clock edge for the address and command :input wire ctl_negedge_en;output wire ctl_usr_mode_rdy;//Outputs to DIMM :output wire [MEM_IF_ROWADDR_WIDTH - 1 : 0] mem_addr;output wire [MEM_IF_BANKADDR_WIDTH - 1 : 0] mem_ba;output wire mem_cas_n;output wire [MEM_IF_CS_WIDTH - 1 : 0] mem_cke;output wire [MEM_IF_CS_WIDTH - 1 : 0] mem_cs_n;output wire [MEM_IF_DWIDTH - 1 : 0] mem_d;output wire [MEM_IF_DM_WIDTH - 1 : 0] mem_dm;output wire [MEM_IF_CS_WIDTH - 1 : 0] mem_odt;output wire mem_ras_n;output wire mem_we_n;output wire mem_reset_n;output wire mem_doff_n;output wire [MEM_IF_CS_WIDTH - 1 : 0] mem_rps_n;output wire [MEM_IF_CS_WIDTH - 1 : 0] mem_wps_n;inout wire [MEM_IF_CLK_PAIR_COUNT - 1 : 0] mem_clk;inout wire [MEM_IF_CLK_PAIR_COUNT - 1 : 0] mem_clk_n;//Bidirectional:inout tri [MEM_IF_DWIDTH - 1 : 0] mem_dq;inout tri [MEM_IF_DQS_WIDTH - 1 : 0] mem_dqs;// Dummy DQSN pin so that all families have the same top level I/O : inout tri [MEM_IF_DQS_WIDTH - 1 : 0] mem_dqsn;output wire resynchronisation_successful;output wire postamble_successful;output wire tracking_successful;output wire tracking_adjustment_up;output wire tracking_adjustment_down;// DLL import/export - UNUSED FOR CIII!:input wire [DQS_DELAY_CTL_WIDTH - 1 : 0 ] dqs_delay_ctrl_import;output wire [DQS_DELAY_CTL_WIDTH - 1 : 0 ] dqs_delay_ctrl_export;output wire dll_reference_clk;// External PLL reconfig inputs - !UNUSED FOR CIII!:input wire pll_reconfig_enable;input wire [3:0] pll_reconfig_counter_type;input wire [2:0] pll_reconfig_counter_param;input wire [8:0] pll_reconfig_data_in;input wire pll_reconfig_read_param;input wire pll_reconfig_write_param;input wire pll_reconfig; // SII outputs only. Tied-off for CIII : output wire pll_reconfig_clk;output wire pll_reconfig_reset;output wire [8:0] pll_reconfig_data_out;output wire pll_reconfig_busy;// Internal signal declarations :// Clocks :// full-rate memory clockwire mem_clk_2x;// write_clk_2x is a full-rate write clock. It is -90 degress aligned to the// system clock :wire write_clk_2x;wire phy_clk_1x_src;wire phy_clk_1x;wire ac_clk_1x;wire ac_clk_2x;wire cs_n_clk_1x;wire cs_n_clk_2x;wire postamble_clk_2x;wire measure_clk_2x;wire resync_clk_2x;wire [MEM_IF_DQS_WIDTH - 1 : 0] resync_clk_1x;// resets, async assert, de-assert is sync'd to each clock domainwire reset_mem_clk_2x_n;wire reset_poa_clk_2x_n;wire reset_write_clk_2x_n;wire reset_phy_clk_1x_n;wire reset_ac_clk_1x_n;wire reset_ac_clk_2x_n;wire reset_cs_n_clk_1x_n;wire reset_cs_n_clk_2x_n;wire reset_measure_clk_2x_n;wire reset_resync_clk_2x_n;// Misc signals :wire phs_shft_busy;// Postamble signals :wire [MEM_IF_POSTAMBLE_EN_WIDTH - 1 : 0] poa_postamble_en_preset_2x;// Sequencer signals :wire seq_mmc_start;wire seq_mux_burstbegin;wire [LOCAL_BURST_LEN_BITS - 1 : 0] seq_mux_size;wire [LOCAL_IF_AWIDTH - 1 : 0] seq_mux_address;wire seq_mux_read_req;wire [LOCAL_IF_DWIDTH - 1 : 0] seq_mux_wdata;wire seq_mux_write_req;wire seq_pll_inc_dec_n;wire seq_pll_start_reconfig;wire [CLOCK_INDEX_WIDTH - 1 : 0] seq_pll_select;wire seq_rdp_dec_read_lat_1x;wire seq_rdp_dmx_swap;wire seq_rdp_inc_read_lat_1x;wire seq_poa_lat_dec_1x;wire seq_poa_lat_inc_1x;wire seq_poa_protection_override_1x;// Mimic signals :wire mmc_seq_done;wire mmc_seq_value;wire mimic_data;wire mux_seq_wdata_req;wire mux_seq_controller_ready;// Read datapath signals :// Connections from the IOE to the read datapath :wire [MEM_IF_DWIDTH - 1 : 0] dio_rdata_h_2x;wire [MEM_IF_DWIDTH - 1 : 0] dio_rdata_l_2x;// Write datapath signals :// wires from the wdp to the dpio :wire [MEM_IF_DM_WIDTH -1 : 0] wdp_dm_h_2x; // dm_h to IOEwire [MEM_IF_DM_WIDTH -1 : 0] wdp_dm_l_2x; // dm_l to IOEwire [MEM_IF_DWIDTH - 1 : 0] wdp_wdata_h_2x; // wdata_h to IOEwire [MEM_IF_DWIDTH - 1 : 0] wdp_wdata_l_2x; // wdata_l to IOEwire [MEM_IF_DWIDTH - 1 : 0] wdp_wdata_oe_2x; // OE to DQ pinwire [(MEM_IF_DQS_WIDTH) - 1 : 0] wdp_wdqs_2x; // DQS to IOEwire [(MEM_IF_DQS_WIDTH) - 1 : 0] wdp_wdqs_oe_2x; // OE to DQS pinwire ctl_add_1t_ac_lat_internal;wire ctl_add_1t_odt_lat_internal;wire ctl_negedge_en_internal;wire ctl_add_intermediate_regs_internal;// continual assignments :assign dll_reference_clk = 1'b0;assign dqs_delay_ctrl_export = {DQS_DELAY_CTL_WIDTH{1'b0}};assign mem_rps_n = {MEM_IF_CS_WIDTH{1'b0}};assign mem_wps_n = {MEM_IF_CS_WIDTH{1'b0}};assign mem_doff_n = 1'b0;assign pll_reconfig_clk = 1'b0;assign pll_reconfig_reset = 1'b0;assign pll_reconfig_data_out = 8'h0;assign pll_reconfig_busy = 1'b0;assign mem_d = {MEM_IF_DWIDTH {1'b0}};assign mem_dqsn = {MEM_IF_DQS_WIDTH{1'bz}};// The top level I/O should not have the "Nx" clock domain suffices, so this is// assigned here. Also note that to avoid delta delay issues both the external and// internal phy_clks are assigned to a common 'src' clock :assign phy_clk = phy_clk_1x_src;assign phy_clk_1x = phy_clk_1x_src;assign reset_phy_clk_n = reset_phy_clk_1x_n;// This are input clocks for SIII - tied-off :assign resync_clk_1x = { MEM_IF_DQS_WIDTH {1'b0} };// The "Negedge enable" control comes either from the top level input, which is// primarily intended for HardCopy users, or from the generic :generate if (ADDR_CMD_NEGEDGE_EN == "EXT_SELECT") assign ctl_negedge_en_internal = ctl_negedge_en; else if (ADDR_CMD_NEGEDGE_EN == "TRUE") assign ctl_negedge_en_internal = 1'b1; else // FALSE assign ctl_negedge_en_internal = 1'b0;endgenerate// The "Add 1T of latency" control comes either from the top level input, which is// primarily intended for HardCopy users, or from the generic :generate if (ADDR_CMD_ADD_1T == "EXT_SELECT") assign ctl_add_1t_ac_lat_internal = ctl_add_1t_ac_lat; else if (ADDR_CMD_ADD_1T == "TRUE") assign ctl_add_1t_ac_lat_internal = 1'b1; else // FALSE assign ctl_add_1t_ac_lat_internal = 1'b0;endgenerate// The "Add 1T of latency" control comes either from the top level input, which is// primarily intended for HardCopy users, or from the generic :generate if (ODT_ADD_1T == "EXT_SELECT") assign ctl_add_1t_odt_lat_internal = ctl_add_1t_odt_lat; else if (ODT_ADD_1T == "TRUE") assign ctl_add_1t_odt_lat_internal = 1'b1; else // FALSE assign ctl_add_1t_odt_lat_internal = 1'b0;endgenerate// The "Add 1T of latency" control comes either from the top level input, which is// primarily intended for HardCopy users, or from the generic :generate if (ADDR_CMD_ADD_INTERMEDIATE_REGS == "EXT_SELECT") assign ctl_add_intermediate_regs_internal = ctl_add_intermediate_regs; else if (ADDR_CMD_ADD_INTERMEDIATE_REGS == "TRUE") assign ctl_add_intermediate_regs_internal = 1'b1; else // FALSE assign ctl_add_intermediate_regs_internal = 1'b0;endgenerate// Instance I/O modules ://altmemddr_phy_alt_mem_phy_dp_io_ciii #( .MEM_IF_CLK_PS (MEM_IF_CLK_PS), .MEM_IF_BANKADDR_WIDTH (MEM_IF_BANKADDR_WIDTH), .MEM_IF_CS_WIDTH (MEM_IF_CS_WIDTH), .MEM_IF_DWIDTH (MEM_IF_DWIDTH), .MEM_IF_DM_WIDTH (MEM_IF_DM_WIDTH), .MEM_IF_DM_PINS_EN (MEM_IF_DM_PINS_EN), .MEM_IF_DQ_PER_DQS (MEM_IF_DQ_PER_DQS), .MEM_IF_DQS_CAPTURE_EN (MEM_IF_DQS_CAPTURE_EN), .MEM_IF_DQS_WIDTH (MEM_IF_DQS_WIDTH), .MEM_IF_POSTAMBLE_EN_WIDTH (MEM_IF_POSTAMBLE_EN_WIDTH), .MEM_IF_ROWADDR_WIDTH (MEM_IF_ROWADDR_WIDTH), .DLL_DELAY_BUFFER_MODE (DLL_DELAY_BUFFER_MODE), .DQS_OUT_MODE (DQS_OUT_MODE), .DQS_PHASE (DQS_PHASE)) dpio ( .reset_resync_clk_2x_n (reset_resync_clk_2x_n), .resync_clk_2x (resync_clk_2x), .mem_clk_2x (mem_clk_2x), .write_clk_2x (write_clk_2x), .mem_dm (mem_dm), .mem_dq (mem_dq), .mem_dqs (mem_dqs),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -