亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ctrl.v

?? DDR2源代碼 DDR2源代碼 DDR2源代碼
?? V
?? 第 1 頁 / 共 3 頁
字號:
       refi_cnt_ok_r <= 1'b1;     else       refi_cnt_ok_r <= 1'b0;  end  // auto refresh interval counter in refresh_clk domain  always @(posedge clk) begin    if ((rst_r1) || (refi_cnt_ok_r))  begin      refi_cnt_r <= 12'd0;    end else begin      refi_cnt_r <= refi_cnt_r + 1;    end  end // always @ (posedge clk)  // auto refresh flag  always @(posedge clk) begin    if (refi_cnt_ok_r) begin      ref_flag_r <= 1'b1;    end else begin      ref_flag_r <= 1'b0;    end  end // always @ (posedge clk)  assign ctrl_ref_flag = ref_flag_r;  //refresh flag detect  //auto_ref high indicates auto_refresh requirement  //auto_ref is held high until auto refresh command is issued.  always @(posedge clk)begin    if (rst_r1)      auto_ref_r <= 1'b0;    else if (ref_flag_r)      auto_ref_r <= 1'b1;    else if (state_r == CTRL_AUTO_REFRESH)      auto_ref_r <= 1'b0;  end  // keep track of which chip selects got auto-refreshed (avoid auto-refreshing  // all CS's at once to avoid current spike)  always @(posedge clk)begin    if (rst_r1 || (state_r1 == CTRL_PRECHARGE))      auto_cnt_r <= 'd0;    else if (state_r == CTRL_AUTO_REFRESH)      auto_cnt_r <= auto_cnt_r + 1;  end  // register for timing purposes. Extra delay doesn't really matter  always @(posedge clk)    phy_init_done_r <= phy_init_done;  always @(posedge clk)begin    if (rst_r1) begin      state_r    <= CTRL_IDLE;      state_r1 <= CTRL_IDLE;    end else begin      state_r    <= next_state;      state_r1 <= state_r;    end  end  //***************************************************************************  // main control state machine  //***************************************************************************  always @(*) begin    next_state = state_r;    (* full_case, parallel_case *) case (state_r)      CTRL_IDLE: begin        // perform auto refresh as soon as we are done with calibration.        // The calibration logic does not do any refreshes.        if (phy_init_done_r)          next_state = CTRL_AUTO_REFRESH;      end      CTRL_PRECHARGE: begin        if (auto_ref_r)          next_state = CTRL_PRECHARGE_WAIT1;        // when precharging an LRU bank, do not have to go to wait state        // since we can't possibly be activating row in same bank next        // disabled for 2t timing. There needs to be a gap between cmds        // in 2t timing        else if (no_precharge_wait_r && !TWO_T_TIME_EN)          next_state = CTRL_ACTIVE;        else          next_state = CTRL_PRECHARGE_WAIT;      end      CTRL_PRECHARGE_WAIT:begin        if (rp_cnt_ok_r)begin          if (auto_ref_r)            // precharge again to make sure we close all the banks            next_state = CTRL_PRECHARGE;          else            next_state = CTRL_ACTIVE;        end      end      CTRL_PRECHARGE_WAIT1:        if (rp_cnt_ok_r)          next_state = CTRL_AUTO_REFRESH;      CTRL_AUTO_REFRESH:        next_state = CTRL_AUTO_REFRESH_WAIT;      CTRL_AUTO_REFRESH_WAIT:      //staggering Auto refresh for multi      // chip select designs. The SM waits      // for the rfc time before issuing the      // next auto refresh.        if (auto_cnt_r < (CS_NUM))begin           if (rfc_ok_r )              next_state = CTRL_AUTO_REFRESH;           end else if (rfc_ok_r)begin              if(auto_ref_r)                next_state = CTRL_AUTO_REFRESH;              else if  ( wr_flag || rd_flag)                next_state = CTRL_ACTIVE;            end      CTRL_ACTIVE:        next_state = CTRL_ACTIVE_WAIT;      CTRL_ACTIVE_WAIT: begin        if (rcd_cnt_ok_r) begin          if ((conflict_detect_r && ~conflict_resolved_r) ||              auto_ref_r) begin            if (no_precharge_r1 && ~auto_ref_r && trrd_cnt_ok_r)              next_state = CTRL_ACTIVE;            else  if(precharge_ok_r)              next_state = CTRL_PRECHARGE;          end else if ((wr_flag_r) && (rd_to_wr_ok_r))            next_state = CTRL_BURST_WRITE;          else if ((rd_flag_r)&& (wr_to_rd_ok_r))            next_state = CTRL_BURST_READ;        end      end      // beginning of write burst      CTRL_BURST_WRITE: begin        if (BURST_LEN_DIV2 == 1) begin          // special case if BL = 2 (i.e. burst lasts only one clk cycle)          if (wr_flag)            // if we have another non-conflict write command right after the            // current write, then stay in this state            next_state = CTRL_BURST_WRITE;          else            // otherwise, if we're done with this burst, and have no write            // immediately scheduled after this one, wait until write-read            // delay has passed            next_state = CTRL_WRITE_WAIT;        end else          // otherwise BL > 2, and we  have at least one more write cycle for          // current burst          next_state = CTRL_WRITE_WAIT;        // continuation of write burst (also covers waiting after write burst        // has completed for write-read delay to pass)      end      CTRL_WRITE_WAIT: begin        if ((conflict_detect) || auto_ref_r) begin          if (no_precharge_r && ~auto_ref_r && wrburst_ok_r)            next_state = CTRL_ACTIVE;          else if (precharge_ok_r)            next_state = CTRL_PRECHARGE;        end else if (wrburst_ok_r && wr_flag)          next_state = CTRL_BURST_WRITE;        else if ((rd_flag) && (wr_to_rd_ok_r))          next_state = CTRL_BURST_READ;      end      CTRL_BURST_READ: begin        if (BURST_LEN_DIV2 == 1) begin          // special case if BL = 2 (i.e. burst lasts only one clk cycle)          if (rd_flag)            next_state = CTRL_BURST_READ;          else            next_state = CTRL_READ_WAIT;        end else          next_state = CTRL_READ_WAIT;      end      CTRL_READ_WAIT: begin        if ((conflict_detect) || auto_ref_r)begin          if (no_precharge_r && ~auto_ref_r && rdburst_ok_r)            next_state = CTRL_ACTIVE;          else if (precharge_ok_r)            next_state = CTRL_PRECHARGE;        end else if (rdburst_ok_r  && rd_flag)          next_state = CTRL_BURST_READ;        else if (wr_flag && (rd_to_wr_ok_r))          next_state = CTRL_BURST_WRITE;      end    endcase  end  //***************************************************************************  // control signals to memory  //***************************************************************************  always @(posedge clk) begin     if ((state_r == CTRL_AUTO_REFRESH) ||         (state_r == CTRL_ACTIVE) ||         (state_r == CTRL_PRECHARGE)) begin       ddr_ras_n_r <= 1'b0;       two_t_enable_r[0] <= 1'b0;     end else begin       if (TWO_T_TIME_EN)         ddr_ras_n_r <= two_t_enable_r[0] ;       else         ddr_ras_n_r <= 1'd1;       two_t_enable_r[0] <= 1'b1;     end  end  always @(posedge clk)begin    if ((state_r == CTRL_BURST_WRITE) ||        (state_r == CTRL_BURST_READ) ||        (state_r == CTRL_AUTO_REFRESH)) begin      ddr_cas_n_r <= 1'b0;      two_t_enable_r[1] <= 1'b0;    end else begin      if (TWO_T_TIME_EN)        ddr_cas_n_r <= two_t_enable_r[1];      else        ddr_cas_n_r <= 1'b1;      two_t_enable_r[1] <= 1'b1;    end  end  always @(posedge clk) begin    if ((state_r == CTRL_BURST_WRITE) ||        (state_r == CTRL_PRECHARGE)) begin      ddr_we_n_r <= 1'b0;      two_t_enable_r[2] <= 1'b0;    end else begin      if(TWO_T_TIME_EN)        ddr_we_n_r <= two_t_enable_r[2];      else        ddr_we_n_r <= 1'b1;      two_t_enable_r[2] <= 1'b1;    end  end  // turn off auto-precharge when issuing commands (A10 = 0)  // mapping the col add for linear addressing.  generate    if (TWO_T_TIME_EN) begin: gen_addr_col_two_t      if (COL_WIDTH == ROW_WIDTH-1) begin: gen_ddr_addr_col_0        assign ddr_addr_col = {af_addr_r3[COL_WIDTH-1:10], 1'b0,                               af_addr_r3[9:0]};      end else begin        if (COL_WIDTH > 10) begin: gen_ddr_addr_col_1          assign ddr_addr_col = {{(ROW_WIDTH-COL_WIDTH-1){1'b0}},                                 af_addr_r3[COL_WIDTH-1:10], 1'b0,                                 af_addr_r3[9:0]};        end else begin: gen_ddr_addr_col_2          assign ddr_addr_col = {{(ROW_WIDTH-COL_WIDTH-1){1'b0}}, 1'b0,                               af_addr_r3[COL_WIDTH-1:0]};        end      end    end else begin: gen_addr_col_one_t      if (COL_WIDTH == ROW_WIDTH-1) begin: gen_ddr_addr_col_0_1        assign ddr_addr_col = {af_addr_r2[COL_WIDTH-1:10], 1'b0,                               af_addr_r2[9:0]};      end else begin        if (COL_WIDTH > 10) begin: gen_ddr_addr_col_1_1          assign ddr_addr_col = {{(ROW_WIDTH-COL_WIDTH-1){1'b0}},                                 af_addr_r2[COL_WIDTH-1:10], 1'b0,                                 af_addr_r2[9:0]};        end else begin: gen_ddr_addr_col_2_1          assign ddr_addr_col = {{(ROW_WIDTH-COL_WIDTH-1){1'b0}}, 1'b0,                                 af_addr_r2[COL_WIDTH-1:0]};        end      end    end  endgenerate  // Assign address during row activate  generate    if (TWO_T_TIME_EN)      assign ddr_addr_row = af_addr_r3[ROW_RANGE_END:ROW_RANGE_START];    else      assign ddr_addr_row = af_addr_r2[ROW_RANGE_END:ROW_RANGE_START];  endgenerate  always @(posedge clk)begin    if ((state_r == CTRL_ACTIVE) ||        ((state_r1 == CTRL_ACTIVE) && TWO_T_TIME_EN))      ddr_addr_r <= ddr_addr_row;    else if ((state_r == CTRL_BURST_WRITE) ||             (state_r == CTRL_BURST_READ)  ||             (((state_r1 == CTRL_BURST_WRITE) ||               (state_r1 == CTRL_BURST_READ)) &&              TWO_T_TIME_EN))      ddr_addr_r <= ddr_addr_col;    else if (((state_r == CTRL_PRECHARGE)  ||              ((state_r1 == CTRL_PRECHARGE) && TWO_T_TIME_EN))             && auto_ref_r) begin      // if we're precharging as a result of AUTO-REFRESH, precharge all banks      ddr_addr_r <= {ROW_WIDTH{1'b0}};      ddr_addr_r[10] <= 1'b1;    end else if ((state_r == CTRL_PRECHARGE) ||                 ((state_r1 == CTRL_PRECHARGE) && TWO_T_TIME_EN))      // if we're precharging to close a specific bank/row, set A10=0      ddr_addr_r <= {ROW_WIDTH{1'b0}};    else      ddr_addr_r <= {ROW_WIDTH{1'bx}};  end  always @(posedge clk)begin    // whenever we're precharging, we're either: (1) precharging all banks (in    // which case banks bits are don't care, (2) precharging the LRU bank,    // b/c we've exceeded the limit of # of banks open (need to close the LRU    // bank to make room for a new one), (3) we haven't exceed the maximum #    // of banks open, but we trying to open a different row in a bank that's    // already open    if (((state_r == CTRL_PRECHARGE)  ||         ((state_r1 == CTRL_PRECHARGE) && TWO_T_TIME_EN)) &&        bank_conflict_r && MULTI_BANK_EN)      // When LRU bank needs to be closed      ddr_ba_r <= bank_cmp_addr_r[(3*CMP_WIDTH)+CMP_BANK_RANGE_END:                                  (3*CMP_WIDTH)+CMP_BANK_RANGE_START];    else begin      // Either precharge due to refresh or bank hit case      if (TWO_T_TIME_EN)        ddr_ba_r <= af_addr_r3[BANK_RANGE_END:BANK_RANGE_START];      else        ddr_ba_r <= af_addr_r2[BANK_RANGE_END:BANK_RANGE_START];    end  end  // chip enable generation logic  generate    // if only one chip select, always assert it after reset    if (CS_BITS == 0) begin: gen_ddr_cs_0      always @(posedge clk)        if (rst_r1)          ddr_cs_n_r[0] <= 1'b1;        else          ddr_cs_n_r[0] <= 1'b0;    // otherwise if we have multiple chip selects    end else begin: gen_ddr_cs_1      always @(posedge clk)        if (rst_r1)          ddr_cs_n_r <= {CS_NUM{1'b1}};        else if (state_r == CTRL_AUTO_REFRESH) begin          // if auto-refreshing, only auto-refresh one CS at any time (avoid          // beating on the ground plane by refreshing all CS's at same time)          ddr_cs_n_r <= {CS_NUM{1'b1}};          ddr_cs_n_r[auto_cnt_r] <= 1'b0;        end else if ((state_r == CTRL_PRECHARGE) && bank_conflict_r &&                     MULTI_BANK_EN) begin          // precharging the LRU bank          ddr_cs_n_r <= {CS_NUM{1'b1}};          ddr_cs_n_r[bank_cmp_addr_r[(3*CMP_WIDTH)+CMP_CS_RANGE_END:                                     (3*CMP_WIDTH)+CMP_CS_RANGE_START]]            <= 1'b0;        end else begin          // otherwise, check the upper address bits to see which CS to assert          ddr_cs_n_r <= {CS_NUM{1'b1}};          ddr_cs_n_r <= af_addr_r2[CS_RANGE_END:CS_RANGE_START];        end    end  endgenerate  // registring the two_t timing enable signal.  // This signal will be asserted (low) when the  // chip select has to be asserted.  always @(posedge clk)begin     if(&two_t_enable_r)        two_t_enable_r1 <= {CS_NUM{1'b1}};     else        two_t_enable_r1 <= {CS_NUM{1'b0}};  end  assign ctrl_addr  = ddr_addr_r;  assign ctrl_ba    = ddr_ba_r;  assign ctrl_ras_n = ddr_ras_n_r;  assign ctrl_cas_n = ddr_cas_n_r;  assign ctrl_we_n  = ddr_we_n_r;  assign ctrl_cs_n  = (TWO_T_TIME_EN) ?                      (ddr_cs_n_r | two_t_enable_r1) :                      ddr_cs_n_r;endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久66| 久久色在线观看| 日韩视频在线观看一区二区| 国产亚洲欧美激情| 一区二区三区加勒比av| 玖玖九九国产精品| 一本久道久久综合中文字幕| 精品国产乱码久久久久久闺蜜| 成人欧美一区二区三区视频网页| 轻轻草成人在线| 99re成人精品视频| 精品国产91乱码一区二区三区| 亚洲欧美另类小说视频| 国产精品一二三区| 欧美狂野另类xxxxoooo| 中文字幕一区二区三区精华液| 久久精品国产99久久6| 色av一区二区| 国产精品的网站| 精油按摩中文字幕久久| 7777精品伊人久久久大香线蕉完整版 | 麻豆一区二区三| 色悠久久久久综合欧美99| 久久久国产精华| 麻豆一区二区三区| 欧美一区二区三区四区视频| 亚洲一卡二卡三卡四卡无卡久久| 成人av午夜电影| 欧美国产1区2区| 国产成人午夜视频| 亚洲男同1069视频| 国产a区久久久| 久久综合九色综合97婷婷女人| 国产日韩欧美精品一区| 丝袜a∨在线一区二区三区不卡| 91免费版在线看| 亚洲欧美另类久久久精品2019| 成人免费毛片嘿嘿连载视频| 日韩理论在线观看| 亚洲五月六月丁香激情| 欧美少妇性性性| 激情综合色综合久久| 一区二区三区资源| 久久久久久毛片| 欧美色视频在线| 丰满少妇在线播放bd日韩电影| 亚洲国产精品嫩草影院| 国产精品区一区二区三区| 欧美精品99久久久**| 99久久综合狠狠综合久久| 麻豆91在线播放免费| 亚洲一区视频在线| 亚洲国产成人自拍| 欧美成人r级一区二区三区| 色综合久久久久| 国产成人日日夜夜| 日韩成人午夜精品| 一区二区三区四区不卡在线| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美日韩一区二区三区免费看| 国产999精品久久| 久久成人18免费观看| 五月天亚洲精品| 亚洲女同一区二区| 国产精品久久看| 国产精品沙发午睡系列990531| 日韩精品一区二区三区四区视频| 精品婷婷伊人一区三区三| 91色porny蝌蚪| 粉嫩高潮美女一区二区三区 | 免费在线欧美视频| 一区二区在线看| 亚洲四区在线观看| 国产精品视频看| 国产精品女主播av| 中文字幕精品一区| 欧美—级在线免费片| 久久久久久99久久久精品网站| 日韩欧美国产成人一区二区| 欧美日本一区二区三区四区| 欧美视频一区在线观看| 91福利视频网站| 在线观看日韩av先锋影音电影院| 91在线观看视频| 色综合天天性综合| 色悠久久久久综合欧美99| 一本到三区不卡视频| 在线亚洲人成电影网站色www| 不卡在线观看av| 91蜜桃免费观看视频| 色中色一区二区| 欧美日韩免费观看一区二区三区 | 风间由美一区二区三区在线观看 | 欧美裸体一区二区三区| 欧美视频中文字幕| 欧美日本一道本| 日韩欧美国产麻豆| 精品国产乱码久久久久久免费| 精品va天堂亚洲国产| 国产日韩欧美精品一区| 亚洲婷婷在线视频| 亚洲成人激情av| 久久精工是国产品牌吗| 国产一区二区三区最好精华液| 国产成人av电影在线观看| 粗大黑人巨茎大战欧美成人| 一本高清dvd不卡在线观看 | 久久99久久99小草精品免视看| 蜜臀久久99精品久久久画质超高清 | 欧美在线观看一二区| 国产精品欧美经典| 尤物av一区二区| 日韩高清国产一区在线| 国产美女精品人人做人人爽 | 国产a级毛片一区| 色婷婷综合在线| 56国语精品自产拍在线观看| 久久综合九色欧美综合狠狠| 亚洲欧洲成人精品av97| 亚瑟在线精品视频| 国产精品一级片| 欧美亚洲国产一区二区三区| 精品久久人人做人人爰| 国产精品每日更新| 午夜精品福利视频网站| 国产suv精品一区二区三区| 在线中文字幕不卡| 欧美精品一区在线观看| 亚洲一区二区三区在线播放| 卡一卡二国产精品 | 欧美激情一区二区三区在线| 亚洲综合999| 国产成人在线视频网站| 欧美日韩国产电影| 国产精品人人做人人爽人人添| 视频一区欧美日韩| 97久久久精品综合88久久| 日韩欧美国产一区二区三区 | 日韩—二三区免费观看av| 国产成人精品午夜视频免费| 欧美日本在线看| 亚洲欧美欧美一区二区三区| 激情综合网激情| 91精品国产欧美一区二区| 亚洲欧美综合另类在线卡通| 久久国产三级精品| 欧美三级视频在线观看| 国产精品亲子乱子伦xxxx裸| 七七婷婷婷婷精品国产| 色哟哟亚洲精品| 国产精品免费丝袜| 国产一区二区免费视频| 欧美精品1区2区3区| 亚洲激情图片qvod| 懂色av一区二区三区免费观看| 国产精品美女久久久久aⅴ| 国产在线看一区| 91精品综合久久久久久| 亚洲午夜国产一区99re久久| av在线免费不卡| 国产精品久久久久久久裸模| 国产精品一区二区91| 精品成人免费观看| 久久99精品久久久久久久久久久久| 69堂成人精品免费视频| 午夜天堂影视香蕉久久| 欧美四级电影在线观看| 亚洲一区二区高清| 欧美日韩一区二区三区四区五区| 亚洲天堂网中文字| 色综合久久88色综合天天| 亚洲乱码国产乱码精品精小说| 成人开心网精品视频| 国产精品久久久久三级| 成人午夜免费视频| 中文字幕欧美一区| 91麻豆免费看片| 夜夜嗨av一区二区三区网页| 色94色欧美sute亚洲线路二| 亚洲激情成人在线| 在线一区二区观看| 亚洲国产精品嫩草影院| 欧美日精品一区视频| 日本v片在线高清不卡在线观看| 欧美裸体一区二区三区| 美女免费视频一区| 久久九九久久九九| 成人黄色片在线观看| 亚洲精品ww久久久久久p站| 欧美在线免费播放| 日韩电影一区二区三区四区| 精品国产免费视频| 国产精品亚洲成人| 中文字幕在线不卡| 欧洲在线/亚洲| 视频在线在亚洲| 久久伊人中文字幕| 成人av小说网| 五月开心婷婷久久| 精品福利在线导航|