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

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

?? ctrl.v

?? DDR2源代碼 DDR2源代碼 DDR2源代碼
?? V
?? 第 1 頁 / 共 3 頁
字號:
  // register stage. The data is fetched from the second  // register stage whenever the state machine can accept new  // addr. The conflict flags are also generated based on the  // second register stage and updated when the new address  // is loaded for the state machine.  always@(posedge clk) begin    if (rst_r1)begin      af_valid_r2 <= 1'd0;      af_addr_r2 <= {31{1'bx}};      af_cmd_r2 <= {3{1'bx}};      bank_hit_r <= {OPEN_BANK_NUM{1'bx}};      bank_conflict_r <= 1'bx;      row_conflict_r <= 4'bx;    end else if(sm_rden || ~af_valid_r2)begin      af_valid_r2 <= af_valid_r1;      af_addr_r2 <= af_addr_r1;      af_cmd_r2 <= af_cmd_r1;      if(MULTI_BANK_EN)begin        bank_hit_r <= bank_hit;        row_conflict_r <= row_miss;        bank_conflict_r <= (~(|bank_hit));      end else begin        bank_hit_r <= {OPEN_BANK_NUM{1'b0}};        bank_conflict_r <= 1'd0;        row_conflict_r[0] <= (af_addr_r1[CS_RANGE_END:ROW_RANGE_START]                              != sb_open_add_r[CMP_WIDTH-1:0]);      end    end  end  assign conflict_detect = (MULTI_BANK_EN) ?                           ((|(row_conflict_r[3:0] & bank_hit_r[3:0]))                            | bank_conflict_r) & af_valid_r2 :                           row_conflict_r[0] & af_valid_r2;  always @(posedge clk) begin    conflict_detect_r <= conflict_detect;    sm_rden_r <= sm_rden;    af_addr_r3 <= af_addr_r2;    ctrl_af_rden_r <= ctrl_af_rden & ~af_empty;  end  // conflict resolved signal. When this signal is asserted  // the conflict is resolved. The address to be compared  // for the conflict_resolved_r will be stored in act_add_r  // when the bank is opened.  always @(posedge clk) begin   conflict_resolved_r <= (act_addr_r ==                           af_addr_r2[CS_RANGE_END:ROW_RANGE_START]);    if((state_r == CTRL_ACTIVE))      act_addr_r <= af_addr_r2[CS_RANGE_END:ROW_RANGE_START];  end  //***************************************************************************  // Bank management logic  // Semi-hardcoded for now for 4 banks  // will keep multiple banks open if MULTI_BANK_EN is true.  //***************************************************************************  genvar bank_i;  generate // if multiple bank option chosen    if(MULTI_BANK_EN) begin: gen_multi_bank_open      for (bank_i = 0; bank_i < OPEN_BANK_NUM;           bank_i = bank_i + 1) begin: gen_bank_hit1        // asserted if bank address match + open bank entry is valid        always @(*) begin          bank_hit[bank_i]            = ((bank_cmp_addr_r[(CMP_WIDTH*(bank_i+1))-1:                                (CMP_WIDTH*bank_i)+ROW_WIDTH] ==                af_addr_r1[CS_RANGE_END:BANK_RANGE_START]) &&               bank_valid_r[bank_i]);          // asserted if row address match (no check for bank entry valid, rely          // on this term to be used in conjunction with BANK_HIT[])          row_miss[bank_i]            = (bank_cmp_addr_r[(CMP_WIDTH*bank_i)+ROW_WIDTH-1:                               (CMP_WIDTH*bank_i)] !=               af_addr_r1[ROW_RANGE_END:ROW_RANGE_START]);        end      end      always @(posedge clk) begin        no_precharge_wait_r  <= bank_valid_r[3] & bank_conflict_r;        bank_hit_r1 <= bank_hit_r;      end      always@(*)        no_precharge_r = ~bank_valid_r[3] & bank_conflict_r;      always@(posedge clk)        no_precharge_r1 <= no_precharge_r;      always @(posedge clk) begin        // Clear all bank valid bits during AR (i.e. since all banks get        // precharged during auto-refresh)        if ((state_r1 == CTRL_AUTO_REFRESH)) begin          bank_valid_r    <= {(OPEN_BANK_NUM-1){1'b0}};          bank_cmp_addr_r <= {(OPEN_BANK_NUM*CMP_WIDTH-1){1'b0}};        end else begin          if (state_r1 == CTRL_ACTIVE) begin            // 00 is always going to have the latest bank and row.            bank_cmp_addr_r[CMP_WIDTH-1:0]              <= af_addr_r3[CS_RANGE_END:ROW_RANGE_START];            // This indicates the bank was activated            bank_valid_r[0] <= 1'b1;            case ({bank_hit_r1[2:0]})              3'b001: begin                bank_cmp_addr_r[CMP_WIDTH-1:0]                  <= af_addr_r3[CS_RANGE_END:ROW_RANGE_START];                // This indicates the bank was activated                bank_valid_r[0] <= 1'b1;              end              3'b010: begin //(b0->b1)                bank_cmp_addr_r[(2*CMP_WIDTH)-1:CMP_WIDTH]                  <= bank_cmp_addr_r[CMP_WIDTH-1:0];                bank_valid_r[1] <= bank_valid_r[0];              end              3'b100:begin //(b0->b1, b1->b2)                bank_cmp_addr_r[(2*CMP_WIDTH)-1:CMP_WIDTH]                  <= bank_cmp_addr_r[CMP_WIDTH-1:0];                bank_cmp_addr_r[(3*CMP_WIDTH)-1:2*CMP_WIDTH]                  <= bank_cmp_addr_r[(2*CMP_WIDTH)-1:CMP_WIDTH];                bank_valid_r[1] <= bank_valid_r[0];                bank_valid_r[2] <= bank_valid_r[1];              end              default: begin //(b0->b1, b1->b2, b2->b3)                bank_cmp_addr_r[(2*CMP_WIDTH)-1:CMP_WIDTH]                  <= bank_cmp_addr_r[CMP_WIDTH-1:0];                bank_cmp_addr_r[(3*CMP_WIDTH)-1:2*CMP_WIDTH]                  <= bank_cmp_addr_r[(2*CMP_WIDTH)-1:CMP_WIDTH];                bank_cmp_addr_r[(4*CMP_WIDTH)-1:3*CMP_WIDTH]                  <= bank_cmp_addr_r[(3*CMP_WIDTH)-1:2*CMP_WIDTH];                bank_valid_r[1] <= bank_valid_r[0];                bank_valid_r[2] <= bank_valid_r[1];                bank_valid_r[3] <= bank_valid_r[2];              end            endcase          end        end      end    end else begin: gen_single_bank_open // single bank option      always @(posedge clk) begin        no_precharge_r       <= 1'd0;        no_precharge_r1      <= 1'd0;        no_precharge_wait_r  <= 1'd0;        if (rst_r1)          sb_open_add_r <= {CMP_WIDTH{1'b0}};        else if (state_r == CTRL_ACTIVE)          sb_open_add_r <= af_addr_r2[CS_RANGE_END:ROW_RANGE_START];      end    end  endgenerate  //***************************************************************************  // Timing counters  //***************************************************************************  //*****************************************************************  // Write and read enable generation for PHY  //*****************************************************************  // write burst count. Counts from (BL/2 to 1).  // Also logic for controller write enable.  always @(posedge clk) begin    if (state_r == CTRL_BURST_WRITE) begin      wrburst_cnt_r <= BURST_LEN_DIV2;    end else if (wrburst_cnt_r >= 3'd1)      wrburst_cnt_r <= wrburst_cnt_r - 1;  end // always @ (posedge clk)  always @(posedge clk) begin    if (rst_r1) begin      ctrl_wren   <= 1'b0;    end else if (state_r == CTRL_BURST_WRITE) begin      ctrl_wren   <= 1'b1;    end else if (wrburst_wren_ok_r)      ctrl_wren   <= 1'b0;  end  always @(posedge clk) begin    if ((state_r == CTRL_BURST_WRITE)        && (BURST_LEN_DIV2 > 2))      wrburst_ok_r <= 1'd0;    else if ((wrburst_cnt_r <= 3'd3) ||             (BURST_LEN_DIV2 <= 2))      wrburst_ok_r <= 1'b1;  end  // flag to check when wrburst count has reached  // a value of 1. This flag is used in the ctrl_wren  // logic  always @(posedge clk) begin     if(wrburst_cnt_r == 3'd2)       wrburst_wren_ok_r <=1'b1;     else       wrburst_wren_ok_r <= 1'b0;  end  // read burst count. Counts from (BL/2 to 1)  always @(posedge clk) begin   if (state_r == CTRL_BURST_READ) begin      rdburst_cnt_r <= BURST_LEN_DIV2;    end else if (rdburst_cnt_r >= 3'd1)      rdburst_cnt_r <= rdburst_cnt_r - 1;  end // always @ (posedge clk)   always @(posedge clk) begin    if (rst_r1) begin      ctrl_rden   <= 1'b0;    end else if (state_r == CTRL_BURST_READ) begin      ctrl_rden   <= 1'b1;    end else if (rdburst_rden_ok_r)      ctrl_rden   <= 1'b0;   end  always @(posedge clk) begin    if ((state_r == CTRL_BURST_READ)        && (BURST_LEN_DIV2 > 2))      rdburst_ok_r <= 1'd0;    else if ((rdburst_cnt_r <= 3'd3) ||             (BURST_LEN_DIV2 <= 2))      rdburst_ok_r <= 1'b1;  end  // flag to check when rdburst count has reached  // a value of 1. This flag is used in the ctrl_rden  // logic  always @(posedge clk) begin     if (rdburst_cnt_r == 3'd2)       rdburst_rden_ok_r <= 1'b1;     else       rdburst_rden_ok_r <= 1'b0;  end  //*****************************************************************  // Various delay counters  // The counters are checked for value of <= 3 to determine the  // if the count values are reached during different commands.  // It is checked for 3 because  // 1. The counters are loaded during the state when the command  //    state is reached (+1)  // 2. After the <= 3 condition is reached the sm takes two cycles  //    to transition to the new command state (+2)  //*****************************************************************  // tRP count - precharge command period  always @(posedge clk) begin    if (state_r == CTRL_PRECHARGE)      rp_cnt_r <= TRP_COUNT;    else if (rp_cnt_r != 4'd0)      rp_cnt_r <= rp_cnt_r - 1;  end  always @(posedge clk) begin    if (state_r == CTRL_PRECHARGE)      rp_cnt_ok_r <= 1'd0;    else if (rp_cnt_r <= 4'd3)      rp_cnt_ok_r <= 1'd1;  end  // tRFC count - refresh-refresh, refresh-active  always @(posedge clk) begin    if (state_r == CTRL_AUTO_REFRESH)      rfc_cnt_r <= TRFC_COUNT;    else if (rfc_cnt_r != 8'd0)      rfc_cnt_r <= rfc_cnt_r - 1;  end  always @(posedge clk) begin    if (state_r == CTRL_AUTO_REFRESH)      rfc_ok_r <= 1'b0;    else if(rfc_cnt_r <= 8'd3)      rfc_ok_r <= 1'b1;  end  // tRCD count - active to read/write  always @(posedge clk) begin    if (state_r == CTRL_ACTIVE)      rcd_cnt_r <= TRCD_COUNT;    else if (rcd_cnt_r != 4'd0)      rcd_cnt_r <= rcd_cnt_r - 1;  end  always @(posedge clk) begin    if ((state_r == CTRL_ACTIVE)        && (TRCD_COUNT > 2))      rcd_cnt_ok_r <= 1'd0;    else if (rcd_cnt_r <= 4'd3)      rcd_cnt_ok_r <= 1;  end  // tRRD count - active to active  always @(posedge clk) begin    if (state_r == CTRL_ACTIVE)      trrd_cnt_r <= TRRD_COUNT;    else if (trrd_cnt_r != 3'd0)      trrd_cnt_r <= trrd_cnt_r - 1;  end  always @(posedge clk) begin    if (state_r == CTRL_ACTIVE)      trrd_cnt_ok_r <= 1'd0;    else if (trrd_cnt_r <= 3'd3)      trrd_cnt_ok_r <= 1;  end  // tRAS count - active to precharge  always @(posedge clk) begin    if (state_r == CTRL_ACTIVE)      ras_cnt_r <= TRAS_COUNT;    else if (ras_cnt_r != 5'd0)      ras_cnt_r <= ras_cnt_r - 1;  end  // counter for write to prcharge  // read to precharge and  // activate to precharge  // precharge_ok_cnt_r is added with trtp count,  // there can be cases where the sm can go from  // activate to read and the act->pre count time  // would not have been satisfied. The rd->pre   // time is very less. wr->pre time is almost the   // same as act-> pre  always @(posedge clk) begin    if (state_r == CTRL_BURST_READ) begin      // assign only if the cnt is < TRTP_COUNT      if (precharge_ok_cnt_r < TRTP_COUNT)        precharge_ok_cnt_r <= TRTP_COUNT;    end else if (state_r == CTRL_BURST_WRITE)      precharge_ok_cnt_r <= TWR_COUNT;    else if (state_r == CTRL_ACTIVE)      precharge_ok_cnt_r <= TRAS_COUNT;    else if (precharge_ok_cnt_r != 5'd0)      precharge_ok_cnt_r <= precharge_ok_cnt_r - 1;  end  always @(posedge clk) begin    if ((state_r == CTRL_BURST_READ) ||        (state_r == CTRL_BURST_WRITE)||        (state_r == CTRL_ACTIVE))      precharge_ok_r <= 1'd0;    else if(precharge_ok_cnt_r <= 5'd3)      precharge_ok_r <=1'd1;  end  // write to read counter  // write to read includes : write latency + burst time + tWTR  always @(posedge clk) begin    if (rst_r1)      wr_to_rd_cnt_r <= 5'd0;    else if (state_r == CTRL_BURST_WRITE)      wr_to_rd_cnt_r <= (TWTR_COUNT);    else if (wr_to_rd_cnt_r != 5'd0)      wr_to_rd_cnt_r <= wr_to_rd_cnt_r - 1;  end  always @(posedge clk) begin    if (state_r == CTRL_BURST_WRITE)      wr_to_rd_ok_r <= 1'd0;    else if (wr_to_rd_cnt_r <= 5'd3)      wr_to_rd_ok_r <= 1'd1;  end  // read to write counter  always @(posedge clk) begin    if (rst_r1)      rd_to_wr_cnt_r <= 5'd0;    else if (state_r == CTRL_BURST_READ)      rd_to_wr_cnt_r <= (TRTW_COUNT);    else if (rd_to_wr_cnt_r != 5'd0)      rd_to_wr_cnt_r <= rd_to_wr_cnt_r - 1;  end  always @(posedge clk) begin    if (state_r == CTRL_BURST_READ)      rd_to_wr_ok_r <= 1'b0;    else if (rd_to_wr_cnt_r <= 5'd3)      rd_to_wr_ok_r <= 1'b1;  end  always @(posedge clk) begin     if(refi_cnt_r == (TREFI_COUNT -1))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷精品久久二区二区蜜臀av | 欧美日韩亚洲综合| 欧美色爱综合网| 国产精品入口麻豆原神| 天天综合日日夜夜精品| 国产xxx精品视频大全| 欧美日本韩国一区二区三区视频| 国产午夜亚洲精品午夜鲁丝片| 亚洲综合图片区| 国产91色综合久久免费分享| 777色狠狠一区二区三区| 国产日韩欧美激情| 精品一二三四在线| 在线观看亚洲成人| **性色生活片久久毛片| 韩国v欧美v亚洲v日本v| 4438成人网| 亚洲综合一区二区精品导航| 不卡的电视剧免费网站有什么| 精品欧美黑人一区二区三区| 亚洲一区二区偷拍精品| 91色视频在线| 亚洲欧洲国产日韩| 处破女av一区二区| 久久久久久一级片| 国产麻豆91精品| 欧美va在线播放| 久久精品999| 日韩免费一区二区三区在线播放| 日韩激情av在线| 欧美日本在线视频| 首页亚洲欧美制服丝腿| 欧美日韩精品一区二区三区蜜桃| 亚洲一区在线电影| 欧美亚洲综合网| 午夜精品久久久久久久久| 欧美午夜在线观看| 三级欧美韩日大片在线看| 欧美美女一区二区在线观看| 亚洲福利视频导航| 欧美另类变人与禽xxxxx| 亚洲一区二区三区在线| 欧美日韩在线三级| 日韩精品一二三| 欧美成人精品3d动漫h| 免费观看日韩av| 久久综合色一综合色88| 国产成人免费视频精品含羞草妖精| 久久久亚洲午夜电影| 成人网页在线观看| 亚洲自拍偷拍av| 日韩欧美亚洲一区二区| 国产一区二区美女| 日韩理论电影院| 678五月天丁香亚洲综合网| 免费一级欧美片在线观看| 精品国一区二区三区| 成人自拍视频在线观看| 亚洲综合激情网| 日韩欧美一级二级三级久久久| 国产高清不卡二三区| 亚洲人成精品久久久久久| 欧美丰满嫩嫩电影| 国产精品一二二区| 亚洲精品福利视频网站| 91精品国产综合久久小美女| 国产成人鲁色资源国产91色综| 亚洲欧美另类图片小说| 欧美一区二区三区免费| 国产精品 欧美精品| 一区二区三区毛片| 2019国产精品| 欧美性视频一区二区三区| 国产一区二区三区四区在线观看| 中文字幕五月欧美| 91精品国模一区二区三区| www.欧美精品一二区| 奇米影视一区二区三区| 国产精品久久久一本精品| 91精品国产麻豆国产自产在线| 国产suv精品一区二区6| 天天综合天天做天天综合| 国产精品婷婷午夜在线观看| 欧美网站一区二区| heyzo一本久久综合| 免费观看在线综合| 亚洲一级在线观看| 欧美国产成人在线| 日韩精品一区二区在线| 在线亚洲人成电影网站色www| 久久精品噜噜噜成人88aⅴ| 亚洲精品欧美在线| 中文一区二区完整视频在线观看| 正在播放亚洲一区| 91啪亚洲精品| 粉嫩av亚洲一区二区图片| 精品一区二区三区影院在线午夜| 亚洲国产一区二区三区青草影视| 国产精品视频一二三区| 久久亚洲欧美国产精品乐播| 欧美日韩和欧美的一区二区| 色偷偷88欧美精品久久久 | 一区二区免费在线播放| 国产欧美一区二区精品性色超碰| 欧美一级日韩免费不卡| 精品污污网站免费看| 一本一道波多野结衣一区二区| 国产传媒欧美日韩成人| 国内精品写真在线观看| 精品一区二区三区香蕉蜜桃| 麻豆国产精品777777在线| 日本欧美一区二区在线观看| 亚洲狠狠爱一区二区三区| 亚洲免费观看高清| 亚洲日本在线a| 亚洲另类色综合网站| 亚洲乱码国产乱码精品精小说 | 日韩成人av影视| 五月天中文字幕一区二区| 亚洲一区二区四区蜜桃| 一片黄亚洲嫩模| 亚洲一区二区三区四区五区中文 | 久久激五月天综合精品| 久久99精品网久久| 国产综合成人久久大片91| 久草中文综合在线| 国产美女精品人人做人人爽 | 99国产精品久久久久久久久久 | 欧美一区二区视频在线观看2022 | 国产一区二区三区日韩| 国产高清久久久久| 岛国av在线一区| 色网综合在线观看| 欧美日韩国产成人在线免费| 91精品国产日韩91久久久久久| 日韩欧美国产麻豆| 国产亚洲欧洲997久久综合| 国产精品网站在线观看| 亚洲精品视频一区| 天天影视涩香欲综合网 | 亚洲一区视频在线| 免费人成黄页网站在线一区二区| 麻豆成人av在线| 成+人+亚洲+综合天堂| 欧美综合久久久| 日韩免费一区二区| 亚洲天堂中文字幕| 日本欧美一区二区| 丁香一区二区三区| 欧美日韩一区二区三区免费看| 日韩美女一区二区三区| 中文字幕日本不卡| 蜜臀精品久久久久久蜜臀| 成人一区二区三区在线观看| 欧美亚洲国产一区在线观看网站 | 国产精品一区二区在线观看不卡| 91香蕉视频污在线| 精品国产伦一区二区三区观看体验 | 国产盗摄一区二区| 成人激情动漫在线观看| 欧美性色综合网| 久久亚洲一区二区三区明星换脸 | 97精品视频在线观看自产线路二| 91日韩精品一区| 日韩精品一区二区三区中文不卡| 久久亚洲精华国产精华液| 亚洲激情在线播放| 久久精品国产第一区二区三区| 国产成人aaa| 波多野结衣亚洲| 欧美va亚洲va香蕉在线| 国产精品乱码一区二区三区软件 | 国产综合久久久久久久久久久久| 成人午夜视频网站| 欧美日韩黄色一区二区| 国产精品国产馆在线真实露脸| 亚洲成人精品在线观看| 国产精品影视网| 欧美精品自拍偷拍动漫精品| 夜夜嗨av一区二区三区中文字幕| 麻豆精品视频在线观看| 一本色道久久综合精品竹菊| 成人国产一区二区三区精品| 日韩免费性生活视频播放| 中文字幕一区二区三区乱码在线 | 91在线观看下载| 欧美成人一区二区三区在线观看| 亚洲一区二区三区视频在线| 国产成人精品亚洲午夜麻豆| 欧美日韩精品免费观看视频 | 色综合久久99| 国产精品国产精品国产专区不蜜 | 成年人网站91| 国产欧美精品一区| 麻豆成人在线观看| 欧美乱妇15p| 日日骚欧美日韩| 欧美理论电影在线| 亚洲一区二区三区视频在线播放| 国产成人av在线影院|