Pergunta

i ter sido dito para uso 'quando' declaração a fazer multiplexer, mas não usar 'if' uma vez que irá causar erros de temporização ... eu não entendo isso ... então qual é a diferença entre 'se' e 'quando'? e que eles são mapeados para a mesma coisa em hardware?

Foi útil?

Solução

OK, vamos discutir alguns pontos na primeira sobre a diferença entre se e quando afirmações:

  • Ambos são chamados Dataflow Design Elements.

quando declaração

  • declaração concorrente
  • não é usado em processo, usado apenas na arquitetura como processo é execução sequencial

if

  • declaração sequencial
  • usado no processo, já que é a declaração seqüencial, e não usado fora do processo

E você sabe multiplexer é um componente não precisa bloco de processo, como o seu comportamento não muda com a mudança de sua entrada, por isso vai ser um processo fora, então você tem que escrever usando quando declaração como é comunicado concorrente .. E se você escreveu com if, podem ocorrer erros de temporização. Também todas as referências e também ajuda Xilinx (se você estiver usando Xilinx) está escrevendo o bloco Multiplexer usando quando afirmação não if

Referência: Design Digital priciples & Practices, John F. Wakerly, 3rd Edition

Outras dicas

Veja estes:

Basicamente, if é seqüencial, e when é concorrente. Eles não mapear para a mesma coisa em hardware ... Esta página descreve, na parte inferior, algumas das considerações especiais necessárias para sintetizar uma declaração if.

Ambos os estilos de codificação são totalmente válido.

Vamos recordar alguns elementos. A partir de HDL, a síntese é feito em duas etapas principais:

  1. em primeiro lugar, o VHDL é analisado a fim de detectar RTL modelos (que consiste em elementos de RTL:-flip-flops, expressões aritméticas, multiplexadores, a lógica de controle). Dizemos que esses elementos são "inferir" (isto é, você deve código usando o modelo certo para conseguir o que você queria inicialmente. Você deve imaginar como esses elementos estão ligados, antes da codificação).
  2. O segundo passo é real lógica síntese , que leva um determinado parâmetros tecnológicos alvo em conta (tipos de portas disponíveis, o calendário, área, energia).

Estas duas etapas separa claramente necessidades funcionais RTL (lógica de direcção, cálculos) de contingências de tecnologia (temporização etc).

Vamos voltar para a primeira etapa (RTL):

multiplexers relativas, vários estilos de codificação são possíveis:

  • usando assignement concorrente:

    y <= a1 quando cond1 outra a2 quando cond2 outra cond3;

  • usando if dentro de um processo:

    processo (a1, a2, a3, cond1, cond2) início se (cond1) seguida y <= A1; elsif (cond2) seguida y <= a2; outro y <= a3; fim se; acabar;

  • usando outra atribuição simultânea forma, adequado para genérico descrições: se sel é um inteiro e muxin uma matriz de sinais e, em seguida:

    muxout <= muxin (SEL); CD Japan inferir uma mux

Observe que os 3 estilos de codificação sempre trabalho. Note-se também que eles são "um pouco mais" do que multiplexer simples como a codificação vigor estilo a presença de uma codificação de prioridade (se ELSIF, quando outra coisa), o que não é o caso de um multiplexador baseada em equação simples, realmente simétrica.

  • usando uma instrução case

    processo (a1, a2, a3, cond1, cond2) cond variável: std_logic (1 virou 0); início cond: = cond2 & cond1; caso cond é quando "01" => y <= a1; quando "10" => y <= a2; quando outros => y <= a3; acabar caso; acabar;

  • usando uma instrução SELECT (no nosso exemplo, dois assignements simultâneas necessário):

    sel <= cond2 & cond1; COM sel SELECIONAR y <= a1 quando "01", a2 QUANDO "10", A3 quando os outros;

Uma observação final é sobre a ascensão de abstração, mesmo para o projeto RTL: os sintetizadores são agora realmente amadurecer. Ter um olhar para Jiri Gaisler estilos para LEON2 processador de código aberto, por exemplo, bem como seus estilos de codificação (codificação veja aqui ). Ele prones uma abordagem muito diferente, mas perfeitamente válida, a partir de livros clássicos.

Você deve sempre entender o que o sintetizador RTL vai inferir.

No contrário, a síntese comportamental permite-lhe esquecer (parcialmente) o que o sintetizador irá inferir. Mas isso é outra história.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top