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

📄 m3s005an.v

📁 mentor UART IP verilog源码 以通过验证.
💻 V
字号:
// Baud Rate Generator// Copyright Mentor Graphics Corporation and Licensors 1999// V10.600// This module provides the baud rate generator// for the M16550a UART.//// Revision history:// V10.6 - 15 June 1999//           Changed constant from 16'h01 to 16'h0001 to clear lint warning (ECN 1242)// V10.5 - 13 May 1999//         Uses single input clock//         A counter enable signal allows a prescaler to be used// V10.4 - ECN 1228 Modified to fix fifo polled bug - 26/3/99//	   ECN 1222 Baud rate clock re-written to fix glitch in Baud output 5/2/99// V10.3 - Changed to suit M16550a ( was M16c450 ) - 26/6/98//	   Added RCLK_BAUD option and changed generation of TCLK and RCLK SYNCH pulses//	 - Removed TCLK input and use BAUd output instead//	 _ Added RCLK_BAUD input to allow Rx baud selection// V10.2 - Removed unnecessary pipelining ECN 919 - 15/5/98//	 - Added fast clock input fclock. //	 - Feed in tclk and rclk to the BRG and synchronise them to fclk.//	 - to produce BEN for transmit and receive engines//	 - Added new MRB reset to remove simulation errors// V10.1 - Changed baud generator to mimic real device - 30/7/97. // V10.0 - Recoded from the original schematic design - 27 Nov 1996module m3s005an (  CLK, MR, RCLK, RCLK_BAUD, BRGE, NWR, ADD0B, ADD1B, DI,  DIV, BAUD, TxClkEnab, RxClkEnab  );input       CLK, MR, RCLK, RCLK_BAUD, BRGE, NWR, ADD0B, ADD1B;input [7:0] DI;output [15:0] DIV;output        BAUD, TxClkEnab, RxClkEnab;reg       BAUD, TxClkEnab, RxClkEnab;reg[15:0] DIV, BRG;reg       DDIV, BrLoad, BRG_One, SyncRClk, DelRClk;reg [1:0] SDDIV;// Baud Rate generator registers// CPU Channel timing domainalways @(posedge NWR or posedge MR)  if (MR)    DIV <= 16'h0001;  else  begin    if (ADD0B)      DIV <= {DIV[15:8],DI[7:0]};    else if (ADD1B)      DIV <= {DI[7:0],DIV[7:0]};  end// Generation of the counter load bit, counter is loaded anytime// there is a write to either the LSB, or the MSB of the divisor// registeralways @(posedge NWR or posedge MR)   if (MR)    DDIV <= 1'b0;  else if (ADD0B | ADD1B)    DDIV <= ~SDDIV[1];      // Delta bit// Clock Timing domainalways @(posedge CLK or posedge MR)   if (MR)    SDDIV <= 2'b01;  else     SDDIV <= {SDDIV[0],DDIV};always @(SDDIV)  BrLoad = SDDIV[0] ^ SDDIV[1];// Baud Rate Counteralways @(posedge CLK or posedge MR)  if (MR)    BRG <= 1;  else if (BrLoad | BRG_One)    BRG <= DIV;  else if (BRGE)    BRG <= BRG - 1;// Detect BRG = 1always @(BRG or BRGE)  BRG_One = (BRG == 16'h0001) & BRGE;// Generate BAUD outputalways @(posedge CLK or posedge MR)  if (MR)    BAUD <= 1;  else  begin    if (BRG_One | BrLoad)      BAUD <= 1;    else if (BRG[15:1] == 15'h0001)      BAUD <= 0;  end// Generate transmitter enablealways @(posedge CLK or posedge MR)  if (MR)    TxClkEnab <= 1;  else    TxClkEnab <= BRG_One;// Synchronise RCLK for edge detectionalways @(posedge CLK or posedge MR)  if (MR)  begin    SyncRClk <= 0;    DelRClk <= 0;  end  else  begin    SyncRClk <= RCLK;    DelRClk <= SyncRClk;  end// Generate receiver enablealways @(RCLK_BAUD or TxClkEnab or SyncRClk or DelRClk)  if (RCLK_BAUD)    RxClkEnab = TxClkEnab;  else    RxClkEnab = SyncRClk & ~DelRClk;endmodule

⌨️ 快捷键说明

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