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

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

?? hssdrc_data_path_p1.v

?? SDRAM 控制器 Verilog實現
?? V
字號:
//
// Project      : High-Speed SDRAM Controller with adaptive bank management and command pipeline
// 
// Project Nick : HSSDRC
// 
// Version      : 1.0-beta 
//  
// Revision     : $Revision: 1.1 $ 
// 
// Date         : $Date: 2008-03-06 13:52:43 $ 
// 
// Workfile     : hssdrc_data_path_p1.v
// 
// Description  : sdram data (data & mask) path unit
// 
// HSSDRC is licensed under MIT License
// 
// Copyright (c) 2007-2008, Denis V.Shekhalev (des00@opencores.org) 
// 
// Permission  is hereby granted, free of charge, to any person obtaining a copy of
// this  software  and  associated documentation files (the "Software"), to deal in
// the  Software  without  restriction,  including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the  Software, and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// 
// The  above  copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// 
// THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR  A  PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT  HOLDERS  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN  AN  ACTION  OF  CONTRACT,  TORT  OR  OTHERWISE,  ARISING  FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//


`include "hssdrc_timescale.vh"  

`include "hssdrc_timing.vh"
`include "hssdrc_define.vh"

module hssdrc_data_path_p1 (
  clk           , 
  reset         , 
  sclr          , 
  //
  sys_wdata     ,
  sys_wdatam    ,
  sys_use_wdata ,
  sys_vld_rdata , 
  sys_chid_o    ,
  sys_rdata     ,
  //            
  arb_read      ,
  arb_write     ,
  arb_chid      ,
  arb_burst     ,
  //            
  dq            ,
  dqm     
  );

  input wire clk; 
  input wire reset; 
  input wire sclr; 

  //-------------------------------------------------------------------------------------------------- 
  // system data interface 
  //-------------------------------------------------------------------------------------------------- 

  input   data_t  sys_wdata     ; 
  input   datam_t sys_wdatam    ;   
  output  logic   sys_use_wdata ; 
  output  logic   sys_vld_rdata ;
  output  chid_t  sys_chid_o    ;
  output  data_t  sys_rdata     ;

  //-------------------------------------------------------------------------------------------------- 
  // interface from arbiter throw multiplexer 
  //-------------------------------------------------------------------------------------------------- 

  input wire          arb_read  ;
  input wire          arb_write ;
  input chid_t        arb_chid  ;
  input sdram_burst_t arb_burst ;

  //-------------------------------------------------------------------------------------------------- 
  // interface sdram chip 
  //-------------------------------------------------------------------------------------------------- 

  inout  wire   [pDataBits-1  :0] dq;
  output logic  [pDatamBits-1 :0] dqm;

  //-------------------------------------------------------------------------------------------------- 
  // Mask paramters count via pBL, pCL parameters only for clarify. 
  // unit has been designed to use fixed lengh mask patterns
  //-------------------------------------------------------------------------------------------------- 
  localparam cWDataMask = cSdramBL - 1;  // - 1 cycle for write command itself 

  localparam cRDataMask = cSdramBL - 1 + pCL - 2;  // - 1 cycle for read command itself, 
                                                   // - 2 cycle for read dqm latency 

  localparam cDataMask  = max(cWDataMask, cRDataMask);

  localparam cReadAllign = pCL + 1 + 1;   // + 1 is capture register cycle 
                                          // + 1 is additition command latency 
  //-------------------------------------------------------------------------------------------------- 
  //
  //-------------------------------------------------------------------------------------------------- 

  data_t wdata_delayed;   
  logic  use_wdata_delayed;

  logic [3:0] use_wdata_srl;
  wire        use_wdata;
  wire        use_wdatam;

  logic [cDataMask-1 : 0] datam_srl; 
  logic                   datam; 

  
  logic [3:0] vld_rdata_srl;
  logic       vld_rdata;
  logic       vld_rdata_allign_srl [cReadAllign-1 : 0];

  chid_t      chid_srl [3:0];
  chid_t      chid; 
  chid_t      chid_allign_srl [cReadAllign-1 : 0];

  //-------------------------------------------------------------------------------------------------- 
  // use write data & mask 
  //-------------------------------------------------------------------------------------------------- 

  always_ff @(posedge clk or posedge reset) begin : use_wdata_generate 
    if (reset)
      use_wdata_srl <= 4'b0000; 
    else if (sclr) 
      use_wdata_srl <= 4'b0000; 
    else if (arb_write) 
      unique case (arb_burst) 
        2'h0    : use_wdata_srl <= 4'b1000;         
        2'h1    : use_wdata_srl <= 4'b1100; 
        2'h2    : use_wdata_srl <= 4'b1110; 
        2'h3    : use_wdata_srl <= 4'b1111;                 
      endcase
    else 
      use_wdata_srl <= (use_wdata_srl << 1); 
  end 

  assign use_wdata  = use_wdata_srl[3];
  assign use_wdatam = use_wdata_srl[3];

  //
  // read/write data mask for command terminate  
  // 

  always_ff @(posedge clk or posedge reset) begin : data_burst_mask_generate 
    if (reset)
      datam_srl <= '0; 
    else if (sclr)
      datam_srl <= '0; 
    else begin  
      if (arb_write) 
        datam_srl <= WriteMaskBits(arb_burst); 
      else if (arb_read) 
        datam_srl <= ReadMaskBits(arb_burst); 
      else 
        datam_srl <= (datam_srl << 1);
    end       
  end 

  always_ff @(posedge clk or posedge reset) begin : data_mask_generate
    if (reset)
      datam <= 1'b0; 
    else if (sclr) 
      datam <= 1'b0; 
    else begin 
      if (arb_write) 
        datam <= 1'b0; 
      else if (arb_read) 
        datam <= FirstReadMaskBit(arb_burst); 
      else 
        datam <= datam_srl [cDataMask-1];
    end 
  end 

  //
  // dqm
  // 


  always_ff @(posedge clk or posedge reset) begin 
    if (reset) 
      dqm <= '0; 
    else if (sclr) 
      dqm <= '0;
    else     
      dqm <= use_wdatam ? sys_wdatam : {pDatamBits{datam}};
  end 


  //-------------------------------------------------------------------------------------------------- 
  // write data request  
  //-------------------------------------------------------------------------------------------------- 
   
`ifndef HSSDRC_COMBINATORY_USE_WDATA   

  assign sys_use_wdata = use_wdata;

`else 

  logic [2:0] use_wdata_srl_small; 

  always_ff @(posedge clk or posedge reset) begin : use_wdata_small_generate 
    if (reset)
      use_wdata_srl_small <= 3'b000; 
    else if (sclr) 
      use_wdata_srl_small <= 3'b000; 
    else if (arb_write) 
      unique case (arb_burst) 
        2'h0    : use_wdata_srl_small <= 3'b000;
        2'h1    : use_wdata_srl_small <= 3'b100;       
        2'h2    : use_wdata_srl_small <= 3'b110;
        2'h3    : use_wdata_srl_small <= 3'b111;
      endcase
    else 
      use_wdata_srl_small <= (use_wdata_srl_small << 1); 
  end 

  assign sys_use_wdata = arb_write | use_wdata_srl_small[2];

`endif 
  //
  // dq
  // 


  always_ff @(posedge clk) begin : wdata_reclock     
    wdata_delayed     <= sys_wdata; 
  end 

  always_ff @(posedge clk or posedge reset) begin  : use_wdata_reclock 
    if (reset) 
      use_wdata_delayed <= 1'b0; 
    else 
      use_wdata_delayed <= use_wdata;
  end 


  assign dq = use_wdata_delayed ? wdata_delayed : {pDataBits{1'bz}};

  //-------------------------------------------------------------------------------------------------- 
  // read data 
  //-------------------------------------------------------------------------------------------------- 

  always_ff @(posedge clk or posedge reset) begin : vld_rdata_generate 
    if (reset)
      vld_rdata_srl <= 4'b0000; 
    else if (sclr) 
      vld_rdata_srl <= 4'b0000; 
    else if (arb_read) 
      unique case (arb_burst) 
        2'h0    : vld_rdata_srl <= 4'b1000; 
        2'h1    : vld_rdata_srl <= 4'b1100; 
        2'h2    : vld_rdata_srl <= 4'b1110; 
        2'h3    : vld_rdata_srl <= 4'b1111;         
      endcase      
    else 
      vld_rdata_srl <= (vld_rdata_srl << 1); 
  end 

  assign vld_rdata  = vld_rdata_srl [3];

  //
  //
  //

  always_ff @(posedge clk) begin : chid_rdata_generate  
    int i;

    if (arb_read) begin 
      for (i = 0; i < 4; i++) 
        chid_srl[i] <= arb_chid; // load all with chid
    end 
    else begin 
      for (i = 1; i < 4; i++) 
        chid_srl[i] <= chid_srl[i-1]; // shift left with last data stable 
    end 
  end 
  
  assign chid = chid_srl [3];

  //
  //
  //

  always_ff @(posedge clk or posedge reset) begin : vld_rdata_allign_generate 
    int i;

    if (reset) begin 
      for (i = 0; i < cReadAllign; i++) 
        vld_rdata_allign_srl[i] <= 1'b0; 
    end 
    else if (sclr) begin 
      for (i = 0; i < cReadAllign; i++) 
        vld_rdata_allign_srl[i] <= 1'b0; 
    end 
    else begin 
      vld_rdata_allign_srl[0] <= vld_rdata; // shift left

      for (i = 1; i < cReadAllign; i++) 
        vld_rdata_allign_srl[i] <= vld_rdata_allign_srl [i-1];
    end 
  end 


  assign sys_vld_rdata = vld_rdata_allign_srl [cReadAllign-1];

  //
  //
  //

  always_ff @(posedge clk) begin : chid_allign_generate 
    int i;

    chid_allign_srl[0] <= chid; // shift left 

    for (i = 1; i < cReadAllign; i++) 
      chid_allign_srl[i] <= chid_allign_srl[i-1];
  end 

  
  assign sys_chid_o    = chid_allign_srl [cReadAllign-1];

  //
  //
  //

  always_ff @(posedge clk) begin : rdata_reclock 
    sys_rdata <= dq;
  end 

  //-------------------------------------------------------------------------------------------------- 
  // function to count write bit mask pattern for different burst value and 
  // for different Cas Latency paramter value 
  // full burst == 2'h3 no need to be masked 
  //-------------------------------------------------------------------------------------------------- 

  function automatic bit [cDataMask-1:0] WriteMaskBits (input bit [1:0] burst); 
    if (pCL == 3) begin 
      WriteMaskBits = 4'b0000;
      case (burst)
        2'h0 : WriteMaskBits = 4'b1110; 
        2'h1 : WriteMaskBits = 4'b0110; 
        2'h2 : WriteMaskBits = 4'b0010;        
      endcase
    end 
    else if (pCL == 2) begin 
      WriteMaskBits = 3'b000;
      case (burst) 
        2'h0 : WriteMaskBits = 3'b111; 
        2'h1 : WriteMaskBits = 3'b011; 
        2'h2 : WriteMaskBits = 3'b001;
      endcase
    end 
    else if (pCL == 1) begin
      WriteMaskBits = 3'b000;
      case (burst) 
        2'h0 : WriteMaskBits = 3'b111; 
        2'h1 : WriteMaskBits = 3'b011; 
        2'h2 : WriteMaskBits = 3'b001;
      endcase
    end 
    else begin 
      WriteMaskBits = '0;
    end 
  endfunction

  //-------------------------------------------------------------------------------------------------- 
  // function to count first read bit mask pattern for different burst value and 
  // for different Cas Latency paramter value 
  //--------------------------------------------------------------------------------------------------  
  
  function automatic bit FirstReadMaskBit (input bit [1:0] burst); 
    if ((pCL == 1) && (burst == 0)) 
      FirstReadMaskBit = 1'b1;
    else 
      FirstReadMaskBit = 1'b0; 
  endfunction 

  //-------------------------------------------------------------------------------------------------- 
  // function to count read bit mask pattern for different burst value and 
  // for different Cas Latency paramter value 
  // full burst == 2'h3 no need to be masked 
  //--------------------------------------------------------------------------------------------------    

  function automatic bit [cDataMask-1:0] ReadMaskBits (input bit [1:0] burst); 
    if (pCL == 3) begin 
      ReadMaskBits = 4'b0000;
      case (burst)
        2'h0 : ReadMaskBits = 4'b0111; 
        2'h1 : ReadMaskBits = 4'b0011; 
        2'h2 : ReadMaskBits = 4'b0001;         
      endcase
    end 
    else if (pCL == 2) begin 
      ReadMaskBits = 3'b000;
      case (burst) 
        2'h0 : ReadMaskBits = 3'b111; 
        2'h1 : ReadMaskBits = 3'b011; 
        2'h2 : ReadMaskBits = 3'b001; 
      endcase
    end 
    else if (pCL == 1) begin
      ReadMaskBits = 3'b000;
      case (burst) 
        2'h0 : ReadMaskBits = 3'b110; 
        2'h1 : ReadMaskBits = 3'b110; 
        2'h2 : ReadMaskBits = 3'b010; 
      endcase
    end 
    else begin 
      ReadMaskBits = '0;
    end 
  endfunction

endmodule 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产sm捆绑调教视频 | 久久国产尿小便嘘嘘尿| 日韩一区二区视频在线观看| 久久99精品久久久| 久久久久国产免费免费 | 成人a免费在线看| 中文字幕中文字幕中文字幕亚洲无线| av男人天堂一区| 亚瑟在线精品视频| 精品成人免费观看| 国产成人啪免费观看软件| 国产精品成人免费在线| 在线视频一区二区三区| 日本午夜一本久久久综合| 欧美精品一区二区三区蜜桃视频| 波多野结衣在线aⅴ中文字幕不卡| 自拍偷拍亚洲激情| 欧美疯狂性受xxxxx喷水图片| 国产又粗又猛又爽又黄91精品| 国产精品久久久久久亚洲毛片| 在线国产亚洲欧美| 久久99精品久久只有精品| 国产精品拍天天在线| 欧美日韩国产123区| 韩国成人精品a∨在线观看| 国产精品国产精品国产专区不片| 欧美午夜精品久久久久久孕妇| 麻豆91免费观看| 亚洲欧美综合色| 91精品在线免费观看| 成人一区二区三区中文字幕| 午夜激情一区二区三区| 久久久精品中文字幕麻豆发布| 色综合婷婷久久| 久久99精品国产麻豆不卡| 亚洲天堂网中文字| 日韩欧美视频一区| 99久久免费国产| 性做久久久久久| 久久影音资源网| 欧美日韩卡一卡二| 福利电影一区二区三区| 午夜精品视频在线观看| 欧美激情综合五月色丁香 | 欧美网站一区二区| 国产一级精品在线| 亚洲综合av网| 国产亚洲污的网站| 欧美另类变人与禽xxxxx| 成人h版在线观看| 99久久国产综合精品色伊| 日韩激情在线观看| 亚洲免费三区一区二区| 久久夜色精品国产噜噜av| 欧美亚洲尤物久久| www.视频一区| 国产一区二区视频在线| 日日噜噜夜夜狠狠视频欧美人 | 国产欧美精品一区| 日韩一区二区免费视频| 色8久久人人97超碰香蕉987| 国产成人av电影在线播放| 丝袜诱惑制服诱惑色一区在线观看 | 4438x成人网最大色成网站| www.在线欧美| 精品一区二区三区视频| 亚洲一区二区在线免费观看视频| 国产三级精品三级在线专区| 91精品福利在线一区二区三区| 色综合中文字幕国产 | 乱一区二区av| 视频一区二区三区入口| 亚洲精品乱码久久久久| 中文字幕成人网| 久久免费午夜影院| 日韩免费一区二区三区在线播放| 欧美色图在线观看| 91亚洲国产成人精品一区二三| 国产一区二区三区黄视频 | 日韩网站在线看片你懂的| 欧美少妇性性性| 色婷婷av一区二区三区gif| 不卡av在线网| 岛国精品在线播放| 国产aⅴ综合色| 国产经典欧美精品| 国产一区二区中文字幕| 日韩成人av影视| 午夜精品福利久久久| 亚洲成国产人片在线观看| 一区二区三区免费看视频| 椎名由奈av一区二区三区| 国产精品久久久久影视| 国产精品理论在线观看| 国产精品网曝门| 欧美极品美女视频| 国产精品丝袜久久久久久app| 国产亚洲欧美日韩日本| 国产无遮挡一区二区三区毛片日本| 精品国产亚洲一区二区三区在线观看| 日韩欧美一区在线观看| 欧美成人三级电影在线| 精品卡一卡二卡三卡四在线| 精品国产电影一区二区| 精品处破学生在线二十三| 久久影音资源网| 国产色产综合色产在线视频| 久久久国产一区二区三区四区小说| 婷婷久久综合九色国产成人 | 国产一区二区视频在线| 国产精品小仙女| 国产精品亚洲视频| 成人黄页毛片网站| 99久久久精品| 91黄色免费版| 欧美老年两性高潮| 日韩免费观看高清完整版在线观看| 欧美大片在线观看| 精品福利一区二区三区免费视频| 久久美女艺术照精彩视频福利播放| 久久精品人人爽人人爽| 久久久久久久久久久黄色| 国产欧美日韩精品a在线观看| 国产精品日日摸夜夜摸av| 亚洲视频在线观看三级| 亚洲一线二线三线视频| 日日骚欧美日韩| 久久国产欧美日韩精品| 国产成人av一区二区三区在线观看| 成人免费视频免费观看| 91麻豆123| 欧美猛男gaygay网站| 欧美tk—视频vk| 国产精品午夜电影| 亚洲自拍偷拍网站| 美国十次了思思久久精品导航| 国产精品亚洲专一区二区三区 | 一本色道久久综合亚洲91 | 中文字幕国产精品一区二区| 亚洲日本中文字幕区| 午夜精品视频在线观看| 国产真实精品久久二三区| 99久久精品免费看国产免费软件| 欧美性视频一区二区三区| 日韩免费观看2025年上映的电影| 日本一区二区三区四区在线视频| 亚洲视频 欧洲视频| 日韩影院在线观看| 国产传媒欧美日韩成人| 色婷婷综合久久久久中文| 欧美一区二区三区免费大片 | 日本道色综合久久| 日韩一区二区三区免费看 | 国产精品网站在线播放| 午夜激情一区二区| 国产成人在线影院 | 欧美成人激情免费网| 国产精品免费视频一区| 五月天激情综合| 国产超碰在线一区| 欧美日韩国产成人在线免费| 日韩精品一区二区三区四区| 亚洲欧洲日韩av| 日本不卡在线视频| 97精品国产露脸对白| 宅男在线国产精品| 综合电影一区二区三区| 美脚の诱脚舐め脚责91| 91在线观看污| 日韩欧美卡一卡二| 亚洲乱码一区二区三区在线观看| 久久成人免费电影| 欧美在线一二三| 国产日韩av一区| 日韩福利视频导航| 色婷婷综合视频在线观看| www欧美成人18+| 亚洲午夜av在线| 成人免费观看视频| 日韩亚洲欧美一区| 亚洲欧美成人一区二区三区| 国产一区 二区| 在线播放欧美女士性生活| ...中文天堂在线一区| 国内精品写真在线观看| 欧美美女网站色| 亚洲色图色小说| 国产精品123| 欧美一级在线观看| 亚洲第一成人在线| 99国产精品久| 久久综合网色—综合色88| 五月天激情综合网| 色欧美片视频在线观看| 国产日韩欧美a| 精品写真视频在线观看| 制服丝袜亚洲精品中文字幕| 亚洲精品老司机| 99久久精品情趣| 另类欧美日韩国产在线|