Compare commits
5 Commits
75c50b63c1
...
master
Author | SHA1 | Date | |
---|---|---|---|
9558851e8b | |||
69d26c3a46 | |||
0425710537 | |||
c909e0c703 | |||
9dd10afae1 |
@@ -7,29 +7,31 @@ end entity test;
|
||||
|
||||
architecture bench of test is
|
||||
|
||||
signal clk : std_logic;
|
||||
signal rst : std_logic := '1';
|
||||
signal dv : std_logic;
|
||||
signal rx : std_logic_vector(1 downto 0);
|
||||
signal mdc : std_logic;
|
||||
signal mdio : std_logic;
|
||||
signal led : std_logic_vector(1 downto 0);
|
||||
signal ws : std_logic;
|
||||
signal clk : std_logic;
|
||||
signal rst : std_logic := '1';
|
||||
signal dv : std_logic;
|
||||
signal rx : std_logic_vector(1 downto 0);
|
||||
signal mdc : std_logic;
|
||||
signal mdio : std_logic;
|
||||
signal led : std_logic_vector(1 downto 0);
|
||||
signal ws : std_logic;
|
||||
signal rst_hw : std_logic;
|
||||
signal dat_cnt : std_logic_vector(3 downto 0);
|
||||
begin -- architecture bench
|
||||
|
||||
|
||||
top_1 : entity work.top
|
||||
port map (
|
||||
clk => clk,
|
||||
rst => rst,
|
||||
mdio => mdio,
|
||||
mdc => mdc,
|
||||
rx => rx,
|
||||
dv => dv,
|
||||
led1 => led(0),
|
||||
led2 => led(1),
|
||||
ws_out => ws);
|
||||
|
||||
clk => clk,
|
||||
rst_hw => rst_hw,
|
||||
mdio => mdio,
|
||||
mdc => mdc,
|
||||
rx => rx,
|
||||
dv => dv,
|
||||
led1 => led(0),
|
||||
led2 => led(1),
|
||||
dat_cnt => dat_cnt,
|
||||
ws_out => ws);
|
||||
|
||||
|
||||
clkgen : process is
|
||||
@@ -41,7 +43,7 @@ begin -- architecture bench
|
||||
end process clkgen;
|
||||
|
||||
|
||||
|
||||
rst_hw <= not rst;
|
||||
|
||||
|
||||
sendphy : process is
|
||||
@@ -60,12 +62,12 @@ begin -- architecture bench
|
||||
end procedure sendRMII;
|
||||
begin
|
||||
dv <= '0';
|
||||
|
||||
|
||||
wait for 35 ns;
|
||||
rst <= '0';
|
||||
dv <= '0';
|
||||
rx <= "00";
|
||||
wait for 100 us;
|
||||
wait for 350 us;
|
||||
sendRMII(x"55");
|
||||
sendRMII(x"55");
|
||||
sendRMII(x"55");
|
||||
@@ -94,7 +96,6 @@ begin -- architecture bench
|
||||
sendRMII(x"02");
|
||||
|
||||
sendRMII(x"AA");
|
||||
|
||||
sendRMII(x"01");
|
||||
sendRMII(x"02");
|
||||
|
||||
@@ -103,10 +104,10 @@ begin -- architecture bench
|
||||
sendRMII(x"AA");
|
||||
sendRMII(x"55");
|
||||
-- Send FCS
|
||||
sendRMII(x"BD");
|
||||
sendRMII(x"9B");
|
||||
sendRMII(x"AC");
|
||||
sendRMII(x"54");
|
||||
sendRMII(x"3A");
|
||||
sendRMII(x"97");
|
||||
sendRMII(x"D9");
|
||||
sendRMII(x"7A");
|
||||
|
||||
-- sendRMII(x"AB");
|
||||
|
||||
|
255
c/prog.c
255
c/prog.c
@@ -24,7 +24,8 @@
|
||||
#define MY_DEST_MAC5 0x00
|
||||
|
||||
#define DEFAULT_IF "enp5s0"
|
||||
#define BUF_SIZ 1024
|
||||
#define BUF_SIZ 1500
|
||||
#define LED_CNT 360
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
@@ -84,240 +85,28 @@ int main(int argc, char *argv[])
|
||||
|
||||
/* Packet data */
|
||||
if (mode == 0) {
|
||||
for (i = 0; i < LED_CNT; i++) {
|
||||
switch (i%3) {
|
||||
case 0:
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
break;
|
||||
case 1:
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
break;
|
||||
case 2:
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
} else if (mode > 0 && mode < 4) {
|
||||
for (i = 0; i< 60; i++) {
|
||||
for (i = 0; i< LED_CNT; i++) {
|
||||
switch (mode) {
|
||||
case 1:
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
@@ -337,13 +126,13 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
} else if (mode == 4) {
|
||||
for (i = 0; i< 3*60; i++) {
|
||||
for (i = 0; i< 3*LED_CNT; i++) {
|
||||
sendbuf[tx_len++] = 0x00;
|
||||
|
||||
}
|
||||
|
||||
} else if (mode == 5) {
|
||||
for (i = 0; i< 3*60; i++) {
|
||||
for (i = 0; i< 3*LED_CNT; i++) {
|
||||
sendbuf[tx_len++] = 0xff;
|
||||
}
|
||||
} else if (mode == 6) {
|
||||
@@ -351,7 +140,7 @@ sendbuf[tx_len++] = 0xff;
|
||||
r = (unsigned char) atoi(argv[2]);
|
||||
g = (unsigned char) atoi(argv[3]);
|
||||
b = (unsigned char) atoi(argv[4]);
|
||||
for (i = 0; i< 60; i++) {
|
||||
for (i = 0; i< LED_CNT; i++) {
|
||||
sendbuf[tx_len++] = r;
|
||||
sendbuf[tx_len++] = g;
|
||||
sendbuf[tx_len++] = b;
|
||||
|
130
top.vhd
130
top.vhd
@@ -6,7 +6,7 @@
|
||||
-- Author : Mario Hüttel <mario.huettel@gmx.net>
|
||||
-- Company :
|
||||
-- Created : 2018-04-05
|
||||
-- Last update: 2018-04-06
|
||||
-- Last update: 2018-04-13
|
||||
-- Platform :
|
||||
-- Standard : VHDL'93/02
|
||||
-------------------------------------------------------------------------------
|
||||
@@ -36,57 +36,69 @@ entity top is
|
||||
end entity top;
|
||||
|
||||
architecture RTL of top is
|
||||
constant DELAYCNTVAL : integer := 100000;
|
||||
constant DELAYCNTVAL : integer := 100000; -- set to low value for
|
||||
-- simulation
|
||||
constant STARTUPDELAY : integer := 50000000;
|
||||
constant DEFMAC : std_logic_vector(47 downto 0) := x"00DEADBEEF00";
|
||||
|
||||
type smi_state_t is (IDLE, STROBE);
|
||||
type smi_init_state_t is (RESET, INIT, DELAY, INIT_COMPLETE);
|
||||
type smi_init_state_t is (SMI_POR, SMI_PORDELAY, RESET, INIT, DELAY, INIT_COMPLETE);
|
||||
type ws_send_t is (WS_READY, WS_SYNC, WS_RED, WS_GREEN, WS_BLUE, WS_PIPE, WS_POST);
|
||||
type receive_t is (PRE, DESTMAC, HEADER, RECV, WAITFORACK);
|
||||
|
||||
signal rst : std_logic;
|
||||
signal rst : std_logic;
|
||||
signal dat_cnt_s : unsigned(3 downto 0);
|
||||
|
||||
signal sendstate : smi_state_t;
|
||||
signal initstate : smi_init_state_t := RESET;
|
||||
signal rst_rxtx : std_logic;
|
||||
signal delaycounter : unsigned(19 downto 0);
|
||||
signal smi_reg : std_logic_vector(4 downto 0);
|
||||
signal smi_dat : std_logic_vector(15 downto 0);
|
||||
signal smi_strb : std_logic;
|
||||
signal smi_busy : std_logic;
|
||||
signal sendstate : smi_state_t;
|
||||
signal initstate : smi_init_state_t := SMI_POR;
|
||||
signal rst_rxtx : std_logic;
|
||||
signal delaycounter : unsigned(26 downto 0);
|
||||
signal smi_reg : std_logic_vector(4 downto 0);
|
||||
signal smi_dat : std_logic_vector(15 downto 0);
|
||||
signal smi_strb : std_logic;
|
||||
signal smi_busy : std_logic;
|
||||
---
|
||||
signal sof : std_logic;
|
||||
signal eof : std_logic;
|
||||
signal eth_dat : std_logic_vector(7 downto 0);
|
||||
signal eth_strb : std_logic;
|
||||
signal crc_valid : std_logic;
|
||||
signal sof : std_logic;
|
||||
signal eof : std_logic;
|
||||
signal eth_dat : std_logic_vector(7 downto 0);
|
||||
signal eth_strb : std_logic;
|
||||
signal crc_valid : std_logic;
|
||||
--
|
||||
signal fifo_in : std_logic_vector(7 downto 0);
|
||||
signal fifo_out : std_logic_vector(7 downto 0);
|
||||
signal fifo_wr : std_logic;
|
||||
signal fifo_rd : std_logic;
|
||||
signal fifo_rst : std_logic;
|
||||
signal fifo_full : std_logic;
|
||||
signal fifo_empty : std_logic;
|
||||
signal fifo_in : std_logic_vector(7 downto 0);
|
||||
signal fifo_out : std_logic_vector(7 downto 0);
|
||||
signal fifo_wr : std_logic;
|
||||
signal fifo_rd : std_logic;
|
||||
signal fifo_rst : std_logic;
|
||||
signal fifo_full : std_logic;
|
||||
signal fifo_empty : std_logic;
|
||||
--
|
||||
signal fifo_data_avail : std_logic;
|
||||
signal fifo_data_ack : std_logic;
|
||||
signal recv_state : receive_t;
|
||||
signal mac : std_logic_vector(47 downto 0);
|
||||
signal recv_cnt : integer range 0 to 15;
|
||||
signal fifo_data_avail : std_logic;
|
||||
signal fifo_data_ack : std_logic;
|
||||
signal recv_state : receive_t;
|
||||
signal mac : std_logic_vector(47 downto 0);
|
||||
signal recv_cnt : integer range 0 to 15;
|
||||
--
|
||||
signal ws_busy : std_logic;
|
||||
signal ws_strb : std_logic;
|
||||
signal red : unsigned(7 downto 0);
|
||||
signal green : unsigned(7 downto 0);
|
||||
signal blue : unsigned(7 downto 0);
|
||||
signal ws_busy : std_logic;
|
||||
signal ws_strb : std_logic;
|
||||
signal red : unsigned(7 downto 0);
|
||||
signal green : unsigned(7 downto 0);
|
||||
signal blue : unsigned(7 downto 0);
|
||||
--
|
||||
signal ws_state : ws_send_t;
|
||||
signal ws_state : ws_send_t;
|
||||
|
||||
begin -- architecture RTL
|
||||
|
||||
rst <= not rst_hw;
|
||||
reset_sync : process(clk, rst_hw) is
|
||||
begin
|
||||
if rst_hw = '0' then
|
||||
rst <= '1';
|
||||
elsif rising_edge(clk) then
|
||||
if rst_hw = '1' then
|
||||
rst <= '0';
|
||||
end if;
|
||||
end if;
|
||||
end process reset_sync;
|
||||
|
||||
|
||||
smi_1 : entity work.smi
|
||||
generic map (
|
||||
@@ -134,7 +146,7 @@ begin -- architecture RTL
|
||||
STD_FIFO_1 : entity work.STD_FIFO
|
||||
generic map (
|
||||
DATA_WIDTH => 8,
|
||||
FIFO_DEPTH => 256)
|
||||
FIFO_DEPTH => 360*3)
|
||||
port map (
|
||||
CLK => clk,
|
||||
RST => fifo_rst,
|
||||
@@ -182,19 +194,29 @@ begin -- architecture RTL
|
||||
|
||||
begin
|
||||
if rst = '1' then
|
||||
smi_reg <= (others => '0');
|
||||
smi_dat <= (others => '0');
|
||||
smi_strb <= '0';
|
||||
rst_rxtx <= '1';
|
||||
initstate <= RESET;
|
||||
sendstate <= IDLE;
|
||||
delaycounter <= (others => '0');
|
||||
smi_reg <= (others => '0');
|
||||
smi_dat <= (others => '0');
|
||||
smi_strb <= '0';
|
||||
rst_rxtx <= '1';
|
||||
initstate <= SMI_POR;
|
||||
sendstate <= IDLE;
|
||||
delaycounter <= (others => '0');
|
||||
elsif rising_edge(clk) then
|
||||
smi_strb <= '0';
|
||||
rst_rxtx <= '1';
|
||||
case initstate is
|
||||
when SMI_POR =>
|
||||
delaycounter <= (others => '0');
|
||||
initstate <= SMI_PORDELAY;
|
||||
when SMI_PORDELAY =>
|
||||
delaycounter <= delaycounter + 1;
|
||||
if delaycounter = STARTUPDELAY then
|
||||
initstate <= RESET;
|
||||
end if;
|
||||
when RESET =>
|
||||
sendsmi((others => '0'), x"8000", DELAY);
|
||||
delaycounter <= (others => '0');
|
||||
sendsmi((others => '0'), x"8000", DELAY);
|
||||
|
||||
when DELAY =>
|
||||
delaycounter <= delaycounter + 1;
|
||||
if delaycounter = DELAYCNTVAL then -- Set to 100000
|
||||
@@ -204,7 +226,9 @@ begin -- architecture RTL
|
||||
sendsmi((others => '0'), "00" & '1' & '1' & "000" & '1' & "00000000", INIT_COMPLETE);
|
||||
when INIT_COMPLETE =>
|
||||
initstate <= INIT_COMPLETE;
|
||||
rst_rxtx <= '0';
|
||||
if smi_busy = '0' then
|
||||
rst_rxtx <= '0';
|
||||
end if;
|
||||
end case;
|
||||
end if;
|
||||
end process initphy;
|
||||
@@ -218,9 +242,9 @@ begin -- architecture RTL
|
||||
fifo_in <= (others => '0');
|
||||
fifo_data_avail <= '0';
|
||||
recv_state <= PRE;
|
||||
dat_cnt_s <= (others => '0');
|
||||
led1 <= '1';
|
||||
led2 <= '1';
|
||||
dat_cnt_s <= (others => '0');
|
||||
led1 <= '1';
|
||||
led2 <= '1';
|
||||
recv_cnt <= 0;
|
||||
mac <= (others => '0');
|
||||
elsif rising_edge(clk) then -- rising clock edge
|
||||
@@ -257,7 +281,7 @@ begin -- architecture RTL
|
||||
if recv_cnt = 7 then
|
||||
if mac = DEFMAC then
|
||||
recv_state <= RECV;
|
||||
dat_cnt_s <= (others =>'0');
|
||||
dat_cnt_s <= (others => '0');
|
||||
else
|
||||
recv_state <= PRE;
|
||||
|
||||
@@ -267,12 +291,12 @@ begin -- architecture RTL
|
||||
when RECV =>
|
||||
led2 <= '0';
|
||||
if eth_strb = '1' and fifo_full /= '1' then
|
||||
fifo_in <= eth_dat;
|
||||
fifo_wr <= '1';
|
||||
fifo_in <= eth_dat;
|
||||
fifo_wr <= '1';
|
||||
dat_cnt_s <= dat_cnt_s +1;
|
||||
end if;
|
||||
if eof = '1' then
|
||||
if crc_valid = '1' then-- or crc_valid = '0' then
|
||||
if crc_valid = '1' then -- or crc_valid = '0' then
|
||||
recv_state <= WAITFORACK;
|
||||
fifo_data_avail <= '1';
|
||||
--led2 <= '0';
|
||||
|
Reference in New Issue
Block a user