Qual é a principal diferença entre RTL e HDL? Para ser sincero, procurei / pesquisei no Google, mas as pessoas estão divididas em suas opiniões. Lembro-me de alguém dizendo que HDL é a linguagem de computador usada para descrever um circuito digital e, quando sintetizável, é considerado RTL.
HDL é o nome completo para todas as linguagens de definição de hardware (Verilog, VHDL, etc.) da mesma maneira que o Object Oriented pode se referir a C ++, Java, etc.
RTL, por outro lado, é uma maneira de descrever um circuito.
Você escreve seu código de nível RTL em um idioma HDL, que é traduzido (por ferramentas de síntese) para a descrição do nível de gate na mesma linguagem HDL ou qualquer que seja o dispositivo / processo de destino.
Deixe-me lhe dar um exemplo. Aqui está uma linha de Verilog (HDL) descrevendo um mux em RTL:
assign mux_out = (sel) ? din_1 : din_0;
Sua ferramenta de síntese pode pegar isso e convertê-lo em um conjunto de portas lógicas ou apenas em uma macro mux suportada pelo seu dispositivo final. Por exemplo, ele pode instanciar uma macro mux
mux u3 (mux_out, din_1, din_0);
Nos dois casos, você pode alimentar as mesmas entradas no bloco (RTL ou nível de porta) e sua saída deve ser a mesma. De fato, existem ferramentas que verificam a saída da sua síntese em relação ao seu código RTL para garantir que a ferramenta não otimize ou altere acidentalmente algo durante a síntese que causou uma incompatibilidade. Isso é chamado de verificação formal.
Por várias razões, interoperabilidade, facilidade de mudança, compreensibilidade, você escreve sua descrição do circuito digital como RTL, em vez de no nível da porta.
Boa resposta, apenas um refinamento adicional ... O RTL assume um determinado estilo de design - nuvem lógica, registro, nuvem lógica, registro etc., o que implica em design síncrono (com clock). Se você estava codificando em seu hdl para o design sem relógio (assíncrono), sua ferramenta de síntese pode usar algo diferente de RTL.
placeholder
,, De fato, existem ferramentas que verificam a saída da sua síntese com relação ao seu código RTL para garantir que a ferramenta não otimize ou altere acidentalmente algo durante a síntese que causou uma incompatibilidade. Isso se chama Verificação Formal. '' Não, não é. Isso é chamado Verificação de Equivalência Lógica ou Verificação Formal de Equivalência. A Verificação formal é um processo de comprovação (usando métodos matemáticos, sem simulação / bancada de teste) de que a descrição do seu hardware realmente descreve o comportamento que se destina a descrever.
Al Bundy
14
HDL (Linguagem de descrição de hardware) é o tipo de linguagem usada, Verilog / VHDL versus um javascript não HDL.
RTL (nível de transferência de registro) é um nível de abstração em que você está escrevendo. Os três níveis aos quais me refiro são Behavioral, RTL, Gate-level.
Comportamental tem a camada mais alta de abstração que descreve o comportamento geral e geralmente não é sintetizável, mas é útil para verificação.
RTL descreve o hardware que você deseja, implicando lógica. definindo flip-flops, trincos e como os dados são transferidos entre eles. Isso é sintetizável, a síntese pode alterar / otimizar a lógica usada, mas não o comportamento. Mudar muxes para portões etc algumas vezes invertendo sinais para otimizar melhor o design.
Verilog RTL implicando um flip-flop:
logic a; //logic is SystemVerilog, could be a 'reg'
logic k; // Driven by RTL not shown
always @(posedge clk or negede rst_n) begin
if (~rst_n) begin
a <= 'b0 ;
end
else begin
a <= k ;
end
end
Operadores combinados bit a bit:
logic [1:0] n;
logic [1:0] m;
logic [1:0] result;
assign result = n & m ;
O nível da porta é um projeto que utiliza as portas lógicas básicas (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Não precisa ser sintetizado ou é o resultado da síntese. Isso tem o nível mais baixo de abstração. são as portas lógicas que você usará no chip, mas faltam informações posicionais.
Nível de portão Verilog (mesma função que acima):
wire a;
wire k;
DFFRX1 dffrx1_i0 (
.Q (a), //Output
.QN( ), //Inverted output not used
.D (k), //Input
.CK(clk), //Clk
.RN(rst_n)// Active Low Async Reset
);
Se alguém projetasse um circuito como MyReg[7..1] := MyReg[6..0]; MyReg[0] := SerInput; MyReg.Clk = SerClk; MyReg[7..0].AR = !InBus[7..0] & Load; MyReg[7..0].AP = InBus[7..0] & Load;(um registro de deslocamento de carga paralela assíncrono que poderia ser implementado em um CPLD Xilinx 9536 usando blocos com redefinição / predefinição assíncrona), isso seria considerado RTL ou no nível da porta?
Supercat
RTL, o nível do portão pareceria AND(.a(),.b()) OR(.a(),.b())portas puramente lógicas sendo conectadas. Tenho a impressão de que RTL é qualquer coisa que você pretenda sintetizar, mesmo circuitos combinatórios, enquanto você ainda descreve a alteração nos dados, mas não as portas lógicas diretamente.
Pre_randomize 14/05
11
Desculpe, eu não sigo, vai tentar esclarecer. RTL implica um flip-flop. O nível do portão instancia um flip-flop. Para circuitos simples, conectar um monte de portas lógicas pode ser simples. mas pode não ser eficiente na área de energia. Um processador Atom possui 47 milhões de transistores, ou seja, cerca de 10 milhões de equivalentes NAND2. Deseja definir e depurar 10 milhões de portões manuais com fio? Essa é a vantagem de abstrair um pouco que podemos estudar e depurar o comportamento pretendido.
Pre_randomize
11
Suponha que alguém estivesse tentando especificar um 74HC74 em um HDL. Há várias maneiras de sintetizar esse dispositivo usando uma combinação de lógica combinatória, flops somente de sincronização e travas transparentes, mas não consigo imaginar nenhuma implementação que não envolva condições de corrida ou crie anomalias comportamentais que seriam não existe com primitivas de hardware (por exemplo, se D e Q são altos, um pulso de execução no CP ou / SD não deve ter efeito, mas nas implementações eu posso descobrir que esses pulsos podem causar metaestabilidade e / ou falha na saída).
Supercat
11
Como você MyLatchestá criando, é uma célula base instanciada ou uma trava implícita. Se você instanciar o portão, é o nível do portão. Se você o implica, é RTL. A biblioteca no nível do portão terá um tempo associado a ela para modelar condições de corrida / falhas etc. Simulações de RTL são executadas com componentes ideais.
HDL (Linguagem de descrição de hardware) é o tipo de linguagem usada, Verilog / VHDL versus um javascript não HDL.
RTL (nível de transferência de registro) é um nível de abstração em que você está escrevendo. Os três níveis aos quais me refiro são Behavioral, RTL, Gate-level.
Comportamental tem a camada mais alta de abstração que descreve o comportamento geral e geralmente não é sintetizável, mas é útil para verificação.
RTL descreve o hardware que você deseja, implicando lógica. definindo flip-flops, trincos e como os dados são transferidos entre eles. Isso é sintetizável, a síntese pode alterar / otimizar a lógica usada, mas não o comportamento. Mudar muxes para portões etc algumas vezes invertendo sinais para otimizar melhor o design.
Verilog RTL implicando um flip-flop:
Operadores combinados bit a bit:
O nível da porta é um projeto que utiliza as portas lógicas básicas (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Não precisa ser sintetizado ou é o resultado da síntese. Isso tem o nível mais baixo de abstração. são as portas lógicas que você usará no chip, mas faltam informações posicionais.
Nível de portão Verilog (mesma função que acima):
Combinatória
fonte
MyReg[7..1] := MyReg[6..0]; MyReg[0] := SerInput; MyReg.Clk = SerClk; MyReg[7..0].AR = !InBus[7..0] & Load; MyReg[7..0].AP = InBus[7..0] & Load;
(um registro de deslocamento de carga paralela assíncrono que poderia ser implementado em um CPLD Xilinx 9536 usando blocos com redefinição / predefinição assíncrona), isso seria considerado RTL ou no nível da porta?AND(.a(),.b()) OR(.a(),.b())
portas puramente lógicas sendo conectadas. Tenho a impressão de que RTL é qualquer coisa que você pretenda sintetizar, mesmo circuitos combinatórios, enquanto você ainda descreve a alteração nos dados, mas não as portas lógicas diretamente.MyLatch
está criando, é uma célula base instanciada ou uma trava implícita. Se você instanciar o portão, é o nível do portão. Se você o implica, é RTL. A biblioteca no nível do portão terá um tempo associado a ela para modelar condições de corrida / falhas etc. Simulações de RTL são executadas com componentes ideais.