⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m3s008an.v

📁 mentor UART IP verilog源码 以通过验证.
💻 V
字号:
// Receive FIFO Controller// Copyright Mentor Graphics Corporation and Licensors 1999// V1.400// This module provides the receive FIFO control// for the M16550a UART.// Revision history:// V1.400 - 15 June 1999//          Removal of unused variables RSR2, RxAboveTrigDel (ECN 1242)//          Changed constant from 2'b0 to 2'b00 to clear lint warning (ECN 1242)// V1.300 - 12 May 1999//          Signals renamed, FIFO trigger levels decoded// V1.2   - Updated OP_A with posedge of RD instead of posedge of NRD,//	    14/11/97// V1.1   - OP_A and IP_A reduced to 4-bits in the port list// V1.0   - Created 26/9/96module m3s008an (  CLK, MR, NWR, NRD, RD,  ADD0, ADD2, ADD5,  CharEn, DI1, DI0, FIFOE, RTM, RTL,  ROP_A, RIP_A, REmpt, RFull, RxAboveTrig,  RHold1, RRST, FOE, NVWR, NVRD  );input CLK, MR, NWR, NRD, RD;input ADD0, ADD2, ADD5;input CharEn, DI1, DI0, FIFOE, RTM, RTL;output [3:0] ROP_A, RIP_A;output       REmpt, RFull;     output       RxAboveTrig;output       RHold1, RRST, FOE;output       NVRD, NVWR;reg [3:0] ROP_A, RIP_A;reg [4:0] OP_A, IP_A, ROffset;reg [1:0] RSR;reg       DRRST, RHold1;reg       RxTrig1, RxTrig2, RxTrig3, RxTrig4;reg       RxAboveTrig, Trigger;reg       DOE, DOER, FOE, RRST, NVWR, NVRD;reg       REmpt, RFull;// Generate reset for Rx FIFO counter using bit 1 in FCR & MRalways @(posedge NWR or posedge MR)begin  if (MR)    DRRST <= 1'b0;     else if (ADD2 & DI1 & DI0)    DRRST <= ~RSR[1];endalways @(posedge CLK or posedge MR)begin  if (MR)    RSR[1:0] <= 2'b00;  else   begin    RSR[0] <= DRRST;    RSR[1] <= RSR[0];  endend// Holds FIFOs in reset when disabledalways @(DRRST or RSR or FIFOE)  RRST = (DRRST ^ RSR[1]) | ~FIFOE;// Prevent writing if FIFO is fullalways @(RFull or CharEn)  NVWR = RFull | ~CharEn;// Prevent reading if FIFO is emptyalways @(ADD0 or REmpt or FIFOE)  NVRD = ~(ADD0 & ~REmpt & FIFOE);// Counter is held in reset when FIFOs are disabled// Rx FIFO input counteralways @(posedge CLK or posedge MR)begin  if (MR)    IP_A <= 0;  else if (RRST) 	         IP_A <= OP_A;  else if (~NVWR)    IP_A <= IP_A + 1;end// Rx FIFO output counteralways @(posedge RD or posedge MR)begin  if (MR)    OP_A <= 0;  else if (~NVRD)    OP_A <= OP_A + 1;end	// Works out difference between input and output pointers.always @(IP_A or OP_A)  ROffset = IP_A - OP_A;// Detect when FIFO above the trigger levelalways @(ROffset) begin  RHold1  = (ROffset == 1);                 // Fifo holds 1 char of information  RxTrig1 = (ROffset >= 1);      RxTrig2 = (ROffset >= 4);  RxTrig3 = (ROffset >= 8);  RxTrig4 = (ROffset >= 14);endalways @(RTM or RTL or RxTrig1 or RxTrig2 or RxTrig3 or RxTrig4)begin  case ({RTM,RTL})    2'b00   : RxAboveTrig = RxTrig1;    2'b01   : RxAboveTrig = RxTrig2;    2'b10   : RxAboveTrig = RxTrig3;    default : RxAboveTrig = RxTrig4;  endcaseend// Decide if fifo is empty or fullalways @(ROffset)begin  REmpt = (ROffset == 0);  RFull = ROffset[4];end// Fifo mode OE indicatoralways @(posedge CLK or posedge MR)  if (MR)    DOER <= 0;  else if (RRST)          DOER <= DOE;  else if (RFull & CharEn)    DOER <= ~DOE;always @(posedge NRD or posedge MR)  if (MR)    DOE <= 0;  else if (ADD5 & FOE)    DOE <= DOER;always @(DOE or DOER)  FOE = DOE ^ DOER;// OP_A and IP_A reduced by 1 bit for exporting to upper levelalways @(IP_A or OP_A)begin  RIP_A = IP_A[3:0];  ROP_A = OP_A[3:0];end// Detect when FIFO is at trigger levelalways @(RTM or RTL or ROffset)  case ({RTM,RTL})    2'b00 :         if (ROffset == 1) Trigger = 1;         else Trigger = 0;    2'b01 :         if (ROffset == 4) Trigger = 1;         else Trigger = 0;    2'b10 :         if (ROffset == 8) Trigger = 1;         else Trigger = 0;    default :         if (ROffset == 14) Trigger = 1;         else Trigger = 0;  endcaseendmodule

⌨️ 快捷键说明

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