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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? eth_receivecontrol.v

?? 用Verilog實(shí)現(xiàn)的以太網(wǎng)接口
?? V
字號(hào):


`include "timescale.v"


module eth_receivecontrol (MTxClk, MRxClk, TxReset, RxReset, RxData, RxValid, RxStartFrm, 
                           RxEndFrm, RxFlow, ReceiveEnd, MAC, DlyCrcEn, TxDoneIn, 
                           TxAbortIn, TxStartFrmOut, ReceivedLengthOK, ReceivedPacketGood, 
                           TxUsedDataOutDetected, Pause, ReceivedPauseFrm, AddressOK, 
                           RxStatusWriteLatched_sync2, r_PassAll, SetPauseTimer
                          );

parameter Tp = 1;


input       MTxClk;
input       MRxClk;
input       TxReset; 
input       RxReset; 
input [7:0] RxData;
input       RxValid;
input       RxStartFrm;
input       RxEndFrm;
input       RxFlow;
input       ReceiveEnd;
input [47:0]MAC;
input       DlyCrcEn;
input       TxDoneIn;
input       TxAbortIn;
input       TxStartFrmOut;
input       ReceivedLengthOK;
input       ReceivedPacketGood;
input       TxUsedDataOutDetected;
input       RxStatusWriteLatched_sync2;
input       r_PassAll;

output      Pause;
output      ReceivedPauseFrm;
output      AddressOK;
output      SetPauseTimer;


reg         Pause;
reg         AddressOK;                // Multicast or unicast address detected
reg         TypeLengthOK;             // Type/Length field contains 0x8808
reg         DetectionWindow;          // Detection of the PAUSE frame is possible within this window
reg         OpCodeOK;                 // PAUSE opcode detected (0x0001)
reg  [2:0]  DlyCrcCnt;
reg  [4:0]  ByteCnt;
reg [15:0]  AssembledTimerValue;
reg [15:0]  LatchedTimerValue;
reg         ReceivedPauseFrm;
reg         ReceivedPauseFrmWAddr;
reg         PauseTimerEq0_sync1;
reg         PauseTimerEq0_sync2;
reg [15:0]  PauseTimer;
reg         Divider2;
reg  [5:0]  SlotTimer;

wire [47:0] ReservedMulticast;        // 0x0180C2000001
wire [15:0] TypeLength;               // 0x8808
wire        ResetByteCnt;             // 
wire        IncrementByteCnt;         // 
wire        ByteCntEq0;               // ByteCnt = 0
wire        ByteCntEq1;               // ByteCnt = 1
wire        ByteCntEq2;               // ByteCnt = 2
wire        ByteCntEq3;               // ByteCnt = 3
wire        ByteCntEq4;               // ByteCnt = 4
wire        ByteCntEq5;               // ByteCnt = 5
wire        ByteCntEq12;              // ByteCnt = 12
wire        ByteCntEq13;              // ByteCnt = 13
wire        ByteCntEq14;              // ByteCnt = 14
wire        ByteCntEq15;              // ByteCnt = 15
wire        ByteCntEq16;              // ByteCnt = 16
wire        ByteCntEq17;              // ByteCnt = 17
wire        ByteCntEq18;              // ByteCnt = 18
wire        DecrementPauseTimer;      // 
wire        PauseTimerEq0;            // 
wire        ResetSlotTimer;           // 
wire        IncrementSlotTimer;       // 
wire        SlotFinished;             // 



// Reserved multicast address and Type/Length for PAUSE control
assign ReservedMulticast = 48'h0180C2000001;
assign TypeLength = 16'h8808;


// Address Detection (Multicast or unicast)
always @ (posedge MRxClk or posedge RxReset)
begin
  if(RxReset)
    AddressOK <= #Tp 1'b0;
  else
  if(DetectionWindow & ByteCntEq0)
    AddressOK <= #Tp  RxData[7:0] == ReservedMulticast[47:40] | RxData[7:0] == MAC[47:40];
  else
  if(DetectionWindow & ByteCntEq1)
    AddressOK <= #Tp (RxData[7:0] == ReservedMulticast[39:32] | RxData[7:0] == MAC[39:32]) & AddressOK;
  else
  if(DetectionWindow & ByteCntEq2)
    AddressOK <= #Tp (RxData[7:0] == ReservedMulticast[31:24] | RxData[7:0] == MAC[31:24]) & AddressOK;
  else
  if(DetectionWindow & ByteCntEq3)
    AddressOK <= #Tp (RxData[7:0] == ReservedMulticast[23:16] | RxData[7:0] == MAC[23:16]) & AddressOK;
  else
  if(DetectionWindow & ByteCntEq4)
    AddressOK <= #Tp (RxData[7:0] == ReservedMulticast[15:8]  | RxData[7:0] == MAC[15:8])  & AddressOK;
  else
  if(DetectionWindow & ByteCntEq5)
    AddressOK <= #Tp (RxData[7:0] == ReservedMulticast[7:0]   | RxData[7:0] == MAC[7:0])   & AddressOK;
  else
  if(ReceiveEnd)
    AddressOK <= #Tp 1'b0;
end



// TypeLengthOK (Type/Length Control frame detected)
always @ (posedge MRxClk or posedge RxReset )
begin
  if(RxReset)
    TypeLengthOK <= #Tp 1'b0;
  else
  if(DetectionWindow & ByteCntEq12)
    TypeLengthOK <= #Tp ByteCntEq12 & (RxData[7:0] == TypeLength[15:8]);
  else
  if(DetectionWindow & ByteCntEq13)
    TypeLengthOK <= #Tp ByteCntEq13 & (RxData[7:0] == TypeLength[7:0]) & TypeLengthOK;
  else
  if(ReceiveEnd)
    TypeLengthOK <= #Tp 1'b0;
end



// Latch Control Frame Opcode
always @ (posedge MRxClk or posedge RxReset )
begin
  if(RxReset)
    OpCodeOK <= #Tp 1'b0;
  else
  if(ByteCntEq16)
    OpCodeOK <= #Tp 1'b0;
  else
    begin
      if(DetectionWindow & ByteCntEq14)
        OpCodeOK <= #Tp ByteCntEq14 & RxData[7:0] == 8'h00;
    
      if(DetectionWindow & ByteCntEq15)
        OpCodeOK <= #Tp ByteCntEq15 & RxData[7:0] == 8'h01 & OpCodeOK;
    end
end


// ReceivedPauseFrmWAddr (+Address Check)
always @ (posedge MRxClk or posedge RxReset )
begin
  if(RxReset)
    ReceivedPauseFrmWAddr <= #Tp 1'b0;
  else
  if(ReceiveEnd)
    ReceivedPauseFrmWAddr <= #Tp 1'b0;
  else
  if(ByteCntEq16 & TypeLengthOK & OpCodeOK & AddressOK)
    ReceivedPauseFrmWAddr <= #Tp 1'b1;        
end



// Assembling 16-bit timer value from two 8-bit data
always @ (posedge MRxClk or posedge RxReset )
begin
  if(RxReset)
    AssembledTimerValue[15:0] <= #Tp 16'h0;
  else
  if(RxStartFrm)
    AssembledTimerValue[15:0] <= #Tp 16'h0;
  else
    begin
      if(DetectionWindow & ByteCntEq16)
        AssembledTimerValue[15:8] <= #Tp RxData[7:0];
      if(DetectionWindow & ByteCntEq17)
        AssembledTimerValue[7:0] <= #Tp RxData[7:0];
    end
end


// Detection window (while PAUSE detection is possible)
always @ (posedge MRxClk or posedge RxReset )
begin
  if(RxReset)
    DetectionWindow <= #Tp 1'b1;
  else
  if(ByteCntEq18)
    DetectionWindow <= #Tp 1'b0;
  else
  if(ReceiveEnd)
    DetectionWindow <= #Tp 1'b1;
end



// Latching Timer Value
always @ (posedge MRxClk or posedge RxReset )
begin
  if(RxReset)
    LatchedTimerValue[15:0] <= #Tp 16'h0;
  else
  if(DetectionWindow &  ReceivedPauseFrmWAddr &  ByteCntEq18)
    LatchedTimerValue[15:0] <= #Tp AssembledTimerValue[15:0];
  else
  if(ReceiveEnd)
    LatchedTimerValue[15:0] <= #Tp 16'h0;
end



// Delayed CEC counter
always @ (posedge MRxClk or posedge RxReset)
begin
  if(RxReset)
    DlyCrcCnt <= #Tp 3'h0;
  else
  if(RxValid & RxEndFrm)
    DlyCrcCnt <= #Tp 3'h0;
  else
  if(RxValid & ~RxEndFrm & ~DlyCrcCnt[2])
    DlyCrcCnt <= #Tp DlyCrcCnt + 1'b1;
end

             
assign ResetByteCnt = RxEndFrm;
assign IncrementByteCnt = RxValid & DetectionWindow & ~ByteCntEq18 & (~DlyCrcEn | DlyCrcEn & DlyCrcCnt[2]);


// Byte counter
always @ (posedge MRxClk or posedge RxReset)
begin
  if(RxReset)
    ByteCnt[4:0] <= #Tp 5'h0;
  else
  if(ResetByteCnt)
    ByteCnt[4:0] <= #Tp 5'h0;
  else
  if(IncrementByteCnt)
    ByteCnt[4:0] <= #Tp ByteCnt[4:0] + 1'b1;
end


assign ByteCntEq0 = RxValid & ByteCnt[4:0] == 5'h0;
assign ByteCntEq1 = RxValid & ByteCnt[4:0] == 5'h1;
assign ByteCntEq2 = RxValid & ByteCnt[4:0] == 5'h2;
assign ByteCntEq3 = RxValid & ByteCnt[4:0] == 5'h3;
assign ByteCntEq4 = RxValid & ByteCnt[4:0] == 5'h4;
assign ByteCntEq5 = RxValid & ByteCnt[4:0] == 5'h5;
assign ByteCntEq12 = RxValid & ByteCnt[4:0] == 5'h0C;
assign ByteCntEq13 = RxValid & ByteCnt[4:0] == 5'h0D;
assign ByteCntEq14 = RxValid & ByteCnt[4:0] == 5'h0E;
assign ByteCntEq15 = RxValid & ByteCnt[4:0] == 5'h0F;
assign ByteCntEq16 = RxValid & ByteCnt[4:0] == 5'h10;
assign ByteCntEq17 = RxValid & ByteCnt[4:0] == 5'h11;
assign ByteCntEq18 = RxValid & ByteCnt[4:0] == 5'h12 & DetectionWindow;


assign SetPauseTimer = ReceiveEnd & ReceivedPauseFrmWAddr & ReceivedPacketGood & ReceivedLengthOK & RxFlow;
assign DecrementPauseTimer = SlotFinished & |PauseTimer;


// PauseTimer[15:0]
always @ (posedge MRxClk or posedge RxReset)
begin
  if(RxReset)
    PauseTimer[15:0] <= #Tp 16'h0;
  else
  if(SetPauseTimer)
    PauseTimer[15:0] <= #Tp LatchedTimerValue[15:0];
  else
  if(DecrementPauseTimer)
    PauseTimer[15:0] <= #Tp PauseTimer[15:0] - 1'b1;
end

assign PauseTimerEq0 = ~(|PauseTimer[15:0]);



// Synchronization of the pause timer
always @ (posedge MTxClk or posedge TxReset)
begin
  if(TxReset)
    begin
      PauseTimerEq0_sync1 <= #Tp 1'b1;
      PauseTimerEq0_sync2 <= #Tp 1'b1;
    end
  else
    begin
      PauseTimerEq0_sync1 <= #Tp PauseTimerEq0;
      PauseTimerEq0_sync2 <= #Tp PauseTimerEq0_sync1;
    end
end


// Pause signal generation
always @ (posedge MTxClk or posedge TxReset)
begin
  if(TxReset)
    Pause <= #Tp 1'b0;
  else
  if((TxDoneIn | TxAbortIn | ~TxUsedDataOutDetected) & ~TxStartFrmOut)
    Pause <= #Tp RxFlow & ~PauseTimerEq0_sync2;
end


// Divider2 is used for incrementing the Slot timer every other clock
always @ (posedge MRxClk or posedge RxReset)
begin
  if(RxReset)
    Divider2 <= #Tp 1'b0;
  else
  if(|PauseTimer[15:0] & RxFlow)
    Divider2 <= #Tp ~Divider2;
  else
    Divider2 <= #Tp 1'b0;
end


assign ResetSlotTimer = RxReset;
assign IncrementSlotTimer =  Pause & RxFlow & Divider2;


// SlotTimer
always @ (posedge MRxClk or posedge RxReset)
begin
  if(RxReset)
    SlotTimer[5:0] <= #Tp 6'h0;
  else
  if(ResetSlotTimer)
    SlotTimer[5:0] <= #Tp 6'h0;
  else
  if(IncrementSlotTimer)
    SlotTimer[5:0] <= #Tp SlotTimer[5:0] + 1'b1;
end


assign SlotFinished = &SlotTimer[5:0] & IncrementSlotTimer;  // Slot is 512 bits (64 bytes)



// Pause Frame received
always @ (posedge MRxClk or posedge RxReset)
begin
  if(RxReset)
    ReceivedPauseFrm <=#Tp 1'b0;
  else
  if(RxStatusWriteLatched_sync2 & r_PassAll | ReceivedPauseFrm & (~r_PassAll))
    ReceivedPauseFrm <=#Tp 1'b0;
  else
  if(ByteCntEq16 & TypeLengthOK & OpCodeOK)
    ReceivedPauseFrm <=#Tp 1'b1;        
end


endmodule

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91黄色激情网站| 老司机精品视频导航| 色综合天天综合网国产成人综合天| 一区二区三区免费看视频| 99在线精品观看| 亚洲天堂网中文字| 欧美系列亚洲系列| 日韩中文字幕亚洲一区二区va在线| 欧美精品第1页| 开心九九激情九九欧美日韩精美视频电影 | 欧美国产精品专区| av资源网一区| 亚洲.国产.中文慕字在线| 欧美日韩国产成人在线免费| 日本va欧美va欧美va精品| 久久久精品tv| 91国偷自产一区二区三区成为亚洲经典| 亚洲综合久久久久| 精品美女一区二区三区| 高清视频一区二区| 亚洲二区在线视频| 久久久91精品国产一区二区精品| 99精品1区2区| 捆绑调教一区二区三区| 国产精品系列在线| 欧美精品亚洲一区二区在线播放| 国产剧情一区二区三区| 亚洲精品免费看| 精品国产一区二区三区忘忧草| 99国产一区二区三精品乱码| 日韩电影网1区2区| 国产精品区一区二区三| 欧美卡1卡2卡| av欧美精品.com| 蜜桃视频一区二区| 亚洲人精品一区| 欧美精品一区二区三区在线| 欧美精品一区二区三区很污很色的| 丰满岳乱妇一区二区三区| 午夜电影网一区| 国产精品久久久久久久午夜片 | 欧美伊人久久久久久久久影院| 日本一不卡视频| 亚洲色图欧美偷拍| 亚洲精品在线三区| 欧美老女人第四色| 一本到三区不卡视频| 国产精品一区免费在线观看| 亚洲成a人片综合在线| 国产精品久久一卡二卡| 日韩精品一区二区三区老鸭窝| 在线影视一区二区三区| 国产成人免费视频网站高清观看视频 | 激情综合色播激情啊| 亚洲成人精品一区二区| 国产精品色眯眯| 久久综合久久99| 91精品国产欧美日韩| 在线观看91精品国产入口| 成人精品一区二区三区四区| 狠狠网亚洲精品| 麻豆国产欧美日韩综合精品二区| 一区二区三区欧美视频| 18成人在线视频| 欧美激情一区二区三区不卡 | 精品国免费一区二区三区| 欧美亚洲国产一区二区三区| 99久久精品费精品国产一区二区| 国产一区二区三区四区五区入口| 免费高清在线视频一区·| 亚洲成av人片观看| 午夜视频一区二区| 亚洲国产精品久久不卡毛片| 亚洲自拍欧美精品| 亚洲一区二区美女| 亚洲午夜激情网页| 亚洲www啪成人一区二区麻豆| 亚洲在线观看免费视频| 一区二区三区精密机械公司| 亚洲特级片在线| 另类小说综合欧美亚洲| 麻豆精品在线观看| 久久电影网站中文字幕| 另类成人小视频在线| 蜜桃久久久久久| 久久国产精品露脸对白| 国产一区二区在线看| 国产精一品亚洲二区在线视频| 韩国三级电影一区二区| 国产成人精品综合在线观看 | 美女脱光内衣内裤视频久久影院| 日日夜夜免费精品| 欧美aⅴ一区二区三区视频| 日韩一区精品字幕| 久久99精品国产| 国产精一品亚洲二区在线视频| 国产91精品欧美| 色欧美88888久久久久久影院| 一本大道综合伊人精品热热| 欧美日韩一区久久| 欧美mv和日韩mv国产网站| 久久亚洲影视婷婷| 中文字幕一区二区三区在线不卡| 亚洲精品亚洲人成人网在线播放| 一区二区三区中文字幕精品精品| 亚洲欧美日韩系列| 视频一区欧美日韩| 国产在线精品免费| 北条麻妃国产九九精品视频| 一本到不卡精品视频在线观看| 欧美二区三区91| 国产欧美视频一区二区| 亚洲女人****多毛耸耸8| 日韩国产欧美在线观看| 国产成人免费视频网站 | 久久成人免费网| 国产91富婆露脸刺激对白| 在线精品视频免费观看| 日韩亚洲欧美成人一区| 国产精品传媒入口麻豆| 视频一区视频二区中文| www.色精品| 日韩精品中文字幕一区二区三区| 国产精品国产三级国产三级人妇 | 777亚洲妇女| 中文字幕巨乱亚洲| 午夜视频在线观看一区二区三区| 韩国成人福利片在线播放| 色偷偷久久人人79超碰人人澡| 日韩一区二区在线看| 亚洲欧美成aⅴ人在线观看| 青青国产91久久久久久| 一本到一区二区三区| 久久蜜桃av一区精品变态类天堂| 亚洲一区二区欧美日韩| 国产精品1区2区| 欧美一区国产二区| 一区二区三区日韩精品| 国产成人在线网站| 欧美一区午夜视频在线观看 | 精品1区2区在线观看| 亚洲二区在线观看| 91在线国产福利| 日韩成人一区二区三区在线观看| 成人午夜在线免费| 欧美成人一区二区| 婷婷丁香久久五月婷婷| 91免费视频观看| 欧美激情在线看| 精品在线播放免费| 欧美一区二区三区爱爱| 亚洲一二三四区| 91色.com| 亚洲欧洲日产国码二区| 国产成人av资源| 久久亚洲一级片| 黄页网站大全一区二区| 日韩免费视频线观看| 石原莉奈一区二区三区在线观看| 在线观看一区不卡| 亚洲乱码一区二区三区在线观看| 成人免费高清在线| 中文幕一区二区三区久久蜜桃| 国产伦精品一区二区三区免费迷 | 久久成人av少妇免费| 欧美一区二区视频观看视频| 亚洲电影欧美电影有声小说| 日本精品免费观看高清观看| 中文字幕视频一区二区三区久| 粉嫩绯色av一区二区在线观看| 精品1区2区在线观看| 激情五月婷婷综合网| 亚洲精品一区二区三区在线观看| 久久99久久精品| 国产亚洲精品免费| 国产成人精品一区二区三区四区| 国产视频一区二区在线观看| 国产精品一线二线三线| 欧美激情在线一区二区| 成人免费av网站| 亚洲欧美一区二区三区久本道91| 欧美天堂一区二区三区| 国产一区视频导航| 久久精品一二三| 麻豆91在线播放免费| 欧美一级一级性生活免费录像| 美女视频一区二区三区| 精品成人一区二区三区四区| 老汉av免费一区二区三区 | 欧美日韩免费观看一区二区三区| 国产日产欧美精品一区二区三区| 捆绑紧缚一区二区三区视频| 久久久高清一区二区三区| 懂色av一区二区三区免费观看| 欧美videos中文字幕| 老司机一区二区| 精品久久一区二区三区| 国产福利一区在线| 国产丝袜欧美中文另类| 国产毛片精品视频|