Qual é o erro no meu código vhdl? Porquê tanto trava?

L

lzh08

Guest
LIBRARY ieee;
ieee.std_logic_1164.all utilização;

ENTIDADE MCU é
PORT
(
nDataStrobe: in std_logic;
nAddrStrobe: in std_logic;
NWRI: in std_logic;
nReset: in std_logic;
Data: inout std_logic_vector (7 DOWNTO 0);
nWait: out std_logic;
nAck: out std_logic;

SysClk: in std_logic;
Reset: in std_logic
);
END MCU;

ARQUITETURA Ação da MCU é
TIPO estado é (Idle, DataRead, DataWrite, AddrRead, AddrWrite,
DataReadEnd, DataWriteEnd, AddrReadEnd, AddrWriteEnd);
SINAL Cur_State, Next_State: Estado: = Idle;
SINAL RegDataTemp: std_logic_vector (7 downto 0);
SINAL RegAddrTemp: std_logic_vector (7 downto 0);

BEGIN
PROCESSO (Cur_State, nDataStrobe, NWRI, nAddrStrobe, RegDataTemp, RegAddrTemp, Data)
começo
nWait <= '0 ';
caso é Cur_State
quando ocioso nWait => <= '0 ';
if ((NWRI = '1 ') e (nDataStrobe = '0')) then
Next_State <= DataRead;
elsif ((NWRI = '0 ') e (nDataStrobe = '0')) then
Next_State <= DataWrite;
elsif ((NWRI = '1 ') e (nAddrStrobe = '0')) then
Next_State <= AddrRead;
elsif ((NWRI = '0 ') e (nAddrStrobe = '0')) then
Next_State <= AddrWrite;
diferente
Next_State <= Espera;
END IF;
quando DataRead => Data <= RegDataTemp;
nWait <= '1 ';
Next_State <= DataReadEnd;
quando DataWrite => RegDataTemp <= dados;
nWait <= '1 ';
Next_State <= DataWriteEnd;
quando AddrRead => Data <= RegAddrTemp;
nWait <= '1 ';
Next_State <= AddrReadEnd;
quando AddrWrite => RegAddrTemp <= dados;
nWait <= '1 ';
Next_State <= AddrWriteEnd;
quando DataReadEnd => if (nDataStrobe = '1 ') then
nWait <= '0 ';
Next_State <= Espera;
diferente
Next_State <= DataReadEnd;
END IF;
quando AddrReadEnd => if (nAddrStrobe = '1 ') then
nWait <= '0 ';
Next_State <= Espera;
diferente
Next_State <= AddrReadEnd;
END IF;
quando DataWriteEnd => if ((NWRI = '1 ') e (nDataStrobe = '1')) then
nWait <= '0 ';
Next_State <= Espera;
diferente
Next_State <= DataWriteEnd;
END IF;
quando AddrWriteEnd => if ((NWRI = '1 ') e (nAddrStrobe = '1')) then
nWait <= '0 ';
Next_State <= Espera;
diferente
Next_State <= AddrWriteEnd;
END IF;
quando outros => Next_State <= Espera;
end case;
end process;

processo (Reset, SysClk)
começo
if reset = '0 'then
Cur_State <= Espera;
elsif rising_edge (SysClk), então
Cur_State <= Next_State;
END IF;
end process;
final de Acção;
Atenção: VHDL processo de advertência na Declaração MCU.VHD (2

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Legal" border="0" />

: Sinal ou variável "dados" não pode ser atribuído um novo valor em todos os caminhos possíveis através da Instrução do Processo.Sinal ou variável "Data" mantém seu valor anterior em cada caminho sem atribuição de novo valor, que podem criar um laço de combinações no projeto atual.
Atenção: VHDL processo de advertência na Declaração MCU.VHD (2

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Legal" border="0" />

: Sinal ou variável "RegDataTemp" não pode ser atribuído um novo valor em todos os caminhos possíveis através da Instrução do Processo.Sinal ou variável "RegDataTemp" mantém seu valor anterior em cada caminho sem atribuição de novo valor, que podem criar um laço de combinações no projeto atual.
Atenção: VHDL processo de advertência na Declaração MCU.VHD (2

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Legal" border="0" />

: Sinal ou variável "RegAddrTemp" não pode ser atribuído um novo valor em todos os caminhos possíveis através da Instrução do Processo.Sinal ou variável "RegAddrTemp" mantém seu valor anterior em cada caminho sem atribuição de novo valor, que podem criar um laço de combinações no projeto atual.
Warning: porta de saída "NACK" na MCU.VHD (13) não tem driver
Atenção: Trava Data [0] $ latch comportamento tem inseguro
Atenção: Portas D e ENA no trinco são alimentados pelo mesmo sinal Cur_State.addrread
Atenção: Trava de dados [1] $ latch comportamento tem inseguro
Atenção: Portas D e ENA no trinco são alimentados pelo mesmo sinal Cur_State.addrread
Atenção: Trava Data [2] $ latch tem comportamento inseguro
Atenção: Portas D e ENA no trinco são alimentados pelo mesmo sinal Cur_State.addrread
Atenção: Trava de dados [3] $ latch tem comportamento inseguro
Atenção: Portas D e ENA no trinco são alimentados pelo mesmo sinal Cur_State.addrread
Atenção: Trava de dados [4] $ latch comportamento tem inseguro
Atenção: Portas D e ENA no trinco são alimentados pelo mesmo sinal Cur_State.addrread
Atenção: Trava de dados [5] $ latch comportamento tem inseguro
Atenção: Portas D e ENA no trinco são alimentados pelo mesmo sinal Cur_State.addrread
Atenção: Trava de dados [6] $ latch comportamento tem inseguro
Atenção: Portas D e ENA no trinco são alimentados pelo mesmo sinal Cur_State.addrread
Atenção: Trava de dados [7] $ latch comportamento tem inseguro
Atenção: Portas D e ENA no trinco são alimentados pelo mesmo sinal Cur_State.addrread
Atenção: TRI ou OPNDRN buffers permanentemente habilitado
Atenção: Node "Data [0] ~ 8"
Atenção: Nó "Data [1] ~ 9"
Atenção: Nó "Data [2] ~ 10"
Atenção: Nó "Data [3] ~ 11"
Atenção: Nó "Data [4] ~ 12"
Atenção: Nó "Data [5] ~ 13"
Atenção: Nó "Data [6] ~ 14"
Atenção: Nó "Data [7] ~ 15"
Atenção: os pinos de saída são presos no VCC ou GND
Atenção: Pin "NACK" preso em GND
Warning: Design contém 1 pino de entrada (s) que não conduza a lógica
Atenção: Não há saída dependente da entrada pino "nReset"
Aviso: Os seguintes 8 pinos não tem saída ou permitir uma saída GND ou VCC permitir - às alterações posteriores a essa conectividade podem alterar resultados de montagem
Info: Pino Data [0] tem uma saída permanentemente habilitado permitir
Info: Pino Data [1] tem uma saída permanentemente habilitado permitir
Info: Pino Data [2] tem uma saída permanentemente habilitado permitir
Info: Pino Data [3] tem uma saída permanentemente habilitado permitir
Info: Pin dados [4] tem uma saída permanentemente habilitado permitir
Info: Pin dados [5] tem uma saída permanentemente habilitado permitir
Info: Pin dados [6] tem uma saída permanentemente habilitado permitir
Info: Pin dados [7], foi uma saída permanentemente habilitado permitir
Atenção: A contar de 1 de pinos não tem nada, GND, VCC ou condução porta datain - alterações a essa conectividade podem alterar os resultados montagem
Info: nAck Pin tem GND dirigindo seu porto datain
Atenção: Timing Analysis encontrado um ou mais fechos implementados como circuitos combinacionais
Atenção: Node "RegDataTemp [0]" é um trinco
Atenção: Node "RegAddrTemp [0]" é um trinco
Atenção: Nó "Data [0] $ latch" é um trinco
Atenção: Node "RegDataTemp [1]" é um trinco
Atenção: Node "RegAddrTemp [1]" é um trinco
Atenção: Nó "Data [1] $ latch" é um trinco
Atenção: Node "RegDataTemp [2]" é um trinco
Atenção: Node "RegAddrTemp [2]" é um trinco
Atenção: Nó "Data [2] $ latch" é um trinco
Atenção: Node "RegDataTemp [3]" é um trinco
Atenção: Node "RegAddrTemp [3]" é um trinco
Atenção: Nó "Data [3] $ latch" é um trinco
Atenção: Node "RegAddrTemp [4]" é um trinco
Atenção: Node "RegDataTemp [4]" é um trinco
Atenção: Nó "Data [4] $ latch" é um trinco
Atenção: Node "RegAddrTemp [5]" é um trinco
Atenção: Node "RegDataTemp [5]" é um trinco
Atenção: Nó "Data [5] $ latch" é um trinco
Atenção: Node "RegDataTemp [6]" é um trinco
Atenção: Node "RegAddrTemp [6]" é um trinco

Atenção: Nó "Data [6] $ latch" é um trinco
Atenção: Node "RegAddrTemp [7]" é um trinco
Atenção: Node "RegDataTemp [7]" é um trinco
Atenção: Nó "Data [7] $ latch" é um trinco
Atenção: os pinos encontrados funcionando como relógios indefinido e / ou memória permite
Info: nó Assumindo "SysClk" é um relógio indefinidoCódigo:

 
Oi, código que é difícil de ler.Edite a sua mensagem, destaque a seção de código, pressione o "Código" botão, em seguida, no botão "Enviar".Isso tags inserções que preservar a sua formatação.

 
Parece que você está tentando atualizar um cadastro em um processo, sem clock assíncrono.Isso leva a uma concepção fechada.

 
Basta inserir as três linhas de código escrito no início do seu primeiro processo se u não quiser ter travas na concepção ur:

RegDataTemp <= (OTHERS => '0 ');
RegAddrTemp <= (OTHERS => '0 ');
Data <= (OTHERS => '0 ');

Atenciosamente,
dcreddy1980

 
dcreddy1980 escreveu:

Basta inserir as três linhas de código escrito no início do seu primeiro processo se u não quiser ter travas na concepção ur:RegDataTemp <= (OTHERS => '0 ');

RegAddrTemp <= (OTHERS => '0 ');

Data <= (OTHERS => '0 ');

 
O que você quer corrigir?
Deseja eliminar as travas, bem como fazer o trabalho de design?
Ou você só quer trabalhar?

 
Sugiro retirar essas atualizações de cadastro do FSM e colocá-los em um processo diferente.

RegDataTemp <= dados;
RegAddrTemp <= dados;

Você pode condicionar-nos então com um evento de relógio, de modo que eles não estão trancados, mas cadenciado.Criar um relógio de sinal para permitir que cada um deles, e permitir o controle de sinal do FSM.

Eu normalmente colocar cada registro em um processo separado, mas eles podem ser combinados em um.O modelo que eu uso para um registo cronometrado com um dos sinais é ...

Código:

U_REGISTER_NAME: processo (clock_name)

começo

Se clock_name rising_edge () então

Se register_clock_enable_signal_name = '1 'then

register_output_signal_name <= signal_name_or_expression;

END IF;

END IF;

end process;

 

Welcome to EDABoard.com

Sponsor

Back
Top