OpenCores
URL https://opencores.org/ocsvn/sgmii/sgmii/trunk

Subversion Repositories sgmii

[/] [sgmii/] [trunk/] [sim/] [BFMs/] [SGMII_altera/] [testbench/] [model/] [top_ethgen8.v] - Diff between revs 9 and 20

Only display areas with differences | Details | Blame | View Log

Rev 9 Rev 20
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
//
//
// Revision Control Information
// Revision Control Information
//
//
// $RCSfile: top_ethgen32.v,v $
// $RCSfile: top_ethgen32.v,v $
// $Source: /ipbu/cvs/sio/projects/TriSpeedEthernet/src/testbench/models/verilog/ethernet_model/gen/top_ethgen8.v,v $
// $Source: /ipbu/cvs/sio/projects/TriSpeedEthernet/src/testbench/models/verilog/ethernet_model/gen/top_ethgen8.v,v $
//
//
// $Revision: #1 $
// $Revision: #1 $
// $Date: 2011/11/10 $
// $Date: 2012/06/21 $
// Check in by : $Author: max $
// Check in by : $Author: swbranch $
// Author      : SKNg/TTChong
// Author      : SKNg/TTChong
//
//
// Project     : Triple Speed Ethernet - 10/100/1000 MAC
// Project     : Triple Speed Ethernet - 10/100/1000 MAC
//
//
// Description : (Simulation only)
// Description : (Simulation only)
//
//
// Ethernet Traffic Generator for 8 bit fifoless MAC Atlantic client interface
// Ethernet Traffic Generator for 8 bit fifoless MAC Atlantic client interface
// Instantiates VERILOG module: ethgenerator (ethgen.v)
// Instantiates VERILOG module: ethgenerator (ethgen.v)
// 
// 
// ALTERA Confidential and Proprietary
// ALTERA Confidential and Proprietary
// Copyright 2006 (c) Altera Corporation
// Copyright 2006 (c) Altera Corporation
// All rights reserved
// All rights reserved
//
//
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
 
 
`timescale 1 ns / 10 ps  // timescale for following modules
`timescale 1 ns / 10 ps  // timescale for following modules
 
 
module top_ethgenerator_8 (
module top_ethgenerator_8 (
 
 
   reset,
   reset,
   clk,
   clk,
   enable,
   enable,
   dout,
   dout,
   dval,
   dval,
   derror,
   derror,
   sop,
   sop,
   eop,
   eop,
   mac_reverse,
   mac_reverse,
   dst,
   dst,
   src,
   src,
   prmble_len,
   prmble_len,
   pquant,
   pquant,
   vlan_ctl,
   vlan_ctl,
   len,
   len,
   frmtype,
   frmtype,
   cntstart,
   cntstart,
   cntstep,
   cntstep,
   ipg_len,
   ipg_len,
   payload_err,
   payload_err,
   prmbl_err,
   prmbl_err,
   crc_err,
   crc_err,
   vlan_en,
   vlan_en,
   stack_vlan,
   stack_vlan,
   pause_gen,
   pause_gen,
   pad_en,
   pad_en,
   phy_err,
   phy_err,
   end_err,
   end_err,
   data_only,
   data_only,
   start,
   start,
   done);
   done);
 
 
parameter thold = 1.0 ;
parameter thold = 1.0 ;
parameter ZERO_LATENCY = 0;
parameter ZERO_LATENCY = 0;
parameter ENABLE_SHIFT16 = 1'b 0;
parameter ENABLE_SHIFT16 = 1'b 0;
 
 
 
 
input   reset; //  active high
input   reset; //  active high
input   clk;
input   clk;
input   enable;
input   enable;
output   [7:0] dout;
output   [7:0] dout;
output   dval;
output   dval;
output   derror;
output   derror;
output   sop; //  pulse with first word
output   sop; //  pulse with first word
output   eop; //  pulse with last word (tmod valid)
output   eop; //  pulse with last word (tmod valid)
input   mac_reverse; //  1: dst/src are sent MSB first (non-standard)
input   mac_reverse; //  1: dst/src are sent MSB first (non-standard)
input   [47:0] dst; //  destination address
input   [47:0] dst; //  destination address
input   [47:0] src; //  source address
input   [47:0] src; //  source address
input   [3:0] prmble_len; //  length of preamble
input   [3:0] prmble_len; //  length of preamble
input   [15:0] pquant; //  Pause Quanta value
input   [15:0] pquant; //  Pause Quanta value
input   [15:0] vlan_ctl; //  VLAN control info
input   [15:0] vlan_ctl; //  VLAN control info
input   [15:0] len; //  Length of payload
input   [15:0] len; //  Length of payload
input   [15:0] frmtype; //  if non-null: type field instead length
input   [15:0] frmtype; //  if non-null: type field instead length
input   [7:0] cntstart; //  payload data counter start (first byte of payload)
input   [7:0] cntstart; //  payload data counter start (first byte of payload)
input   [7:0] cntstep; //  payload counter step (2nd byte in paylaod)
input   [7:0] cntstep; //  payload counter step (2nd byte in paylaod)
input   [15:0] ipg_len;
input   [15:0] ipg_len;
input   payload_err; //  generate payload pattern error (last payload byte is wrong)
input   payload_err; //  generate payload pattern error (last payload byte is wrong)
input   prmbl_err; //  Send corrupt SFD in otherwise correct preamble
input   prmbl_err; //  Send corrupt SFD in otherwise correct preamble
input   crc_err;
input   crc_err;
input   vlan_en;
input   vlan_en;
input   stack_vlan;
input   stack_vlan;
input   pause_gen;
input   pause_gen;
input   pad_en;
input   pad_en;
input   phy_err; //  Generate the well known ERROR control character
input   phy_err; //  Generate the well known ERROR control character
input   end_err; //  Send corrupt TERMINATE character (wrong code)
input   end_err; //  Send corrupt TERMINATE character (wrong code)
input   data_only; //  if set omits preamble, padding, CRC
input   data_only; //  if set omits preamble, padding, CRC
input   start;
input   start;
output   done;
output   done;
wire     [7:0] dout;
wire     [7:0] dout;
reg     [7:0] dout_reg;
reg     [7:0] dout_reg;
wire     dval;
wire     dval;
reg     dval_reg;
reg     dval_reg;
wire     derror;
wire     derror;
reg     derror_reg;
reg     derror_reg;
wire    sop;
wire    sop;
wire    eop;
wire    eop;
//  Frame Contents definitions
//  Frame Contents definitions
wire     done;
wire     done;
reg     done_reg;
reg     done_reg;
//  internal GMII from generator
//  internal GMII from generator
wire    [7:0] rxd;
wire    [7:0] rxd;
wire    rx_dv;
wire    rx_dv;
wire    rx_er;
wire    rx_er;
wire    sop_gen;
wire    sop_gen;
wire    eop_gen;
wire    eop_gen;
reg     start_gen;
reg     start_gen;
wire    done_gen;
wire    done_gen;
//  captured signals from generator (lasting 1 word clock cycle)
//  captured signals from generator (lasting 1 word clock cycle)
wire     enable_int;
wire     enable_int;
reg     enable_reg;
reg     enable_reg;
reg     sop_int; //  captured sop_gen
reg     sop_int; //  captured sop_gen
wire    sop_int_d; //  captured sop_gen
wire    sop_int_d; //  captured sop_gen
reg     eop_int; //  captured eop_gen
reg     eop_int; //  captured eop_gen
wire    eop_i; //  captured eop_gen
wire    eop_i; //  captured eop_gen
reg     rx_er_int; //  captured rx_er
reg     rx_er_int; //  captured rx_er
//  external signals
//  external signals
reg     sop_ex;
reg     sop_ex;
reg     eop_ex;
reg     eop_ex;
//  captured command signals 
//  captured command signals 
reg     [15:0] ipg_len_i;
reg     [15:0] ipg_len_i;
//  internal
//  internal
reg     [7:0] data8;
reg     [7:0] data8;
wire    [2:0] clkcnt;
wire    [2:0] clkcnt;
reg     [1:0] bytecnt_eop; //  captured count for last word
reg     [1:0] bytecnt_eop; //  captured count for last word
integer count;
integer count;
 
 
//assign output
//assign output
reg     [7:0] dout_temp;
reg     [7:0] dout_temp;
reg     dval_temp;
reg     dval_temp;
reg     derror_temp;
reg     derror_temp;
reg     sop_temp;
reg     sop_temp;
reg     eop_temp;
reg     eop_temp;
reg     done_temp;
reg     done_temp;
 
 
reg     [7:0] dout_before_delay;
reg     [7:0] dout_before_delay;
reg     dval_before_delay;
reg     dval_before_delay;
reg     derror_before_delay;
reg     derror_before_delay;
reg     sop_before_delay;
reg     sop_before_delay;
reg     eop_before_delay;
reg     eop_before_delay;
reg     done_before_delay;
reg     done_before_delay;
 
 
 
 
// TYPE stm_typ:
// TYPE stm_typ:
parameter stm_typ_s_idle = 0;
parameter stm_typ_s_idle = 0;
parameter stm_typ_s_data = 1;
parameter stm_typ_s_data = 1;
parameter stm_typ_s_ipg = 2;
parameter stm_typ_s_ipg = 2;
parameter stm_typ_s_ipg0 = 3;
parameter stm_typ_s_ipg0 = 3;
parameter stm_typ_s_wait = 4;
parameter stm_typ_s_wait = 4;
 
 
reg     [2:0] state;
reg     [2:0] state;
reg     clk_d;
reg     clk_d;
reg     fast_clk;
reg     fast_clk;
reg     fast_clk_gate;
reg     fast_clk_gate;
reg     [1:0] bytecnt;
reg     [1:0] bytecnt;
reg     tx_clk;
reg     tx_clk;
 
 
 
 
//  ---------------------------------------
//  ---------------------------------------
//  Generate internal fast clock synchronized to external input clock
//  Generate internal fast clock synchronized to external input clock
//  ---------------------------------------
//  ---------------------------------------
 
 
always
always
   begin : process_1
   begin : process_1
   fast_clk <= #(0.1) 1'b 0;
   fast_clk <= #(0.1) 1'b 0;
   #( 0.4 );
   #( 0.4 );
   fast_clk <= #(0.1) 1'b 1;
   fast_clk <= #(0.1) 1'b 1;
   #( 0.4 );
   #( 0.4 );
   end
   end
 
 
always @(negedge fast_clk or posedge reset)
always @(negedge fast_clk or posedge reset)
   begin : process_2
   begin : process_2
   if (reset == 1'b 1)
   if (reset == 1'b 1)
      begin
      begin
      fast_clk_gate <= 1'b 0;
      fast_clk_gate <= 1'b 0;
      clk_d <= 1'b 0;
      clk_d <= 1'b 0;
      end
      end
   else
   else
      begin
      begin
//  work on neg edge
//  work on neg edge
      clk_d <= clk;
      clk_d <= clk;
      if ((rx_dv == 1'b 0 | done_gen == 1'b 1) &
      if ((rx_dv == 1'b 0 | done_gen == 1'b 1) &
    (enable_int == 1'b 1 | start_gen == 1'b 1))
    (enable_int == 1'b 1 | start_gen == 1'b 1))
         begin
         begin
//  generator not running, enable it permanently
//  generator not running, enable it permanently
         fast_clk_gate <= 1'b 1;
         fast_clk_gate <= 1'b 1;
         end
         end
      else if (clk_d == 1'b 0 & clk == 1'b 1 &
      else if (clk_d == 1'b 0 & clk == 1'b 1 &
    state != stm_typ_s_wait & (enable_int == 1'b 1 |
    state != stm_typ_s_wait & (enable_int == 1'b 1 |
    state == stm_typ_s_ipg0) )
    state == stm_typ_s_ipg0) )
         begin
         begin
//  wait for rising edge
//  wait for rising edge
         fast_clk_gate <= 1'b 1;
         fast_clk_gate <= 1'b 1;
         end
         end
      else
      else
         begin
         begin
         fast_clk_gate <= 1'b 0;
         fast_clk_gate <= 1'b 0;
         end
         end
      end
      end
   end
   end
//  DDR process to generate gated clock
//  DDR process to generate gated clock
always @(fast_clk or reset)
always @(fast_clk or reset)
   begin : process_3
   begin : process_3
   if (reset == 1'b 1)
   if (reset == 1'b 1)
      begin
      begin
      tx_clk <= 1'b 0;
      tx_clk <= 1'b 0;
      end
      end
   else if ( fast_clk == 1'b 1 )
   else if ( fast_clk == 1'b 1 )
      begin
      begin
      if (fast_clk_gate == 1'b 1)
      if (fast_clk_gate == 1'b 1)
         begin
         begin
         tx_clk <= 1'b 1;
         tx_clk <= 1'b 1;
         end
         end
      end
      end
   else if ( fast_clk == 1'b 0 )
   else if ( fast_clk == 1'b 0 )
      begin
      begin
      tx_clk <= 1'b 0;
      tx_clk <= 1'b 0;
      end
      end
   end
   end
 
 
 
 
 
 
// tx_clk <= fast_clk and fast_clk_gate;        
// tx_clk <= fast_clk and fast_clk_gate;        
//  capture generator signals with word clock domain handshake
//  capture generator signals with word clock domain handshake
//  ----------------------------------------------------------
//  ----------------------------------------------------------
always @(posedge tx_clk or posedge reset)
always @(posedge tx_clk or posedge reset)
   begin : process_4
   begin : process_4
   if (reset == 1'b 1)
   if (reset == 1'b 1)
      begin
      begin
      eop_int <= 1'b 0;
      eop_int <= 1'b 0;
      sop_int <= 1'b 0;
      sop_int <= 1'b 0;
      rx_er_int <= 1'b 0;
      rx_er_int <= 1'b 0;
      end
      end
   else
   else
      begin
      begin
      if (sop_gen == 1'b 1)
      if (sop_gen == 1'b 1)
         begin
         begin
         sop_int <= 1'b 1;
         sop_int <= 1'b 1;
         end
         end
      else if (sop_ex == 1'b 1 )
      else if (sop_ex == 1'b 1 )
         begin
         begin
         sop_int <= 1'b 0;
         sop_int <= 1'b 0;
         end
         end
      if (eop_gen == 1'b 1)
      if (eop_gen == 1'b 1)
         begin
         begin
         eop_int <= 1'b 1;
         eop_int <= 1'b 1;
         end
         end
      else if (eop_ex == 1'b 1 )
      else if (eop_ex == 1'b 1 )
         begin
         begin
         eop_int <= 1'b 0;
         eop_int <= 1'b 0;
         end
         end
      if (rx_er == 1'b 1)
      if (rx_er == 1'b 1)
         begin
         begin
         rx_er_int <= 1'b 1;
         rx_er_int <= 1'b 1;
         end
         end
      else if (eop_ex == 1'b 1 )
      else if (eop_ex == 1'b 1 )
         begin
         begin
         rx_er_int <= 1'b 0;
         rx_er_int <= 1'b 0;
         end
         end
      end
      end
   end
   end
//  word clock, external signal generation
//  word clock, external signal generation
//  --------------------------------------
//  --------------------------------------
//assign #(thold) sop = sop_ex; 
//assign #(thold) sop = sop_ex; 
//assign #(thold) eop = eop_ex; 
//assign #(thold) eop = eop_ex; 
always @(posedge clk or posedge reset)
always @(posedge clk or posedge reset)
   begin : process_5
   begin : process_5
   if (reset == 1'b 1)
   if (reset == 1'b 1)
      begin
      begin
//      enable_int <= 1'b 0;  
//      enable_int <= 1'b 0;  
      eop_ex <= 1'b 0;
      eop_ex <= 1'b 0;
      sop_ex <= 1'b 0;
      sop_ex <= 1'b 0;
      dval_reg <= 1'b 0;
      dval_reg <= 1'b 0;
      dout_reg <= {8{1'b 0}};
      dout_reg <= {8{1'b 0}};
      derror_reg <= 1'b 0;
      derror_reg <= 1'b 0;
      start_gen <= 1'b 0;
      start_gen <= 1'b 0;
      ipg_len_i <= 0;
      ipg_len_i <= 0;
      done_reg <= 1'b 0;
      done_reg <= 1'b 0;
      end
      end
   else
   else
      begin
      begin
      eop_ex <= eop_int;
      eop_ex <= eop_int;
      sop_ex <= sop_int;
      sop_ex <= sop_int;
      dout_reg <= #(thold) data8;
      dout_reg <= #(thold) data8;
      derror_reg <= #(thold) rx_er_int;
      derror_reg <= #(thold) rx_er_int;
//      enable_int <= enable; 
//      enable_int <= enable; 
      if (done_gen == 1'b 1 & enable_int == 1'b 1 &
      if (done_gen == 1'b 1 & enable_int == 1'b 1 &
    (state == stm_typ_s_idle | state == stm_typ_s_ipg0 |
    (state == stm_typ_s_idle | state == stm_typ_s_ipg0 |
    state == stm_typ_s_data & eop_int == 1'b 1 &
    state == stm_typ_s_data & eop_int == 1'b 1 &
    ipg_len_i < 4 & start == 1'b 1))
    ipg_len_i < 4 & start == 1'b 1))
         begin
         begin
//  nextstate=S_IPG0
//  nextstate=S_IPG0
         start_gen <= start;
         start_gen <= start;
         end
         end
      else
      else
         begin
         begin
         start_gen <= 1'b 0;
         start_gen <= 1'b 0;
         end
         end
      if ((state == stm_typ_s_data | state == stm_typ_s_ipg0) &
      if ((state == stm_typ_s_data | state == stm_typ_s_ipg0) &
    enable_int == 1'b 1 )//| start_gen == 1'b 1)
    enable_int == 1'b 1 )//| start_gen == 1'b 1)
         begin
         begin
         dval_reg <= #(thold) 1'b 1;
         dval_reg <= #(thold) 1'b 1;
         end
         end
      else
      else
         begin
         begin
         dval_reg <= #(thold) 1'b 0;
         dval_reg <= #(thold) 1'b 0;
         end
         end
//  store input variables that could change until end of frame
//  store input variables that could change until end of frame
      if (sop_int == 1'b 1)
      if (sop_int == 1'b 1)
         begin
         begin
         ipg_len_i <= ipg_len;
         ipg_len_i <= ipg_len;
         end
         end
//  output last word modulo during eop
//  output last word modulo during eop
//      if (eop_int == 1'b 1)
//      if (eop_int == 1'b 1)
//         begin
//         begin
//         tmod_reg <= #(thold) bytecnt_eop;  
//         tmod_reg <= #(thold) bytecnt_eop;  
//         end
//         end
//      else if (eop_ex == 1'b 0 )
//      else if (eop_ex == 1'b 0 )
//         begin
//         begin
//         tmod_reg <= #(thold) {2{1'b 0}};   
//         tmod_reg <= #(thold) {2{1'b 0}};   
//         end
//         end
      done_reg <= done_gen;
      done_reg <= done_gen;
      end
      end
   end
   end
//  ------------------------
//  ------------------------
//  capture GMII data bytes
//  capture GMII data bytes
//  ------------------------
//  ------------------------
always @(posedge tx_clk or posedge reset)
always @(posedge tx_clk or posedge reset)
   begin : process_6
   begin : process_6
   if (reset == 1'b 1)
   if (reset == 1'b 1)
      begin
      begin
      data8 <= {8{1'b 0}};
      data8 <= {8{1'b 0}};
      end
      end
   else
   else
      begin
      begin
      if (sop_gen == 1'b 1 & rx_dv == 1'b 1)
      if (sop_gen == 1'b 1 & rx_dv == 1'b 1)
         begin
         begin
//  first byte
//  first byte
         data8 <= {rxd[7:0]};
         data8 <= {rxd[7:0]};
         end
         end
      else if (rx_dv == 1'b 1 )
      else if (rx_dv == 1'b 1 )
         begin
         begin
//  during frame
//  during frame
         data8 <= {rxd[7:0]};
         data8 <= {rxd[7:0]};
         end
         end
      end
      end
    end
    end
 
 
//  ------------------------
//  ------------------------
//  state machine
//  state machine
//  ------------------------
//  ------------------------
always @(posedge clk or posedge reset)
always @(posedge clk or posedge reset)
   begin : process_7
   begin : process_7
   if (reset == 1'b 1)
   if (reset == 1'b 1)
      begin
      begin
      state <= stm_typ_s_idle;
      state <= stm_typ_s_idle;
      count <= 8;
      count <= 8;
      end
      end
   else
   else
      begin
      begin
      if (state == stm_typ_s_ipg)
      if (state == stm_typ_s_ipg)
         begin
         begin
         count <= count + 3'b 100;
         count <= count + 3'b 100;
         end
         end
      else
      else
         begin
         begin
         count <= 8;
         count <= 8;
         end
         end
      case (state)
      case (state)
      stm_typ_s_idle:
      stm_typ_s_idle:
         begin
         begin
         if (done_gen == 1'b 0) //  has the generator been triggered ?
         if (done_gen == 1'b 0) //  has the generator been triggered ?
            begin
            begin
            state <= stm_typ_s_data;
            state <= stm_typ_s_data;
            end
            end
         else
         else
            begin
            begin
            state <= stm_typ_s_idle;
            state <= stm_typ_s_idle;
            end
            end
         end
         end
      stm_typ_s_data:
      stm_typ_s_data:
         begin
         begin
         if (eop_int == 1'b 0 & enable_int == 1'b 1)
         if (eop_int == 1'b 0 & enable_int == 1'b 1)
            begin
            begin
            state <= stm_typ_s_data;
            state <= stm_typ_s_data;
            end
            end
         else if (eop_int == 1'b 0 & enable_int == 1'b 0 )
         else if (eop_int == 1'b 0 & enable_int == 1'b 0 )
            begin
            begin
            state <= stm_typ_s_wait;
            state <= stm_typ_s_wait;
            end
            end
         else if (eop_int == 1'b 1 )
         else if (eop_int == 1'b 1 )
            begin
            begin
            if (ipg_len_i < 4 & start == 1'b 1)
            if (ipg_len_i < 4 & start == 1'b 1)
               begin
               begin
               state <= stm_typ_s_ipg0; //  no IPG
               state <= stm_typ_s_ipg0; //  no IPG
               end
               end
            else if (ipg_len_i < 8 )
            else if (ipg_len_i < 8 )
               begin
               begin
               state <= stm_typ_s_idle;
               state <= stm_typ_s_idle;
               end
               end
            else
            else
               begin
               begin
               state <= stm_typ_s_ipg;
               state <= stm_typ_s_ipg;
               end
               end
            end
            end
         else
         else
            begin
            begin
            state <= stm_typ_s_data;
            state <= stm_typ_s_data;
            end
            end
         end
         end
      stm_typ_s_ipg:
      stm_typ_s_ipg:
         begin
         begin
         if (count < ipg_len_i)
         if (count < ipg_len_i)
            begin
            begin
            state <= stm_typ_s_ipg;
            state <= stm_typ_s_ipg;
            end
            end
         else
         else
            begin
            begin
            state <= stm_typ_s_idle;
            state <= stm_typ_s_idle;
            end
            end
         end
         end
      stm_typ_s_ipg0:
      stm_typ_s_ipg0:
         begin
         begin
         state <= stm_typ_s_data;
         state <= stm_typ_s_data;
         end
         end
      stm_typ_s_wait:
      stm_typ_s_wait:
         begin
         begin
         if (enable_int == 1'b 1)
         if (enable_int == 1'b 1)
            begin
            begin
            state <= stm_typ_s_data;
            state <= stm_typ_s_data;
            end
            end
         else
         else
            begin
            begin
            state <= stm_typ_s_wait;
            state <= stm_typ_s_wait;
            end
            end
         end
         end
      default:
      default:
         begin
         begin
         state <= stm_typ_s_idle;
         state <= stm_typ_s_idle;
         end
         end
      endcase
      endcase
      end
      end
   end
   end
 
 
 
 
 
 
always @(posedge clk or posedge reset)
always @(posedge clk or posedge reset)
 begin
 begin
   if (reset == 1'b 1)
   if (reset == 1'b 1)
      begin
      begin
          dout_temp  <= {8{1'b 0}};
          dout_temp  <= {8{1'b 0}};
          dval_temp  <= {{1'b 0}};
          dval_temp  <= {{1'b 0}};
          derror_temp<= {{1'b 0}};
          derror_temp<= {{1'b 0}};
          sop_temp   <= {{1'b 0}};
          sop_temp   <= {{1'b 0}};
          eop_temp   <= {{1'b 0}};
          eop_temp   <= {{1'b 0}};
          done_temp  <= 1'b 0;
          done_temp  <= 1'b 0;
 
 
 
 
      end
      end
   else
   else
    begin
    begin
             dout_temp     <= #(thold) dout_reg;
             dout_temp     <= #(thold) dout_reg;
             dval_temp     <= #(thold) dval_reg;
             dval_temp     <= #(thold) dval_reg;
             derror_temp   <= #(thold) derror_reg;
             derror_temp   <= #(thold) derror_reg;
             sop_temp      <= #(thold) sop_ex;
             sop_temp      <= #(thold) sop_ex;
             eop_temp      <= #(thold) eop_ex;
             eop_temp      <= #(thold) eop_ex;
             done_temp     <= #(thold) done_reg;
             done_temp     <= #(thold) done_reg;
    end
    end
 end
 end
 
 
generate if (ZERO_LATENCY == 1)
generate if (ZERO_LATENCY == 1)
    begin
    begin
    timing_adapter_8 tb_adapter (
    timing_adapter_8 tb_adapter (
 
 
          // Interface: clk
          // Interface: clk
          .clk(clk),                             //input
          .clk(clk),                             //input
          .reset(reset),                            //input
          .reset(reset),                            //input
          // Interface: in 
          // Interface: in 
          .in_ready(enable_int),                    //output
          .in_ready(enable_int),                    //output
          .in_valid(dval_temp),                     //input
          .in_valid(dval_temp),                     //input
          .in_data(dout_temp),                      //input
          .in_data(dout_temp),                      //input
          .in_startofpacket(sop_temp),              //input
          .in_startofpacket(sop_temp),              //input
          .in_endofpacket(eop_temp),                //input
          .in_endofpacket(eop_temp),                //input
          .in_error({derror_temp}),                 //input
          .in_error({derror_temp}),                 //input
          // Interface: out
          // Interface: out
          .out_ready(enable),                       //input
          .out_ready(enable),                       //input
          .out_valid(dval),                        //output
          .out_valid(dval),                        //output
          .out_data(dout),                           //output
          .out_data(dout),                           //output
          .out_startofpacket(sop),                  //output
          .out_startofpacket(sop),                  //output
          .out_endofpacket(eop),                    //output
          .out_endofpacket(eop),                    //output
          .out_error({derror})                       //output
          .out_error({derror})                       //output
 
 
    );
    );
 
 
    assign done = done_temp;
    assign done = done_temp;
    end
    end
else
else
    begin
    begin
     always @(posedge clk or posedge reset)
     always @(posedge clk or posedge reset)
       begin
       begin
         if (reset == 1'b 1)
         if (reset == 1'b 1)
           enable_reg <= 1'b 0;
           enable_reg <= 1'b 0;
         else
         else
           enable_reg <= enable;
           enable_reg <= enable;
        end
        end
         assign enable_int = enable_reg;
         assign enable_int = enable_reg;
     assign dout     =  dout_temp;
     assign dout     =  dout_temp;
     assign dval     =  dval_temp;
     assign dval     =  dval_temp;
     assign derror   =  derror_temp;
     assign derror   =  derror_temp;
     assign sop      =  sop_temp;
     assign sop      =  sop_temp;
     assign eop      =  eop_temp;
     assign eop      =  eop_temp;
     assign done     =  done_temp;
     assign done     =  done_temp;
    end
    end
endgenerate
endgenerate
 
 
 
 
//  Generator
//  Generator
//  ---------
//  ---------
ethgenerator  gen1g (
ethgenerator  gen1g (
          .reset(reset),
          .reset(reset),
          .rx_clk(tx_clk),
          .rx_clk(tx_clk),
          .enable(1'b1),
          .enable(1'b1),
          .rxd(rxd),
          .rxd(rxd),
          .rx_dv(rx_dv),
          .rx_dv(rx_dv),
          .rx_er(rx_er),
          .rx_er(rx_er),
          .sop(sop_gen),
          .sop(sop_gen),
          .eop(eop_gen),
          .eop(eop_gen),
          .mac_reverse(mac_reverse),
          .mac_reverse(mac_reverse),
          .dst(dst),
          .dst(dst),
          .src(src),
          .src(src),
          .prmble_len(prmble_len),
          .prmble_len(prmble_len),
          .pquant(pquant),
          .pquant(pquant),
          .vlan_ctl(vlan_ctl),
          .vlan_ctl(vlan_ctl),
          .len(len),
          .len(len),
          .frmtype(frmtype),
          .frmtype(frmtype),
          .cntstart(cntstart),
          .cntstart(cntstart),
          .cntstep(cntstep),
          .cntstep(cntstep),
          .ipg_len(16'h 4),
          .ipg_len(16'h 4),
          .payload_err(payload_err),
          .payload_err(payload_err),
          .prmbl_err(prmbl_err),
          .prmbl_err(prmbl_err),
          .crc_err(crc_err),
          .crc_err(crc_err),
          .vlan_en(vlan_en),
          .vlan_en(vlan_en),
          .stack_vlan(stack_vlan),
          .stack_vlan(stack_vlan),
          .pause_gen(pause_gen),
          .pause_gen(pause_gen),
          .pad_en(pad_en),
          .pad_en(pad_en),
          .phy_err(phy_err),
          .phy_err(phy_err),
          .end_err(end_err),
          .end_err(end_err),
          .data_only(data_only),
          .data_only(data_only),
                  .runt_gen(1'b0) ,
                  .runt_gen(1'b0) ,
          .long_pause(1'b0),
          .long_pause(1'b0),
          .carrier_sense(1'b0),
          .carrier_sense(1'b0),
          .false_carrier(1'b0),
          .false_carrier(1'b0),
          .carrier_extend(1'b0),
          .carrier_extend(1'b0),
          .carrier_extend_error(1'b0),
          .carrier_extend_error(1'b0),
          .start(start_gen),
          .start(start_gen),
          .done(done_gen));
          .done(done_gen));
 
 
defparam gen1g.ENABLE_SHIFT16 = ENABLE_SHIFT16;
defparam gen1g.ENABLE_SHIFT16 = ENABLE_SHIFT16;
defparam gen1g.thold         = 0.1;
defparam gen1g.thold         = 0.1;
 
 
 
 
endmodule // module top_ethgenerator_8
endmodule // module top_ethgenerator_8
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.