altmemddr_phy_alt_mem_phy_sequencer_wrapper.v

来自「nios里面用自定义指令集来实现三角函数」· Verilog 代码 · 共 294 行

V
294
字号
//`ifdef ALT_MEM_PHY_DEFINES`else`include "alt_mem_phy_defines.v"`endif//module altmemddr_phy_alt_mem_phy_sequencer_wrapper (                                       seq_clk,                                       reset_seq_n,                                       ctl_doing_rd,                                       ctl_mem_rdata,                                       ctl_mem_rdata_valid,                                       ctl_init_done,                                       ctl_usr_mode_rdy,                                       mmc_seq_done,                                       mmc_seq_value,                                       mux_seq_controller_ready,                                       mux_seq_wdata_req,                                       phs_shft_busy,                                       resync_clk_index,                                       measure_clk_index,                                       seq_mux_burstbegin,                                       seq_mux_size,                                       seq_mux_address,                                       seq_mux_read_req,                                       seq_mux_wdata,                                       seq_mux_write_req,                                       seq_pll_inc_dec_n,                                       seq_pll_start_reconfig,                                       seq_pll_select,                                       seq_rdp_dec_read_lat_1x,                                       seq_rdp_dmx_swap,                                       seq_rdp_inc_read_lat_1x,                                       seq_poa_lat_dec_1x,                                       seq_poa_lat_inc_1x,                                       seq_poa_protection_override_1x,                                       seq_mmc_start,                                       resynchronisation_successful,                                       postamble_successful,                                       tracking_successful,                                       tracking_adjustment_up,                                       tracking_adjustment_down                                      );//Inserted Generics
  localparam FAMILY                             = "Cyclone III";
  localparam CLOCK_INDEX_WIDTH                  = 3;
  localparam DWIDTH_RATIO                       = 2;
  localparam LOCAL_IF_BURST_LENGTH              = 1;
  localparam LOCAL_BURST_LEN_BITS               = 1;
  localparam LOCAL_IF_DWIDTH                    = 32;
  localparam LOCAL_IF_AWIDTH                    = 23;
  localparam [39 : 0] LOCAL_IF_TYPE_AVALON_STR           = "true";
  localparam PLL_STEPS_PER_CYCLE                = 80;
  localparam READ_LAT_WIDTH                     = 6;
  localparam TRAINING_DATA_WIDTH                = 32;
  localparam RESYNC_CALIBRATION_AND_SETUP_EN    = 1;
  localparam POSTAMBLE_CALIBRATION_AND_SETUP_EN = 0;
  localparam MIMIC_PATH_TRACKING_EN             = 1;
  localparam RESYNC_CALIBRATE_ONLY_ONE_BIT_EN   = 0;
  localparam ENABLE_DEBUG                       = 0;
input wire                                  seq_clk;input wire                                  reset_seq_n;input wire                                  ctl_doing_rd;// The read data here has come from the read dp moduleinput wire [LOCAL_IF_DWIDTH - 1 : 0]        ctl_mem_rdata;output wire                                 ctl_mem_rdata_valid;input wire                                  ctl_init_done;output wire                                 ctl_usr_mode_rdy;input wire                                  mmc_seq_done;input wire                                  mmc_seq_value;input wire                                  mux_seq_controller_ready;input wire                                  mux_seq_wdata_req;input wire                                  phs_shft_busy;input wire  [CLOCK_INDEX_WIDTH - 1 : 0]     resync_clk_index;input wire  [CLOCK_INDEX_WIDTH - 1 : 0]     measure_clk_index;output wire                                 seq_mux_burstbegin;output wire [LOCAL_BURST_LEN_BITS - 1 : 0]  seq_mux_size;output wire [LOCAL_IF_AWIDTH - 1 : 0]       seq_mux_address;output wire                                 seq_mux_read_req;output wire [LOCAL_IF_DWIDTH - 1 : 0]       seq_mux_wdata;output wire                                 seq_mux_write_req;output wire                                 seq_pll_inc_dec_n;output wire                                 seq_pll_start_reconfig;output wire [CLOCK_INDEX_WIDTH - 1 : 0]     seq_pll_select;output wire                                 seq_rdp_dec_read_lat_1x;output wire                                 seq_rdp_dmx_swap;output wire                                 seq_rdp_inc_read_lat_1x;output wire                                 seq_poa_lat_dec_1x;output wire                                 seq_poa_lat_inc_1x;output wire                                 seq_poa_protection_override_1x;output wire                                 seq_mmc_start;output wire                                 resynchronisation_successful;output wire                                 postamble_successful;output wire                                 tracking_successful;output wire                                 tracking_adjustment_up;output wire                                 tracking_adjustment_down;wire                                        training_data_write_successful;wire                                        phs_shft_busy_for_seq;wire                                        ctl_init_done_for_seq;reg [1:0]                                   seq_startup_state;reg                                         enable_sequencer;reg                                         phs_shft_busy_ams;`define SEQ_STARTUP_IDLE                    2'h0`define SEQ_STARTUP_WAIT_PHS_SHFT_LOW       2'h1`define SEQ_STARTUP_GO                      2'h2// The FSM ensures the sequencer operates when both the controller and the PLL reconfig// block are ready :generate    if (FAMILY == "Stratix III" || FAMILY == "Cyclone III")    begin : gen_no_seq_fsm        assign phs_shft_busy_for_seq = phs_shft_busy;        assign ctl_init_done_for_seq = ctl_init_done;    end        else    begin : gen_seq_fsm            assign phs_shft_busy_for_seq = enable_sequencer && phs_shft_busy;        assign ctl_init_done_for_seq = enable_sequencer && ctl_init_done;                                always @(posedge seq_clk or negedge reset_seq_n)        begin                    if (reset_seq_n == 1'b0)            begin                seq_startup_state <= `SEQ_STARTUP_IDLE;                enable_sequencer  <= 1'b0;                phs_shft_busy_ams <= 1'b1;            end                        else            begin                            // Metastability protection on the phs_shft_busy input :                phs_shft_busy_ams <= phs_shft_busy;                                casez (seq_startup_state)                                 `SEQ_STARTUP_IDLE :                begin                                    if (ctl_init_done == 1'b1)                    begin                                                        if (phs_shft_busy_ams == 1'b1)                        begin                                            seq_startup_state <= `SEQ_STARTUP_WAIT_PHS_SHFT_LOW;                                            end                        else                        begin                            seq_startup_state <= `SEQ_STARTUP_GO;                                                            end                                            end                                        else                    begin                                    seq_startup_state <= `SEQ_STARTUP_IDLE;                                                                   end                                    end                                `SEQ_STARTUP_WAIT_PHS_SHFT_LOW :                begin                                    if (phs_shft_busy_ams == 1'b1)                    begin                                        seq_startup_state <= `SEQ_STARTUP_WAIT_PHS_SHFT_LOW;                                        end                    else                    begin                        seq_startup_state <= `SEQ_STARTUP_GO;                                                        end                                end                                        `SEQ_STARTUP_GO :                begin                    seq_startup_state <= `SEQ_STARTUP_GO;                                                                   enable_sequencer  <= 1'b1;                end                                default :                begin                    seq_startup_state <= `SEQ_STARTUP_IDLE;                    enable_sequencer <= 1'b0;                        end                                endcase                    end // not reset               end // always    end // gen_seq_fsm    endgenerate    //#pb_prefix ("sequencer")alt_mem_phy_sequencer # (    .DATA_WIDTH_RATIO                                   (DWIDTH_RATIO),    .PLL_PHASES                                         (PLL_STEPS_PER_CYCLE),    .TRAINING_DATA_WIDTH                                (TRAINING_DATA_WIDTH),    .LATENCY_COUNTER_WIDTH                              (READ_LAT_WIDTH),    .MEMORY_CONTROLLER_AVALON_INTERFACE                 (LOCAL_IF_TYPE_AVALON_STR),    .MEMORY_CONTROLLER_MAXIMUM_BURST_LENGTH             (LOCAL_IF_BURST_LENGTH),    .MEMORY_CONTROLLER_MAXIMUM_BURST_LENGTH_WIDTH       (LOCAL_BURST_LEN_BITS),    .MEMORY_CONTROLLER_ADDRESS_WIDTH                    (LOCAL_IF_AWIDTH),    .MEMORY_CONTROLLER_DATA_WIDTH                       (LOCAL_IF_DWIDTH),    .CLOCK_INDEX_WIDTH                                  (CLOCK_INDEX_WIDTH),    .CLOCK_CYCLES_BETWEEN_MEASURE_CLOCK_PHASE_DETECTION (20000000),    .METASTABILITY_GUARD_REGISTERS                      (2),    .ENABLE_RESYNCHRONISATION_CALIBRATION_AND_SETUP     (RESYNC_CALIBRATION_AND_SETUP_EN),    .ENABLE_ONE_BIT_RESYNCHRONISATION_CALIBRATION       (RESYNC_CALIBRATE_ONLY_ONE_BIT_EN),    .ENABLE_POSTAMBLE_CALIBRATION_AND_SETUP             (POSTAMBLE_CALIBRATION_AND_SETUP_EN),    .ENABLE_TRACKING                                    (MIMIC_PATH_TRACKING_EN),    .ENABLE_INTERNAL_RAM_POWER_UP_INITIALISATION        (0),    .ENABLE_DEBUGGING_INFORMATION                       (ENABLE_DEBUG)//#pb_prefix ("sequencer")) alt_mem_phy_sequencer_inst (    .clock                                              (seq_clk),    .asynchronous_reset                                 (reset_seq_n),    .calibrate_and_setup_physical_interface             (ctl_init_done_for_seq),    .memory_controller_ready                            (mux_seq_controller_ready),    .memory_controller_write_data_request               (mux_seq_wdata_req),    .memory_controller_read_data                        (ctl_mem_rdata),    .memory_controller_read_command_issued              (ctl_doing_rd),    .resynchronisation_clock_index                      (resync_clk_index),    .measure_clock_index                                (measure_clk_index),    .pll_reconfiguring                                  (phs_shft_busy_for_seq),    .mimic_path_sample_valid                            (mmc_seq_done),    .mimic_path_sample                                  (mmc_seq_value),                                                          .memory_controller_write_request                    (seq_mux_write_req),    .memory_controller_read_request                     (seq_mux_read_req),    .memory_controller_write_data                       (seq_mux_wdata),    .memory_controller_address                          (seq_mux_address),    .memory_controller_burst_begin                      (seq_mux_burstbegin),    .memory_controller_burst_length                     (seq_mux_size),    .pll_reconfigure_request                            (seq_pll_start_reconfig),    .pll_reconfigure_clock_index                        (seq_pll_select),    .pll_reconfigure_direction                          (seq_pll_inc_dec_n),    .dqs_enable_set                                     (seq_poa_protection_override_1x),    .dqs_enable_latency_decrement                       (seq_poa_lat_dec_1x),    .dqs_enable_latency_increment                       (seq_poa_lat_inc_1x),    .mimic_path_sample_request                          (seq_mmc_start),    .training_data_write_successful                     (training_data_write_successful),    .resynchronisation_calibration_successful           (resynchronisation_successful),    .postamble_calibration_successful                   (postamble_successful),    .resynchronisation_clock_phase_incremented          (tracking_adjustment_up),    .resynchronisation_clock_phase_decremented          (tracking_adjustment_down),    .physical_interface_calibrated_and_setup            (ctl_usr_mode_rdy),    .memory_controller_read_data_valid                  (ctl_mem_rdata_valid));assign seq_rdp_dmx_swap         = 1'b0;assign seq_rdp_inc_read_lat_1x  = 1'b0;assign seq_rdp_dec_read_lat_1x  = 1'b0;assign tracking_successful = training_data_write_successful && postamble_successful && resynchronisation_successful && ctl_usr_mode_rdy;    endmodule

⌨️ 快捷键说明

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