Altera_Forum
Honored Contributor
8 years agoCan't resolve multiple constant drivers
I have a process
type StateType is (ST_IDLE, ST_WAIT_DONE, ST_START_RX_DATA, ST_RX_DATA0, ST_RX_DATA, ST_RX_REG_COM, ST_RX_REG_ADDR, ST_RX_REG_DATA, ST_TX_REG_COM, ST_TX_REG_ADDR, ST_TX_REG_DATA, ST_TX_REG_DONE, ST_READ_STATUS_0, ST_READ_STATUS_1, ST_START_TX_DATA, ST_TX_DATA, ST_WAIT_USER_DONE);
signal State :StateType;
signal NextState :StateType;
mspi_mcp25625_interface: process (REG_CLK)
begin
if (rising_edge(REG_CLK)) then
case State is
when ST_IDLE =>
MSPI_WR_START_TRIG <= '0';
MSPI_WR_DONE_CLR <= '0';
if (MCP25625_RX0BF='0' or MCP25625_RX1BF='0') then
State <= ST_START_RX_DATA;
end if;
when ST_WAIT_DONE =>
MSPI_WR_START_TRIG <= '0';
MSPI_WR_DONE_CLR <= '0';
if (MSPI_WR_DONE = '1') then
MSPI_WR_DONE_CLR <= '1';
if (NextState = ST_RX_DATA) then
if (rx_byte_idx < DATA_LENGHT) then
temp_rx_mailbox(rx_byte_idx) <= MSPI_RD_DATA;
rx_byte_idx := rx_byte_idx + 1; --index for next rx byte
-- else
-- rx_byte_idx := 0;
-- State <= ST_IDLE;
end if;
elsif (NextState = ST_RX_REG_DATA) then
mcp25625_reg_data <= MSPI_RD_DATA;
elsif (NextState = ST_READ_STATUS_1) then
mcp25625_status_reg <= MSPI_RD_DATA;
end if;
State <= NextState;
else --timeout
timeout <= timeout + 1;
if (timeout >= X"FFFE") then
timeout <= X"0000";
State <= ST_IDLE;
end if;
end if;
---------------------------------------RECEIVE MAILBOX FROM MCP25625-------------------------
when ST_START_RX_DATA => --start to receive a mailbox
if (MCP25625_RX0BF='0') then
MSPI_WR_DATA <= X"90"; --Receive Buffer 0, Start at RXB0SIDH (0x61)
elsif (MCP25625_RX1BF='0') then
MSPI_WR_DATA <= X"94"; --Receive Buffer 1, Start at RXB1SIDH (0x71)
end if;
MSPI_CS <= '0'; --chip select low
MSPI_WR_START_TRIG <= '1'; --send a byte
NextState <= ST_RX_DATA0;
State <= ST_WAIT_DONE;
when ST_RX_DATA0 => --skip first byte - it was a command
MSPI_WR_DONE_CLR <= '0';
State <= ST_RX_DATA;
when ST_RX_DATA => --receive a mailbox
MSPI_WR_DONE_CLR <= '0';
if (rx_byte_idx < DATA_LENGHT) then
MSPI_WR_DATA <= X"00"; --load dummy byte
MSPI_WR_START_TRIG <= '1'; --send a byte
NextState <= ST_RX_DATA;
State <= ST_WAIT_DONE;
else --13 bytes received
MSPI_CS <= '1'; --chip select high
rx_byte_idx := 0;
--MCP25625_DATA_RDY <= '1'; --WHERE TO CLEAR?
rx_data_ready <= '1';
NextState <= ST_IDLE;
State <= ST_IDLE;
end if;
when others =>
State <= ST_IDLE;
end case;
end if;
end process mspi_mcp25625_interface;
When I compile I get multiple errors : Error (10028): Can't resolve multiple constant drivers for net "State.ST_IDLE"…… Error (10028): Can't resolve multiple constant drivers for net "State.ST_WAIT_DONE" ….. Error (10028): Can't resolve multiple constant drivers for net "State.ST_START_RX_DATA" ….. And so on. But I use State only in this process.