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

Subversion Repositories udp_ip__core

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /udp_ip__core
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/trunk/JAVA_app/setup.sh
0,0 → 1,16
#! /bin/sh
 
# This script sets up the basic network configuration and a 'fake' ARP table
# entry for the FPGA.
# We assume that the FPGA is connected to the ethernet port eth0.
# The IP adress of the PC is fixed to 192.168.1.2, the IP of the FPGA
# is fixed to 192.168.1.1.
# The ARP table entry will cause every packet sent to 192.168.1.1
# to be routed to the FPGA.
 
sudo ifconfig eth0 down
 
sudo ifconfig eth0 -arp
sudo ifconfig eth0 192.168.1.2
sudo arp -i eth0 -s 192.168.1.1 FF:FF:FF:FF:FF:FF
sudo ifconfig eth0 mtu 9000
trunk/JAVA_app/setup.sh Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/JAVA_app/GigaRxLossy.java =================================================================== --- trunk/JAVA_app/GigaRxLossy.java (nonexistent) +++ trunk/JAVA_app/GigaRxLossy.java (revision 2) @@ -0,0 +1,247 @@ +/* + * Copyright (C) 2010 Simon A. Berger + * + * This program is free software; you may redistribute it and/or modify its + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * This program 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 General Public License + * for more details. + */ + + +/* + * This is the code used for the evaluation of the FPGA/PC communication using + * UDP/IP. + * This program can operate in two modes, which correspond to the two evaluations + * in the paper: + * - one way test: receive packets for 10 seconds. Calculate actual number of + * sent packets from the serial numbers. + * - two way (duplex) test: send a fixed number of packets and count received + * packets. + * + * The program mode is controlled with the DUPLEX_TEST constant. + * + * To compile this program use "javac GigaRxLossy.java" + * To run the program use "java GigaRxLoss" + */ + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.MappedByteBuffer; +import java.nio.IntBuffer; +import java.nio.DoubleBuffer; + +import java.nio.channels.ClosedByInterruptException; +import java.nio.channels.DatagramChannel; + + +public class GigaRxLossy { + public static boolean isValid( ByteBuffer b, int size ) { + int ref = b.get(); + + for( int i = 1; i < size; i++ ) { + if( b.get() != ref ) { + + return false; + } + } + + return true; + } + + public static void main(String[] args) throws IOException, InterruptedException { + final int MTU = 1500; + + final SocketAddress rxaddr = new InetSocketAddress( 21844 ); + + final DatagramChannel rxc = DatagramChannel.open(); + + rxc.socket().bind(rxaddr); + + final SocketAddress txsendtoaddr = new InetSocketAddress( "192.168.1.1", 21845 ); + + + // set this constant to: + // - false for the one-way test + // - true for the duplex test + + boolean DUPLEX_TEST = !true; + + + boolean haveTx; + boolean trigger; + if( DUPLEX_TEST ) { + haveTx = true; + trigger = false; + + } else { + haveTx = false; + trigger = true; + } + + + final DatagramChannel txc; + + if( haveTx || trigger ) + { + txc = DatagramChannel.open(); + txc.socket().bind(null); + } else { + txc = null; + } + + final Thread reader = new Thread() { + // this is the recaiver thread + @Override + public void run() { + + java.nio.ByteBuffer rxb = ByteBuffer.allocateDirect(MTU); + + boolean first = true; + int firstser = -1; + int lastser = -1; + int nrec = 0; + long time = System.currentTimeMillis(); + + long rxbytes = 0; + long txn = 0; + try { + //rxc.connect(rxaddr); + + + while( !isInterrupted() ) { + + rxb.rewind(); + rxc.receive(rxb); + int rxsize = rxb.position(); + + rxb.rewind(); + //int ser = rxb.asIntBuffer().get(0); + IntBuffer ib = rxb.asIntBuffer(); +// DoubleBuffer db = rxb.asDoubleBuffer(); + + int ser = ib.get()>>>24; + + // calculate the number of actually sent packets from the serial + // number. + if( !first ) { + if( ser < lastser ) { + txn += ser - (lastser - 256 ); + } else { + txn += ser - lastser; + } + //System.out.printf( "int %d\n", txn ); + } else { + first = false; + } + lastser = ser; + + if( firstser == -1 ) { + firstser = ser; + } + + + // for maximum speed the validity check may be disabled as the current + // implementation is fairly inefficient. In our tests we never got any + // packet corruption. + boolean CHECK_VALID = true; + if( CHECK_VALID ) { + if( !isValid( rxb, rxsize ) ) { + System.out.println( "invalid" ); + } + } +// lastser = ser; + nrec++; + rxbytes+=rxsize; + + } + } catch( ClosedByInterruptException e ) { + System.out.printf( "reader: interrupted. bye ...\n" ); + + } catch (IOException e) { + + // TODO Auto-generated catch block + e.printStackTrace(); + throw new RuntimeException( "bailing out." ); + } + long dt = System.currentTimeMillis() - time; + System.out.printf( "%d bytes in %d ms: %.2f Mb/s\n", rxbytes, dt, rxbytes / (dt * 1000.0) ); + int serrange = (lastser - firstser) + 1; + System.out.printf( "nrec: %d of %d (%.2f%%)\n", nrec, txn, nrec / (float)txn * 100.0 ); + } + }; + + if( !trigger ) { + reader.start(); + } + + if( haveTx ) { + Thread writer = new Thread() { + // this is the sender thread. + @Override + public void run() { + // TODO Auto-generated method stub + //java.nio.ByteBuffer txb = MappedByteBuffer.allocate(MTU); + java.nio.ByteBuffer txb = java.nio.ByteBuffer.allocateDirect(MTU); + int i = 0; + long time = System.currentTimeMillis(); + + long txbytes = 0; + long nj = 0; + while( i < 1000000 ) { + txb.rewind(); + + txb.asIntBuffer().put(0, i); + txb.rewind(); + try { + txbytes += txc.send(txb, txsendtoaddr); + + + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + i++; + + if( i % 10000 == 0 ) { + System.out.printf( "tx -> rx %d\n", i ); + } + + // if( ack.i != -1 ) { + // i = ack.i; + // ack.i = -1; + // } + } + long dt = System.currentTimeMillis() - time; + System.out.printf( "%d bytes in %d ms: %.2f Mb/s\n", txbytes, dt, txbytes / (dt * 1000.0) ); + } + }; + + + + writer.start(); + + writer.join(); + reader.interrupt(); + } else { + if( trigger ) { + java.nio.ByteBuffer txb = java.nio.ByteBuffer.allocateDirect(MTU); + txc.send(txb, txsendtoaddr); + Thread.sleep( 1000 ); + } + reader.start(); + Thread.sleep(10000); + reader.interrupt(); + } + } +}
trunk/JAVA_app/GigaRxLossy.java Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/PAPER/alachiot_berg_stamatak__UDP_IP_core.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/PAPER/alachiot_berg_stamatak__UDP_IP_core.pdf =================================================================== --- trunk/PAPER/alachiot_berg_stamatak__UDP_IP_core.pdf (nonexistent) +++ trunk/PAPER/alachiot_berg_stamatak__UDP_IP_core.pdf (revision 2)
trunk/PAPER/alachiot_berg_stamatak__UDP_IP_core.pdf Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.xco =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.xco (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.xco (revision 2) @@ -0,0 +1,59 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Thu Feb 04 10:01:48 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc3s200 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ft256 +SET removerpms = False +SET simulationfiles = Structural +SET speedgrade = -4 +SET verilogsim = False +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT Comparator family Xilinx,_Inc. 9.0 +# END Select +# BEGIN Parameters +CSET aclr=false +CSET ainitval=0 +CSET aset=false +CSET ce=false +CSET cepriority=Sync_Overrides_CE +CSET component_name=comp_11b_equal +CSET constantbport=false +CSET constantbportvalue=0000000000000000 +CSET datatype=Unsigned +CSET nonregisteredoutput=false +CSET operation=eq +CSET pipelinestages=0 +CSET radix=2 +CSET registeredoutput=true +CSET sclr=false +CSET sset=false +CSET syncctrlpriority=Reset_Overrides_Set +CSET width=11 +# END Parameters +GENERATE +# CRC: 40267d7f +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.xco Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/PACKET_RECEIVER_FSM.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/PACKET_RECEIVER_FSM.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/PACKET_RECEIVER_FSM.vhd (revision 2) @@ -0,0 +1,238 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 03:48:34 02/07/2010 +-- Design Name: +-- Module Name: PACKET_RECEIVER_FSM - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity PACKET_RECEIVER_FSM is + Port ( + rst : in STD_LOGIC; + clk : in STD_LOGIC; + + -- Signals from EMAC + rx_sof: in STD_LOGIC; -- active low input + rx_eof: in STD_LOGIC; -- active low input + + -- Signals to Counter and Comparator + sel_comp_Bval: out STD_LOGIC; + comp_Bval: out STD_LOGIC_VECTOR(10 downto 0); + rst_count : out STD_LOGIC; + en_count : out STD_LOGIC; + + -- Signal from Comparator + comp_eq: in STD_LOGIC; + + -- Signals to Length Register + wren_MSbyte: out STD_LOGIC; + wren_LSbyte: out STD_LOGIC; + + -- Signal to user interface + valid_out_usr_data: out STD_LOGIC); +end PACKET_RECEIVER_FSM; + +architecture Behavioral of PACKET_RECEIVER_FSM is + +TYPE state is (rst_state, + idle_state, + detect_n_store_usr_length_MSbyte_state, + store_usr_length_LSbyte_state, + checksum_gap_state, + receive_usr_data_state); + +signal current_st,next_st: state; + +constant udp_length_match_cycle : std_logic_vector(10 downto 0):="00000100100"; -- UDP length MSbyte - 2 +constant udp_checksum_skip : std_logic_vector(10 downto 0):="00000000001"; +constant gnd_vec : std_logic_vector(10 downto 0):="00000000000"; +begin + +process(current_st,rx_sof,rx_eof,comp_eq) +begin +case current_st is + + +when rst_state => + + sel_comp_Bval<='0'; + comp_Bval<=gnd_vec; + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=idle_state; + +when idle_state => + + if rx_sof='0' then -- rx_sof is active low + sel_comp_Bval<='0'; + comp_Bval<=udp_length_match_cycle; + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=detect_n_store_usr_length_MSbyte_state; + + else + sel_comp_Bval<='0'; + comp_Bval<=gnd_vec; + rst_count<='0'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=idle_state; + end if; + +when detect_n_store_usr_length_MSbyte_state => + + if comp_eq='1' then -- comp_eq is active high + sel_comp_Bval<='0'; + comp_Bval<=udp_checksum_skip; -- Just to skip the UDP checksum field + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='1'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=store_usr_length_LSbyte_state; + + else + sel_comp_Bval<='0'; + comp_Bval<=udp_length_match_cycle; + rst_count<='0'; + en_count<='1'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=detect_n_store_usr_length_MSbyte_state; + end if; + +when store_usr_length_LSbyte_state => + + sel_comp_Bval<='0'; + comp_Bval<=udp_checksum_skip; -- Just to skip the UDP checksum field + rst_count<='0'; + en_count<='1'; + + wren_MSbyte<='0'; + wren_LSbyte<='1'; + + valid_out_usr_data<='0'; + + next_st<=checksum_gap_state; + +when checksum_gap_state => + + if comp_eq='1' then -- comp_eq is active high + sel_comp_Bval<='1'; + comp_Bval<=gnd_vec; + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=receive_usr_data_state; + + else + sel_comp_Bval<='0'; + comp_Bval<=udp_checksum_skip; + rst_count<='0'; + en_count<='1'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=checksum_gap_state; + end if; + +when receive_usr_data_state => + + if (comp_eq='1' or rx_eof='0') then -- comp_eq is active high rx_eof is active-low + sel_comp_Bval<='0'; + comp_Bval<=udp_length_match_cycle; + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='1'; + + next_st<=idle_state; + + else + sel_comp_Bval<='1'; + comp_Bval<=gnd_vec; + rst_count<='0'; + en_count<='1'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='1'; + + next_st<=receive_usr_data_state; + end if; + + +end case; +end process; + + + + +process(clk) +begin +if (rst='1') then + current_st<= rst_state; +elsif (clk'event and clk='1') then + current_st <= next_st; +end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/PACKET_RECEIVER_FSM.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/REG_8b_wren.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/REG_8b_wren.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/REG_8b_wren.vhd (revision 2) @@ -0,0 +1,56 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 14:40:03 02/07/2010 +-- Design Name: +-- Module Name: REG_8b_wren - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity REG_8b_wren is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + wren : in STD_LOGIC; + input_val : in STD_LOGIC_VECTOR (7 downto 0); + output_val : inout STD_LOGIC_VECTOR(7 downto 0)); +end REG_8b_wren; + +architecture Behavioral of REG_8b_wren is + +begin + +process(clk) +begin +if rst='1' then + output_val<="00000000"; +else + if clk'event and clk='1' then + if wren='1' then + output_val<=input_val; + end if; + end if; +end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/REG_8b_wren.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_11B_EN_RECEIV.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_11B_EN_RECEIV.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_11B_EN_RECEIV.vhd (revision 2) @@ -0,0 +1,58 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 16:16:57 11/30/2009 +-- Design Name: +-- Module Name: COUNTER_11B_EN_RECEIV - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity COUNTER_11B_EN_RECEIV is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (10 downto 0)); +end COUNTER_11B_EN_RECEIV; + +architecture Behavioral of COUNTER_11B_EN_RECEIV is + +begin + +process(clk) +begin +if rst='1' then + value_O<="00000000000"; +else + if clk'event and clk='1' then + if count_en='1' then + value_O<=value_O+"00000000001"; + else + value_O<=value_O; + end if; + end if; +end if; +end process; + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_11B_EN_RECEIV.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_6B_LUT_FIFO_MODE.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_6B_LUT_FIFO_MODE.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_6B_LUT_FIFO_MODE.vhd (revision 2) @@ -0,0 +1,63 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 02:30:12 11/30/2009 +-- Design Name: +-- Module Name: COUNTER_6B_LUT_FIFO_MODE - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity COUNTER_6B_LUT_FIFO_MODE is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + funct_sel : in STD_LOGIC; -- 0 for lut addressing, 1 for fifo addressing + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (5 downto 0)); +end COUNTER_6B_LUT_FIFO_MODE; + +architecture Behavioral of COUNTER_6B_LUT_FIFO_MODE is + +begin + +process(clk) +begin +if rst='1' then + if funct_sel='0' then + value_O<=(others=>'0'); + else + value_O<="100111"; + end if; +else + if clk'event and clk='1' then + if count_en='1' then + value_O<=value_O+"000001"; + else + value_O<=value_O; + end if; + end if; +end if; +end process; + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_6B_LUT_FIFO_MODE.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.ngc =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.ngc (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.ngc (revision 2) @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$6fx5d=#Zl|bdaa:!3-522):'?%8#?/$0937>7)8j18?>?fu062(2b3?0BB][[:`>6>58b3?0BB][[:c>6>58531:?74>?929AQ7>E='YBoS]|`jdaww*RomVLn`~kasugjjZEhX{ehi~}`r.ALV@ABFVNndia/uos+Ze`'jef|R8m_dsvei(iof;97NFJCJ]OMFCI[LU_U]K6;BMNILRSMM;?7NA]E^EFJ@TF\@EESD@IO69@V@GSMM;0H?5ID09D7>AIL;1BJHIMOO;6B@GHABH1=K]]9?7A[[4b9Neoiu^lxxeb`l;LkmkwPbzzcdb>5A1118J4743G;9?6@>329M51453G3m7CLPBTQSMKYWZFZX;6@JTVMQO4=H:2E@=6^;;QCQPd=WAGUIY^GKXc9SMKYE]ZDJAH?4Q79PKPTDM=1_U]K9c:W3+bciWz~yynzzrd]okbod&noeScaaphrfhlhbl'kTi|{nl^llp`wrieUi"dQn_ds\j`Ye'noeSb{{ptv\v`a)g|~{yyQ}ef-e`*ir|yS<7m;T2,c`hX{}x~oy{}e^nlcle)oldTbb`iqgomkcc&hUn}xoc_omwatsfdVh%eRoPep]maZd(aVxiRmnrs{\tistWe#bzt^cm`+oXoh~nSog{/ukfvZabfR;V"dQ{idp,hjiwW}cgi~U?]/k\pljb'f8=5o5Z0.efjZusz|iykPlnejg+abfVddb}gemkmaa(fWl{~maQaougrqdjXj'cTmRk~_og\f*oX}zoTol|}y^roqvYk}}y%`xzPaof-mZaf|lUiey!{idp\c`h\9T$bSygjr.nlkuYsaeoxW=S!i^vjh`)h=:3i7X> gdl\wqtrk}yiRb`gha-c`hXffd{e}kciogg*dYby|kgSca{epwbhZd)aVkTi|Qae^`,mZstmVij~wPpmwp[iss{'f~xRoad/k\cdrbWkc#ygjr^efj^7Z&`Ueh| lnms[qokmzQ;Q#gPthnf+j>71k1^<"ijn^qwvpes}{oT`bifc/efjZhhfyc{iagaee,b[`wrieUecyk~u`n\f+oXiVozSckPb.k\qvcXkhxyuR~cur]oqqu)d|~Tmcj!i^ebp`Yea}%eh|PgdlX5X(nW}cn~"b`oq]wmictS9W%eRzfld-l=0353\:$kh`PsupvgqsumVfdkdm!gdl\jjhwayogeckk.`]fupgkWgei|{nl^`-mZgXmxUeiRl tdos[wct}e~j7X]JR^COMDUd3\YN^RXFSH@OA6=QKJ30ZDKX_U[SA4b0:ZgiZKnffx]i}foo68e-6.<2k#=$:4a)0*0>g/; >0m%:&4:c+1,2g;=3:586o35?48eZcvWk<0mRij_c48eZasWk<0mRbj_c48eZjsWk<0mR`j_c68efju<2kxiy:4b)2*0>d/9 >0n%<&4:`+7,2"86l'5(68f969<2h7=3:4b=0=0>d;;7>0n1:16:`?1?69<2h793=>;b]`khvfzlU}5R># Ykomk~'KFXN,Jkaescwkw&68';%<>Qfp208g`5#c^fbpdYsqyo6=!mPsxl`[utng{cu0?#c^jbwZudd{7; nQgar]reZasWk7; nQxievk93*dWakxS|oPep]a94*dWakxSlQce^`>4)eXi`dbxRxnl<2/gjkwggoexR`nmd?`khvX>kUn}xoc,b]smucX{}kli~3?,b]kevYdm4:'oRfns^c`hw;7$jUxucmPeocah`;7$jUcm~Q|sdv>4)eX`hyT}lQce^`>4)eX`hyTmRij_c?3(fYeWjeeyoat<2/gZnf{VkT`yQm=1.`[mgtWhUeiRl20-a\fZpfd|o6<=>?0123456789:; p<=;bmntZ0eWl{~maQl_bmntdtbW3T1zmRi{_c58udYkmVh<7|oPlu]a3>wfWgoTn95|cmp7?vub|tJK|5j4@Aza>C<328qXj79<:38277d3>j0:4:6>{o6;>4=i<00?7):9:508yVb=?:096<==b54`>4>0081X=4484;29564e22=83;8>o:9c;3;3=725=:3;8>o:9c;3;3=7<~]9=6=4>:0827~Ua2>91>7?<2c65g?7??1;0(9?51`9U02<5s|;o6<5z1d83?x"4:390n;h50;g97?c|@:l0V44={586>x"4?35=7c=<:298m1d=83.887;:;o10>1=7=50;&00?0f3g986954i4d94?"4<35<6290;wE=i;%14>454c=>3;8wE=i;[;90~2==3>197s+36846>"d2>:0(h481:&1`?573`=i6=44o4594?=n=m0;66a86;29?l0c2900c8l50;9l1<<722e>m7>5;h6e>5<#;=0>96`<3;28?l2b290/?94:5:l07?7<3`>o6=4+35861>h4;3807d:l:18'71<2=2d8?7=4;h6a>5<#;=0>96`<3;68?l2f290/?94:5:l07?3<3`h4;3:07d8<:18'71<1i2d8?7?4;h41>5<#;=0=m6`<3;08?l06290/?949a:l07?5<3`<;6=4+3585e>h4;3>07d;i:18'71<1i2d8?7;4;n7;>5<k1<75`7483>>o1m3:17b96:188m2e=831b9h4?::m43?6=3f?h6=44o6:94?=e<=0;6<4?:1y'72<6;2B??6F53;294~"4?3;:7E:<;I1e?!7?281bm7>5;h33>5<951b9K06=O;o1/=548;h37>5<>o6?3:17b6=4?{%14>4e<@=90D>h4$0:93>o6<3:17d?::188m40=831b=:4?::m1b?6=3th8n7>55;294~"4?3;h7E:<;I1e?!7?2>1b=94?::k21?6=3`;=6=44i0594?=h:o0;66sm3b83>1<729q/?:4>b:J77>N4n2.:4784i0694?=n9<0;66g>6;29?j4a2900q~;7:18`[1f3W?i7S;n;_74?[3d3W=<7S99;_5:?[1?3W?27S;7;<67>4475159~w02=838pR9k4=2;953=z{<91<7l5159~w06=838pR9o4=2`953=z{?h1<7o5149~w31=838pR;?4=2c952=z{?<1<7{t;00;6?u23881b>;4k3;?7p}{t==0;6?uQ4d9>5<5sW>o70654e9'7`<5?2wx9?4?:3y]0f=:03>h7)=j:3:8yv362909wS:m;<:90g=#;l0956s|5183>7}Y7g=>=1/?h4=b:p2<<72;qU:>528;40?!5b2;i0q~87:181[053421:?5+3d82b>{t>>0;6?uQ609>4}r45>5<5sW<;7065619'7`<592wx:84?:3y]1c=:03?m7)=j:308yv0b2909wS8j;<:92`=#;l09?6s|7483>7}Y?<16479:;%1f>7352zJ0b>{i>m0;6?uG3g9~j3c=838pD>h4}o4e>5<5sA9m7p`80;296~N4n2we;<4?:3yK7c=zf>81<77}O;o1vb:850;0xL6`vF51zJ0b>{i>h0;6h4}|~DEE|0m08
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.ngc Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.xco =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.xco (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.xco (revision 2) @@ -0,0 +1,63 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Thu Feb 04 10:02:06 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc3s200 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ft256 +SET removerpms = False +SET simulationfiles = Structural +SET speedgrade = -4 +SET verilogsim = False +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT Distributed_Memory_Generator family Xilinx,_Inc. 3.4 +# END Select +# BEGIN Parameters +CSET ce_overrides=ce_overrides_sync_controls +CSET coefficient_file="C:/PHd_Projects/The_Felsenstein_CoProcessor/ISE_Design/THE_FELSENSTEIN_COPROCESSOR/Copy of definition1_l1_cache.coe" +CSET common_output_ce=false +CSET common_output_clk=false +CSET component_name=dist_mem_64x8 +CSET data_width=8 +CSET default_data=0 +CSET default_data_radix=16 +CSET depth=64 +CSET dual_port_address=non_registered +CSET dual_port_output_clock_enable=false +CSET input_clock_enable=false +CSET input_options=non_registered +CSET memory_type=rom +CSET output_options=registered +CSET pipeline_stages=0 +CSET qualify_we_with_i_ce=false +CSET reset_qdpo=false +CSET reset_qspo=false +CSET single_port_output_clock_enable=false +CSET sync_reset_qdpo=false +CSET sync_reset_qspo=false +# END Parameters +GENERATE +# CRC: 86e0277a +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.xco Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/OVERRIDE_LUT_CONTROL.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/OVERRIDE_LUT_CONTROL.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/OVERRIDE_LUT_CONTROL.vhd (revision 2) @@ -0,0 +1,108 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 15:09:25 11/30/2009 +-- Design Name: +-- Module Name: OVERRIDE_LUT_CONTROL - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity OVERRIDE_LUT_CONTROL is + Port ( clk : in STD_LOGIC; + input_addr : in STD_LOGIC_VECTOR (5 downto 0); + sel_total_length_MSBs : out STD_LOGIC; + sel_total_length_LSBs : out STD_LOGIC; + sel_header_checksum_MSBs : out STD_LOGIC; + sel_header_checksum_LSBs : out STD_LOGIC; + sel_length_MSBs : out STD_LOGIC; + sel_length_LSBs : out STD_LOGIC + ); +end OVERRIDE_LUT_CONTROL; + +architecture Behavioral of OVERRIDE_LUT_CONTROL is + +component comp_6b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + b : in STD_LOGIC_VECTOR ( 5 downto 0 ) + ); +end component; + +constant total_length_addr1 : std_logic_vector(5 downto 0):="010000"; +constant total_length_addr2 : std_logic_vector(5 downto 0):="010001"; + +constant header_checksum_addr1 : std_logic_vector(5 downto 0):="011000"; +constant header_checksum_addr2 : std_logic_vector(5 downto 0):="011001"; + +constant length_addr1 : std_logic_vector(5 downto 0):="100110"; +constant length_addr2 : std_logic_vector(5 downto 0):="100111"; + + +signal sel_header_checksum_MSBs_tmp : std_logic; +signal sel_total_length_MSBs_tmp : std_logic; +signal sel_length_MSBs_tmp : std_logic; + +begin + +TARGET_TOTAL_LENGTH_1 : comp_6b_equal port map (sel_total_length_MSBs_tmp,clk,input_addr,total_length_addr1); + +process(clk) +begin +if clk'event and clk='1' then + sel_total_length_LSBs<=sel_total_length_MSBs_tmp; +end if; +end process; +sel_total_length_MSBs<=sel_total_length_MSBs_tmp; + +--TARGET_TOTAL_LENGTH_2 : comp_6b_equal port map (sel_total_length_LSBs,clk,input_addr,total_length_addr2); + +TARGET_HEADER_CHECKSUM_1 : comp_6b_equal port map (sel_header_checksum_MSBs_tmp,clk,input_addr,header_checksum_addr1); +process(clk) +begin +if clk'event and clk='1' then + sel_header_checksum_LSBs<=sel_header_checksum_MSBs_tmp; +end if; +end process; + +sel_header_checksum_MSBs<=sel_header_checksum_MSBs_tmp; + + + +--TARGET_HEADER_CHECKSUM_2 : comp_6b_equal port map (sel_header_checksum_LSBs,clk,input_addr,header_checksum_addr2); + +TARGET_LENGTH_1 : comp_6b_equal port map (sel_length_MSBs_tmp,clk,input_addr,length_addr1); + +process(clk) +begin +if clk'event and clk='1' then + sel_length_LSBs<=sel_length_MSBs_tmp; +end if; +end process; + +sel_length_MSBs<=sel_length_MSBs_tmp; +--TARGET_LENGTH_2 : comp_6b_equal port map (sel_length_LSBs,clk,input_addr,length_addr2); + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/OVERRIDE_LUT_CONTROL.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPV4_PACKET_TRANSMITTER.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPV4_PACKET_TRANSMITTER.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPV4_PACKET_TRANSMITTER.vhd (revision 2) @@ -0,0 +1,437 @@ +----------------------------------------------------------------------------------------- +-- Copyright (C) 2010 Nikolaos Ch. Alachiotis -- +-- -- +-- Engineer: Nikolaos Ch. Alachiotis -- +-- -- +-- Contact: alachiot@cs.tum.edu -- +-- n.alachiotis@gmail.com -- +-- -- +-- Create Date: 14:45:39 11/27/2009 -- +-- Module Name: IPV4_PACKET_TRANSMITTER -- +-- Target Devices: Virtex 5 FPGAs -- +-- Tool versions: ISE 10.1 -- +-- Description: This component can be used to send IPv4 Ethernet Packets. -- +-- Additional Comments: The look-up table contains the header fields of the IP packet, -- +-- so please keep in mind that you have to reinitialize this LUT. -- +-- -- +----------------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity IPV4_PACKET_TRANSMITTER is + Port ( rst : in STD_LOGIC; + clk_125MHz : in STD_LOGIC; + transmit_start_enable : in STD_LOGIC; + transmit_data_length : in STD_LOGIC_VECTOR (15 downto 0); + usr_data_trans_phase_on : out STD_LOGIC; + transmit_data_input_bus : in STD_LOGIC_VECTOR (7 downto 0); + start_of_frame_O : out STD_LOGIC; + end_of_frame_O : out STD_LOGIC; + source_ready : out STD_LOGIC; + transmit_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0) + ); +end IPV4_PACKET_TRANSMITTER; + +architecture Behavioral of IPV4_PACKET_TRANSMITTER is + + +----------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------------------------------------------- +-- IPv4 PACKET STRUCTURE : -- +-- Size | Description | Transmission Order | Position -- +-- ----------------------------------------------------------------------------------------------------------- +-- 6 bytes | Destin MAC Address (PC) | 0 1 2 3 4 5 | LUT -- +-- | X-X-X-X-X-X | | -- +-- | | | -- +-- 6 bytes | Source MAC Address (FPGA) | 6 7 8 9 10 11 | LUT -- +-- | 11111111-11111111-11111111-11111111-... | | -- +-- 2 bytes | Ethernet Type * | 12 13 | LUT -- +-- | (fixed to 00001000-00000000 :=> | | -- +-- | Internet Protocol, Version 4 (IPv4)) | | -- +-- -- Start of IPv4 Packet ** - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- | -- +-- 1 byte | 4 MSBs = Version , 4 LSBs = Header Length | 14 | LUT -- +-- | 0100 0101 | | -- +-- 1 byte | Differentiated Services | 15 | LUT -- +-- | 00000000 | | -- +-- 2 bytes | Total Length | 16 17 | REG -- +-- | 00000000-00100100 (base: 20 + 8 + datalength)| | -- +-- 2 bytes | Identification | 18 19 | LUT -- +-- | 00000000-00000000 | | -- +-- 2 bytes | 3 MSBs = Flags , 13 LSBs = Fragment Offset | 20 21 | LUT -- +-- | 010 - 0000000000000 | | -- +-- 1 byte | Time to Live | 22 | LUT -- +-- | 01000000 | | -- +-- 1 byte | Protocol | 23 | LUT -- +-- | 00010001 | | -- +-- 2 bytes | Header Checksum | 24 25 | REG -- +-- | 10110111 01111101 (base value) | | -- +-- 4 bytes | Source IP Address | 26 27 28 29 | LUT -- +-- | X-X-X-X - FPGA | | -- +-- 4 bytes | Destin IP Address | 30 31 32 33 | LUT -- +-- | X-X-X-X - PC | | -- +-- -- Start of UDP Packet *** - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- | -- +-- 2 bytes | Source Port | 34 35 | LUT -- +-- | X-X | | -- +-- 2 bytes | Destination Port | 36 37 | LUT -- +-- | X-X | | -- +-- 2 bytes | Length | 38 39 | REG -- +-- | 00000000 - 00010000 (8 + # data bytes) | | -- +-- 2 bytes | Checksum | 40 41 | LUT -- +-- | 00000000 - 00000000 | | -- +-- X bytes | Data | 42 .. X | from input -- +-- | | | -- +----------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------------------------------------------- + +-- * More details about the Ethernet Type value you can find here: +-- http://en.wikipedia.org/wiki/Ethertype + +-- ** More details about the Internet Protocol, Version 4 (IPv4) you can find here: +-- http://en.wikipedia.org/wiki/IPv4 + +-- *** More details about the Internet Protocol, Version 4 (IPv4) you can find here: +-- http://en.wikipedia.org/wiki/User_Datagram_Protocol + +----------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------------------------------------------- + + + +-------------------------------------------------------------------------------------- +-- COMPONENT DECLARATION +-------------------------------------------------------------------------------------- + +component REG_16B_WREN is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + wren : in STD_LOGIC; + input : in STD_LOGIC_VECTOR (15 downto 0); + output : out STD_LOGIC_VECTOR (15 downto 0)); +end component; + +component IPV4_LUT_INDEXER is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + transmit_enable : in STD_LOGIC; + LUT_index : out STD_LOGIC_VECTOR (5 downto 0)); +end component; + +component dist_mem_64x8 is + port ( + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + qspo : out STD_LOGIC_VECTOR ( 7 downto 0 ) + ); +end component; + +component OVERRIDE_LUT_CONTROL is + Port ( clk : in STD_LOGIC; + input_addr : in STD_LOGIC_VECTOR (5 downto 0); + sel_total_length_MSBs : out STD_LOGIC; + sel_total_length_LSBs : out STD_LOGIC; + sel_header_checksum_MSBs : out STD_LOGIC; + sel_header_checksum_LSBs : out STD_LOGIC; + sel_length_MSBs : out STD_LOGIC; + sel_length_LSBs : out STD_LOGIC + ); +end component; + +component TARGET_EOF is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + start : in STD_LOGIC; + total_length_from_reg : in STD_LOGIC_VECTOR(15 downto 0); + eof_O : out STD_LOGIC); +end component; + +component ENABLE_USER_DATA_TRANSMISSION is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + start_usr_data_trans : in STD_LOGIC; + stop_usr_data_trans : in STD_LOGIC; + usr_data_sel : out STD_LOGIC); +end component; + +component ALLOW_ZERO_UDP_CHECKSUM is + Port ( clk : in STD_LOGIC; + input : in STD_LOGIC; + output_to_readen : out STD_LOGIC; + output_to_datasel : out STD_LOGIC); +end component; + + +-------------------------------------------------------------------------------------- +-- SIGNAL DECLARATION +-------------------------------------------------------------------------------------- + +signal transmit_start_enable_tmp, + sel_total_length_MSBs, + sel_total_length_LSBs, + sel_header_checksum_MSBs, + sel_header_checksum_LSBs, + sel_length_MSBs, + sel_length_LSBs, + lut_out_sel, + source_ready_previous_value, + end_of_frame_O_tmp, + transmit_start_enable_reg, + usr_data_sel_sig, + start_usr_data_read, + start_usr_data_trans : STD_LOGIC; + +signal LUT_addr : STD_LOGIC_VECTOR(5 downto 0); + +signal transmit_data_input_bus_tmp, + transmit_data_output_bus_tmp, + sel_total_length_MSBs_vec, + sel_total_length_LSBs_vec, + sel_header_checksum_MSBs_vec, + sel_header_checksum_LSBs_vec, + sel_length_MSBs_vec, + sel_length_LSBs_vec, + lut_out_sel_vec, + transmit_data_output_bus_no_usr_data, + usr_data_not_sel_vec, + usr_data_sel_vec : STD_LOGIC_VECTOR(7 downto 0); + +signal transmit_data_length_tmp, + data_length_regout, + tmp_total_length, + tmp_header_checksum, + tmp_header_checksum_baseval, + tmp_length : STD_LOGIC_VECTOR(15 downto 0); + + +begin + +transmit_start_enable_tmp<=transmit_start_enable; + +transmit_data_length_tmp<=transmit_data_length; + +transmit_data_input_bus_tmp<=transmit_data_input_bus; + +---------------------------------------------------------------------------------------------------- +-- start_of_frame_O signal +---------------------------------------------------------------------------------------------------- +-- Description: start_of_frame_O is active low +-- We connect it to the delayed for one clock cycle transmit_start_enable input signal +-- through a NOT gate since transmit_start_enable is active high. + +process(clk_125MHz) +begin +if clk_125MHz'event and clk_125MHz='1' then + transmit_start_enable_reg<=transmit_start_enable_tmp; -- Delay transmit_start_enable one cycle. +end if; +end process; + +start_of_frame_O<=not transmit_start_enable_reg; + +---------------------------------------------------------------------------------------------------- +-- end_of_frame_O signal +---------------------------------------------------------------------------------------------------- +-- Description: end_of_frame_O is active low +-- The TARGET_EOF module targets the last byte of the packet that is being transmitted +-- based on a counter that counts the number of transmitted bytes and a comparator that +-- detects the last byte which is the th byte. + +TARGET_EOF_port_map: TARGET_EOF port map +( + rst =>rst, + clk =>clk_125MHz, + start =>transmit_start_enable_reg, + total_length_from_reg =>tmp_total_length, + eof_O =>end_of_frame_O_tmp +); + +--* The counter in TARGET_EOF starts from -X, where X is the number of bytes transmitted before the +-- IPv4 packet. (MAC addresses + Ethernet Type) + +end_of_frame_O<=end_of_frame_O_tmp; + +---------------------------------------------------------------------------------------------------- +-- source_ready signal +---------------------------------------------------------------------------------------------------- +-- Description: source_ready is active low +-- This signal is idle(high). (based on rst and end_of_frame_O_tmp). +-- This signal is active(low). (based on transmit_start_enable and end_of_frame_O_tmp). + +process(clk_125MHz) +begin +if rst='1' then + source_ready<='1'; + source_ready_previous_value<='1'; +else + if clk_125MHz'event and clk_125MHz='1' then + if (transmit_start_enable_tmp='1' and source_ready_previous_value='1') then + source_ready<='0'; + source_ready_previous_value<='0'; + else + if (end_of_frame_O_tmp='0' and source_ready_previous_value='0') then + source_ready<='1'; + source_ready_previous_value<='1'; + end if; + end if; + end if; +end if; +end process; + +---------------------------------------------------------------------------------------------------- +-- transmit_data_output_bus +---------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------- +-- Component Name: REG_16B_WREN +-- Instance Name: NUMBER_OR_DATA_IN_BYTES_REGISTER +-- Description: Register that holds the number of bytes of input data +-- that will be transmitted in the packet. +---------------------------------------------------------------------------------------------------- +NUMBER_OR_DATA_IN_BYTES_REGISTER : REG_16B_WREN port map +( + rst =>rst, + clk =>clk_125MHz, + wren =>transmit_start_enable_tmp, -- The transmit_start_enable input signal can be used as wren. + input =>transmit_data_length_tmp, + output =>data_length_regout +); +---------------------------------------------------------------------------------------------------- + +tmp_total_length<="0000000000011100" + data_length_regout; + +tmp_header_checksum_baseval<="1011011101111101"; -- CHANGE VALUE! : You have to change this value! +tmp_header_checksum<=tmp_header_checksum_baseval - data_length_regout; + +tmp_length<="0000000000001000" + data_length_regout; + +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: IPV4_LUT_INDEXER +-- Instance Name: IPV4_LUT_INDEXER_port_map +-- Description: When transmit_enable is high for one cycle IPV4_LUT_INDEXER generates the +-- addresses to the LUT that contains the header section of the IP packet. +---------------------------------------------------------------------------------------------------- +IPV4_LUT_INDEXER_port_map : IPV4_LUT_INDEXER port map +( + rst =>rst, + clk =>clk_125MHz, + transmit_enable =>transmit_start_enable_tmp, + LUT_index =>LUT_addr +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: dist_mem_64x8 +-- Instance Name: LUT_MEM +-- Description: LUT that contains the header section. +---------------------------------------------------------------------------------------------------- +LUT_MEM : dist_mem_64x8 port map +( + clk =>clk_125MHz, + a =>LUT_addr, + qspo =>transmit_data_output_bus_tmp +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: OVERRIDE_LUT_CONTROL +-- Instance Name: OVERRIDE_LUT_CONTROL_port_map +-- Description: Decides whether the output byte will come from the LUT or not. +---------------------------------------------------------------------------------------------------- +OVERRIDE_LUT_CONTROL_port_map : OVERRIDE_LUT_CONTROL port map +( + clk =>clk_125MHz, + input_addr =>LUT_addr, + sel_total_length_MSBs =>sel_total_length_MSBs, + sel_total_length_LSBs =>sel_total_length_LSBs, + sel_header_checksum_MSBs =>sel_header_checksum_MSBs, + sel_header_checksum_LSBs =>sel_header_checksum_LSBs, + sel_length_MSBs =>sel_length_MSBs, + sel_length_LSBs =>sel_length_LSBs +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- MUX 7 to 1 +sel_total_length_MSBs_vec<=(others=>sel_total_length_MSBs); +sel_total_length_LSBs_vec<=(others=>sel_total_length_LSBs); +sel_header_checksum_MSBs_vec<=(others=>sel_header_checksum_MSBs); +sel_header_checksum_LSBs_vec<=(others=>sel_header_checksum_LSBs); +sel_length_MSBs_vec<=(others=>sel_length_MSBs); +sel_length_LSBs_vec<=(others=>sel_length_LSBs); +lut_out_sel_vec <= (others=>lut_out_sel); + +lut_out_sel<=(not sel_total_length_MSBs) and (not sel_total_length_LSBs) and + (not sel_header_checksum_MSBs) and (not sel_header_checksum_LSBs) and + (not sel_length_MSBs) and (not sel_length_LSBs); + +-- MUX output +transmit_data_output_bus_no_usr_data<= (transmit_data_output_bus_tmp and lut_out_sel_vec) or + (tmp_total_length(15 downto 8) and sel_total_length_MSBs_vec) or + (tmp_total_length(7 downto 0) and sel_total_length_LSBs_vec) or + (tmp_header_checksum(15 downto 8) and sel_header_checksum_MSBs_vec) or + (tmp_header_checksum(7 downto 0) and sel_header_checksum_LSBs_vec) or + (tmp_length(15 downto 8) and sel_length_MSBs_vec) or + (tmp_length(7 downto 0) and sel_length_LSBs_vec); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: ALLOW_ZERO_UDP_CHECKSUM +-- Instance Name: ALLOW_ZERO_UDP_CHECKSUM_port_map +-- Description: Delays the user data transmition phase in order to transmit two bytes with zero +-- first. +---------------------------------------------------------------------------------------------------- +ALLOW_ZERO_UDP_CHECKSUM_port_map: ALLOW_ZERO_UDP_CHECKSUM port map +( + clk =>clk_125MHz, + input =>sel_length_LSBs, + output_to_readen =>start_usr_data_read, + output_to_datasel =>start_usr_data_trans +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: ENABLE_USER_DATA_TRANSMISSION +-- Instance Name: ENABLE_USER_DATA_READ_port_map +-- Description: Sets usr_data_trans_phase_on signal one cycle before the transmittion of the +-- first user byte. +---------------------------------------------------------------------------------------------------- +ENABLE_USER_DATA_READ_port_map: ENABLE_USER_DATA_TRANSMISSION port map +( rst =>rst, + clk =>clk_125MHz, + start_usr_data_trans =>start_usr_data_read, + stop_usr_data_trans =>end_of_frame_O_tmp, + usr_data_sel =>usr_data_trans_phase_on +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: ENABLE_USER_DATA_TRANSMISSION +-- Instance Name: ENABLE_USER_DATA_TRANSMISSION_port_map +-- Description: Sets usr_data_sel_sig signal to select user data for transmittion. +---------------------------------------------------------------------------------------------------- +ENABLE_USER_DATA_TRANSMISSION_port_map: ENABLE_USER_DATA_TRANSMISSION port map +( rst =>rst, + clk =>clk_125MHz, + start_usr_data_trans =>start_usr_data_trans, + stop_usr_data_trans =>end_of_frame_O_tmp, + usr_data_sel =>usr_data_sel_sig +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- MUX 2 to 1 +usr_data_not_sel_vec<=(others=>not usr_data_sel_sig); +usr_data_sel_vec<=(others=>usr_data_sel_sig); + +-- MUX output +transmit_data_output_bus<=(transmit_data_output_bus_no_usr_data and usr_data_not_sel_vec) or + (transmit_data_input_bus and usr_data_sel_vec); +---------------------------------------------------------------------------------------------------- + +end Behavioral;
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPV4_PACKET_TRANSMITTER.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/ALLOW_ZERO_UDP_CHECKSUM.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/ALLOW_ZERO_UDP_CHECKSUM.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/ALLOW_ZERO_UDP_CHECKSUM.vhd (revision 2) @@ -0,0 +1,60 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 14:46:33 12/04/2009 +-- Design Name: +-- Module Name: ALLOW_ZERO_UDP_CHECKSUM - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity ALLOW_ZERO_UDP_CHECKSUM is + Port ( clk : in STD_LOGIC; + input : in STD_LOGIC; + output_to_readen : out STD_LOGIC; + output_to_datasel : out STD_LOGIC); +end ALLOW_ZERO_UDP_CHECKSUM; + +architecture Behavioral of ALLOW_ZERO_UDP_CHECKSUM is + +signal input_reg : std_logic; + +begin + +process(clk) +begin + if clk'event and clk='1' then + input_reg<=input; + end if; +end process; + +output_to_readen<=input_reg; + +process(clk) +begin + if clk'event and clk='1' then + output_to_datasel<=input_reg; + end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/ALLOW_ZERO_UDP_CHECKSUM.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_11B_EN_TRANS.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_11B_EN_TRANS.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_11B_EN_TRANS.vhd (revision 2) @@ -0,0 +1,58 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 16:16:57 11/30/2009 +-- Design Name: +-- Module Name: COUNTER_11B_EN_TRANS - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity COUNTER_11B_EN_TRANS is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (10 downto 0)); +end COUNTER_11B_EN_TRANS; + +architecture Behavioral of COUNTER_11B_EN_TRANS is + +begin + +process(clk) +begin +if rst='1' then + value_O<="11111110110"; +else + if clk'event and clk='1' then + if count_en='1' then + value_O<=value_O+"00000000001"; + else + value_O<=value_O; + end if; + end if; +end if; +end process; + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/COUNTER_11B_EN_TRANS.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.vhd (revision 2) @@ -0,0 +1,161 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version: K.39 +-- \ \ Application: netgen +-- / / Filename: comp_6b_equal.vhd +-- /___/ /\ Timestamp: Thu Feb 04 11:02:26 2010 +-- \ \ / \ +-- \___\/\___\ +-- +-- Command : -intstyle ise -w -sim -ofmt vhdl C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\comp_6b_equal.ngc C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\comp_6b_equal.vhd +-- Device : 3s200ft256-4 +-- Input file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/comp_6b_equal.ngc +-- Output file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/comp_6b_equal.vhd +-- # of Entities : 1 +-- Design Name : comp_6b_equal +-- Xilinx : C:\Xilinx\10.1\ISE +-- +-- Purpose: +-- This VHDL netlist is a verification model and uses simulation +-- primitives which may not represent the true implementation of the +-- device, however the netlist is functionally correct and should not +-- be modified. This file cannot be synthesized and should only be used +-- with supported simulation tools. +-- +-- Reference: +-- Development System Reference Guide, Chapter 23 +-- Synthesis and Simulation Design Guide, Chapter 6 +-- +-------------------------------------------------------------------------------- + + +-- synthesis translate_off +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; +use UNISIM.VPKG.ALL; + +entity comp_6b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + b : in STD_LOGIC_VECTOR ( 5 downto 0 ) + ); +end comp_6b_equal; + +architecture STRUCTURE of comp_6b_equal is + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o80_18 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o53_17 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o26_16 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result : STD_LOGIC; + signal BU2_a_ge_b : STD_LOGIC; + signal NLW_VCC_P_UNCONNECTED : STD_LOGIC; + signal NLW_GND_G_UNCONNECTED : STD_LOGIC; + signal a_2 : STD_LOGIC_VECTOR ( 5 downto 0 ); + signal b_3 : STD_LOGIC_VECTOR ( 5 downto 0 ); +begin + a_2(5) <= a(5); + a_2(4) <= a(4); + a_2(3) <= a(3); + a_2(2) <= a(2); + a_2(1) <= a(1); + a_2(0) <= a(0); + b_3(5) <= b(5); + b_3(4) <= b(4); + b_3(3) <= b(3); + b_3(2) <= b(2); + b_3(1) <= b(1); + b_3(0) <= b(0); + VCC_0 : VCC + port map ( + P => NLW_VCC_P_UNCONNECTED + ); + GND_1 : GND + port map ( + G => NLW_GND_G_UNCONNECTED + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o95 : +LUT3 + generic map( + INIT => X"80" + ) + port map ( + I0 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o26_16 +, + I1 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o53_17 +, + I2 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o80_18 +, + O => BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o80 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(1), + I1 => b_3(1), + I2 => a_2(0), + I3 => b_3(0), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o80_18 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o53 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(3), + I1 => b_3(3), + I2 => a_2(2), + I3 => b_3(2), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o53_17 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o26 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(5), + I1 => b_3(5), + I2 => a_2(4), + I3 => b_3(4), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o26_16 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_gen_output_reg_output_reg_fd_output_1 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result, + Q => qa_eq_b + ); + BU2_XST_GND : GND + port map ( + G => BU2_a_ge_b + ); + +end STRUCTURE; + +-- synthesis translate_on
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.ngc =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.ngc (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.ngc (revision 2) @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$`ax5d=#Zl|bdaa:!3-522):'?%8#?/$0936>6>;2;%<<>4108JJUSS2h6:<7>111925?OIX\^1n1??:1<`?6u589l>88"4595BC0331:;<95601;0?GS502H^_RGAFN38G03BN:2LO=6I<;FLG6>O7:2C:>6G=2:K0=>OIA]Y_MYK9;MMB@@B03EELENOC4:NVP62H6;2D:<>5A1018J4443G;8?6@>429M505>5A2218J7253G987C=92:L76>H2:2D=>6@82:L;6>H>n2DISO[\PHL\TWIW[>1EIYY@RJ38K7=HC81[86^NRUc8TLHXJ\YBHUl4PHL\FPUIIDO:7\?4S79PKPTDM=1_U]K9c:W3+bciWz~yynzzrd]okbod&noeScaaphrfhlhbl'kTi|{nl^llp`wrieUi"dQn_ds\j`Ye'noeSb{{ptv\v`a)g|~{yyQ}ef-e`*ir|ySS7'noeS~z}ubvvv`Ykgnch"jka_ommtlvbd`dnh#oPepwbhZhh|l{~maQm.h]b[`wXflUi#dQzsd]`ewt~Wyf~Rbztr,oqqYffm$bSjo{e^`jp*rnm{UlicU>]/k\plcu'eed|RzfldqX4X(nW}cgi"bzt^m?4;g73\:$kh`PsupvgqsumVfdkdm!gdl\jjhwayogeckk.`]fupgkWgei|{nl^`-mZgXmxUeiRl i^wpaZefz{sT|a{|_mwww+jr|Vkeh#gPg`vf[gos'}cn~RijnZ3^*lYsalx$`ba_ukoav]7U'cTxdbj/mww[j:66hk0Y=!heo]ppwsd||xnSaahib,dakYiggzb|hbfndf-eZcv}hfTbbzjqtco[g(nWhUn}R`j_c-j[pubWjky~tQltq\hprt&eSl`k.h]deqcXj`~$xdk}_fgm_4[)aV~bi!conr\pljb{R:V"dQ{img,hprXgV:Tmcj?012265gf3\:$kh`PsupvgqsumVfdkdm!gdl\jjhwayogeckk.`]fupgkWgei|{nl^`-mZgXmxUeiRl i^wpaZefz{sT|a{|_mwww+jr|Vkeh#gPg`vf[gos'}cn~RijnZ3^*lYsalx$`ba_ukoav]7U'cTxdbj/mww[jY7Whdo<=>?124b=>S7'noeS~z}ubvvv`Ykgnch"jka_ommtlvbd`dnh#oPepwbhZhh|l{~maQm.h]b[`wXflUi#dQzsd]`ewt~Wyf~Rbztr,oqqYffm$bSjo{e^`jp*rnm{UlicU>]/k\plcu'eed|RzfldqX4X(nW}cgi"bzt^m\4Zgil9:;?0``8Q5)`mgUxx{lttpf[ii`aj$licQaoorjt`jnfln%mRk~u`n\jjrby|kgSo f_`]fuZhbWk%bSx}j_bcqv|Ywd|yT`xz|.mww[dhc&`UlmykPbhv,plcuWnoeWl1:W3+bciWz~yynzzrd]okbod&noeScaaphrfhlhbl'kTi|{nl^llp`wrieUi"dQn_ds\j`Ye'`U~hQlaspz[ujr{Vf~x~ cuu]bja(nWnkiRlft.vjawY`mgQ:Q#gPthgq+iihxV~b`h}T0\,j[qokm&e{xRmnrs{\pljb&hdoSb|!c`pq}ZkrpzQ;Q#gPmtz`5>S7'noeS~z}ubvvv`Ykgnch"jka_ommtlvbd`dnh#oPepwbhZhh|l{~maQm.h]b[`wXflUi#dQzsd]`ewt~Wyf~Rbztr,oqqYffm$bSjo{e^`jp*rnm{UlicU>]/k\plcu'eed|RzfldqX4X(nW}cgi"at^abvwX|`fn"l`k_np-gdtuqVg~t~U>]/k\ip~2:2_;#jka_rvqqfrrzlUgcjgl.fgm[kiix`zn`d`jd/c\atsfdVddxhzam]a*lYfWl{TbhQm/ugntZtb{|fm6[\ES]BHLGTk2_XI_QYIRKAH@5<^JI27[GJW^VZT@7c3QCGECV"XE@#4+7'[]_I,= > @Q@ML03:2=f48:1<3;4a=33:1=f484?7l2=>59b86833h6?295n<4<7?d:16=1j0:0;;`>;:1=f404=7lQjq^`5?dY`mVh=7lQht^`5?dYkmVh=7lQct^`5?dYimVh?7lmcr59bw`r33k";%95m(0+6?g.68 >0n%<&4:`+7,2"86l'5(68f-0.<2h#;$:4b):*0>d/1 >0n1>17:`?55<76<1i0<>14:`?5;2d;?7>0n1614:`?=;563jUhc`~nrd]u=Z6+(Qcgecv/CNPF$Bcim{kc.>0/3-46Ynx:80oh=4cmif?fijxV;:nRk~u`n13>eheyU:=oQjqtco(fYdgdzj~hQy9^2/JJHB$GEEI#c^jbwZwfWgoTn0>#c^jbwZwfWe~Tn0>#c^jbwZgtm}7; nQgar]b[brXj4:'oRfns^c\atYe59&hSio{a^vzt`;6$jUxucmPpsklvlr~58&hSeo|_raov86+kVbjRn_fv\f86+kV}bhyf210.`[mgtWxkTi|Qm=0.`[mgtWhUgiRl20-a\elhn|V|j`0>#cnoskkci|Vdjah3lolr\54dXmxj`!mPphrf[vrfoly64)eX{pdhSh`nbmg>4)eX`hyT~k{=1.`[mgtWxkT`hQm=1.`[mgtWhUliRl20-a\fZehfz~jby3?,b]kevYfWe~Tn0>#c^jbwZgXflUi1="l_c]ueisb59:;<=>?012345678%w9?6m`mq]25gYby|kgSnQlolrbv`Yq1V:Tt~zP199f`l`5fnn37cilbtko`2=viVozSo94q`]daZd03xkTkyQm7:sb[icXj>1zmRb{_c58udYimVh?7~mcr59pw`rzHIzn56NOxe8E>1<6sZ;96l<53;306g21k3;3;>?tn7195>h1<3>0(;?55b9~W46=i;086<==b54`>4>0;81X=i4n3;29564e:0yP5775|[881m?4<:011f10d282P1:38py?<51:w17?686;5m9d83>4>=;3;3wE;6;[`96~2==3w/8446e:&54??e3`<<6=4+44845>h3<3:07d8i:18'00<092d?87?4;h4f>5<#<<0<=6`;4;08?l0c290/88481:l70?5<3`h3<3>07d8m:18'00<092d?87;4;h4b>5<#<<0<=6`;4;48?l0>290/88481:l70?1<3`<36=4+44845>h3<3207d89:18'00<092d?8774;h46>5<#<<0<=6`;4;c8?l>1290/88460:l70?6<3`2n6=4+448:4>h3<3;07d6k:18'00<>82d?87<4;h:`>5<#<<02<6`;4;18?l>e290/88460:l70?2<3`2j6=4+448:4>h3<3?07d66:18'00<>82d?8784;h:;>5<#<<02<6`;4;58?l>0290/88460:l70?><3`2>6=4+448:4>h3<3307d6;:18'00<>82d?87o4;nc7>5<4<729qC945+4886e>i3:3:17pl>7;295?6=8rB>56*;9;34?j712900qoo50;0;>f<5;rB>56Tm:5y7>0<32<0v(975a09'a??a3-;:6l>4$2g904=nih0;66a8c;29?l>52900cl;50;9j=f<722e3<7>5;n5f>5<l1<75f6683>!222>;0b9:50:9j2c<72->>6:?4n5695>=n>l0;6):::638j12=:21b:i4?:%66>271?65f6b83>!222>;0b9:54:9j2g<72->>6:?4n5691>=n>h0;6):::638j12=>21b:44?:%66>271;65f6983>!222>;0b9:58:9j23<72->>6:?4n569=>=n><0;6):::638j12=i21b4;4?:%66><61<65f8d83>!2220:0b9:51:9j>64>4n5696>=n0j0;6):::828j12=;21b4o4?:%66><61865f8`83>!2220:0b9:55:9j<<<72->>64>4n5692>=n010;6):::828j12=?21b4:4?:%66><61465f8483>!2220:0b9:59:9j<1<72->>64>4n569e>=h?m0;66an9;29?jg32900e4j50;9le=<722cjn7>5;h:0>5<>if?3:17o;j:182>5<7s->26<94H4f8L0?N2l2B>56*>c;38mf<722c:?7>5;n65>5<2;;0D8j4H4;8mc<722c:87>5;h64>5<5;h37>5<>{e==0;684?:1y'0<<582B>h6F:9:&2g?1>o6i3:17d?m:188k16=831vn8=50;694?6|,=31=k5G5e9K1<=#9j097d?7:188m4?=831b=l4?::m74?6=3th><7>55;294~"3138;7E;k;I7:?!7d201b=54?::k2=?6=3`;j6=44i0`94?=h<90;66sm5083>0<729q/844=0:J6`>N212.:o774i0:94?=n900;66g>a;29?l7e2900c9>50;9~f04=83?1<7>t$5;965=O=m1C945+1b8:?l7?2900e<750;9j5d<722c:n7>5;n63>5<n6=4::183!2>2;:0D8j4H4;8 4e=12c:47>5;h3:>5<>i383:17pl;f;291?6=8r.?573-;h655f1983>>o613:17d?n:188m4d=831d8=4?::p3a<72lqUm45Q819]3c=Y?j1U4<5Qa79]e0=Yi11Um:5Q7d9]3a=:=l0::63:6;37?83228>0q~7k:181[?c34>j6n5rs`694?4|Vh>019o5479~w24=838pR;94=4695==z{>h1<71=l5rs6;94?4|V?n019k51`9~w2>=838pR;m4=5g95==z{>=1<791<750;0xZ33<5<:1=55rs8394?4|V1<018:5189~w<5<;1=o5rs8194?4|V1=018?5189~w<4=838pR5;4=4295g=z{1l1<716o6=4={<75>11<5<918=5rs5`94?4|5<<18=52548e?xu3k3:1>v3:5;64?82a2=:0q~<;:1818332=:018=51`9~w06=838p18>5419>0c<602wx9<4?:3y>14<3827?j7?6;|q66?6=:r7>>7:?;<6e>4gn6=4={<6f>16<5=l1=o5r}r51>5<5sW<<70o5669'1=<482wx;o4?:3y]2c=:i37}Y>m16m78k;%7;>6?j1/954{t?<0;6?uQ689>e?0>3-?36>j4}r57>5<5sW<370o5699'1=<5>2wx;>4?:3y]23=:i3<=7);7:358yv172909wS8:;7}Y0?16m769;%7;>7?d34k14n5+5981g>{t1>0;6?uQ8c9>e?>e3-?36?j4}r;5>5<5sW2j70o58`9'1=<5m2wx584?:3y]<<=:i3227);7:3d8yv?32909wS67;7}Y0>16m768;%7;>640q~7k:181[?c34k15i5+59801>{ti=0;6?uQa59>e?g33-?36>94}|lba?6=:rB>56saag83>7}O=01vbo>50;0xL0?vF:9:mf6<72;qC945rnc694?4|@<30qcl::181M3>3tdi:7>52zJ6=>{ij>0;6?uG589~jg>=838pD874}o`:>5<5sA?27p`ma;296~N212weno4?:3yK1<=zfki1<756sabg83>7}O=01vbn>50;0xL0?vF:9:mg6<72;qC945rnb694?4|@<30qcm::181M3>3td3n7>51zJ6=>{ii=0;65<6sA?27p`n7;295~N212wem54?:0yK1<=zfh31<7?tH4;8ykgf290:wE;6;|lbf?6=9rB>56saab83>4}O=01vblj50;3xL0?
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.ngc Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/TARGET_EOF.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/TARGET_EOF.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/TARGET_EOF.vhd (revision 2) @@ -0,0 +1,106 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 16:22:56 11/30/2009 +-- Design Name: +-- Module Name: TARGET_EOF - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity TARGET_EOF is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + start : in STD_LOGIC; + total_length_from_reg : in STD_LOGIC_VECTOR(15 downto 0); + eof_O : out STD_LOGIC); +end TARGET_EOF; + +architecture Behavioral of TARGET_EOF is + +signal count_end : std_logic:='0'; +signal count_en_sig : std_logic:='0'; +signal rst_counter : std_logic:='0'; + +component COUNTER_11B_EN_TRANS is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (10 downto 0)); +end component; + +signal value_O_tmp : std_logic_vector(10 downto 0); + +component comp_11b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 10 downto 0 ); + b : in STD_LOGIC_VECTOR ( 10 downto 0 ) + ); +end component; + +signal last_byte,last_byte_reg_in,last_byte_reg_out : std_logic; + +begin + +process(clk) +begin +if (rst='1' or count_end='1') then + count_en_sig<='0'; + rst_counter<='1'; +else + rst_counter<='0'; + if clk'event and clk='1' then + if (start='1' and count_en_sig='0') then + count_en_sig<='1'; + end if; + end if; +end if; +end process; + + +COUNT_TRANFERED_BYTES : COUNTER_11B_EN_TRANS port map +( rst =>rst_counter, + clk =>clk, + count_en => count_en_sig, + value_O =>value_O_tmp +); + +COMP_TO_TARGET_LAST_BYTE : comp_11b_equal port map +( + qa_eq_b =>last_byte_reg_in, + clk =>clk, + a =>value_O_tmp, + b =>total_length_from_reg(10 downto 0) +); + +process(clk) +begin +if clk'event and clk='1' then + last_byte_reg_out<=last_byte_reg_in; +end if; +end process; +eof_O<=not last_byte_reg_out; +count_end<=last_byte_reg_out; +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/TARGET_EOF.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.ngc =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.ngc (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.ngc (revision 2) @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$`2x5d=#Zl|bdaa:!3-522):'?%8#?/$292*5e<;z8;0=AGZ^X7o35;2=54=12@D[YY4kpsc?1?69981=6D@_UU8ptwg;=3:5i665IORVP?b;?3:5=<57:NWWTPR=lye7;7>1139;>JSSX\^1}i~`<683:44<03E^X][[:pqsk91=87;:754@UURVP?uwg5=1<3=4BT0;?GSTW@DMC8:4C;-SLaYWzf`noy} Tig\B`jtmgyid`PCnRqkfct{fx$OB\JGDL\@`unog%a}!Pcf-gmvrXelgT:9v7.oel57=D@LI@SAGLEOQF[Q_WM01HC@CFTUGG51=DG[OTKH@JR@VJKKYNFOE<7N\JAUGG5>A43NDO:6B@AEGG3>JHO@IJ@n5BakmqR`ttafdh7@gaosTfvvohf;1EH5989>7C<>3578J7718<1E><8>5:L153423G8::>;4N33500=I:8<>96@=1746?K46>>l0BOQMURRJJZVUGYY<7CK[WNPH6>IL92Z?7]O]T`9SMKYE]ZCOTo5_IO]AQVHFEL<0_B[]CD68P\VBi2_XI_QNLHCPg>STM[U]E^GMLD18RFE>3_CN[RZVPD3g?]OKAGR&TIL/0/3#WQSE(9$:,L]LIH48\VRKAK=0T^ZPGOFa?]YDG[OTECH@6:ZgfZOcn2RodR^}ilTfvvohf8:0TicPM`hlvScu{`ee==5Wdl]Nmkiu^lxxeb`;;`*3-1=f 8#?7l&=)59b,6/33h"?%95n(4+7?d:76=1j0<0;;`>1:1=f4:4?7l2;>79b80<76=1j080<;bnh0>b/8 >0h%?&4:f+6,2b;?3:5h6jfsu]nahY14)eX`hyT{h3?,b]smuckagoTyoher?3(fYoizUzh}aPrrv>4)eXzlmTh}|n_hlsqq;7$jUzylbffx]ta86+kVyrbnQjn``oa87+kVnn|yf265.`[mgtWmzym0>#c^jbwZwtxfUx~~z20-a\lduXymzdS~||t<2/gZwdmV`deckk=1.`[hcjW}s{i0>#c^jbwZoXkl7; nQgar]gtj;7$jUfi`Qfnhv\bljb5mcxxRcjm^47|=(jao&hSikiatnw[agsi4:'oRfns^qsvd;7$jUcm~Q~sqm\g`;7$jUjhi|Pwhfwl80+kVbjRkpn?3(fYoizUz}aPrrv>4){5=2nbyQbel]50}>Xl`yS`kb_fgm[s5X$84dqm+7,017:fsvd.7!>1o|o'1(58`utf ;#<7i~}a)1*3>bwzh"?%:5kpsc+1,?99f`l`5fnn?7dQle99mcfdraen<7|jo)2*3>wcxf":%:5~dqm+6,1'8;pfsk-2.?2{o|b&:)69r`ui/> =0}i~`(6+4?tbwg5:556kpn>4>5803xn{cRmj8:sgtjYddb20}i~`_sqw=>wcxfUx~~z8;pqsk-6.?2{x|b&>)69rwui/: =0}~~`(2+4?tuwg!>";6|pn*6-2=v{ye#:$94qrrl,2/03xy{c1>17:sptj:66>1z}a32?58uvvh4:4<7|}o=6=3>wtxf6>2:5~sqm?2;?69rwui;?7=0}~~`_bg;?tuwgVxxx45~sqm\wwus>2y{c%>&6:qsk-7.>2y{c%<&6:qsk-5.>2y{c%:&6:qsk-3.>2y{c%8&6:qsk-1.02y{c1950?58wutf 9#<7~~}a)3*3>uwzh"9%:5|psc+7,1<{yxj$9'8;rrqe-3.12y{~l2::1<1?rczHIz3=6NOxe8E>1<6sZ;:6;o51;306g21k3;3;;mtn2a95>h4l3>0(>o5379~Wc<1i3;1=>j0:4:8k;Rd92f<72899n98l:0:42a=c=<0;6<4>{R32>3g=93;8>o:9c;3;33e<~]9;6=4>:08bV762?k1=7?<2c65g?7???i0(>;5149U7g<5s|;=6<5z1683?x"5l380n8;50;d97?76sA987Wm52z19=?{#;80>96*<9;7:?l24290/>k4;9:l1a?6<3`>96=4+2g87=>h5m3;07d:>:18'6c<312d9i7<4;h63>5<#:o0?56`=e;18?l5a290/>k4;9:l1a?2<3`9n6=4+2g87=>h5m3?07d:m:188k=4=83.9j76n;o0f>5=50;&1b?>f3g8n6?54o6d94?"5n32j7c1=n1<7*=f;:b?k4b2<10c:m50;&1b?>f3g8n6;54o6`94?"5n32j7ctH218 67=;=1d>n4?::a56<7280;6=uG329'74<6;2e:>7>5;|`a>5<3<3;1=vF<3:X`>46|?3?1?7859;69e?>=i3=157653;491?2=u-9:6864$d862>"683?<7)<6:3`8k37=83.9j78=;o0f>5=1=5=1=5$3d90<=i:l0;76g;2;29 7`=<01e>h4>;:k75?6=,;l1845a2d81?>o383:1(?h5489m6`<432c8j7>5$3d90<=i:l0?76gh4:;:k67?6=,;l1995a2d83?>o2:3:1(?h5559m6`<632c>=7>5$3d911=i:l0976g:0;29 7`===1e>h4<;:k7b?6=,;l1995a2d87?>o3m3:1(?h5559m6`<232c?h7>5$3d911=i:l0=76g;c;29 7`===1e>h48;:k4e?6=3`>i6=44o9094?"5n32j7c4=f3g8n6>54o6g94?"5n32j7c0=i1<7*=f;:b?k4b2?10c:l50;&1b?>f3g8n6:54i6:94?=n?>0;66g89;29?l0?290/>k499:l1a?6<3`<<6=4+2g85=>h5m3;07d89:18'6c<112d9i7<4;h46>5<#:o0=56`=e;18?l03290/>k499:l1a?2<3`<86=4+2g85=>h5m3?07b79:18'6c<>?2d9i7>4;n;6>5<#:o02;6`=e;38?j?3290/>k467:l1a?4<3f386=4+2g8:3>h5m3907b7=:18'6c<>?2d9i7:4;n;2>5<#:o02;6`=e;78?j?7290/>k467:l1a?0<3f2m6=4+2g8:3>h5m3=07d7i:188m3d=831d;94?:%0e>20!4a2><0b?k51:9l37<72-8m6:84n3g96>=h?80;6)20!4a2><0b?k55:9l2`<72-8m6:84n3g92>=h>m0;6)X><2T2?6P62:\:5>X>82T3j6P91:\54>X2n2T>i6P:d:\6g>X2j2T>m6P72:\;5>X?82TX0k2TX0:2T<=6P80:\5b>X1m2T=h63<8;31?x{t910;6f?3634h19=52b;6e?8d=f?0134h1:852b;47?8d=>:16n77k;<`9=f=:j33i70l59`9>f??>34h15552b;5;?8d=0m16n796;<`9<`=:j3=j7p}>9;291~;4<38h70l59g9>f?0e34h14n52b;54?xu3i3:1>vP;3:?a>15<,:81=l5rs5:94?4|V=801o4;2:&06?7e3ty?;7>52z\75>;e2=;0(><51b9~w10=838pR9>4=c874>"4:3;o7p};5;296~X4n27i6>h4$2095`=z{=>1<77?i;|q7f?6=:rT?n63m:5`8 64=:91v5l50;0xZ=4<5k03>6*<2;02?xu?13:1>vP71:?a>=7<,:81>?5rs9:94?4|V1:01o470:&06?443ty3;7>52z\4b>;e2>l0(><5259~w=0=838pR:k4=c84a>"4:38>7p}75;296~X0l27i6:j4$20963=z{1>1<77<8;|q;7?6=:rT51zJ07>{i>10;6=4}o4b>5<6sA987p`9b;295~N4;2we:n4?:0yK76=zf?n1<7?tH218yk0b290:wE=<;|l42?6=1rB8?6sr}|BCG~>62==9n:9;e|BCF~6zHIZpqMN \ No newline at end of file
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.ngc Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/REG_16B_WREN.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/REG_16B_WREN.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/REG_16B_WREN.vhd (revision 2) @@ -0,0 +1,56 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 21:15:16 11/27/2009 +-- Design Name: +-- Module Name: REG_16B_WREN - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: 16bit wide Register with write enable option. +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity REG_16B_WREN is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + wren : in STD_LOGIC; + input : in STD_LOGIC_VECTOR (15 downto 0); + output : out STD_LOGIC_VECTOR (15 downto 0)); +end REG_16B_WREN; + +architecture Behavioral of REG_16B_WREN is + +begin + +process(clk) +begin +if rst='1' then + output<="0000000000000000"; +else +if clk'event and clk='1' then + if wren='1' then + output<=input; + end if; +end if; +end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/REG_16B_WREN.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.xco =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.xco (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.xco (revision 2) @@ -0,0 +1,59 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Thu Feb 04 10:02:26 2010 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc3s200 +SET devicefamily = spartan3 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ft256 +SET removerpms = False +SET simulationfiles = Structural +SET speedgrade = -4 +SET verilogsim = False +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT Comparator family Xilinx,_Inc. 9.0 +# END Select +# BEGIN Parameters +CSET aclr=false +CSET ainitval=0 +CSET aset=false +CSET ce=false +CSET cepriority=Sync_Overrides_CE +CSET component_name=comp_6b_equal +CSET constantbport=false +CSET constantbportvalue=0000000000000000 +CSET datatype=Unsigned +CSET nonregisteredoutput=false +CSET operation=eq +CSET pipelinestages=0 +CSET radix=2 +CSET registeredoutput=true +CSET sclr=false +CSET sset=false +CSET syncctrlpriority=Reset_Overrides_Set +CSET width=6 +# END Parameters +GENERATE +# CRC: dc354663 +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_6b_equal.xco Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPV4_LUT_INDEXER.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPV4_LUT_INDEXER.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPV4_LUT_INDEXER.vhd (revision 2) @@ -0,0 +1,110 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 22:11:55 11/27/2009 +-- Design Name: +-- Module Name: IPV4_LUT_INDEXER - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity IPV4_LUT_INDEXER is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + transmit_enable : in STD_LOGIC; + LUT_index : out STD_LOGIC_VECTOR (5 downto 0)); +end IPV4_LUT_INDEXER; + +architecture Behavioral of IPV4_LUT_INDEXER is + +component dist_mem_64x8 is + port ( + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + qspo : out STD_LOGIC_VECTOR ( 7 downto 0 ) + ); +end component; + +component COUNTER_6B_LUT_FIFO_MODE is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + funct_sel : in STD_LOGIC; -- 0 for lut addressing, 1 for fifo addressing -- only LUT support is used + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (5 downto 0)); +end component; + +component comp_6b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + b : in STD_LOGIC_VECTOR ( 5 downto 0 ) + ); +end component; + +signal count_en_sig , count_end , rst_counter: std_logic :='0'; +signal count_val: std_logic_Vector(5 downto 0):=(others=>'0'); +signal count_en_sig_comb : std_logic; +constant lut_upper_address :std_logic_vector(5 downto 0):="100110"; -- position 38 + +begin + +process(clk) +begin +if (rst='1' or count_end='1') then + count_en_sig<='0'; + rst_counter<='1'; +else + rst_counter<='0'; + if clk'event and clk='1' then + if (transmit_enable='1' and count_en_sig='0') then + count_en_sig<='1'; + end if; + end if; +end if; +end process; + +LUT_END_CHECK : comp_6b_equal port map ( +qa_eq_b =>count_end, + clk =>clk, + a =>count_val, + b =>lut_upper_address + +); + +count_en_sig_comb <=count_en_sig or transmit_enable; + + + +LUT_INDEXER_MODULE : COUNTER_6B_LUT_FIFO_MODE port map ( + rst => rst_counter, + clk => clk, + funct_sel =>'0', -- for now only one function is supported + count_en =>count_en_sig_comb, + value_O =>count_val +); + +LUT_index<=count_val; + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPV4_LUT_INDEXER.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/ENABLE_USER_DATA_TRANSMISSION.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/ENABLE_USER_DATA_TRANSMISSION.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/ENABLE_USER_DATA_TRANSMISSION.vhd (revision 2) @@ -0,0 +1,64 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 12:05:48 12/04/2009 +-- Design Name: +-- Module Name: ENABLE_USER_DATA_TRANSMISSION - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity ENABLE_USER_DATA_TRANSMISSION is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + start_usr_data_trans : in STD_LOGIC; + stop_usr_data_trans : in STD_LOGIC; + usr_data_sel : out STD_LOGIC); +end ENABLE_USER_DATA_TRANSMISSION; + +architecture Behavioral of ENABLE_USER_DATA_TRANSMISSION is + +signal usr_data_sel_prev : std_logic :='0'; + +begin + +process(clk) +begin +if rst='1' then + usr_data_sel<='0'; + usr_data_sel_prev<='0'; +else + if clk'event and clk='1' then + if (start_usr_data_trans='1' and usr_data_sel_prev='0') then + usr_data_sel<='1'; + usr_data_sel_prev<='1'; + end if; + if (stop_usr_data_trans='0' and usr_data_sel_prev='1') then -- stop_usr_data_trans is active low + usr_data_sel<='0'; + usr_data_sel_prev<='0'; + end if; + end if; +end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/ENABLE_USER_DATA_TRANSMISSION.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/UDP_IP_Core.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/UDP_IP_Core.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/UDP_IP_Core.vhd (revision 2) @@ -0,0 +1,109 @@ +----------------------------------------------------------------------------------------- +-- Copyright (C) 2010 Nikolaos Ch. Alachiotis -- +-- -- +-- Engineer: Nikolaos Ch. Alachiotis -- +-- -- +-- Contact: alachiot@cs.tum.edu -- +-- n.alachiotis@gmail.com -- +-- -- +-- Create Date: 15:29:59 02/07/2010 -- +-- Module Name: UDP_IP_Core -- +-- Target Devices: Virtex 5 FPGAs -- +-- Tool versions: ISE 10.1 -- +-- Description: This component can be used to transmit and receive UDP/IP -- +-- Ethernet Packets (IPv4). -- +-- Additional Comments: The core has been area-optimized and is suitable for direct -- +-- PC-FPGA communication at Gigabit speed. -- +-- -- +----------------------------------------------------------------------------------------- + + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity UDP_IP_Core is + Port ( rst : in STD_LOGIC; -- active-high + clk_125MHz : in STD_LOGIC; + + -- Transmit signals + transmit_start_enable : in STD_LOGIC; + transmit_data_length : in STD_LOGIC_VECTOR (15 downto 0); + usr_data_trans_phase_on : out STD_LOGIC; + transmit_data_input_bus : in STD_LOGIC_VECTOR (7 downto 0); + start_of_frame_O : out STD_LOGIC; + end_of_frame_O : out STD_LOGIC; + source_ready : out STD_LOGIC; + transmit_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0); + + --Receive Signals + rx_sof : in STD_LOGIC; + rx_eof : in STD_LOGIC; + input_bus : in STD_LOGIC_VECTOR(7 downto 0); + valid_out_usr_data : out STD_LOGIC; + usr_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0) + ); +end UDP_IP_Core; + +architecture Behavioral of UDP_IP_Core is + +component IPV4_PACKET_TRANSMITTER is + Port ( rst : in STD_LOGIC; + clk_125MHz : in STD_LOGIC; + transmit_start_enable : in STD_LOGIC; + transmit_data_length : in STD_LOGIC_VECTOR (15 downto 0); + usr_data_trans_phase_on : out STD_LOGIC; + transmit_data_input_bus : in STD_LOGIC_VECTOR (7 downto 0); + start_of_frame_O : out STD_LOGIC; + end_of_frame_O : out STD_LOGIC; + source_ready : out STD_LOGIC; + transmit_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0) + ); +end component; + +component IPv4_PACKET_RECEIVER is + Port ( rst : in STD_LOGIC; + clk_125Mhz : in STD_LOGIC; + rx_sof : in STD_LOGIC; + rx_eof : in STD_LOGIC; + input_bus : in STD_LOGIC_VECTOR(7 downto 0); + valid_out_usr_data : out STD_LOGIC; + usr_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0)); +end component; + +begin + +IPV4_PACKET_TRANSMITTER_port_map: IPV4_PACKET_TRANSMITTER + Port Map + ( rst => rst, + clk_125MHz => clk_125MHz, + transmit_start_enable => transmit_start_enable, + transmit_data_length => transmit_data_length, + usr_data_trans_phase_on => usr_data_trans_phase_on, + transmit_data_input_bus => transmit_data_input_bus, + start_of_frame_O => start_of_frame_O, + end_of_frame_O => end_of_frame_O, + source_ready => source_ready, + transmit_data_output_bus => transmit_data_output_bus + ); + + +IPv4_PACKET_RECEIVER_port_map: IPv4_PACKET_RECEIVER + Port Map + ( rst => rst, + clk_125Mhz => clk_125Mhz, + rx_sof => rx_sof, + rx_eof => rx_eof, + input_bus => input_bus, + valid_out_usr_data => valid_out_usr_data, + usr_data_output_bus => usr_data_output_bus + ); + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/UDP_IP_Core.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.vhd (revision 2) @@ -0,0 +1,249 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version: K.39 +-- \ \ Application: netgen +-- / / Filename: comp_11b_equal.vhd +-- /___/ /\ Timestamp: Thu Feb 04 11:01:48 2010 +-- \ \ / \ +-- \___\/\___\ +-- +-- Command : -intstyle ise -w -sim -ofmt vhdl C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\comp_11b_equal.ngc C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\comp_11b_equal.vhd +-- Device : 3s200ft256-4 +-- Input file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/comp_11b_equal.ngc +-- Output file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/comp_11b_equal.vhd +-- # of Entities : 1 +-- Design Name : comp_11b_equal +-- Xilinx : C:\Xilinx\10.1\ISE +-- +-- Purpose: +-- This VHDL netlist is a verification model and uses simulation +-- primitives which may not represent the true implementation of the +-- device, however the netlist is functionally correct and should not +-- be modified. This file cannot be synthesized and should only be used +-- with supported simulation tools. +-- +-- Reference: +-- Development System Reference Guide, Chapter 23 +-- Synthesis and Simulation Design Guide, Chapter 6 +-- +-------------------------------------------------------------------------------- + + +-- synthesis translate_off +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; +use UNISIM.VPKG.ALL; + +entity comp_11b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 10 downto 0 ); + b : in STD_LOGIC_VECTOR ( 10 downto 0 ) + ); +end comp_11b_equal; + +architecture STRUCTURE of comp_11b_equal is + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and0000120_34 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000093_33 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000053_32 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000026_31 : STD_LOGIC; + + signal BU2_N01 : STD_LOGIC; + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result : STD_LOGIC; + signal BU2_N1 : STD_LOGIC; + signal BU2_a_ge_b : STD_LOGIC; + signal NLW_VCC_P_UNCONNECTED : STD_LOGIC; + signal NLW_GND_G_UNCONNECTED : STD_LOGIC; + signal a_2 : STD_LOGIC_VECTOR ( 10 downto 0 ); + signal b_3 : STD_LOGIC_VECTOR ( 10 downto 0 ); + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o : STD_LOGIC_VECTOR ( 1 downto 0 ); + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_async_o : STD_LOGIC_VECTOR ( 1 downto 1 ); +begin + a_2(10) <= a(10); + a_2(9) <= a(9); + a_2(8) <= a(8); + a_2(7) <= a(7); + a_2(6) <= a(6); + a_2(5) <= a(5); + a_2(4) <= a(4); + a_2(3) <= a(3); + a_2(2) <= a(2); + a_2(1) <= a(1); + a_2(0) <= a(0); + b_3(10) <= b(10); + b_3(9) <= b(9); + b_3(8) <= b(8); + b_3(7) <= b(7); + b_3(6) <= b(6); + b_3(5) <= b(5); + b_3(4) <= b(4); + b_3(3) <= b(3); + b_3(2) <= b(2); + b_3(1) <= b(1); + b_3(0) <= b(0); + VCC_0 : VCC + port map ( + P => NLW_VCC_P_UNCONNECTED + ); + GND_1 : GND + port map ( + G => NLW_GND_G_UNCONNECTED + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and0000136 : +LUT4 + generic map( + INIT => X"8000" + ) + port map ( + I0 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000026_31 +, + I1 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000053_32 +, + I2 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000093_33 +, + I3 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and0000120_34 +, + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o(0) + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and0000120 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(6), + I1 => b_3(6), + I2 => a_2(7), + I3 => b_3(7), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and0000120_34 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000093 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(4), + I1 => b_3(4), + I2 => a_2(5), + I3 => b_3(5), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000093_33 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000053 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(2), + I1 => b_3(2), + I2 => a_2(3), + I3 => b_3(3), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000053_32 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000026 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(0), + I1 => b_3(0), + I2 => a_2(1), + I3 => b_3(1), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_0_and000026_31 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_1_and0000 : +LUT3 + generic map( + INIT => X"09" + ) + port map ( + I0 => b_3(9), + I1 => a_2(9), + I2 => BU2_N01, + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o(1) + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o_1_and0000_SW0 : +LUT4 + generic map( + INIT => X"6FF6" + ) + port map ( + I0 => a_2(10), + I1 => b_3(10), + I2 => a_2(8), + I3 => b_3(8), + O => BU2_N01 + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_opt_carry_tile_and_or_carry_muxs_0_i_mux : +MUXCY + port map ( + CI => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_async_o(1) +, + DI => BU2_a_ge_b, + S => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o(0) +, + O => BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_opt_carry_tile_and_or_carry_muxs_1_i_mux : +MUXCY + port map ( + CI => BU2_N1, + DI => BU2_a_ge_b, + S => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_lut_o(1) +, + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_async_o(1) + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_gen_output_reg_output_reg_fd_output_1 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result, + Q => qa_eq_b + ); + BU2_XST_VCC : VCC + port map ( + P => BU2_N1 + ); + BU2_XST_GND : GND + port map ( + G => BU2_a_ge_b + ); + +end STRUCTURE; + +-- synthesis translate_on
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/comp_11b_equal.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.vhd (revision 2) @@ -0,0 +1,86 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version: K.39 +-- \ \ Application: netgen +-- / / Filename: dist_mem_64x8.vhd +-- /___/ /\ Timestamp: Thu Feb 04 11:02:06 2010 +-- \ \ / \ +-- \___\/\___\ +-- +-- Command : -intstyle ise -w -sim -ofmt vhdl C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\dist_mem_64x8.ngc C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\dist_mem_64x8.vhd +-- Device : 3s200ft256-4 +-- Input file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/dist_mem_64x8.ngc +-- Output file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/dist_mem_64x8.vhd +-- # of Entities : 1 +-- Design Name : dist_mem_64x8 +-- Xilinx : C:\Xilinx\10.1\ISE +-- +-- Purpose: +-- This VHDL netlist is a verification model and uses simulation +-- primitives which may not represent the true implementation of the +-- device, however the netlist is functionally correct and should not +-- be modified. This file cannot be synthesized and should only be used +-- with supported simulation tools. +-- +-- Reference: +-- Development System Reference Guide, Chapter 23 +-- Synthesis and Simulation Design Guide, Chapter 6 +-- +-------------------------------------------------------------------------------- + + +-- synthesis translate_off +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; +use UNISIM.VPKG.ALL; + +entity dist_mem_64x8 is + port ( + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + qspo : out STD_LOGIC_VECTOR ( 7 downto 0 ) + ); +end dist_mem_64x8; + +architecture STRUCTURE of dist_mem_64x8 is + signal N0 : STD_LOGIC; + signal N1 : STD_LOGIC; + signal a_2 : STD_LOGIC_VECTOR ( 5 downto 0 ); + signal NlwRenamedSignal_qspo : STD_LOGIC_VECTOR ( 0 downto 0 ); +begin + a_2(5) <= a(5); + a_2(4) <= a(4); + a_2(3) <= a(3); + a_2(2) <= a(2); + a_2(1) <= a(1); + a_2(0) <= a(0); + qspo(7) <= NlwRenamedSignal_qspo(0); + qspo(6) <= NlwRenamedSignal_qspo(0); + qspo(5) <= NlwRenamedSignal_qspo(0); + qspo(4) <= NlwRenamedSignal_qspo(0); + qspo(3) <= NlwRenamedSignal_qspo(0); + qspo(2) <= NlwRenamedSignal_qspo(0); + qspo(1) <= NlwRenamedSignal_qspo(0); + qspo(0) <= NlwRenamedSignal_qspo(0); + VCC_0 : VCC + port map ( + P => N1 + ); + GND_1 : GND + port map ( + G => N0 + ); + BU2_XST_GND : GND + port map ( + G => NlwRenamedSignal_qspo(0) + ); + +end STRUCTURE; + +-- synthesis translate_on
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/dist_mem_64x8.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPv4_PACKET_RECEIVER.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPv4_PACKET_RECEIVER.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPv4_PACKET_RECEIVER.vhd (revision 2) @@ -0,0 +1,182 @@ +----------------------------------------------------------------------------------------- +-- Copyright (C) 2010 Nikolaos Ch. Alachiotis -- +-- -- +-- Engineer: Nikolaos Ch. Alachiotis -- +-- -- +-- Contact: alachiot@cs.tum.edu -- +-- n.alachiotis@gmail.com -- +-- -- +-- Create Date: 14:32:06 02/07/2010 -- +-- Module Name: IPv4_PACKET_RECEIVER -- +-- Target Devices: Virtex 5 FPGAs -- +-- Tool versions: ISE 10.1 -- +-- Description: This component can be used to receive IPv4 Ethernet Packets. -- +-- Additional Comments: -- +-- -- +-- The receiver does not operate properly for data section of 1 or 2 bytes only. -- +-- -- +----------------------------------------------------------------------------------------- + + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity IPv4_PACKET_RECEIVER is + Port ( rst : in STD_LOGIC; + clk_125Mhz : in STD_LOGIC; + rx_sof : in STD_LOGIC; + rx_eof : in STD_LOGIC; + input_bus : in STD_LOGIC_VECTOR(7 downto 0); + valid_out_usr_data : out STD_LOGIC; + usr_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0)); +end IPv4_PACKET_RECEIVER; + +architecture Behavioral of IPv4_PACKET_RECEIVER is + +component PACKET_RECEIVER_FSM is + Port ( + rst : in STD_LOGIC; + clk : in STD_LOGIC; + + -- Signals from EMAC + rx_sof: in STD_LOGIC; -- active low input + rx_eof: in STD_LOGIC; -- active low input + + -- Signals to Counter and Comparator + sel_comp_Bval: out STD_LOGIC; + comp_Bval: out STD_LOGIC_VECTOR(10 downto 0); + rst_count : out STD_LOGIC; + en_count : out STD_LOGIC; + + -- Signal from Comparator + comp_eq: in STD_LOGIC; + + -- Signals to Length Register + wren_MSbyte: out STD_LOGIC; + wren_LSbyte: out STD_LOGIC; + + -- Signal to user interface + valid_out_usr_data : out STD_LOGIC); +end component; + +component REG_8b_wren is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + wren : in STD_LOGIC; + input_val : in STD_LOGIC_VECTOR (7 downto 0); + output_val : inout STD_LOGIC_VECTOR(7 downto 0)); +end component; + +component COUNTER_11B_EN_RECEIV is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (10 downto 0)); +end component; + +component comp_11b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 10 downto 0 ); + b : in STD_LOGIC_VECTOR ( 10 downto 0 ) + ); +end component; + +signal sel_comp_Bval, + rst_count, + en_count, + comp_eq, + wren_MSbyte, + wren_LSbyte: STD_LOGIC; + +signal MSbyte_reg_val_out, + LSbyte_reg_val_out : STD_LOGIC_VECTOR(7 downto 0); + +signal counter_val, + match_val, + comp_Bval, + comp_sel_val_vec, + comp_n_sel_val_vec, + length_val: STD_LOGIC_VECTOR(10 downto 0); + +constant length_offest : STD_LOGIC_VECTOR(7 downto 0):="00001010"; +-- This value is formed as 2 (1 clock the latency of comparator and 1 clock fro changing the FSM state) + 8 (number of bytes of UDP header section) + +begin + +usr_data_output_bus<=input_bus; + +PACKET_RECEIVER_FSM_port_map: PACKET_RECEIVER_FSM Port Map +( + rst => rst, + clk => clk_125MHz, + + rx_sof => rx_sof, + rx_eof => rx_eof, + + sel_comp_Bval => sel_comp_Bval, + comp_Bval => comp_Bval, + rst_count => rst_count, + en_count => en_count, + + comp_eq => comp_eq, + + wren_MSbyte => wren_MSbyte, + wren_LSbyte => wren_LSbyte, + + valid_out_usr_data => valid_out_usr_data +); + +MSbyte_REG: REG_8b_wren Port Map +( + rst => rst, + clk => clk_125MHz, + wren => wren_MSbyte, + input_val => input_bus, + output_val =>MSbyte_reg_val_out +); + +LSbyte_REG: REG_8b_wren Port Map +( + rst => rst, + clk => clk_125MHz, + wren => wren_LSbyte, + input_val => input_bus, + output_val =>LSbyte_reg_val_out +); + +COUNTER_11B_EN_port_map: COUNTER_11B_EN_RECEIV Port Map +( + rst => rst_count, + clk => clk_125MHz, + count_en => en_count, + value_O => counter_val +); + +Comp_11b_equal_port_map: Comp_11b_equal Port Map +( + qa_eq_b => comp_eq, + clk => clk_125MHz, + a => counter_val, + b => match_val + ); + +length_val(7 downto 0)<= LSbyte_reg_val_out-length_offest; +length_val(10 downto 8)<= MSbyte_reg_val_out (2 downto 0); + +comp_sel_val_vec<=(others=> sel_comp_Bval); +comp_n_sel_val_vec<= (others=> not sel_comp_Bval); + +match_val<= (comp_sel_val_vec and length_val) or (comp_n_sel_val_vec and comp_Bval); + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Spartan3/IPv4_PACKET_RECEIVER.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/PACKET_RECEIVER_FSM.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/PACKET_RECEIVER_FSM.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/PACKET_RECEIVER_FSM.vhd (revision 2) @@ -0,0 +1,238 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 03:48:34 02/07/2010 +-- Design Name: +-- Module Name: PACKET_RECEIVER_FSM - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity PACKET_RECEIVER_FSM is + Port ( + rst : in STD_LOGIC; + clk : in STD_LOGIC; + + -- Signals from EMAC + rx_sof: in STD_LOGIC; -- active low input + rx_eof: in STD_LOGIC; -- active low input + + -- Signals to Counter and Comparator + sel_comp_Bval: out STD_LOGIC; + comp_Bval: out STD_LOGIC_VECTOR(10 downto 0); + rst_count : out STD_LOGIC; + en_count : out STD_LOGIC; + + -- Signal from Comparator + comp_eq: in STD_LOGIC; + + -- Signals to Length Register + wren_MSbyte: out STD_LOGIC; + wren_LSbyte: out STD_LOGIC; + + -- Signal to user interface + valid_out_usr_data: out STD_LOGIC); +end PACKET_RECEIVER_FSM; + +architecture Behavioral of PACKET_RECEIVER_FSM is + +TYPE state is (rst_state, + idle_state, + detect_n_store_usr_length_MSbyte_state, + store_usr_length_LSbyte_state, + checksum_gap_state, + receive_usr_data_state); + +signal current_st,next_st: state; + +constant udp_length_match_cycle : std_logic_vector(10 downto 0):="00000100100"; -- UDP length MSbyte - 2 +constant udp_checksum_skip : std_logic_vector(10 downto 0):="00000000001"; +constant gnd_vec : std_logic_vector(10 downto 0):="00000000000"; +begin + +process(current_st,rx_sof,rx_eof,comp_eq) +begin +case current_st is + + +when rst_state => + + sel_comp_Bval<='0'; + comp_Bval<=gnd_vec; + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=idle_state; + +when idle_state => + + if rx_sof='0' then -- rx_sof is active low + sel_comp_Bval<='0'; + comp_Bval<=udp_length_match_cycle; + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=detect_n_store_usr_length_MSbyte_state; + + else + sel_comp_Bval<='0'; + comp_Bval<=gnd_vec; + rst_count<='0'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=idle_state; + end if; + +when detect_n_store_usr_length_MSbyte_state => + + if comp_eq='1' then -- comp_eq is active high + sel_comp_Bval<='0'; + comp_Bval<=udp_checksum_skip; -- Just to skip the UDP checksum field + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='1'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=store_usr_length_LSbyte_state; + + else + sel_comp_Bval<='0'; + comp_Bval<=udp_length_match_cycle; + rst_count<='0'; + en_count<='1'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=detect_n_store_usr_length_MSbyte_state; + end if; + +when store_usr_length_LSbyte_state => + + sel_comp_Bval<='0'; + comp_Bval<=udp_checksum_skip; -- Just to skip the UDP checksum field + rst_count<='0'; + en_count<='1'; + + wren_MSbyte<='0'; + wren_LSbyte<='1'; + + valid_out_usr_data<='0'; + + next_st<=checksum_gap_state; + +when checksum_gap_state => + + if comp_eq='1' then -- comp_eq is active high + sel_comp_Bval<='1'; + comp_Bval<=gnd_vec; + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=receive_usr_data_state; + + else + sel_comp_Bval<='0'; + comp_Bval<=udp_checksum_skip; + rst_count<='0'; + en_count<='1'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='0'; + + next_st<=checksum_gap_state; + end if; + +when receive_usr_data_state => + + if (comp_eq='1' or rx_eof='0') then -- comp_eq is active high rx_eof is active-low + sel_comp_Bval<='0'; + comp_Bval<=udp_length_match_cycle; + rst_count<='1'; + en_count<='0'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='1'; + + next_st<=idle_state; + + else + sel_comp_Bval<='1'; + comp_Bval<=gnd_vec; + rst_count<='0'; + en_count<='1'; + + wren_MSbyte<='0'; + wren_LSbyte<='0'; + + valid_out_usr_data<='1'; + + next_st<=receive_usr_data_state; + end if; + + +end case; +end process; + + + + +process(clk) +begin +if (rst='1') then + current_st<= rst_state; +elsif (clk'event and clk='1') then + current_st <= next_st; +end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/PACKET_RECEIVER_FSM.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.xco =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.xco (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.xco (revision 2) @@ -0,0 +1,59 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Mon Nov 30 15:37:25 2009 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc5vsx95t +SET devicefamily = virtex5 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ff1136 +SET removerpms = False +SET simulationfiles = Structural +SET speedgrade = -1 +SET verilogsim = False +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT Comparator family Xilinx,_Inc. 9.0 +# END Select +# BEGIN Parameters +CSET aclr=false +CSET ainitval=0 +CSET aset=false +CSET ce=false +CSET cepriority=Sync_Overrides_CE +CSET component_name=comp_11b_equal +CSET constantbport=false +CSET constantbportvalue=0000000000000000 +CSET datatype=Unsigned +CSET nonregisteredoutput=false +CSET operation=eq +CSET pipelinestages=0 +CSET radix=2 +CSET registeredoutput=true +CSET sclr=false +CSET sset=false +CSET syncctrlpriority=Reset_Overrides_Set +CSET width=11 +# END Parameters +GENERATE +# CRC: 6f28c282 +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.xco Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_11B_EN_RECEIV.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_11B_EN_RECEIV.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_11B_EN_RECEIV.vhd (revision 2) @@ -0,0 +1,58 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 16:16:57 11/30/2009 +-- Design Name: +-- Module Name: COUNTER_11B_EN_RECEIV - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity COUNTER_11B_EN_RECEIV is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (10 downto 0)); +end COUNTER_11B_EN_RECEIV; + +architecture Behavioral of COUNTER_11B_EN_RECEIV is + +begin + +process(clk) +begin +if rst='1' then + value_O<="00000000000"; +else + if clk'event and clk='1' then + if count_en='1' then + value_O<=value_O+"00000000001"; + else + value_O<=value_O; + end if; + end if; +end if; +end process; + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_11B_EN_RECEIV.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_6B_LUT_FIFO_MODE.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_6B_LUT_FIFO_MODE.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_6B_LUT_FIFO_MODE.vhd (revision 2) @@ -0,0 +1,63 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 02:30:12 11/30/2009 +-- Design Name: +-- Module Name: COUNTER_6B_LUT_FIFO_MODE - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity COUNTER_6B_LUT_FIFO_MODE is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + funct_sel : in STD_LOGIC; -- 0 for lut addressing, 1 for fifo addressing + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (5 downto 0)); +end COUNTER_6B_LUT_FIFO_MODE; + +architecture Behavioral of COUNTER_6B_LUT_FIFO_MODE is + +begin + +process(clk) +begin +if rst='1' then + if funct_sel='0' then + value_O<=(others=>'0'); + else + value_O<="100111"; + end if; +else + if clk'event and clk='1' then + if count_en='1' then + value_O<=value_O+"000001"; + else + value_O<=value_O; + end if; + end if; +end if; +end process; + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_6B_LUT_FIFO_MODE.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/REG_8b_wren.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/REG_8b_wren.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/REG_8b_wren.vhd (revision 2) @@ -0,0 +1,56 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 14:40:03 02/07/2010 +-- Design Name: +-- Module Name: REG_8b_wren - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity REG_8b_wren is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + wren : in STD_LOGIC; + input_val : in STD_LOGIC_VECTOR (7 downto 0); + output_val : inout STD_LOGIC_VECTOR(7 downto 0)); +end REG_8b_wren; + +architecture Behavioral of REG_8b_wren is + +begin + +process(clk) +begin +if rst='1' then + output_val<="00000000"; +else + if clk'event and clk='1' then + if wren='1' then + output_val<=input_val; + end if; + end if; +end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/REG_8b_wren.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.xco =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.xco (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.xco (revision 2) @@ -0,0 +1,63 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Tue Dec 01 14:45:04 2009 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc5vsx95t +SET devicefamily = virtex5 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ff1136 +SET removerpms = False +SET simulationfiles = Structural +SET speedgrade = -1 +SET verilogsim = False +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT Distributed_Memory_Generator family Xilinx,_Inc. 3.4 +# END Select +# BEGIN Parameters +CSET ce_overrides=ce_overrides_sync_controls +CSET coefficient_file=C:/PHd_Projects/The_Felsenstein_CoProcessor/definition2_ipv4_lut.coe +CSET common_output_ce=false +CSET common_output_clk=false +CSET component_name=dist_mem_64x8 +CSET data_width=8 +CSET default_data=0 +CSET default_data_radix=16 +CSET depth=64 +CSET dual_port_address=non_registered +CSET dual_port_output_clock_enable=false +CSET input_clock_enable=false +CSET input_options=non_registered +CSET memory_type=rom +CSET output_options=registered +CSET pipeline_stages=0 +CSET qualify_we_with_i_ce=false +CSET reset_qdpo=false +CSET reset_qspo=false +CSET single_port_output_clock_enable=false +CSET sync_reset_qdpo=false +CSET sync_reset_qspo=false +# END Parameters +GENERATE +# CRC: 87a11b99 +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.xco Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.ngc =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.ngc (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.ngc (revision 2) @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$92x5d=#Zl|bdaa:!3-522):'?%8#?/$09355=789:;<=>70323<54438$;j6;ysy;6pc`69:<&=h59:HLSQQ86M5/QJg[Uthbli"Zge^Dfhvci{}obbRM`Psm`avuhz&ID^HIJN^Ffwlai'}g{#Rmh/bmntZ0eWl{~ma agn31?FNBKBUGENKASD]W]UC>3JEFADZ[EE37?FIUMVMNBH\NTHMM[LHAG>1H^HO[EE38@7=AL81L?6IAD39J47=N9;1B>?5F339J07=N=01BBDZ\T@VF2>JHIMOO;6B@GHABH1=K]]>?7A[[6b9Neoiu^lxxeb`l;LkmkwPbzzcdb>5A0018J4643G;:?6@>229M56597C<<;O056>H4:2D?>6@:2:L56>H0:2D3>6@6f:LA[GSTX@DT\_A_S69MAQQHZB;0C?5@K09S0>VFZ]k0\D@PBTQJ@]dS7'noeS~z}ubvvv`Ykgnch"jka_ommtlvbd`dnh#oPepwbhZhh|l{~maQm.h]b[`wXflUi#dQzsd]`ewt~Wyf~Rbztr,oqqYffm$bSjo{e^`jp*rnm{UlicU>]/k\plcu'eed|RzfldqX4X(nW}cgi"a>06c3?P6(oldTy|zcuwqaZjho`i%kh`Pnnlsmuckagoo"lQjqtco[kismxj`Rl!i^c\atYimVh$eR{|e^abvwXxexSa{{s/nvpZgil'cTklzj_ckw+qobzVmnbV?R.h]wm`t(dfe{SygcerY3Y+oX|`fn#b??7^QT4S7'noeS~z}ubvvv`Ykgnch"jka_ommtlvbd`dnh#oPepwbhZhh|l{~maQm.h]b[`wXflUi#ykbp^pfwpjsi2_XI_QNLHCPg>STM[U]E^GMLD18RFE>3_CN[RZVPD3g?]OKAGR&TIL/0/3#WQSE(9$:,L]LIH48\VRKAK=0T^ZPGOFa?]YDG[OTECH@6:ZgfZOcn2RodR^}ilTfvvohf8:0TicPM`hlvScu{`ee==5Wdl]Nmkiu^lxxeb`;;`*3-1=f 8#?7l&=)59b,6/33h"?%95n(4+7?d:76=1j0<0;;`>1:1=f4:4?7l2;>79b80<76=1j0809;`]fuZd13hUliRl9;`]dpZd13hUgiRl9;`]opZd13hUeiRl;;`aov1=f{l~?7o&?)59a,4/33k"9%95m(2+7?g.3!=1i$8';;c>3:1=e484?7o2=>59a86833k6?2;5m<483:1=e4<48=6mPcnosewcX~0U; -Vflhl{$FIUM)Mnbh|ntnp#55(6&99Te}==;bg0?fjll2ida}Q9b^grqdj5>2ida}Q9b^grqdj+kVida}o}e^t:[5*IGGO'BB@J1c58gjkwW?hTi|{nl-a\gjkwi{oTz4Q?,za\lduXyhUliRl20-a\lduXyhUeiRl20-a\lduXyhUgxRl20-a\lduXizo1="l_icp[dY`|Vh64)eX{pdhSh`nbmg>4)eX`hyT~k{=1.`[mgtWxkT`hQm=1.`[mgtWhUliRl20-a\fZehfz~jby3?,b]kevYfWe~Tn0>#c^jbwZgXflUi1="l_c]ueisb59:;<=>?012345678%w9>6m`mq]5fZcv}hfToRm`mqcqaZp>W9UsyQ>8:ggmc4iom20bjmmuhng3>wfWl{Tn:5~a^ef[g10nb}4:qpaq{GHy237MNwc;D90?7|[8:1;;4<:011=5`f2;:?oiua4c82?k2d2=1/844;5:Pa?112:0:??7?f`8141ec3Z;h6:950;306<6ai38;8nj4Sd843?6=9:82b0:3:1=7?tS02933<428995=hn:327ga=q\:k1<7?51;31V772><1?7?<282ee?473>0n:<50;g97?c|@=80Vl4={485>x"4j3=97):7:7d8m04=83.847;7;o14>5=50;&01=7=1<7*<8;4g?k502:10e;=50;&0=831b;<4?::`77?6=93:16=44}c37>5<6290;wE:=;%1a>424c==3;9wE:=;[c90~3=>3?1:7s+3c841>"c2>90(k484:&05?533`=n6=44o4c94?=n>90;66a89;29?l172900c8k50;9l1f<722e>h7>5;h71>5<#;10>46`<7;28?l36290/?54:8:l03?7<3`?;6=4+3986<>h4?3807d:i:18'7=<202d8;7=4;h6f>5<#;10>46`<7;68?l2c290/?54:8:l03?3<3`<<6=4+3985`>h4?3:07d89:18'7=<1l2d8;7?4;h46>5<#;10=h6`<7;08?l03290/?549d:l03?5<3`<86=4+3985`>h4?3>07d8=:18'7=<1l2d8;7;4;n7a>5<n1<75`7983>>o093:17b9l:188m2`=831b:<4?::m4e?6=3f?m6=44o6`94?=e<>0;6<4?:1y'7g<6<2B?:6F;2:m27?6=3th8o7>53;294~"4j3;97E:9;I61?!7e281bn7>5;h32>5<l51d9K03=O<;1/=o47;h36>5<>o603:17b=<:188yg5b290>6=4?{%1a>4c<@=<0D9<4$0`93>o6=3:17d?9:188m41=831b=54?::m07?6=3th8h7>57;294~"4j3;m7E:9;I61?!7e2;1b=84?::k22?6=3`;<6=44i0:94?=n900;66g>a;29?j542900q~;m:18`[1c3W?n7S;k;_7b?[3a3W=j7S96;_5`?[1e3W?h7S;m;<64>45<5:i1?45rs4;94?4|V<801>j5199~w01=838pR8?4=2f95<=z{<<1<71v8;50;0xZ1`<5:l1=:5rs4694?4|V=o01>h5149~w05=838pR9j4=2g950=z{?o1<7k5199~w3g=838pR;:4=2d95==z{?31<7{t;o0;6?u23g807>;4l3;>7p}=2;296~;4m39870=k:0c8yxu213:1>vP:2:?:>04<,=;1>55rs4594?4|V<;0144:1:&75?4f3ty>:7>52z\64>;>2<:0(9?52c9~w03=838pR9h4=887b>"3938h7p}:4;296~X3m27269k4$5396a=z{<91<7vP95:?:>33<,=;1>>5rs7c94?4|V?>014494:&75?433ty=57>52z\57>;>2?90(9?5249~w3>=838pR;<4=8856>"3938=7p}81;296~X092726:?4$53962=z{>21<752zJ76>{i>j0;6?uG439~j3b=838pD9<4}o4f>5<5sA>97p`9f;296~N3:2we;=4?:3yK07=zf>;1<76sa7583>7}O<;1vb:;50;0xL14{I61?xh1=3:1=vF;2:m23<728qC8?5rn7594?7|@=80qpsr@AAx<=<5>kk=5;9r@A@x4xFGXrwKL \ No newline at end of file
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.ngc Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/OVERRIDE_LUT_CONTROL.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/OVERRIDE_LUT_CONTROL.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/OVERRIDE_LUT_CONTROL.vhd (revision 2) @@ -0,0 +1,108 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 15:09:25 11/30/2009 +-- Design Name: +-- Module Name: OVERRIDE_LUT_CONTROL - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity OVERRIDE_LUT_CONTROL is + Port ( clk : in STD_LOGIC; + input_addr : in STD_LOGIC_VECTOR (5 downto 0); + sel_total_length_MSBs : out STD_LOGIC; + sel_total_length_LSBs : out STD_LOGIC; + sel_header_checksum_MSBs : out STD_LOGIC; + sel_header_checksum_LSBs : out STD_LOGIC; + sel_length_MSBs : out STD_LOGIC; + sel_length_LSBs : out STD_LOGIC + ); +end OVERRIDE_LUT_CONTROL; + +architecture Behavioral of OVERRIDE_LUT_CONTROL is + +component comp_6b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + b : in STD_LOGIC_VECTOR ( 5 downto 0 ) + ); +end component; + +constant total_length_addr1 : std_logic_vector(5 downto 0):="010000"; +constant total_length_addr2 : std_logic_vector(5 downto 0):="010001"; + +constant header_checksum_addr1 : std_logic_vector(5 downto 0):="011000"; +constant header_checksum_addr2 : std_logic_vector(5 downto 0):="011001"; + +constant length_addr1 : std_logic_vector(5 downto 0):="100110"; +constant length_addr2 : std_logic_vector(5 downto 0):="100111"; + + +signal sel_header_checksum_MSBs_tmp : std_logic; +signal sel_total_length_MSBs_tmp : std_logic; +signal sel_length_MSBs_tmp : std_logic; + +begin + +TARGET_TOTAL_LENGTH_1 : comp_6b_equal port map (sel_total_length_MSBs_tmp,clk,input_addr,total_length_addr1); + +process(clk) +begin +if clk'event and clk='1' then + sel_total_length_LSBs<=sel_total_length_MSBs_tmp; +end if; +end process; +sel_total_length_MSBs<=sel_total_length_MSBs_tmp; + +--TARGET_TOTAL_LENGTH_2 : comp_6b_equal port map (sel_total_length_LSBs,clk,input_addr,total_length_addr2); + +TARGET_HEADER_CHECKSUM_1 : comp_6b_equal port map (sel_header_checksum_MSBs_tmp,clk,input_addr,header_checksum_addr1); +process(clk) +begin +if clk'event and clk='1' then + sel_header_checksum_LSBs<=sel_header_checksum_MSBs_tmp; +end if; +end process; + +sel_header_checksum_MSBs<=sel_header_checksum_MSBs_tmp; + + + +--TARGET_HEADER_CHECKSUM_2 : comp_6b_equal port map (sel_header_checksum_LSBs,clk,input_addr,header_checksum_addr2); + +TARGET_LENGTH_1 : comp_6b_equal port map (sel_length_MSBs_tmp,clk,input_addr,length_addr1); + +process(clk) +begin +if clk'event and clk='1' then + sel_length_LSBs<=sel_length_MSBs_tmp; +end if; +end process; + +sel_length_MSBs<=sel_length_MSBs_tmp; +--TARGET_LENGTH_2 : comp_6b_equal port map (sel_length_LSBs,clk,input_addr,length_addr2); + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/OVERRIDE_LUT_CONTROL.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPV4_PACKET_TRANSMITTER.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPV4_PACKET_TRANSMITTER.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPV4_PACKET_TRANSMITTER.vhd (revision 2) @@ -0,0 +1,437 @@ +----------------------------------------------------------------------------------------- +-- Copyright (C) 2010 Nikolaos Ch. Alachiotis -- +-- -- +-- Engineer: Nikolaos Ch. Alachiotis -- +-- -- +-- Contact: alachiot@cs.tum.edu -- +-- n.alachiotis@gmail.com -- +-- -- +-- Create Date: 14:45:39 11/27/2009 -- +-- Module Name: IPV4_PACKET_TRANSMITTER -- +-- Target Devices: Virtex 5 FPGAs -- +-- Tool versions: ISE 10.1 -- +-- Description: This component can be used to send IPv4 Ethernet Packets. -- +-- Additional Comments: The look-up table contains the header fields of the IP packet, -- +-- so please keep in mind that you have to reinitialize this LUT. -- +-- -- +----------------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity IPV4_PACKET_TRANSMITTER is + Port ( rst : in STD_LOGIC; + clk_125MHz : in STD_LOGIC; + transmit_start_enable : in STD_LOGIC; + transmit_data_length : in STD_LOGIC_VECTOR (15 downto 0); + usr_data_trans_phase_on : out STD_LOGIC; + transmit_data_input_bus : in STD_LOGIC_VECTOR (7 downto 0); + start_of_frame_O : out STD_LOGIC; + end_of_frame_O : out STD_LOGIC; + source_ready : out STD_LOGIC; + transmit_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0) + ); +end IPV4_PACKET_TRANSMITTER; + +architecture Behavioral of IPV4_PACKET_TRANSMITTER is + + +----------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------------------------------------------- +-- IPv4 PACKET STRUCTURE : -- +-- Size | Description | Transmission Order | Position -- +-- ----------------------------------------------------------------------------------------------------------- +-- 6 bytes | Destin MAC Address (PC) | 0 1 2 3 4 5 | LUT -- +-- | X-X-X-X-X-X | | -- +-- | | | -- +-- 6 bytes | Source MAC Address (FPGA) | 6 7 8 9 10 11 | LUT -- +-- | 11111111-11111111-11111111-11111111-... | | -- +-- 2 bytes | Ethernet Type * | 12 13 | LUT -- +-- | (fixed to 00001000-00000000 :=> | | -- +-- | Internet Protocol, Version 4 (IPv4)) | | -- +-- -- Start of IPv4 Packet ** - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- | -- +-- 1 byte | 4 MSBs = Version , 4 LSBs = Header Length | 14 | LUT -- +-- | 0100 0101 | | -- +-- 1 byte | Differentiated Services | 15 | LUT -- +-- | 00000000 | | -- +-- 2 bytes | Total Length | 16 17 | REG -- +-- | 00000000-00100100 (base: 20 + 8 + datalength)| | -- +-- 2 bytes | Identification | 18 19 | LUT -- +-- | 00000000-00000000 | | -- +-- 2 bytes | 3 MSBs = Flags , 13 LSBs = Fragment Offset | 20 21 | LUT -- +-- | 010 - 0000000000000 | | -- +-- 1 byte | Time to Live | 22 | LUT -- +-- | 01000000 | | -- +-- 1 byte | Protocol | 23 | LUT -- +-- | 00010001 | | -- +-- 2 bytes | Header Checksum | 24 25 | REG -- +-- | 10110111 01111101 (base value) | | -- +-- 4 bytes | Source IP Address | 26 27 28 29 | LUT -- +-- | X-X-X-X - FPGA | | -- +-- 4 bytes | Destin IP Address | 30 31 32 33 | LUT -- +-- | X-X-X-X - PC | | -- +-- -- Start of UDP Packet *** - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- | -- +-- 2 bytes | Source Port | 34 35 | LUT -- +-- | X-X | | -- +-- 2 bytes | Destination Port | 36 37 | LUT -- +-- | X-X | | -- +-- 2 bytes | Length | 38 39 | REG -- +-- | 00000000 - 00010000 (8 + # data bytes) | | -- +-- 2 bytes | Checksum | 40 41 | LUT -- +-- | 00000000 - 00000000 | | -- +-- X bytes | Data | 42 .. X | from input -- +-- | | | -- +----------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------------------------------------------- + +-- * More details about the Ethernet Type value you can find here: +-- http://en.wikipedia.org/wiki/Ethertype + +-- ** More details about the Internet Protocol, Version 4 (IPv4) you can find here: +-- http://en.wikipedia.org/wiki/IPv4 + +-- *** More details about the Internet Protocol, Version 4 (IPv4) you can find here: +-- http://en.wikipedia.org/wiki/User_Datagram_Protocol + +----------------------------------------------------------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------------------------------------------------------- + + + +-------------------------------------------------------------------------------------- +-- COMPONENT DECLARATION +-------------------------------------------------------------------------------------- + +component REG_16B_WREN is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + wren : in STD_LOGIC; + input : in STD_LOGIC_VECTOR (15 downto 0); + output : out STD_LOGIC_VECTOR (15 downto 0)); +end component; + +component IPV4_LUT_INDEXER is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + transmit_enable : in STD_LOGIC; + LUT_index : out STD_LOGIC_VECTOR (5 downto 0)); +end component; + +component dist_mem_64x8 is + port ( + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + qspo : out STD_LOGIC_VECTOR ( 7 downto 0 ) + ); +end component; + +component OVERRIDE_LUT_CONTROL is + Port ( clk : in STD_LOGIC; + input_addr : in STD_LOGIC_VECTOR (5 downto 0); + sel_total_length_MSBs : out STD_LOGIC; + sel_total_length_LSBs : out STD_LOGIC; + sel_header_checksum_MSBs : out STD_LOGIC; + sel_header_checksum_LSBs : out STD_LOGIC; + sel_length_MSBs : out STD_LOGIC; + sel_length_LSBs : out STD_LOGIC + ); +end component; + +component TARGET_EOF is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + start : in STD_LOGIC; + total_length_from_reg : in STD_LOGIC_VECTOR(15 downto 0); + eof_O : out STD_LOGIC); +end component; + +component ENABLE_USER_DATA_TRANSMISSION is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + start_usr_data_trans : in STD_LOGIC; + stop_usr_data_trans : in STD_LOGIC; + usr_data_sel : out STD_LOGIC); +end component; + +component ALLOW_ZERO_UDP_CHECKSUM is + Port ( clk : in STD_LOGIC; + input : in STD_LOGIC; + output_to_readen : out STD_LOGIC; + output_to_datasel : out STD_LOGIC); +end component; + + +-------------------------------------------------------------------------------------- +-- SIGNAL DECLARATION +-------------------------------------------------------------------------------------- + +signal transmit_start_enable_tmp, + sel_total_length_MSBs, + sel_total_length_LSBs, + sel_header_checksum_MSBs, + sel_header_checksum_LSBs, + sel_length_MSBs, + sel_length_LSBs, + lut_out_sel, + source_ready_previous_value, + end_of_frame_O_tmp, + transmit_start_enable_reg, + usr_data_sel_sig, + start_usr_data_read, + start_usr_data_trans : STD_LOGIC; + +signal LUT_addr : STD_LOGIC_VECTOR(5 downto 0); + +signal transmit_data_input_bus_tmp, + transmit_data_output_bus_tmp, + sel_total_length_MSBs_vec, + sel_total_length_LSBs_vec, + sel_header_checksum_MSBs_vec, + sel_header_checksum_LSBs_vec, + sel_length_MSBs_vec, + sel_length_LSBs_vec, + lut_out_sel_vec, + transmit_data_output_bus_no_usr_data, + usr_data_not_sel_vec, + usr_data_sel_vec : STD_LOGIC_VECTOR(7 downto 0); + +signal transmit_data_length_tmp, + data_length_regout, + tmp_total_length, + tmp_header_checksum, + tmp_header_checksum_baseval, + tmp_length : STD_LOGIC_VECTOR(15 downto 0); + + +begin + +transmit_start_enable_tmp<=transmit_start_enable; + +transmit_data_length_tmp<=transmit_data_length; + +transmit_data_input_bus_tmp<=transmit_data_input_bus; + +---------------------------------------------------------------------------------------------------- +-- start_of_frame_O signal +---------------------------------------------------------------------------------------------------- +-- Description: start_of_frame_O is active low +-- We connect it to the delayed for one clock cycle transmit_start_enable input signal +-- through a NOT gate since transmit_start_enable is active high. + +process(clk_125MHz) +begin +if clk_125MHz'event and clk_125MHz='1' then + transmit_start_enable_reg<=transmit_start_enable_tmp; -- Delay transmit_start_enable one cycle. +end if; +end process; + +start_of_frame_O<=not transmit_start_enable_reg; + +---------------------------------------------------------------------------------------------------- +-- end_of_frame_O signal +---------------------------------------------------------------------------------------------------- +-- Description: end_of_frame_O is active low +-- The TARGET_EOF module targets the last byte of the packet that is being transmitted +-- based on a counter that counts the number of transmitted bytes and a comparator that +-- detects the last byte which is the th byte. + +TARGET_EOF_port_map: TARGET_EOF port map +( + rst =>rst, + clk =>clk_125MHz, + start =>transmit_start_enable_reg, + total_length_from_reg =>tmp_total_length, + eof_O =>end_of_frame_O_tmp +); + +--* The counter in TARGET_EOF starts from -X, where X is the number of bytes transmitted before the +-- IPv4 packet. (MAC addresses + Ethernet Type) + +end_of_frame_O<=end_of_frame_O_tmp; + +---------------------------------------------------------------------------------------------------- +-- source_ready signal +---------------------------------------------------------------------------------------------------- +-- Description: source_ready is active low +-- This signal is idle(high). (based on rst and end_of_frame_O_tmp). +-- This signal is active(low). (based on transmit_start_enable and end_of_frame_O_tmp). + +process(clk_125MHz) +begin +if rst='1' then + source_ready<='1'; + source_ready_previous_value<='1'; +else + if clk_125MHz'event and clk_125MHz='1' then + if (transmit_start_enable_tmp='1' and source_ready_previous_value='1') then + source_ready<='0'; + source_ready_previous_value<='0'; + else + if (end_of_frame_O_tmp='0' and source_ready_previous_value='0') then + source_ready<='1'; + source_ready_previous_value<='1'; + end if; + end if; + end if; +end if; +end process; + +---------------------------------------------------------------------------------------------------- +-- transmit_data_output_bus +---------------------------------------------------------------------------------------------------- +---------------------------------------------------------------------------------------------------- +-- Component Name: REG_16B_WREN +-- Instance Name: NUMBER_OR_DATA_IN_BYTES_REGISTER +-- Description: Register that holds the number of bytes of input data +-- that will be transmitted in the packet. +---------------------------------------------------------------------------------------------------- +NUMBER_OR_DATA_IN_BYTES_REGISTER : REG_16B_WREN port map +( + rst =>rst, + clk =>clk_125MHz, + wren =>transmit_start_enable_tmp, -- The transmit_start_enable input signal can be used as wren. + input =>transmit_data_length_tmp, + output =>data_length_regout +); +---------------------------------------------------------------------------------------------------- + +tmp_total_length<="0000000000011100" + data_length_regout; + +tmp_header_checksum_baseval<="1011011101111101"; -- CHANGE VALUE! : You have to change this value! +tmp_header_checksum<=tmp_header_checksum_baseval - data_length_regout; + +tmp_length<="0000000000001000" + data_length_regout; + +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: IPV4_LUT_INDEXER +-- Instance Name: IPV4_LUT_INDEXER_port_map +-- Description: When transmit_enable is high for one cycle IPV4_LUT_INDEXER generates the +-- addresses to the LUT that contains the header section of the IP packet. +---------------------------------------------------------------------------------------------------- +IPV4_LUT_INDEXER_port_map : IPV4_LUT_INDEXER port map +( + rst =>rst, + clk =>clk_125MHz, + transmit_enable =>transmit_start_enable_tmp, + LUT_index =>LUT_addr +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: dist_mem_64x8 +-- Instance Name: LUT_MEM +-- Description: LUT that contains the header section. +---------------------------------------------------------------------------------------------------- +LUT_MEM : dist_mem_64x8 port map +( + clk =>clk_125MHz, + a =>LUT_addr, + qspo =>transmit_data_output_bus_tmp +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: OVERRIDE_LUT_CONTROL +-- Instance Name: OVERRIDE_LUT_CONTROL_port_map +-- Description: Decides whether the output byte will come from the LUT or not. +---------------------------------------------------------------------------------------------------- +OVERRIDE_LUT_CONTROL_port_map : OVERRIDE_LUT_CONTROL port map +( + clk =>clk_125MHz, + input_addr =>LUT_addr, + sel_total_length_MSBs =>sel_total_length_MSBs, + sel_total_length_LSBs =>sel_total_length_LSBs, + sel_header_checksum_MSBs =>sel_header_checksum_MSBs, + sel_header_checksum_LSBs =>sel_header_checksum_LSBs, + sel_length_MSBs =>sel_length_MSBs, + sel_length_LSBs =>sel_length_LSBs +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- MUX 7 to 1 +sel_total_length_MSBs_vec<=(others=>sel_total_length_MSBs); +sel_total_length_LSBs_vec<=(others=>sel_total_length_LSBs); +sel_header_checksum_MSBs_vec<=(others=>sel_header_checksum_MSBs); +sel_header_checksum_LSBs_vec<=(others=>sel_header_checksum_LSBs); +sel_length_MSBs_vec<=(others=>sel_length_MSBs); +sel_length_LSBs_vec<=(others=>sel_length_LSBs); +lut_out_sel_vec <= (others=>lut_out_sel); + +lut_out_sel<=(not sel_total_length_MSBs) and (not sel_total_length_LSBs) and + (not sel_header_checksum_MSBs) and (not sel_header_checksum_LSBs) and + (not sel_length_MSBs) and (not sel_length_LSBs); + +-- MUX output +transmit_data_output_bus_no_usr_data<= (transmit_data_output_bus_tmp and lut_out_sel_vec) or + (tmp_total_length(15 downto 8) and sel_total_length_MSBs_vec) or + (tmp_total_length(7 downto 0) and sel_total_length_LSBs_vec) or + (tmp_header_checksum(15 downto 8) and sel_header_checksum_MSBs_vec) or + (tmp_header_checksum(7 downto 0) and sel_header_checksum_LSBs_vec) or + (tmp_length(15 downto 8) and sel_length_MSBs_vec) or + (tmp_length(7 downto 0) and sel_length_LSBs_vec); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: ALLOW_ZERO_UDP_CHECKSUM +-- Instance Name: ALLOW_ZERO_UDP_CHECKSUM_port_map +-- Description: Delays the user data transmition phase in order to transmit two bytes with zero +-- first. +---------------------------------------------------------------------------------------------------- +ALLOW_ZERO_UDP_CHECKSUM_port_map: ALLOW_ZERO_UDP_CHECKSUM port map +( + clk =>clk_125MHz, + input =>sel_length_LSBs, + output_to_readen =>start_usr_data_read, + output_to_datasel =>start_usr_data_trans +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: ENABLE_USER_DATA_TRANSMISSION +-- Instance Name: ENABLE_USER_DATA_READ_port_map +-- Description: Sets usr_data_trans_phase_on signal one cycle before the transmittion of the +-- first user byte. +---------------------------------------------------------------------------------------------------- +ENABLE_USER_DATA_READ_port_map: ENABLE_USER_DATA_TRANSMISSION port map +( rst =>rst, + clk =>clk_125MHz, + start_usr_data_trans =>start_usr_data_read, + stop_usr_data_trans =>end_of_frame_O_tmp, + usr_data_sel =>usr_data_trans_phase_on +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- Component Name: ENABLE_USER_DATA_TRANSMISSION +-- Instance Name: ENABLE_USER_DATA_TRANSMISSION_port_map +-- Description: Sets usr_data_sel_sig signal to select user data for transmittion. +---------------------------------------------------------------------------------------------------- +ENABLE_USER_DATA_TRANSMISSION_port_map: ENABLE_USER_DATA_TRANSMISSION port map +( rst =>rst, + clk =>clk_125MHz, + start_usr_data_trans =>start_usr_data_trans, + stop_usr_data_trans =>end_of_frame_O_tmp, + usr_data_sel =>usr_data_sel_sig +); +---------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------- +-- MUX 2 to 1 +usr_data_not_sel_vec<=(others=>not usr_data_sel_sig); +usr_data_sel_vec<=(others=>usr_data_sel_sig); + +-- MUX output +transmit_data_output_bus<=(transmit_data_output_bus_no_usr_data and usr_data_not_sel_vec) or + (transmit_data_input_bus and usr_data_sel_vec); +---------------------------------------------------------------------------------------------------- + +end Behavioral;
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPV4_PACKET_TRANSMITTER.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/ALLOW_ZERO_UDP_CHECKSUM.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/ALLOW_ZERO_UDP_CHECKSUM.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/ALLOW_ZERO_UDP_CHECKSUM.vhd (revision 2) @@ -0,0 +1,60 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 14:46:33 12/04/2009 +-- Design Name: +-- Module Name: ALLOW_ZERO_UDP_CHECKSUM - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity ALLOW_ZERO_UDP_CHECKSUM is + Port ( clk : in STD_LOGIC; + input : in STD_LOGIC; + output_to_readen : out STD_LOGIC; + output_to_datasel : out STD_LOGIC); +end ALLOW_ZERO_UDP_CHECKSUM; + +architecture Behavioral of ALLOW_ZERO_UDP_CHECKSUM is + +signal input_reg : std_logic; + +begin + +process(clk) +begin + if clk'event and clk='1' then + input_reg<=input; + end if; +end process; + +output_to_readen<=input_reg; + +process(clk) +begin + if clk'event and clk='1' then + output_to_datasel<=input_reg; + end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/ALLOW_ZERO_UDP_CHECKSUM.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_11B_EN_TRANS.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_11B_EN_TRANS.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_11B_EN_TRANS.vhd (revision 2) @@ -0,0 +1,58 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 16:16:57 11/30/2009 +-- Design Name: +-- Module Name: COUNTER_11B_EN_TRANS - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity COUNTER_11B_EN_TRANS is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (10 downto 0)); +end COUNTER_11B_EN_TRANS; + +architecture Behavioral of COUNTER_11B_EN_TRANS is + +begin + +process(clk) +begin +if rst='1' then + value_O<="11111110110"; +else + if clk'event and clk='1' then + if count_en='1' then + value_O<=value_O+"00000000001"; + else + value_O<=value_O; + end if; + end if; +end if; +end process; + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/COUNTER_11B_EN_TRANS.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.vhd (revision 2) @@ -0,0 +1,141 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version: K.39 +-- \ \ Application: netgen +-- / / Filename: comp_6b_equal.vhd +-- /___/ /\ Timestamp: Mon Nov 30 14:23:03 2009 +-- \ \ / \ +-- \___\/\___\ +-- +-- Command : -intstyle ise -w -sim -ofmt vhdl C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\comp_6b_equal.ngc C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\comp_6b_equal.vhd +-- Device : 5vsx95tff1136-1 +-- Input file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/comp_6b_equal.ngc +-- Output file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/comp_6b_equal.vhd +-- # of Entities : 1 +-- Design Name : comp_6b_equal +-- Xilinx : C:\Xilinx\10.1\ISE +-- +-- Purpose: +-- This VHDL netlist is a verification model and uses simulation +-- primitives which may not represent the true implementation of the +-- device, however the netlist is functionally correct and should not +-- be modified. This file cannot be synthesized and should only be used +-- with supported simulation tools. +-- +-- Reference: +-- Development System Reference Guide, Chapter 23 +-- Synthesis and Simulation Design Guide, Chapter 6 +-- +-------------------------------------------------------------------------------- + + +-- synthesis translate_off +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; +use UNISIM.VPKG.ALL; + +entity comp_6b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + b : in STD_LOGIC_VECTOR ( 5 downto 0 ) + ); +end comp_6b_equal; + +architecture STRUCTURE of comp_6b_equal is + signal BU2_N01 : STD_LOGIC; + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o85_16 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result : STD_LOGIC; + signal BU2_a_ge_b : STD_LOGIC; + signal NLW_VCC_P_UNCONNECTED : STD_LOGIC; + signal NLW_GND_G_UNCONNECTED : STD_LOGIC; + signal a_2 : STD_LOGIC_VECTOR ( 5 downto 0 ); + signal b_3 : STD_LOGIC_VECTOR ( 5 downto 0 ); +begin + a_2(5) <= a(5); + a_2(4) <= a(4); + a_2(3) <= a(3); + a_2(2) <= a(2); + a_2(1) <= a(1); + a_2(0) <= a(0); + b_3(5) <= b(5); + b_3(4) <= b(4); + b_3(3) <= b(3); + b_3(2) <= b(2); + b_3(1) <= b(1); + b_3(0) <= b(0); + VCC_0 : VCC + port map ( + P => NLW_VCC_P_UNCONNECTED + ); + GND_1 : GND + port map ( + G => NLW_GND_G_UNCONNECTED + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o107 : +LUT6 + generic map( + INIT => X"0000000080200802" + ) + port map ( + I0 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o85_16 +, + I1 => b_3(5), + I2 => b_3(4), + I3 => a_2(5), + I4 => a_2(4), + I5 => BU2_N01, + O => BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o107_SW0 : +LUT4 + generic map( + INIT => X"6FF6" + ) + port map ( + I0 => a_2(0), + I1 => b_3(0), + I2 => a_2(3), + I3 => b_3(3), + O => BU2_N01 + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o85 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(1), + I1 => b_3(1), + I2 => a_2(2), + I3 => b_3(2), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o85_16 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_gen_output_reg_output_reg_fd_output_1 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result, + Q => qa_eq_b + ); + BU2_XST_GND : GND + port map ( + G => BU2_a_ge_b + ); + +end STRUCTURE; + +-- synthesis translate_on
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.ngc =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.ngc (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.ngc (revision 2) @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$8dx5d=#Zl|bdaa:!3-522):'?%8#?/$0937>7)88:0=<4FNQWW>d:683:5==5>1;KMTPR=j5;;6=0i;4tp|<3sno;:?;#>119:456789:;<=>?0127?<6718:05=>60123456719:2?6LZ299AQVYNFOE:7N;:;B8,TMbXX{eainz|/Ujf[Cck{ldxxhga_BmSvjeb{zey#NA]EFGM[Actand$x`~ _be,gjkwW8;iShzam,mcj753JBNOFQCIBGMW@YSQYO27NABMHVWAA733JEYIRIJNDPBPLIIW@DMC:5LRDCWAA72FDMIKK7:NLCLEFD=1GYY:;;MWW2f=JiceyZh||inl`?Hoig{\n~~g`n29M555H6?:1E=5=4N0;1?K443G8;?6@=129M675H4>;1E8?5A539M27=I?;1E4?5A9g9MFZDR[YCES]\@PR58J@RPG[A:7B<4OJ38T1=WI[^j7]GA_CWPMA^e3YCESO[\N@OF5>W13ZE^^NK;;U[SA3e<]9%licQ|tsw`pptbWeelen heo]mkkvnxlfbbhj!a^grqdjXff~n}xoc_c,j[dYbyVdnSo!heo]lqqvr|Vxnk#aztqww[wc`'on$cxzuu]2=f=R8&mnbR}{rtawqwcXdfmbo#ijn^lljuowmeceii n_dsveiYig}ozylbPb/k\eZcvWgoTn"gPurg\gdtuqVzgy~Qcuuq-hprXign%eRintd]amq)salxTkh`T1\,j[qobz&fdc}Q{imgp_5[)aV~b`h!`12;:g>S7'noeS~z}ubvvv`Ykgnch"jka_ommtlvbd`dnh#oPepwbhZhh|l{~maQm.h]b[`wXflUi#dQzsd]`ewt~Wyf~Rbztr,oqqYffm$bSjo{e^`jp*rnm{UlicU>]/k\plcu'eed|RzfldqX4X(nW}cgi"a>88;`?P6(oldTy|zcuwqaZjho`i%kh`Pnnlsmuckagoo"lQjqtco[kismxj`Rl!i^c\atYimVh$eR{|e^abvwXxexSa{{s/nvpZgil'cTklzj_ckw+qobzVmnbV?R.h]wm`t(dfe{SygcerY3Y+oX|`fn#b8<4U1-dakYt|{hxx|j_mmdmf(`mgUecc~fpdnjj`b)iVozylbPnnvfupgkWk$bSlQjq^lf[g)smdzT~h}zluc8QVCUWHFBM^m4URGQ[SOTAKFN?6XLC89UM@QX\PZN=i5WIMKM\(^CJ):%=-][UC"3*4&F[JCB:6V\TMKA3>^T\VMEHo5W_BMQAZOINF<0TilPIed8\anXX{cfZh||inl24>^ceVGjfb|Yesqjkk773QnfS@gaosTfvvohf=1j$=';;`*2-0=f 8:"86o'2(68e-5.<2k#8$:4a)7*0>g/> >0m%9&4:c+<,27l2>0?68e979<2k7>3:4a=1=0>g;<7>0m1;14:c?2;22kTi|Qm6:c\c`Ye>2kTkyQm6:c\h`Ye>2kT`yQm6:c\j`Ye<2kh`:4argw0>d/8 >0n%?&5:`+55/33k"9%95m(2+7?g.3!=1i$8';;c*5-1=e >#?7o&7)59a,0;;c>7:1=e4<4?7o29>59a82833k63295m<8<05>eXkfg{mkPv8]3(%^nd`ds,NA]E!Efj`tf|fx+== >.11\mu553jo87nbde:aliuY69kUn}xoc269`khvX98hTi|{nl-a\gjkwi{oTz4Q?,OMMA)HHFL;im6m`mq]25gYby|kg nQlolrbv`Yq1V:'wnQgar]reZabWk7; nQgar]reZhbWk7; nQgar]reZjsWk7; nQgar]bw`r:8%iTdl}Pa^ew[g;7$jUcm~Qn_ds\f86+kVnjxlQ{yqg>5)eX{pdhS}|foskw}87+kVbjR}lls?3(fYoizUzmRi{_c?3(fYpam~c14)eX`hyTmnb}=1.`[vikVoemobj=1.`[mgtWzynx0>#c^jbwZwfWeoTn0>#c^jbwZgXolUi1="l_c]`kkusig~6?012345*z::1hc`~P10`\atsfdViTobcasg\rwfWn~Tn:5~a^nf[g16?4>33;3bd<5=1=iwc;9:09m12<33-??68>4}Rg9=0<528995=hn:37;3g=T9j02:7>5120:4cg=:<20;;6>7<6;;3;jl4=595a?sR3;3:1=7?51dyP55<>=381=><60gc960>0j2.?j7?k;W76>7}r:90:7x<>:19~ 6`==2h2=7>51980>4>|@=n0Vl4={287>x"3<33:7);<:9g8m0g=83.?=78;;o63>5=;6?54i7294?"3931=;6;54i4a94?"393==;6l54i6;94?"393287c:?:198m=7=83.?=76<;o63>4=43g>;6>54i6g94?"393287c:?:598m2b=83.?=76<;o63>0=i1<7*;1;:0?k272?10e:l50;&75?>43g>;6:54i6c94?"393287c:?:998m2>=83.?=76<;o63><==1<7*;1;:0?k272h10c4950;9j=5<722h?i7>51;294~N3l2.?87:j;n1f>5<:183M2c3->?6<:4o0194?=zj00;6?657;3fM2c3Sk18v=54;190?{#<=0286*k:808 c<>;2.8m7=k;h;g>5<>i>03:17d6i:188k25=831d;<4?::m46?6=3`?j6=4+40850>h383:07d8=:18'04<1<2d?<7?4;h42>5<#<80=86`;0;08?l07290/8<494:l74?5<3`?m6=4+40850>h383>07d;j:18'04<1<2d?<7;4;h7g>5<#<80=86`;0;48?l3d290/8<494:l74?1<3`?i6=4+40850>h383207d;6:18'04<1<2d?<774;h7;>5<#<80=86`;0;c8?l1>290/8<473:l74?6<3`2:6=4+408;7>h383;07d6?:18'045<#<803?6`;0;18?l1b290/8<473:l74?2<3`=o6=4+408;7>h383?07d9l:18'045<#<803?6`;0;58?l1f290/8<473:l74?><3`=36=4+408;7>h383307d98:18'045<>o>83:17b7m:188m=6F;d:m27?6=3th?97>53;294~"3<3;97E;>;I6g?!7e281bn7>5;h32>5<5<>o603:17b=l:188yg2f290>6=4?{%67>4c<@<;0D9j4$0`93>o6=3:17d?9:188m41=831b=54?::m0g?6=3th?:7>57;294~"3<3;m7E;>;I6g?!7e211b=84?::k22?6=3`;<6=44i0:94?=n900;66g>a;29?j5d2900qo:8:184>5<7s->?65;29?l712900e<950;9j5=<722c:57>5;h3b>5<5<>o603:17d?6:188m4g=831d?n4?::p35<72jqU5n5Q729]37=Y>o1U;95Q989]===Y1k1U5l5Q709]35=:=;0:?6s|9183>7}Y1916884m;|q:3?6=:rT2;63;5;61?xu1=3:1>vP:a:?72?7>3ty=i7>52z\56>;3>3;<7p}9d;296~X1927?:7?:;|q5g?6=:rT=<63;7;3:?xu1j3:1>vP:f:?73?703ty=m7>52z\6a>;3?3;>7p}99;296~X2l27?m7?8;|q5o63;a;36?xu1?3:1>vP:b:?752z\6=>;313;<7p}93;296~X2027?57?:;|q;0?6=:rT<563;6;3b?xu?l3:1>vP71:?72?7?3ty3o7>52z\;4>;3>3;=7p}7b;296~X0n27?;7?n;|q;e?6=:rTvP8d:?73?713ty347>52z\4g>;3i3;37p}77;296~X0j27?m7?9;|q;2?6=:rTvP88:?7=?7?3ty3>7>52z\43>;313;=7p};b;296~;3=3;:70:7:2a8yv2>2909w0:6:2a891>=9>1v9o50;0x91g=;j16854>8:p03<72;q68;43ty?;7>52z?73?5d34>36m636:4c8 1e=:j1v;k50;0xZ34<500=>6*;c;11?xu1l3:1>vP91:?:>37<,=i1?95rs7a94?4|V?:014490:&7g?523ty=n7>52z\6b>;>2"3k39<7p}99;296~X2l27268j4$5a97==z{?21<7n636:4`8 1e=:;1v;850;0xZ0?<500>56*;c;00?xu1;3:1>vP:8:?:>0><,=i1>95rs9694?4|V>3014489:&7g?423ty3h7>52z\;5>;>21;0(9m5279~w=e=838pR5>4=88;4>"3k38<7p}7b;296~X0n2726:h4$5a96==z{1k1<7vP8b:?:>2d<,=i1>i5rs9494?4|V>k01448a:&7g?4b3ty397>52z\4<>;>2>20(9m52g9~w=4=838pR:94=8843>"3k39;7p}60;296~X>827264>4$5a974=z{0=1<7?2.?o7=<;|m==<72;qC8i5rn8;94?4|@=n0qc7n:181M2c3td2n7>52zJ7`>{i1j0;6?uG4e9~j5<5sA>o7p`6f;296~N3l2wem=4?:3yK0a=zfh;1<77}OvF;d:me=<72;qC8i5rn`;94?4|@=n0qcon:181M2c3tdjn7>52zJ7`>{iij0;6?uG4e9~jdb=838pD9j4}ocf>5<5sA>o7p`nf;296~N3l2we;l4?:0yK0a=zf091<7?tH5f8yk?3290:wE:k;|l:1?6=9rB?h6sa9783>4}Oj0
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.ngc Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/TARGET_EOF.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/TARGET_EOF.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/TARGET_EOF.vhd (revision 2) @@ -0,0 +1,106 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 16:22:56 11/30/2009 +-- Design Name: +-- Module Name: TARGET_EOF - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity TARGET_EOF is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + start : in STD_LOGIC; + total_length_from_reg : in STD_LOGIC_VECTOR(15 downto 0); + eof_O : out STD_LOGIC); +end TARGET_EOF; + +architecture Behavioral of TARGET_EOF is + +signal count_end : std_logic:='0'; +signal count_en_sig : std_logic:='0'; +signal rst_counter : std_logic:='0'; + +component COUNTER_11B_EN_TRANS is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (10 downto 0)); +end component; + +signal value_O_tmp : std_logic_vector(10 downto 0); + +component comp_11b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 10 downto 0 ); + b : in STD_LOGIC_VECTOR ( 10 downto 0 ) + ); +end component; + +signal last_byte,last_byte_reg_in,last_byte_reg_out : std_logic; + +begin + +process(clk) +begin +if (rst='1' or count_end='1') then + count_en_sig<='0'; + rst_counter<='1'; +else + rst_counter<='0'; + if clk'event and clk='1' then + if (start='1' and count_en_sig='0') then + count_en_sig<='1'; + end if; + end if; +end if; +end process; + + +COUNT_TRANFERED_BYTES : COUNTER_11B_EN_TRANS port map +( rst =>rst_counter, + clk =>clk, + count_en => count_en_sig, + value_O =>value_O_tmp +); + +COMP_TO_TARGET_LAST_BYTE : comp_11b_equal port map +( + qa_eq_b =>last_byte_reg_in, + clk =>clk, + a =>value_O_tmp, + b =>total_length_from_reg(10 downto 0) +); + +process(clk) +begin +if clk'event and clk='1' then + last_byte_reg_out<=last_byte_reg_in; +end if; +end process; +eof_O<=not last_byte_reg_out; +count_end<=last_byte_reg_out; +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/TARGET_EOF.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.ngc =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.ngc (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.ngc (revision 2) @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$bgx5d=#Zl|bdaa:!3-522):'?%8#?/$09355=789:;:<:?0163252682::<=>:79224422?1;;7=??713FB543>9898<>40327534189:?=:<91193=577998;N=O?2100?4(7991:>=010245448;89>???;3135557;8;:==?>2g96rv~>=}lm=<=9-0g82?OIX\^1m1;50?32?3>=G\^[YY4~sqm?3?6998136B[[PTV9wui;?3:5?6LZ299AQVYNFOE:7N;;;B8,TMbXX{eainz|/Ujf[Cck{ldxxhga_BmSvjeb{zey#NA]EFGM[Actand$x`~ _be,`lusWdofS;:w8/ldk44O7:2C:>6G=2:K06>O3:2C>56GAIUQWEQC13EEJHHJ8;MMDMFGK<2F^X;m4M`hlvScu{`eeo6CfnnpUawungg80B=<4N078J7770<1E><>65:L154623G8:=<;4N33260=I:8;896@=1266?K46>9?0B??9149M6405=2D9=;=:;O02213H59?=m7CLPBTQSMKYWZFZX;6@JTVMQO4=H:2E@=6^;;QCQPd=WAGUIY^GKXc9SMKYE]ZDJAH?4Q79PKPTDM=1_U]K=a:W3+bciW{ef"ab_hlpp*KugdUx|bQfnu]qkh6789;:>o5Z0.efjZthe'xdaRgasu-NvjkX{yeTeczPrno34566988j7X> gdl\vjk)zfgTec}{/LpliZuwgVcexR|`m1234775i2_;#jka_smn*wijW`dxx"C}ol]ptjYnf}Uyc`>?01126d=R8&mnbR|`m/pliZoi{}%F~bcPsqm\mkrXzfg;<=>;13c8Q5)`mgUyc` }ol]jjvr(E{efS~~`_hlw[wij89:;9< gdl\vjk)zfgTec}{/pqskZoi|V8:i6[?/fgm[wij&{efSd`|t.sptjYnf}U8=h5Z0.efjZthe'xdaRgasu-rwuiXag~T8e:W3+bciW{ef"ab_hlpp*wtxfUbbyQ81d9V4*abfVxda#|`m^kmwq)txfUbby2?>0g8Q5)`mgUyc` }ol]jjvr({yeTecz31?3f?P6(oldT~bc!rno\mkus'zzdSd`{<3<2a>S7'noeSab.smn[lht|&y{cRgat=1=5`=R8&mnbR|`m/pliZoi{}%x|bQfnu>7:4c<]9%licQ}ol,qkhYnfz~$}aPiov?1;7b3\:$kh`Prno-vjkXagy#~~`_hlw8386m2_;#jka_smn*wijW`dxx"}o^kmp919i2_XI_QNLHCPg>STM[U]E^GMLD18RFE>3_CN[RZVPD3g?]OKAGR&TIL/0/3#WQSE(9$:,L]LIH48\VRKAK=0T^ZPGOFa?]YDG[OTECH@6:ZgfZOcn2RodR^}ilTfvvohf8:0TicPM`hlvScu{`ee==5Wdl]Nmkiu^lxxeb`;;`*3-1=f 8#?7l&=)59b,6/33h"?%95n(4+7?d:76=1j0<0;;`>1:1=f4:4?7l2;>79b80<76=1j080<;bnh0>b/8 >0h%?&4:f+6,2b;?3:5h6jfsu]nahY14)eX`hyT{h3?,b]smuckagoTyoher?3(fYoizUzh}aPrrv>4)eXzlmTh}|n_hlsqq;7$jUzylbffx]ta86+kVyrbnQjn``oa87+kVnn|yf265.`[mgtWmzym0>#c^jbwZwtxfUx~~z20-a\lduXymzdS~||t<2/gZwdmV`deckk=1.`[hcjW}s{i0>#c^jbwZoXkl7; nQgar]gtj;7$jUfi`Qfnhv\bljb5mcxxRcjm^47|=(jao&hSikiatnw[agsi4:'oRfns^qsvd;7$jUcm~Q~sqm\g`;7$jUjhi|Pwhfwl80+kVbjRkpn?3(fYoizUz}aPrrv>4){5=2nbyQbel]50}>Xl`yS`kb_fgm[s5X$84dqm+7,017:fsvd.7!>1o|o'1(58`utf ;#<7i~}a)1*3>bwzh"?%:5kpsc+1,?99f`l`5fnn?7dQle99mcfdraen<7|jo)2*3>wcxf":%:5~dqm+6,1'8;pfsk-2.?2{o|b&:)69r`ui/> =0}i~`(6+4?tbwg5:556kpn>4>5803xn{cRmj8:sgtjYddb20}i~`_sqw=>wcxfUx~~z8;pqsk-6.?2{x|b&>)69rwui/: =0}~~`(2+4?tuwg!>";6|pn*6-2=v{ye#:$94qrrl,2/03xy{c1>17:sptj:66>1z}a32?58uvvh4:4<7|}o=6=3>wtxf6>2:5~sqm?2;?69rwui;?7=0}~~`_bg;?tuwgVxxx45~sqm\wwus>2y{c%>&6:qsk-7.>2y{c%<&6:qsk-5.>2y{c%:&6:qsk-3.>2y{c%8&6:qsk-1.02y{c1950?58wutf 9#<7~~}a)3*3>uwzh"9%:5|psc+7,1<{yxj$9'8;rrqe-3.12y{~l2::1<1?rczHIz:<55O@y34>C<328qX=o468;59564>9=;1>>:86zl5e?733;204<5;===7^<8:8c94?74:0;?=7<<4648W4?=1h0;6<==9062>753?>1o4>4?:082V7e2021;7?<28375?44<><0zY:9:182>4<6irY:n777:68277?6<809?999;%40>7><^?31>v{=a;38q7d=82w/8?4m;c:0>586=54i6294?"3<3=<7c:<:098m3`=83.?8798;o60>7=86954i7a94?"3<3=<7c:<:498m2?=831dn=4?:%67>g>!232k20b9=51:9le`<72->?6o64n5196>=him0;6):;:c:8j15=;21dmn4?:%67>g>!232k20b9=55:9led<72->?6o64n5192>=hi00;6):;:c:8j15=?21i:?4?:083>5}O>81/8:492:m75?6=3th:j7>51;294~N192.?;7?i;n3f>5<4>|@?;0V<;511y24?c=k3l1=?4k:01954<6;3;;6<<5108`>c1686<54o9f94?"3<33;7c:<:398k=e=83.?877?;o60>6=86854o9;94?"3<33;7c:<:798k=>=83.?877?;o60>2=86<54ib;94?"3<3ih7c:<:398mf>=83.?87ml;o60>6=86854ica94?=njk0;66g81;29 12=?>1e8>4?;:k44?6=,=>1;:5a4282?>o1n3:1(9:5769m06<532c=i7>5$56932=i<:0876g9d;29 12=?>1e8>4;;:k5g?6=,=>1;:5a4286?>o?93:1(9:5839m06<732c3<7>5$569<7=i<:0:76g8f;29 12=0;1e8>4=;:k4a?6=,=>14?5a4280?>o0l3:1(9:5839m06<332c5$569<7=i<:0>76g8b;29 12=0;1e8>49;:k4e?6=,=>14?5a4284?>of03:17d96:188kg6=83.?87l7;o60>5=86?54o`f94?"3<3h37c:<:298kde=83.?87l7;o60>1=86;54o`;94?"3<3h37c:<:698md0=831bm84?::kb3?6=3`3=6=4+458:3>h3;3:07d7::18'01<>?2d??7?4;h;7>5<#<=02;6`;3;08?l?4290/89467:l77?5<3`396=4+458:3>h3;3>07d7>:18'01<>?2d??7;4;na7>5<#<=0h96`;3;28?je4290/894l5:l77?7<3fi96=4+458`1>h3;3807bm>:18'015<#<=0h96`;3;68?jda290/894l5:l77?3<3fhn6=4+458`1>h3;3<07blk:18'015<!232h>0b9=50:9le4<72->?6l:4n5195>=hi90;6):;:`68j15=:21d5k4?:%67>d2!232h>0b9=54:9l=a<72->?6l:4n5191>=h1j0;6):;:`68j15=>21d5o4?:%67>d2>d1>3:1=7>50z&73?7a3A<>7E8>;n3f>5<5;h3`>5<81/>;4>;h35>5<>{e=;0;6>4?:1y'02<6l2B=96F91:&12?7>i3=3:17pl:3;297?6=8r.?;7?k;I46?M063-8=6<5f1783>>o6k3:17b:::188yg3329086=4?{%64>4b<@??0D;?4$3495>o6>3:17d?l:188k13=831vn8;50;194?6|,==1=i5G649K24=#:?0:7d?9:188m4e=831d884?::a13<72:0;6=u+4682`>N1=2B==6*=6;38m40=831b=n4?::m71?6=3th>;7>53;294~"3?3;o7E8:;I42?!41281b=;4?::k2g?6=3f>>6=44}c6;>5<0290;w):8:3;8L33<@?;0(?858:k14?6=3`8:6=44i3094?=n::0;66g=4;29?l422900c>h50;9~f1c=83=1<7>t$5596<=O><1C:<5+2787?l472900e??50;9j67<722c9?7>5;h07>5<>{e>o5:3:17d<<:188m72=831b>84?::m0b?6=3th?m7>57;294~"3?3827E8:;I42?!412:1b>=4?::k15?6=3`896=44i3194?=n:=0;66g=5;29?j5a2900qo:k:184>5<7s-><6?74H778L37<,;<1m6g=0;29?l462900e?<50;9j66<722c987>5;h06>5<81/>;4:;h03>5<>o5;3:17d<;:188m73=831d?k4?::a0c<72>0;6=u+4681=>N1=2B==6*=6;;8m76=831b><4?::k16?6=3`886=44i3694?=n:<0;66a50z&73?4>3A<>7E8>;%05>7=n:90;66g=1;29?l452900e?=50;9j61<722c997>5;n1e>5<17<6>27>?7?9;<77>40<5;2?3;=7p}n3;295<}Yk=1Uo>5Qc39]g4=Yk91Unk5Qbd9]fa=Y0o1U4h5Q8e9]?0:i6s|b883>7}Yj9169:4;5:pf2<72;qUmk5257871>{tj?0;6?uQad9>10<3=2wxn84?:3y]ea=:==0?96s|b583>7}Yij169>4;5:pf6<72;qUmo5253871>{tj;0;6?uQa`9>14<3=2wxn<4?:3y]e<=:=90?96s|7983><}Y?816854=1:?7a?4434>i6?<4=5c965=:4=5:960=:63;b;02?82f2;>019j5219>0f<5<27?j7<=;<6:>726=46{_4e?82?2;:019k5209>0g<5827?m7<<;<6g>73<5=i1><524g814>;3138:7p}84;29=~X1m27?47<;;<6f>76<5=h1>8524`816>;3l38970:l:32891`=:<16844=0:p36<720qU:i5249816>;3m38>70:m:31891g=:8168i4=4:?7g?4434>m6?=4=5;966=z{>81<77t^7a891>=::168h4=4:?7f?4334>j6?;4=5f966=:2;?0q~;7:18183728i019653g9~w0?=838p18?51b9>0<<4n2wx9l4?:3y>17<6k27?m7=i;|q6f?6=:r7>?7?l;<6a>6`4e<5=i1?k5rs4f94?4|5{t=l0;6?u25782g>;3m39m7p}:f;296~;2?3;h70:i:2d8yxu5k3:1=lu21g82a>;6<32:70?;:928942=?o16=948e:?20?1c34;?6:m4=0693g=:9=04;;5?87320?01<:5959>51<>;27:877=;<37><7<58>1oo52158`e>;6<3i270?;:b:8942=k>16=94l6:?20?g134;?6ol4=069e2=:9=0io63>4;c;?xu5l3:19v392;62?8732jn01<:5989>514;52?!072;o0q~99:181[1734;?6:>4$7296c=z{>?1<7o1/:=4<0:p31<72;qU:h521585a>"1839:7p}83;296~X1l27:878k;%43>645329~w2?=838pR:74=0693<=#>90886s|b883>7}Yj916=94m0:&54?523tyi;7>52z\bb>;6<3km7)8?:248yvd12909wSoj;<37>dc<,?:1?:5rsc794?4|Vhn01<:5ae9'25<402wxn94?:3y]ef=:9=0jo6*90;1:?xue;3:1>vPnb:?20?ge3-<;6>o4}r`1>5<5sWkj70?;:`c8 36=;k1vo?50;0xZd?<58>1m45+6180g>{zfmn1<7?tH738ykbb290:wE8>;|lgb?6=:rB==6sae183>7}O>81vbh?50;0xL37vF91:ma1<72;qC:<5rnd794?4|@?;0qck9:181M063tdn;7>52zJ55>{im10;6?uG609~j`?=838pD;?4}ogb>5<5sA<:7p`jb;296~N192wein4?:3yK24=zfln1<7;|lg1?6=9rB==6sad783>4}O>81vbi950;3xL37{I42?xhc13:1=vF91:m`d<728qC:<5rne`94?7|@?;0qcjl:182M063twvqMNL{02;>c34j9h<8pNOBz2~DEV|uIJ \ No newline at end of file
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.ngc Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/REG_16B_WREN.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/REG_16B_WREN.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/REG_16B_WREN.vhd (revision 2) @@ -0,0 +1,56 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 21:15:16 11/27/2009 +-- Design Name: +-- Module Name: REG_16B_WREN - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: 16bit wide Register with write enable option. +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity REG_16B_WREN is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + wren : in STD_LOGIC; + input : in STD_LOGIC_VECTOR (15 downto 0); + output : out STD_LOGIC_VECTOR (15 downto 0)); +end REG_16B_WREN; + +architecture Behavioral of REG_16B_WREN is + +begin + +process(clk) +begin +if rst='1' then + output<="0000000000000000"; +else +if clk'event and clk='1' then + if wren='1' then + output<=input; + end if; +end if; +end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/REG_16B_WREN.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPV4_LUT_INDEXER.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPV4_LUT_INDEXER.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPV4_LUT_INDEXER.vhd (revision 2) @@ -0,0 +1,110 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 22:11:55 11/27/2009 +-- Design Name: +-- Module Name: IPV4_LUT_INDEXER - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity IPV4_LUT_INDEXER is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + transmit_enable : in STD_LOGIC; + LUT_index : out STD_LOGIC_VECTOR (5 downto 0)); +end IPV4_LUT_INDEXER; + +architecture Behavioral of IPV4_LUT_INDEXER is + +component dist_mem_64x8 is + port ( + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + qspo : out STD_LOGIC_VECTOR ( 7 downto 0 ) + ); +end component; + +component COUNTER_6B_LUT_FIFO_MODE is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + funct_sel : in STD_LOGIC; -- 0 for lut addressing, 1 for fifo addressing -- only LUT support is used + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (5 downto 0)); +end component; + +component comp_6b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + b : in STD_LOGIC_VECTOR ( 5 downto 0 ) + ); +end component; + +signal count_en_sig , count_end , rst_counter: std_logic :='0'; +signal count_val: std_logic_Vector(5 downto 0):=(others=>'0'); +signal count_en_sig_comb : std_logic; +constant lut_upper_address :std_logic_vector(5 downto 0):="100110"; -- position 38 + +begin + +process(clk) +begin +if (rst='1' or count_end='1') then + count_en_sig<='0'; + rst_counter<='1'; +else + rst_counter<='0'; + if clk'event and clk='1' then + if (transmit_enable='1' and count_en_sig='0') then + count_en_sig<='1'; + end if; + end if; +end if; +end process; + +LUT_END_CHECK : comp_6b_equal port map ( +qa_eq_b =>count_end, + clk =>clk, + a =>count_val, + b =>lut_upper_address + +); + +count_en_sig_comb <=count_en_sig or transmit_enable; + + + +LUT_INDEXER_MODULE : COUNTER_6B_LUT_FIFO_MODE port map ( + rst => rst_counter, + clk => clk, + funct_sel =>'0', -- for now only one function is supported + count_en =>count_en_sig_comb, + value_O =>count_val +); + +LUT_index<=count_val; + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPV4_LUT_INDEXER.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.xco =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.xco (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.xco (revision 2) @@ -0,0 +1,59 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Mon Nov 30 13:23:03 2009 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = False +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc5vsx95t +SET devicefamily = virtex5 +SET flowvendor = Other +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ff1136 +SET removerpms = False +SET simulationfiles = Structural +SET speedgrade = -1 +SET verilogsim = False +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT Comparator family Xilinx,_Inc. 9.0 +# END Select +# BEGIN Parameters +CSET aclr=false +CSET ainitval=0 +CSET aset=false +CSET ce=false +CSET cepriority=Sync_Overrides_CE +CSET component_name=comp_6b_equal +CSET constantbport=false +CSET constantbportvalue=0000000000000000 +CSET datatype=Unsigned +CSET nonregisteredoutput=false +CSET operation=eq +CSET pipelinestages=0 +CSET radix=2 +CSET registeredoutput=true +CSET sclr=false +CSET sset=false +CSET syncctrlpriority=Reset_Overrides_Set +CSET width=6 +# END Parameters +GENERATE +# CRC: 74b0a9bd +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_6b_equal.xco Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/ENABLE_USER_DATA_TRANSMISSION.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/ENABLE_USER_DATA_TRANSMISSION.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/ENABLE_USER_DATA_TRANSMISSION.vhd (revision 2) @@ -0,0 +1,64 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 12:05:48 12/04/2009 +-- Design Name: +-- Module Name: ENABLE_USER_DATA_TRANSMISSION - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity ENABLE_USER_DATA_TRANSMISSION is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + start_usr_data_trans : in STD_LOGIC; + stop_usr_data_trans : in STD_LOGIC; + usr_data_sel : out STD_LOGIC); +end ENABLE_USER_DATA_TRANSMISSION; + +architecture Behavioral of ENABLE_USER_DATA_TRANSMISSION is + +signal usr_data_sel_prev : std_logic :='0'; + +begin + +process(clk) +begin +if rst='1' then + usr_data_sel<='0'; + usr_data_sel_prev<='0'; +else + if clk'event and clk='1' then + if (start_usr_data_trans='1' and usr_data_sel_prev='0') then + usr_data_sel<='1'; + usr_data_sel_prev<='1'; + end if; + if (stop_usr_data_trans='0' and usr_data_sel_prev='1') then -- stop_usr_data_trans is active low + usr_data_sel<='0'; + usr_data_sel_prev<='0'; + end if; + end if; +end if; +end process; + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/ENABLE_USER_DATA_TRANSMISSION.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/UDP_IP_Core.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/UDP_IP_Core.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/UDP_IP_Core.vhd (revision 2) @@ -0,0 +1,109 @@ +----------------------------------------------------------------------------------------- +-- Copyright (C) 2010 Nikolaos Ch. Alachiotis -- +-- -- +-- Engineer: Nikolaos Ch. Alachiotis -- +-- -- +-- Contact: alachiot@cs.tum.edu -- +-- n.alachiotis@gmail.com -- +-- -- +-- Create Date: 15:29:59 02/07/2010 -- +-- Module Name: UDP_IP_Core -- +-- Target Devices: Virtex 5 FPGAs -- +-- Tool versions: ISE 10.1 -- +-- Description: This component can be used to transmit and receive UDP/IP -- +-- Ethernet Packets (IPv4). -- +-- Additional Comments: The core has been area-optimized and is suitable for direct -- +-- PC-FPGA communication at Gigabit speed. -- +-- -- +----------------------------------------------------------------------------------------- + + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity UDP_IP_Core is + Port ( rst : in STD_LOGIC; -- active-high + clk_125MHz : in STD_LOGIC; + + -- Transmit signals + transmit_start_enable : in STD_LOGIC; + transmit_data_length : in STD_LOGIC_VECTOR (15 downto 0); + usr_data_trans_phase_on : out STD_LOGIC; + transmit_data_input_bus : in STD_LOGIC_VECTOR (7 downto 0); + start_of_frame_O : out STD_LOGIC; + end_of_frame_O : out STD_LOGIC; + source_ready : out STD_LOGIC; + transmit_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0); + + --Receive Signals + rx_sof : in STD_LOGIC; + rx_eof : in STD_LOGIC; + input_bus : in STD_LOGIC_VECTOR(7 downto 0); + valid_out_usr_data : out STD_LOGIC; + usr_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0) + ); +end UDP_IP_Core; + +architecture Behavioral of UDP_IP_Core is + +component IPV4_PACKET_TRANSMITTER is + Port ( rst : in STD_LOGIC; + clk_125MHz : in STD_LOGIC; + transmit_start_enable : in STD_LOGIC; + transmit_data_length : in STD_LOGIC_VECTOR (15 downto 0); + usr_data_trans_phase_on : out STD_LOGIC; + transmit_data_input_bus : in STD_LOGIC_VECTOR (7 downto 0); + start_of_frame_O : out STD_LOGIC; + end_of_frame_O : out STD_LOGIC; + source_ready : out STD_LOGIC; + transmit_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0) + ); +end component; + +component IPv4_PACKET_RECEIVER is + Port ( rst : in STD_LOGIC; + clk_125Mhz : in STD_LOGIC; + rx_sof : in STD_LOGIC; + rx_eof : in STD_LOGIC; + input_bus : in STD_LOGIC_VECTOR(7 downto 0); + valid_out_usr_data : out STD_LOGIC; + usr_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0)); +end component; + +begin + +IPV4_PACKET_TRANSMITTER_port_map: IPV4_PACKET_TRANSMITTER + Port Map + ( rst => rst, + clk_125MHz => clk_125MHz, + transmit_start_enable => transmit_start_enable, + transmit_data_length => transmit_data_length, + usr_data_trans_phase_on => usr_data_trans_phase_on, + transmit_data_input_bus => transmit_data_input_bus, + start_of_frame_O => start_of_frame_O, + end_of_frame_O => end_of_frame_O, + source_ready => source_ready, + transmit_data_output_bus => transmit_data_output_bus + ); + + +IPv4_PACKET_RECEIVER_port_map: IPv4_PACKET_RECEIVER + Port Map + ( rst => rst, + clk_125Mhz => clk_125Mhz, + rx_sof => rx_sof, + rx_eof => rx_eof, + input_bus => input_bus, + valid_out_usr_data => valid_out_usr_data, + usr_data_output_bus => usr_data_output_bus + ); + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/UDP_IP_Core.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.vhd (revision 2) @@ -0,0 +1,196 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version: K.39 +-- \ \ Application: netgen +-- / / Filename: comp_11b_equal.vhd +-- /___/ /\ Timestamp: Mon Nov 30 16:37:25 2009 +-- \ \ / \ +-- \___\/\___\ +-- +-- Command : -intstyle ise -w -sim -ofmt vhdl C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\comp_11b_equal.ngc C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\comp_11b_equal.vhd +-- Device : 5vsx95tff1136-1 +-- Input file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/comp_11b_equal.ngc +-- Output file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/comp_11b_equal.vhd +-- # of Entities : 1 +-- Design Name : comp_11b_equal +-- Xilinx : C:\Xilinx\10.1\ISE +-- +-- Purpose: +-- This VHDL netlist is a verification model and uses simulation +-- primitives which may not represent the true implementation of the +-- device, however the netlist is functionally correct and should not +-- be modified. This file cannot be synthesized and should only be used +-- with supported simulation tools. +-- +-- Reference: +-- Development System Reference Guide, Chapter 23 +-- Synthesis and Simulation Design Guide, Chapter 6 +-- +-------------------------------------------------------------------------------- + + +-- synthesis translate_off +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; +use UNISIM.VPKG.ALL; + +entity comp_11b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 10 downto 0 ); + b : in STD_LOGIC_VECTOR ( 10 downto 0 ) + ); +end comp_11b_equal; + +architecture STRUCTURE of comp_11b_equal is + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o189_29 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o139_28 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o62_27 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o26_26 : STD_LOGIC; + + signal BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result : STD_LOGIC; + signal BU2_a_ge_b : STD_LOGIC; + signal NLW_VCC_P_UNCONNECTED : STD_LOGIC; + signal NLW_GND_G_UNCONNECTED : STD_LOGIC; + signal a_2 : STD_LOGIC_VECTOR ( 10 downto 0 ); + signal b_3 : STD_LOGIC_VECTOR ( 10 downto 0 ); +begin + a_2(10) <= a(10); + a_2(9) <= a(9); + a_2(8) <= a(8); + a_2(7) <= a(7); + a_2(6) <= a(6); + a_2(5) <= a(5); + a_2(4) <= a(4); + a_2(3) <= a(3); + a_2(2) <= a(2); + a_2(1) <= a(1); + a_2(0) <= a(0); + b_3(10) <= b(10); + b_3(9) <= b(9); + b_3(8) <= b(8); + b_3(7) <= b(7); + b_3(6) <= b(6); + b_3(5) <= b(5); + b_3(4) <= b(4); + b_3(3) <= b(3); + b_3(2) <= b(2); + b_3(1) <= b(1); + b_3(0) <= b(0); + VCC_0 : VCC + port map ( + P => NLW_VCC_P_UNCONNECTED + ); + GND_1 : GND + port map ( + G => NLW_GND_G_UNCONNECTED + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o206 : +LUT6 + generic map( + INIT => X"9000000000000000" + ) + port map ( + I0 => a_2(2), + I1 => b_3(2), + I2 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o26_26 +, + I3 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o62_27 +, + I4 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o139_28 +, + I5 => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o189_29 +, + O => BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o189 : +LUT6 + generic map( + INIT => X"9009000000009009" + ) + port map ( + I0 => a_2(5), + I1 => b_3(5), + I2 => a_2(6), + I3 => b_3(6), + I4 => a_2(7), + I5 => b_3(7), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o189_29 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o139 : +LUT6 + generic map( + INIT => X"9009000000009009" + ) + port map ( + I0 => a_2(8), + I1 => b_3(8), + I2 => a_2(9), + I3 => b_3(9), + I4 => a_2(10), + I5 => b_3(10), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o139_28 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o62 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(3), + I1 => b_3(3), + I2 => a_2(4), + I3 => b_3(4), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o62_27 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o26 : +LUT4 + generic map( + INIT => X"9009" + ) + port map ( + I0 => a_2(0), + I1 => b_3(0), + I2 => a_2(1), + I3 => b_3(1), + O => +BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_i_use_carry_plus_luts_lut_and_i_gate_bit_tier_gen_1_i_tier_loop_tiles_0_i_tile_o26_26 + + ); + BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_gen_output_reg_output_reg_fd_output_1 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_structure_logic_gen_nonpipelined_a_equal_notequal_b_i_a_eq_ne_b_temp_result, + Q => qa_eq_b + ); + BU2_XST_GND : GND + port map ( + G => BU2_a_ge_b + ); + +end STRUCTURE; + +-- synthesis translate_on
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/comp_11b_equal.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.vhd (revision 2) @@ -0,0 +1,264 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version: K.39 +-- \ \ Application: netgen +-- / / Filename: dist_mem_64x8.vhd +-- /___/ /\ Timestamp: Tue Dec 01 15:45:04 2009 +-- \ \ / \ +-- \___\/\___\ +-- +-- Command : -intstyle ise -w -sim -ofmt vhdl C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\dist_mem_64x8.ngc C:\PHd_Projects\The_Felsenstein_CoProcessor\COREGEN_Design\tmp\_cg\dist_mem_64x8.vhd +-- Device : 5vsx95tff1136-1 +-- Input file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/dist_mem_64x8.ngc +-- Output file : C:/PHd_Projects/The_Felsenstein_CoProcessor/COREGEN_Design/tmp/_cg/dist_mem_64x8.vhd +-- # of Entities : 1 +-- Design Name : dist_mem_64x8 +-- Xilinx : C:\Xilinx\10.1\ISE +-- +-- Purpose: +-- This VHDL netlist is a verification model and uses simulation +-- primitives which may not represent the true implementation of the +-- device, however the netlist is functionally correct and should not +-- be modified. This file cannot be synthesized and should only be used +-- with supported simulation tools. +-- +-- Reference: +-- Development System Reference Guide, Chapter 23 +-- Synthesis and Simulation Design Guide, Chapter 6 +-- +-------------------------------------------------------------------------------- + + +-- synthesis translate_off +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +library UNISIM; +use UNISIM.VCOMPONENTS.ALL; +use UNISIM.VPKG.ALL; + +entity dist_mem_64x8 is + port ( + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 5 downto 0 ); + qspo : out STD_LOGIC_VECTOR ( 7 downto 0 ) + ); +end dist_mem_64x8; + +architecture STRUCTURE of dist_mem_64x8 is + signal N0 : STD_LOGIC; + signal N1 : STD_LOGIC; + signal a_2 : STD_LOGIC_VECTOR ( 5 downto 0 ); + signal qspo_3 : STD_LOGIC_VECTOR ( 7 downto 0 ); + signal BU2_U0_gen_rom_rom_inst_spo_int : STD_LOGIC_VECTOR ( 7 downto 0 ); + signal BU2_qdpo : STD_LOGIC_VECTOR ( 0 downto 0 ); +begin + a_2(5) <= a(5); + a_2(4) <= a(4); + a_2(3) <= a(3); + a_2(2) <= a(2); + a_2(1) <= a(1); + a_2(0) <= a(0); + qspo(7) <= qspo_3(7); + qspo(6) <= qspo_3(6); + qspo(5) <= qspo_3(5); + qspo(4) <= qspo_3(4); + qspo(3) <= qspo_3(3); + qspo(2) <= qspo_3(2); + qspo(1) <= qspo_3(1); + qspo(0) <= qspo_3(0); + VCC_0 : VCC + port map ( + P => N1 + ); + GND_1 : GND + port map ( + G => N0 + ); + BU2_U0_gen_rom_rom_inst_Mrom_spo_int_rom0000111 : LUT6 + generic map( + INIT => X"0000061400040604" + ) + port map ( + I0 => a_2(2), + I1 => a_2(3), + I2 => a_2(5), + I3 => a_2(1), + I4 => a_2(4), + I5 => a_2(0), + O => BU2_U0_gen_rom_rom_inst_spo_int(1) + ); + BU2_U0_gen_rom_rom_inst_Mrom_spo_int_rom000071 : LUT6 + generic map( + INIT => X"2100210023022222" + ) + port map ( + I0 => a_2(3), + I1 => a_2(5), + I2 => a_2(4), + I3 => a_2(1), + I4 => a_2(0), + I5 => a_2(2), + O => BU2_U0_gen_rom_rom_inst_spo_int(7) + ); + BU2_U0_gen_rom_rom_inst_Mrom_spo_int_rom000041 : LUT6 + generic map( + INIT => X"0204162600041726" + ) + port map ( + I0 => a_2(2), + I1 => a_2(3), + I2 => a_2(5), + I3 => a_2(1), + I4 => a_2(4), + I5 => a_2(0), + O => BU2_U0_gen_rom_rom_inst_spo_int(4) + ); + BU2_U0_gen_rom_rom_inst_Mrom_spo_int_rom000051 : LUT6 + generic map( + INIT => X"2301030311110112" + ) + port map ( + I0 => a_2(4), + I1 => a_2(5), + I2 => a_2(2), + I3 => a_2(0), + I4 => a_2(1), + I5 => a_2(3), + O => BU2_U0_gen_rom_rom_inst_spo_int(5) + ); + BU2_U0_gen_rom_rom_inst_Mrom_spo_int_rom000021 : LUT6 + generic map( + INIT => X"0100057801014578" + ) + port map ( + I0 => a_2(5), + I1 => a_2(1), + I2 => a_2(2), + I3 => a_2(3), + I4 => a_2(4), + I5 => a_2(0), + O => BU2_U0_gen_rom_rom_inst_spo_int(2) + ); + BU2_U0_gen_rom_rom_inst_Mrom_spo_int_rom000031 : LUT6 + generic map( + INIT => X"090101020B0A0202" + ) + port map ( + I0 => a_2(3), + I1 => a_2(4), + I2 => a_2(5), + I3 => a_2(1), + I4 => a_2(0), + I5 => a_2(2), + O => BU2_U0_gen_rom_rom_inst_spo_int(3) + ); + BU2_U0_gen_rom_rom_inst_Mrom_spo_int_rom000061 : LUT6 + generic map( + INIT => X"010701EF02460224" + ) + port map ( + I0 => a_2(2), + I1 => a_2(3), + I2 => a_2(4), + I3 => a_2(5), + I4 => a_2(0), + I5 => a_2(1), + O => BU2_U0_gen_rom_rom_inst_spo_int(6) + ); + BU2_U0_gen_rom_rom_inst_Mrom_spo_int_rom000011 : LUT6 + generic map( + INIT => X"1202020210347366" + ) + port map ( + I0 => a_2(3), + I1 => a_2(5), + I2 => a_2(1), + I3 => a_2(0), + I4 => a_2(2), + I5 => a_2(4), + O => BU2_U0_gen_rom_rom_inst_spo_int(0) + ); + BU2_U0_gen_rom_rom_inst_qspo_int_7 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_rom_rom_inst_spo_int(7), + Q => qspo_3(7) + ); + BU2_U0_gen_rom_rom_inst_qspo_int_6 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_rom_rom_inst_spo_int(6), + Q => qspo_3(6) + ); + BU2_U0_gen_rom_rom_inst_qspo_int_5 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_rom_rom_inst_spo_int(5), + Q => qspo_3(5) + ); + BU2_U0_gen_rom_rom_inst_qspo_int_4 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_rom_rom_inst_spo_int(4), + Q => qspo_3(4) + ); + BU2_U0_gen_rom_rom_inst_qspo_int_3 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_rom_rom_inst_spo_int(3), + Q => qspo_3(3) + ); + BU2_U0_gen_rom_rom_inst_qspo_int_2 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_rom_rom_inst_spo_int(2), + Q => qspo_3(2) + ); + BU2_U0_gen_rom_rom_inst_qspo_int_1 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_rom_rom_inst_spo_int(1), + Q => qspo_3(1) + ); + BU2_U0_gen_rom_rom_inst_qspo_int_0 : FD + generic map( + INIT => '0' + ) + port map ( + C => clk, + D => BU2_U0_gen_rom_rom_inst_spo_int(0), + Q => qspo_3(0) + ); + BU2_XST_GND : GND + port map ( + G => BU2_qdpo(0) + ); + +end STRUCTURE; + +-- synthesis translate_on
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/dist_mem_64x8.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPv4_PACKET_RECEIVER.vhd =================================================================== --- trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPv4_PACKET_RECEIVER.vhd (nonexistent) +++ trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPv4_PACKET_RECEIVER.vhd (revision 2) @@ -0,0 +1,182 @@ +----------------------------------------------------------------------------------------- +-- Copyright (C) 2010 Nikolaos Ch. Alachiotis -- +-- -- +-- Engineer: Nikolaos Ch. Alachiotis -- +-- -- +-- Contact: alachiot@cs.tum.edu -- +-- n.alachiotis@gmail.com -- +-- -- +-- Create Date: 14:32:06 02/07/2010 -- +-- Module Name: IPv4_PACKET_RECEIVER -- +-- Target Devices: Virtex 5 FPGAs -- +-- Tool versions: ISE 10.1 -- +-- Description: This component can be used to receive IPv4 Ethernet Packets. -- +-- Additional Comments: -- +-- -- +-- The receiver does not operate properly for data section of 1 or 2 bytes only. -- +-- -- +----------------------------------------------------------------------------------------- + + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity IPv4_PACKET_RECEIVER is + Port ( rst : in STD_LOGIC; + clk_125Mhz : in STD_LOGIC; + rx_sof : in STD_LOGIC; + rx_eof : in STD_LOGIC; + input_bus : in STD_LOGIC_VECTOR(7 downto 0); + valid_out_usr_data : out STD_LOGIC; + usr_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0)); +end IPv4_PACKET_RECEIVER; + +architecture Behavioral of IPv4_PACKET_RECEIVER is + +component PACKET_RECEIVER_FSM is + Port ( + rst : in STD_LOGIC; + clk : in STD_LOGIC; + + -- Signals from EMAC + rx_sof: in STD_LOGIC; -- active low input + rx_eof: in STD_LOGIC; -- active low input + + -- Signals to Counter and Comparator + sel_comp_Bval: out STD_LOGIC; + comp_Bval: out STD_LOGIC_VECTOR(10 downto 0); + rst_count : out STD_LOGIC; + en_count : out STD_LOGIC; + + -- Signal from Comparator + comp_eq: in STD_LOGIC; + + -- Signals to Length Register + wren_MSbyte: out STD_LOGIC; + wren_LSbyte: out STD_LOGIC; + + -- Signal to user interface + valid_out_usr_data : out STD_LOGIC); +end component; + +component REG_8b_wren is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + wren : in STD_LOGIC; + input_val : in STD_LOGIC_VECTOR (7 downto 0); + output_val : inout STD_LOGIC_VECTOR(7 downto 0)); +end component; + +component COUNTER_11B_EN_RECEIV is + Port ( rst : in STD_LOGIC; + clk : in STD_LOGIC; + count_en : in STD_LOGIC; + value_O : inout STD_LOGIC_VECTOR (10 downto 0)); +end component; + +component comp_11b_equal is + port ( + qa_eq_b : out STD_LOGIC; + clk : in STD_LOGIC := 'X'; + a : in STD_LOGIC_VECTOR ( 10 downto 0 ); + b : in STD_LOGIC_VECTOR ( 10 downto 0 ) + ); +end component; + +signal sel_comp_Bval, + rst_count, + en_count, + comp_eq, + wren_MSbyte, + wren_LSbyte: STD_LOGIC; + +signal MSbyte_reg_val_out, + LSbyte_reg_val_out : STD_LOGIC_VECTOR(7 downto 0); + +signal counter_val, + match_val, + comp_Bval, + comp_sel_val_vec, + comp_n_sel_val_vec, + length_val: STD_LOGIC_VECTOR(10 downto 0); + +constant length_offest : STD_LOGIC_VECTOR(7 downto 0):="00001010"; +-- This value is formed as 2 (1 clock the latency of comparator and 1 clock fro changing the FSM state) + 8 (number of bytes of UDP header section) + +begin + +usr_data_output_bus<=input_bus; + +PACKET_RECEIVER_FSM_port_map: PACKET_RECEIVER_FSM Port Map +( + rst => rst, + clk => clk_125MHz, + + rx_sof => rx_sof, + rx_eof => rx_eof, + + sel_comp_Bval => sel_comp_Bval, + comp_Bval => comp_Bval, + rst_count => rst_count, + en_count => en_count, + + comp_eq => comp_eq, + + wren_MSbyte => wren_MSbyte, + wren_LSbyte => wren_LSbyte, + + valid_out_usr_data => valid_out_usr_data +); + +MSbyte_REG: REG_8b_wren Port Map +( + rst => rst, + clk => clk_125MHz, + wren => wren_MSbyte, + input_val => input_bus, + output_val =>MSbyte_reg_val_out +); + +LSbyte_REG: REG_8b_wren Port Map +( + rst => rst, + clk => clk_125MHz, + wren => wren_LSbyte, + input_val => input_bus, + output_val =>LSbyte_reg_val_out +); + +COUNTER_11B_EN_port_map: COUNTER_11B_EN_RECEIV Port Map +( + rst => rst_count, + clk => clk_125MHz, + count_en => en_count, + value_O => counter_val +); + +Comp_11b_equal_port_map: Comp_11b_equal Port Map +( + qa_eq_b => comp_eq, + clk => clk_125MHz, + a => counter_val, + b => match_val + ); + +length_val(7 downto 0)<= LSbyte_reg_val_out-length_offest; +length_val(10 downto 8)<= MSbyte_reg_val_out (2 downto 0); + +comp_sel_val_vec<=(others=> sel_comp_Bval); +comp_n_sel_val_vec<= (others=> not sel_comp_Bval); + +match_val<= (comp_sel_val_vec and length_val) or (comp_n_sel_val_vec and comp_Bval); + + +end Behavioral; +
trunk/UDP_IP_CORE/UDP_IP_CORE__Virtex5/IPv4_PACKET_RECEIVER.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/LUT_COE_file/definition2_ipv4_lut.coe =================================================================== --- trunk/LUT_COE_file/definition2_ipv4_lut.coe (nonexistent) +++ trunk/LUT_COE_file/definition2_ipv4_lut.coe (revision 2) @@ -0,0 +1,66 @@ +MEMORY_INITIALIZATION_RADIX=2; +MEMORY_INITIALIZATION_VECTOR= +00000000, +00100001, +01110000, +11101001, +00110100, +01011100, +11111111, +11111111, +11111111, +11111111, +11111111, +11111111, +00001000, +00000000, +01000101, +00000000, +00100100, +00000000, +00000000, +00000000, +01000000, +00000000, +01000000, +00010001, +10110111, +01111101, +11000000, +10101000, +00000001, +00000001, +11000000, +10101000, +00000001, +00000010, +01010101, +01010101, +01010101, +01010100, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000, +00000000;
trunk/LUT_COE_file/definition2_ipv4_lut.coe Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/README.txt =================================================================== --- trunk/README.txt (nonexistent) +++ trunk/README.txt (revision 2) @@ -0,0 +1,264 @@ +====================================================================================================== +UDP/IP Core for FPGAs (in VHDL) +====================================================================================================== + +Update date: February 9th, 2010 +Build date: December 15th, 2009 + + +Description +----------- + + +This is a VHDL implementation of a UDP/IP core that can be connected to the input and output ports of the +Virtex-5 Ethernet MAC Local Link Wrapper and enable communication betweena a PC and a FPGA. + +It has been area-optimized, it is suitable for direct PC-FPGA communication and can operate at Gigabit speed. + + +Example placement on a Virtex 5: + + +-- ----------------------------------------------------------------------- +-- | EXAMPLE DESIGN WRAPPER | +-- | --------------------------------------------------------| +-- | |LOCAL LINK WRAPPER | +-- | | -----------------------------------------| +-- | UDP/IP core | |BLOCK LEVEL WRAPPER | +-- | ----------- | | --------------------- | +-- | |-------- | | ---------- | | ETHERNET MAC | | +-- | || IPv4 | | | | | | | WRAPPER | --------- | +-- |->| pack |-> |->| |--|--->| Tx Tx |--| |--->| +-- | || trans| | | | | | | client PHY | | | | +-- | |-------- | | | LOCAL | | | I/F I/F | | | | +-- | | | | | LINK | | | | | PHY | | +-- | | | | | FIFO | | | | | I/F | | +-- | | | | | | | | | | | | +-- | |-------- | | | | | | Rx Rx | | | | +-- | || IPv4 | | | | | | | client PHY | | | | +-- | || pack |<- |<-| |<-|----| I/F I/F |<-| |<---| +-- | ||receiv| | | | | | | | --------- | +-- | |-------- | | ---------- | --------------------- | +-- | ----------- | -----------------------------------------| +-- | --------------------------------------------------------| +-- ----------------------------------------------------------------------- + + + +Package Structure +----------------- + +This package contains the following files and folder: + +-README : This file + +-UDP_IP_CORE : This folder contains VHDL, XCO and NGC files both for Virtex 5 as well as Spartan 3 FPGAs. + +-LUT COE file : This folder contains a COE file for the LUT that contains the IP packet header field. + +-JAVA app : This folder contains the JAVA application used on the PC side for transmitting and receiving packets. + +-PAPER : This folder contains a paper that describes in detail the design and implementation of the core. + + + +Usage of the UDP/IP core +------------------------ + + +Before integrating the core into your design you have to reinitialize the LUT of the transmitter. +This LUT contains the header section of the IP packet.One must change the X fields that appear in the following table. + +The field that should be changed are: +Destination MAC Address : (LUT) +Source MAC Address : (LUT) +Source IP Address : (LUT) +Destination IP Address : (LUT) +Source Port : (LUT) +Destination Port : (LUT) +Header Checksum : VHDL file + +The Addresses are read from the LUT, thats why a reinitialization is required. +The Header Checksum base value is not read from the LUT. It can be found in the VHDL file. +The Header Checksum base value depends on the IP Addresses and it is the Header Checksum value of a packet with no user data. + +If you choose to use the JAVA application provided in this packet only the Destination MAC Address needs to change. + + +------------------------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------------------------ +-- IPv4 PACKET STRUCTURE : -- -- +-- size | Description | Transmission Order | Position -- +------------------------------------------------------------------------------------------------------------------------------------------ +-- 6 bytes | Destin MAC Address (PC) | 0 1 2 3 4 5 | LUT -- +-- | X-X-X-X-X-X | | -- +-- | | | -- +-- 6 bytes | Source MAC Address (FPGA) | 6 7 8 9 10 11 | LUT -- +-- | 11111111-11111111-11111111-11111111-... | | -- +-- 2 bytes | Ethernet Type | 12 13 | LUT -- +-- | (fixed to 00001000-00000000 :=> | | -- +-- | Internet Protocol, Version 4 (IPv4)) | | -- +-- -- Start of IPv4 Packet - - - - - - - - - - - - - -- -- +-- 1 byte | 4 MSBs = Version , 4 LSBs = Header Length| 14 | LUT -- +-- | 0100 0101 | | -- +-- 1 byte | Differentiated Services | 15 | LUT -- +-- | 00000000 | | -- +-- 2 bytes | Total Length | 16 17 | REG -- +-- | 00000000-00100100 (base: 20 + 8 + datalength)| | -- +-- 2 bytes | Identification | 18 19 | LUT -- +-- | 00000000-00000000 | | -- +-- 2 bytes | 3 MSBs = Flags , 13 LSBs = Fragment Offset| 20 21 | LUT -- +-- | 010 - 0000000000000 | | -- +-- 1 byte | Time to Live | 22 | LUT -- +-- | 01000000 | | -- +-- 1 byte | Protocol | 23 | LUT -- +-- | 00010001 | | -- +-- 2 bytes | Header Checksum | 24 25 | REG -- +-- | X X (base value) | | -- +-- 4 bytes | Source IP Address | 26 27 28 29 | LUT -- +-- | X-X-X-X - FPGA | | -- +-- 4 bytes | Destin IP Address | 30 31 32 33 | LUT -- +-- | X-X-X-X - PC | | -- +-- -- Start of UDP Packet - - - - - - - - - - - - - - -- -- +-- 2 bytes | Source Port | 34 35 | LUT -- +-- | X-X | | -- +-- 2 bytes | Destination Port | 36 37 | LUT -- +-- | X-X | | -- +-- 2 bytes | Length | 38 39 | REG -- +-- | 00000000 - 00010000 (8 + # data bytes)| | -- +-- 2 bytes | Checksum | 40 41 | LUT -- +-- | 00000000 - 00000000 | | -- +-- X bytes | Data | 42 .. X | from input -- +-- | | | -- -- +------------------------------------------------------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------------------------------------------------------ + + + +Interface of the UDP/IP core +---------------------------- + + +The interface of the unit is defined as follows: + +entity UDP_IP_Core is + Port ( rst : in STD_LOGIC; -- active-high + clk_125MHz : in STD_LOGIC; + + -- Transmit signals + transmit_start_enable : in STD_LOGIC; + transmit_data_length : in STD_LOGIC_VECTOR (15 downto 0); + usr_data_trans_phase_on : out STD_LOGIC; + transmit_data_input_bus : in STD_LOGIC_VECTOR (7 downto 0); + start_of_frame_O : out STD_LOGIC; + end_of_frame_O : out STD_LOGIC; + source_ready : out STD_LOGIC; + transmit_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0); + + --Receive Signals + rx_sof : in STD_LOGIC; + rx_eof : in STD_LOGIC; + input_bus : in STD_LOGIC_VECTOR(7 downto 0); + valid_out_usr_data : out STD_LOGIC; + usr_data_output_bus : out STD_LOGIC_VECTOR (7 downto 0) +); +end UDP_IP_Core; + + +The UDP/IP core and the LOCAL LINK WRAPPER must have the same rst and clk signals. + +Signal transmit_start_enable : active high , It must be high for one clock cycle only. + +Signal transmit_data_length : number of user data to be transmitted (number of bytes) + +Signal usr_data_trans_phase_on: is high one clock cycle before the transmittion of user data and remains high while transmitting user data. + +Signal transmit_data_input_bus : input data to be transmitted. Starts transmitting one clock cycle after the usr_data_trans_phase_on is set. + +Signals start_of_frame_O,end_of_frame_O,source_ready,transmit_data_output_bus should be connected to the local link wrapper's input ports. + +Signals rx_sof, rx_eof : active low, inputs from the local link wrapper + +Signal input_bus : input from the local link wrapper + +Signal valid_out_usr_data : output to user, when set it indicates that the usr_data_output_bus contains the user data section of the incoming packet + +Signal usr_data_output_bus : user data output bus output to the user + + + +Implementation Details +---------------------- + +The VHDL unit have been designed using the Xilinx 10.1 Design Suite. + +ISE 10.1 was used to create the unit. + + + +Verification Details +-------------------- + +Modelsim 6.3f was used for extensive post place and route simulations. + +The development board HTG-V5-PCIE by HiTech Global populated with a V5SX95T-1 FPGA was used to verify the correct behavior of the core. + +The Spartan3 configuration has not been hardware-verified! + + +Citation +-------- + +By using this component in any architecture design and associated publication, you agree to cite it as: +"Efficient PC-FPGA Communication over Gigabit Ethernet", by Nikolaos Alachiotis, Simon A. Berger and Alexandros Stamatakis, +The Exelixis Lab, Exelixis-RRDR-2010-4, TU Munich, February 2010. + + +Authors and Contact Details +--------------------------- + +Nikos Alachiotis alachiot@in.tum.de , n.alachiotis@gmail.com +Simon A. Berger bergers@in.tum.de +Alexandros Stamatakis stamatak@in.tum.de + +Technichal University of Munich +Department of Computer Science / I 12 +The Exelixis Lab +Boltzmannstr. 3 +D-85748 Garching b. Muenchen + + +Copyright +--------- + +This component is free. In case you use it for any purpose, particularly +when publishing work relying on this component you must cite it as: + +IPv4 PACKET TRANSMITTER by Nikolas Alachiotis and Alexandros Stamatakis, The Exelixis Lab, TU Munich, distributed by the authors via +http://wwwkramer.in.tum.de/exelixis/ + +You can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This component 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 General Public License for more details. + + + +Release Notes +------------ + +Update date: February 9th, 2010 + +Build date : December 15th, 2009 + + + + + + +
trunk/README.txt Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property

powered by: WebSVN 2.1.0

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