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

📄 mac_tx_ff.v

📁 verilog实现的异步UART代码
💻 V
📖 第 1 页 / 共 2 页
字号:
//////////////////////////////////////////////////////////////////////////                                                              ////////  MAC_tx_FF.v                                                 ////////                                                              ////////  This file is part of the Ethernet IP core project           ////////  http://www.opencores.org/projects.cgi/web/ethernet_tri_mode/////////                                                              ////////  Author(s):                                                  ////////      - Jon Gao (gaojon@yahoo.com)                            ////////                                                              ////////                                                              //////////////////////////////////////////////////////////////////////////////                                                              //////// Copyright (C) 2001 Authors                                   ////////                                                              //////// This source file may be used and distributed without         //////// restriction provided that this copyright statement is not    //////// removed from the file and that any derivative work contains  //////// the original copyright notice and the associated disclaimer. ////////                                                              //////// This source file is free software; you can redistribute it   //////// and/or modify it under the terms of the GNU Lesser General   //////// Public License as published by the Free Software Foundation; //////// either version 2.1 of the License, or (at your option) any   //////// later version.                                               ////////                                                              //////// This source is distributed in the hope that it will be       //////// useful, but WITHOUT ANY WARRANTY; without even the implied   //////// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //////// PURPOSE.  See the GNU Lesser General Public License for more //////// details.                                                     ////////                                                              //////// You should have received a copy of the GNU Lesser General    //////// Public License along with this source; if not, download it   //////// from http://www.opencores.org/lgpl.shtml                     ////////                                                              ////////////////////////////////////////////////////////////////////////////                                                                    // CVS Revision History                                               //                                                                    // $Log: MAC_tx_FF.v,v $// Revision 1.5  2006/06/25 04:58:56  maverickist// no message//// Revision 1.4  2006/05/28 05:09:20  maverickist// no message//// Revision 1.3  2006/01/19 14:07:54  maverickist// verification is complete.//// Revision 1.3  2005/12/16 06:44:18  Administrator// replaced tab with space.// passed 9.6k length frame test.//// Revision 1.2  2005/12/13 12:15:39  Administrator// no message//// Revision 1.1.1.1  2005/12/13 01:51:45  Administrator// no message//                                           module MAC_tx_FF ( Reset               ,      Clk_MAC             ,            Clk_SYS             ,            //MAC_rx_ctrl interface    Fifo_data           ,Fifo_rd             ,Fifo_rd_finish      ,Fifo_rd_retry       ,Fifo_eop            ,Fifo_da             ,Fifo_ra             ,Fifo_data_err_empty ,Fifo_data_err_full  ,//user interface          Tx_mac_wa           ,Tx_mac_wr           ,Tx_mac_data         ,Tx_mac_BE           ,Tx_mac_sop          ,Tx_mac_eop          ,//host interface   FullDuplex          ,Tx_Hwmark           ,         Tx_Lwmark           );input           Reset               ;input           Clk_MAC             ;input           Clk_SYS             ;                //MAC_tx_ctrloutput  [7:0]   Fifo_data           ;input           Fifo_rd             ;input           Fifo_rd_finish      ;input           Fifo_rd_retry       ;output          Fifo_eop            ;output          Fifo_da             ;output          Fifo_ra             ;output          Fifo_data_err_empty ;output          Fifo_data_err_full  ;                //user interface output          Tx_mac_wa           ;input           Tx_mac_wr           ;input   [31:0]  Tx_mac_data         ;input   [1:0]   Tx_mac_BE           ;//big endianinput           Tx_mac_sop          ;input           Tx_mac_eop          ;                //host interface input           FullDuplex          ;input   [4:0]   Tx_Hwmark           ;input   [4:0]   Tx_Lwmark           ;//******************************************************************************//internal signals                                                              //******************************************************************************parameter       MAC_byte3               =4'd00;     parameter       MAC_byte2               =4'd01;parameter       MAC_byte1               =4'd02; parameter       MAC_byte0               =4'd03; parameter       MAC_wait_finish         =4'd04;parameter       MAC_retry               =4'd08;parameter       MAC_idle                =4'd09;parameter       MAC_FFEmpty             =4'd10;parameter       MAC_FFEmpty_drop        =4'd11;parameter       MAC_pkt_sub             =4'd12;parameter       MAC_FF_Err              =4'd13;reg [3:0]       Current_state_MAC           /* synthesis syn_preserve =1 */ ;   reg [3:0]       Current_state_MAC_reg       /* synthesis syn_preserve =1 */ ;     reg [3:0]       Next_state_MAC              ;parameter       SYS_idle                =4'd0;parameter       SYS_WaitSop             =4'd1;parameter       SYS_SOP                 =4'd2;parameter       SYS_MOP                 =4'd3;parameter       SYS_DROP                =4'd4;parameter       SYS_EOP_ok              =4'd5;  parameter       SYS_FFEmpty             =4'd6;         parameter       SYS_EOP_err             =4'd7;parameter       SYS_SOP_err             =4'd8;reg [3:0]       Current_state_SYS   /* synthesis syn_preserve =1 */;reg [3:0]       Next_state_SYS;reg [`MAC_RX_FF_DEPTH-1:0]       Add_wr          ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_wr_ungray   ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_wr_gray     ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_wr_gray_dl1 ;wire[`MAC_RX_FF_DEPTH-1:0]       Add_wr_gray_tmp ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_rd          ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_rd_reg      ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_rd_gray     ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_rd_gray_dl1 ;wire[`MAC_RX_FF_DEPTH-1:0]       Add_rd_gray_tmp ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_rd_ungray   ;wire[35:0]      Din             ;wire[35:0]      Dout            ;reg             Wr_en           ;wire[`MAC_RX_FF_DEPTH-1:0]       Add_wr_pluse    ;wire[`MAC_RX_FF_DEPTH-1:0]       Add_wr_pluse_pluse;wire[`MAC_RX_FF_DEPTH-1:0]       Add_rd_pluse    ;reg [`MAC_RX_FF_DEPTH-1:0]       Add_rd_reg_dl1  ;reg             Full            /* synthesis syn_keep=1 */;reg             AlmostFull      /* synthesis syn_keep=1 */;reg             Empty           /* synthesis syn_keep=1 */;reg             Tx_mac_wa           ;reg             Tx_mac_wr_dl1           ;reg [31:0]      Tx_mac_data_dl1         ;reg [1:0]       Tx_mac_BE_dl1           ;reg             Tx_mac_sop_dl1          ;reg             Tx_mac_eop_dl1          ;reg             FF_FullErr              ;wire[1:0]       Dout_BE                 ;wire            Dout_eop                ;wire            Dout_err                ;wire[31:0]      Dout_data               ;     reg [35:0]      Dout_reg                /* synthesis syn_preserve=1 */;reg             Packet_number_sub_dl1   ;reg             Packet_number_sub_dl2   ;reg             Packet_number_sub_edge  /* synthesis syn_preserve=1 */;reg             Packet_number_add       /* synthesis syn_preserve=1 */;reg [4:0]       Fifo_data_count         ;reg             Fifo_ra                 /* synthesis syn_keep=1 */;reg [7:0]       Fifo_data               ;reg             Fifo_da                 ;reg             Fifo_data_err_empty     /* synthesis syn_preserve=1 */;reg             Fifo_eop                ;reg             Fifo_rd_dl1             ;reg             Fifo_ra_tmp             ;      reg [5:0]       Packet_number_inFF      /* synthesis syn_keep=1 */;   reg [5:0]       Packet_number_inFF_reg  /* synthesis syn_preserve=1 */;reg             Pkt_sub_apply_tmp       ;reg             Pkt_sub_apply           ;reg             Add_rd_reg_rdy_tmp      ;reg             Add_rd_reg_rdy          ;   reg             Add_rd_reg_rdy_dl1      ;   reg             Add_rd_reg_rdy_dl2      ;reg [4:0]       Tx_Hwmark_pl            ;reg [4:0]       Tx_Lwmark_pl            ;reg             Add_rd_jump_tmp         ;reg             Add_rd_jump_tmp_pl1     ;reg             Add_rd_jump             ;reg             Add_rd_jump_wr_pl1      ;integer         i                       ;//******************************************************************************//write data to from FF .//domain Clk_SYS//******************************************************************************always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Current_state_SYS   <=SYS_idle;    else        Current_state_SYS   <=Next_state_SYS;        always @ (Current_state_SYS or Tx_mac_wr or Tx_mac_sop or Full or AlmostFull             or Tx_mac_eop )    case (Current_state_SYS)        SYS_idle:            if (Tx_mac_wr&&Tx_mac_sop&&!Full)                Next_state_SYS      =SYS_SOP;            else                Next_state_SYS      =Current_state_SYS ;        SYS_SOP:                Next_state_SYS      =SYS_MOP;        SYS_MOP:            if (AlmostFull)                Next_state_SYS      =SYS_DROP;            else if (Tx_mac_wr&&Tx_mac_sop)                Next_state_SYS      =SYS_SOP_err;            else if (Tx_mac_wr&&Tx_mac_eop)                Next_state_SYS      =SYS_EOP_ok;            else                Next_state_SYS      =Current_state_SYS ;        SYS_EOP_ok:            if (Tx_mac_wr&&Tx_mac_sop)                Next_state_SYS      =SYS_SOP;            else                Next_state_SYS      =SYS_idle;        SYS_EOP_err:            if (Tx_mac_wr&&Tx_mac_sop)                Next_state_SYS      =SYS_SOP;            else                Next_state_SYS      =SYS_idle;        SYS_SOP_err:                Next_state_SYS      =SYS_DROP;        SYS_DROP: //FIFO overflow                       if (Tx_mac_wr&&Tx_mac_eop)                Next_state_SYS      =SYS_EOP_err;            else                 Next_state_SYS      =Current_state_SYS ;        default:                Next_state_SYS      =SYS_idle;    endcase    //delay signals always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        begin               Tx_mac_wr_dl1           <=0;        Tx_mac_data_dl1         <=0;        Tx_mac_BE_dl1           <=0;        Tx_mac_sop_dl1          <=0;        Tx_mac_eop_dl1          <=0;        end      else        begin               Tx_mac_wr_dl1           <=Tx_mac_wr     ;        Tx_mac_data_dl1         <=Tx_mac_data   ;        Tx_mac_BE_dl1           <=Tx_mac_BE     ;        Tx_mac_sop_dl1          <=Tx_mac_sop    ;        Tx_mac_eop_dl1          <=Tx_mac_eop    ;        end always @(Current_state_SYS)     if (Current_state_SYS==SYS_EOP_err)        FF_FullErr      =1;    else        FF_FullErr      =0; reg     Tx_mac_eop_gen;always @(Current_state_SYS)     if (Current_state_SYS==SYS_EOP_err||Current_state_SYS==SYS_EOP_ok)        Tx_mac_eop_gen      =1;    else        Tx_mac_eop_gen      =0;                 assign  Din={Tx_mac_eop_gen,FF_FullErr,Tx_mac_BE_dl1,Tx_mac_data_dl1};always @(Current_state_SYS or Tx_mac_wr_dl1)    if ((Current_state_SYS==SYS_SOP||Current_state_SYS==SYS_EOP_ok||        Current_state_SYS==SYS_MOP||Current_state_SYS==SYS_EOP_err)&&Tx_mac_wr_dl1)        Wr_en   = 1;    else        Wr_en   = 0;                //                always @ (posedge Reset or posedge Clk_SYS)    if (Reset)        Add_wr_gray         <=0;    else 		begin		Add_wr_gray[`MAC_RX_FF_DEPTH-1]	<=Add_wr[`MAC_RX_FF_DEPTH-1];		for (i=`MAC_RX_FF_DEPTH-2;i>=0;i=i-1)		Add_wr_gray[i]			<=Add_wr[i+1]^Add_wr[i];		end                             //always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Add_rd_gray_dl1         <=0;    else        Add_rd_gray_dl1         <=Add_rd_gray;                    always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Add_rd_jump_wr_pl1  <=0;    else                Add_rd_jump_wr_pl1  <=Add_rd_jump;                    always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Add_rd_ungray       =0;    else if (!Add_rd_jump_wr_pl1)       		begin		Add_rd_ungray[`MAC_RX_FF_DEPTH-1]	=Add_rd_gray_dl1[`MAC_RX_FF_DEPTH-1];			for (i=`MAC_RX_FF_DEPTH-2;i>=0;i=i-1)			Add_rd_ungray[i]	    =Add_rd_ungray[i+1]^Add_rd_gray_dl1[i];			end    assign          Add_wr_pluse        =Add_wr+1;assign          Add_wr_pluse_pluse  =Add_wr+4;always @ (Add_wr_pluse or Add_rd_ungray)    if (Add_wr_pluse==Add_rd_ungray)        Full    =1;    else        Full    =0;always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        AlmostFull  <=0;    else if (Add_wr_pluse_pluse==Add_rd_ungray)        AlmostFull  <=1;    else        AlmostFull  <=0;        always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Add_wr  <= 0;    else if (Wr_en&&!Full)        Add_wr  <= Add_wr +1;                //always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        begin        Packet_number_sub_dl1   <=0;        Packet_number_sub_dl2   <=0;        end    else         begin        Packet_number_sub_dl1   <=Pkt_sub_apply;        Packet_number_sub_dl2   <=Packet_number_sub_dl1;        end        always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Packet_number_sub_edge  <=0;    else if (Packet_number_sub_dl1&!Packet_number_sub_dl2)        Packet_number_sub_edge  <=1;    else        Packet_number_sub_edge  <=0;always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Packet_number_add       <=0;        else if (Current_state_SYS==SYS_EOP_ok||Current_state_SYS==SYS_EOP_err)        Packet_number_add       <=1;    else        Packet_number_add       <=0;            always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Packet_number_inFF      <=0;    else if (Packet_number_add&&!Packet_number_sub_edge)        Packet_number_inFF      <=Packet_number_inFF + 1'b1;

⌨️ 快捷键说明

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