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

📄 rmon_addr_gen.v

📁 verilog实现的异步UART代码
💻 V
字号:
//////////////////////////////////////////////////////////////////////////                                                              ////////  RMON_addr_gen.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: RMON_addr_gen.v,v $// Revision 1.4  2006/06/25 04:58:57  maverickist// no message//// Revision 1.3  2006/01/19 14:07:55  maverickist// verification is complete.//// Revision 1.2  2005/12/16 06:44:19  Administrator// replaced tab with space.// passed 9.6k length frame test.//// Revision 1.1.1.1  2005/12/13 01:51:45  Administrator// no message//         module RMON_addr_gen(Clk                 ,                              Reset               ,                              //RMON                                             Pkt_type_rmon       ,                              Pkt_length_rmon     ,                              Apply_rmon          ,//pluse signal looks like eop Pkt_err_type_rmon   ,                              //                                                 Reg_apply           ,                              Reg_addr            ,                              Reg_data            ,                              Reg_next            ,                              //CPU                                              Reg_drop_apply                                );input           Clk                 ;input           Reset               ;                //RMONinput   [2:0]   Pkt_type_rmon       ;input   [15:0]  Pkt_length_rmon     ;input           Apply_rmon          ;//pluse signal looks like eopinput   [2:0]   Pkt_err_type_rmon   ;                //RMON_ctrloutput          Reg_apply           ;output  [4:0]   Reg_addr            ;output  [15:0]  Reg_data            ;input           Reg_next            ;                //CPUoutput          Reg_drop_apply      ;//******************************************************************************//internal signals                                                              //******************************************************************************parameter       StateIdle       =4'd0;parameter       StatePktLength  =4'd1;parameter       StatePktNumber  =4'd2;parameter       StatePktType    =4'd3;parameter       StatePktRange   =4'd4;reg [3:0]       CurrentState /* synthesys syn_keep=1 */;reg [3:0]       NextState;    reg [2:0]       PktTypeReg      ;reg [15:0]      PktLengthReg    ;reg [2:0]       PktErrTypeReg   ;    reg             Reg_apply       ;reg [4:0]       Reg_addr            ;reg [15:0]      Reg_data            ;reg             Reg_drop_apply  ;//******************************************************************************//register boundery signals                                                        //******************************************************************************reg             Apply_rmon_dl1;reg             Apply_rmon_dl2;reg             Apply_rmon_pulse;reg [2:0]       Pkt_type_rmon_dl1       ;reg [15:0]      Pkt_length_rmon_dl1     ;reg [2:0]       Pkt_err_type_rmon_dl1   ;always @(posedge Clk or posedge Reset)    if (Reset)        begin        Pkt_type_rmon_dl1       <=0;        Pkt_length_rmon_dl1     <=0;        Pkt_err_type_rmon_dl1   <=0;        end                  else        begin        Pkt_type_rmon_dl1       <=Pkt_type_rmon     ;           Pkt_length_rmon_dl1     <=Pkt_length_rmon   ;        Pkt_err_type_rmon_dl1   <=Pkt_err_type_rmon ;        end always @(posedge Clk or posedge Reset)    if (Reset)        begin        Apply_rmon_dl1  <=0;        Apply_rmon_dl2  <=0;        end    else        begin        Apply_rmon_dl1  <=Apply_rmon;        Apply_rmon_dl2  <=Apply_rmon_dl1;        end     always @(Apply_rmon_dl1 or Apply_rmon_dl2)    if (Apply_rmon_dl1&!Apply_rmon_dl2)        Apply_rmon_pulse    =1;    else        Apply_rmon_pulse    =0;    always @(posedge Clk or posedge Reset)    if (Reset)        begin        PktTypeReg          <=0;        PktLengthReg        <=0;        PktErrTypeReg       <=0;            end    else if (Apply_rmon_pulse&&CurrentState==StateIdle)        begin        PktTypeReg          <=Pkt_type_rmon_dl1     ;        PktLengthReg        <=Pkt_length_rmon_dl1   ;        PktErrTypeReg       <=Pkt_err_type_rmon_dl1 ;            end             //******************************************************************************//State Machine                                                             //******************************************************************************always @(posedge Clk or posedge Reset)    if (Reset)        CurrentState    <=StateIdle;    else        CurrentState    <=NextState;        always @(CurrentState or Apply_rmon_pulse or Reg_next)    case (CurrentState)        StateIdle:            if (Apply_rmon_pulse)                NextState   =StatePktLength;            else                NextState   =StateIdle;        StatePktLength:            if (Reg_next)                NextState   =StatePktNumber;            else                NextState   =CurrentState;        StatePktNumber:            if (Reg_next)                NextState   =StatePktType;            else                NextState   =CurrentState;        StatePktType:            if (Reg_next)                NextState   =StatePktRange;            else                NextState   =CurrentState;        StatePktRange:            if (Reg_next)                NextState   =StateIdle;            else                NextState   =CurrentState;        default:                NextState   =StateIdle;    endcase             //******************************************************************************//gen output signals                                                            //******************************************************************************//Reg_applyalways @ (CurrentState)    if (CurrentState==StatePktLength||CurrentState==StatePktNumber||        CurrentState==StatePktType||CurrentState==StatePktRange)        Reg_apply   =1;    else        Reg_apply   =0;        //Reg_addralways @ (posedge Clk or posedge Reset)    if (Reset)        Reg_addr    <=0;    else case (CurrentState)            StatePktLength:                Reg_addr    <=5'd00;            StatePktNumber:                Reg_addr    <=5'd01;            StatePktType:                case(PktTypeReg)                    3'b011:                        Reg_addr    <=5'd02;    //broadcast                    3'b001:                        Reg_addr    <=5'd03;    //multicast                     3'b100:                        Reg_addr    <=5'd16;    //pause frame                       default:                        Reg_addr    <=5'd04;    //unicast                endcase            StatePktRange:                case(PktErrTypeReg)                    3'b001:                        Reg_addr    <=5'd05;                     3'b010:                        Reg_addr    <=5'd06;                        3'b011:                        Reg_addr    <=5'd07;                        3'b100:                        if (PktLengthReg<64)                                Reg_addr    <=5'd08;                         else if (PktLengthReg==64)                            Reg_addr    <=5'd09;                         else if (PktLengthReg<128)                            Reg_addr    <=5'd10;                         else if (PktLengthReg<256)                            Reg_addr    <=5'd11;                         else if (PktLengthReg<512)                            Reg_addr    <=5'd12;                         else if (PktLengthReg<1024)                            Reg_addr    <=5'd13;                         else if (PktLengthReg<1519)                            Reg_addr    <=5'd14;                         else                            Reg_addr    <=5'd15;                     default:                        Reg_addr    <=5'd05;                endcase            default:                    Reg_addr    <=5'd05;        endcase                //Reg_dataalways @ (CurrentState or PktLengthReg)    case (CurrentState)        StatePktLength:            Reg_data    =PktLengthReg;        StatePktNumber:            Reg_data    =1;        StatePktType:            Reg_data =1;        StatePktRange:            Reg_data =1;        default:            Reg_data =0;    endcase    //Reg_drop_applyalways @ (posedge Clk or posedge Reset)    if (Reset)        Reg_drop_apply  <=0;    else if (CurrentState!=StateIdle&&Apply_rmon_pulse)        Reg_drop_apply  <=1;    else        Reg_drop_apply  <=0;                endmodule                           

⌨️ 快捷键说明

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