Diferença entre RTL e Verilog comportamental


10

Alguém pode me dizer qual é a diferença entre RTL e código comportamental Verilog? Existe alguma demarcação clara entre os desenhos nesses dois níveis?

Respostas:


5

O código comportamental é de nível superior e geralmente não pode ser sintetizado. Construções como loops, atrasos e instruções "iniciais" são comportamentais.

O código RTL é de nível inferior e deve ser sintetizado. Ele define um circuito como uma combinação de registradores interconectados e as operações executadas nos sinais entre esses registradores.

Retirado do Yahoo Answers e encontrado imediatamente com o Google!


11
loops podem ser usados ​​no código rtl, desde que o número de iterações seja limitado. Algumas ferramentas também suportam o uso de blocos intitais para especificar as condições de inicialização.
Peter Green

Esta pergunta / resposta foi, na verdade, a primeira resposta Google me deu
Drewster

3

O código "nível de transferência de registro" é um código descrito em termos de registros e lógica combinatória que fica entre eles e se destina a ser usado como entrada para uma ferramenta de síntese. O código adere a um subconjunto sintetizável [1] do idioma. Não há atrasos explícitos, todo o tempo é em termos de bordas do relógio. Estruturas que representam travas acionadas por nível geralmente são evitadas. Normalmente, os registros cronometram um pequeno número de relógios cujos detalhes podem ser fornecidos ao analisador de temporização. Espera-se que a lógica combinatória [2] se estabeleça dentro de um único ciclo de clock, o que limita sua complexidade. É um nível mais alto que um modelo de nível de porta, mas ainda define qual o valor que cada registrador tem em cada ciclo de clock.

Código "comportamental" é geralmente um código que descreve o comportamento em um nível mais alto para uso em uma simulação, mas não pretende ser sintetizável. Pode ser usado para descrever o ambiente ao redor do seu design em uma simulação. Ele pode ser usado como uma etapa inicial de um projeto para obter o projeto geral antes que o projeto RTL detalhado dos módulos individuais seja ultrapassado.

[1] O subconjunto exato permitido varia entre as ferramentas de síntese.
[2] Se ele não se estabilizar dentro de um único ciclo, a simulação e a síntese poderão fornecer resultados diferentes e o analisador de tempo mostrará uma violação, a menos que seja explicitamente instruído a não fazê-lo.


2

Uma definição mais generalizada.

Código Comportamental: Por definição, define o comportamento de um componente digital. Ele não fornece informações de como será implementado no HW real (síntese). Não fornecerá informações sobre como os registros e portas serão implementados para executar a operação necessária. É mais como escrever um algoritmo ou FSM em C.

RTL: é a forma mais precisa de um componente digital. Ele fornece informações sobre como o código será implementado como HW real (após a síntese). Também fornece informações sobre como os dados serão transferidos entre registradores e portões.


1

É o mesmo idioma, mas estilos diferentes são usados. Com a experiência, você pode diferenciá-los rapidamente, eis algumas características de cada um:

O código de verificação de comportamento geralmente se parece mais com um programa de computador seqüencial, executando de cima para baixo em um initial beginbloco. Você pode descobrir que não há portas de entrada / saída definidas nos módulos comportamentais de nível superior, pois a saída pode ser para instalações do simulador, como o console $display()ou o sistema de arquivos $openou o dumper de forma de onda com $dumpfilee $dumpvars. Observe os atrasos entre as instruções implementadas, usando o longo tempo de simulação, por exemplo, #4000e invocando tarefas wishbone_master.checked_read(addr, value). Para essas construções de nível superior, não é óbvio qual seria / poderia ser o equivalente da tecnologia sintetizada.

O Verilog para síntese sempre possui portas de entrada / saída, pois sem portas conectadas, o módulo não tem efeitos colaterais e pode ser eliminado [1]. Atrasos provavelmente implementados pela contagem de ciclos de um determinado relógio. Observe que algumas funções do sistema Verilog, por exemplo, $clog2(PARAMETER)podem ser permitidas no código de síntese, portanto a presença de $functionnão é uma garantia de qualquer maneira. O código para síntese tende a compreender muitos dos "processos" independentes, cada um com uma lista de sensibilidade. Algumas tecnologias permitem initial beginbloqueios para a inicialização da memória, novamente, isso não é uma garantia.

Por fim, o designer conhece o propósito do código que escreve e o invocará adequadamente com o conjunto de ferramentas de síntese ou em um simulador.

[1], exceto para determinados blocos IP que podem fazer conexões de porta traseira para instalações internas de chips, por exemplo, JTAG

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.