Eu sou novo no fpgas, e há algumas sutilezas de tempo que não tenho certeza se entendi: se todos os meus processos síncronos são acionados na mesma borda, isso significa que minhas entradas são 'capturadas' em uma borda ascendente e minhas saídas mudam .. a mesma borda? a próxima borda ascendente?
se eu tiver dois módulos, nos quais a saída de um flui para as entradas do próximo, pode surgir a situação em que as entradas do meu módulo (as saídas de um módulo anterior) estão mudando ao mesmo tempo em que são capturadas.
O marcador em 205ns mostra do que estou falando, sendo op e data_write minhas entradas. Tudo parece "apenas funcionar" neste caso de teste, mas na simulação não está claro exatamente o que está sendo capturado quando. O data_write = "0001 ..." está sendo capturado em 205ns ou (205ns + 1 ciclo de relógio)? Existe uma maneira de obter formas de onda mais detalhadas no ISim que mostram os tempos de configuração e espera?
Obrigado.
fonte
Na extremidade do relógio desejada (subindo ou descendo), a entrada em D aparece na saída Q. Isso leva um tempo finito (atraso de Clock para Q) e, assumindo que não há violações de tempo, D passará apenas por um FF por vez (ou seja, se houver outra entrada de FFs conectada a Q, o segundo FF passará o valor de FF1 Q antes de mudar.
Para incluir tempos em sua simulação, você precisa sintetizar, colocar e rotear seu design e executar uma simulação de local e rota. Isso terá todos os atrasos combinacionais, de relógio para Q, etc. incluídos. A simulação HDL não possui nenhum desses tempos, portanto, é útil apenas para testar a operação básica, não os limites de tempo. Você também receberá um relatório de tempo, informando os limites de velocidade de um domínio de relógio específico, informando se há alguma violação de tempo e mostrando a folga de vários caminhos. Você pode usar essas informações para descobrir onde as mudanças podem precisar ser feitas ou adicionar regras para informar ao software que a violação não é um problema (por exemplo, para coisas como caminhos de vários ciclos ou caminhos de relógio cruzado)
fonte
Isto é uma adição às respostas anteriores, das quais acredito que você entendeu a idéia.
De fato, essas questões podem ser um pouco complicadas no início quando os projetos de RTL de simulação são difíceis, pois é difícil ver qual é a causa e qual é o efeito nas simulações ideais / funcionais / RTL (= sem atrasos na propagação).
Com o simulador certo, os atrasos delta podem realmente ser visualizados. O ISim não faz isso, mas no ei ModelSim, você pode ativar a expansão delta nas bordas do relógio. Abaixo está um exemplo de captura de tela de um IP de terceiros com bugs que eu resolvi.
c
é o sinal do relógio e+1
etc. são os ciclos delta, visualizados com o tempo.Se um projeto é simulado onde a simulação e o projeto são realmente ideais e síncronos , sem atrasos simulados, você pode, em princípio, visualizar todas as alterações de sinal em um flanco de relógio específico como ocorrendo um pouco depois desse flanco de relógio. No seu exemplo, portanto, em 205 ns,
data_write
=0000...
é o que está sendo capturado. Alguma outra lógica na primeira unidade está alterando o sinaldata_write
para0001...
no mesmo flanco, e esse sinal aparecedata_write
um pouco após o flanco do relógio. Esse "pouco depois" seria um ou vários deltas da simulação em uma simulação ideal (seu exemplo) (não visível no ISim, mas no ModelSim com expansão delta), ou alguns ps / ns posteriormente no mundo real.Em uma nota lateral: Uma coisa importante no design de RTL é garantir que as entradas sejam sempre amostradas no flanco do relógio - mesmo um ciclo delta mais tarde é tarde demais. A entrada pode não ser válida um delta mais tarde. Ou em outras palavras: "não mexa com o caminho do relógio".
fonte