Diferencia entre revisiones de «Programación en Verilog/Introducción»

Contenido eliminado Contenido añadido
Sin resumen de edición
Sin resumen de edición
Línea 5:
}}
 
__TOC__
 
==Introducción==
''Verilog'' es un lenguaje de descripción hardware (HDL: Hardware Description Language) utilizado para describir sistemas digitales, tales como procesadores, memorias o elementos más simples como son los flip-flops. Esto significa que un lenguaje de este tipo puede utilizarse para describir cualquier hardware (digital) a cualquier nivel. Estos sistemas se pueden describir de las dos siguientes formas:
 
Línea 14 ⟶ 17:
 
Verilog nació en 1985 como un lenguaje propietario, pero en 1990 dicho lenguaje se convirtió den dominio público, permitiendo a las empresas hacer uso del mismo, con el fin de aumentar la difusión del lenguaje.
 
 
==Niveles de abstracción==
Verilog soporta el diseño de un circuito a diferentes niveles de abstracción, de los cuales caben destacar tres de ellos: nivel de puerta, nivel RTL y nivel de comportamiento.
 
===Nivel de puerta===
Corresponde a una descripción a bajo nivel, también se denomina modelo estructural. El diseño es descrito mediante primitivas lógicas (AND, OR, ...), conexiones y añadiendo distintas propiedades de tiempo. Estas señales pueden tomar los valores '0', '1', 'X' o 'Z' (siendo 'X' el estado indefinido y 'Z' el de alta impedancia). A continuación, se muestra un ejemplo de este tipo de nivel.
 
<source lang=verilog>
module mux(f, a, b, sel);
input a, b, sel;
output f;
 
and #5 g1(f1, a, nsel);
g2(f2, b, sel);
or #5 g3(f, f1, f2);
not g4(nsel, sel);
endmodule
</source>
 
 
===Nivel RTL===
También denominado nivel de transferencia de registro. Los diseños descritos en este nivel especifican las características de un circuito mediante operaciones y transferencia de datos. Los circuitos diseñados en este nivel tienen la propiedad de ser sintetizables, por tanto, todo código sintetizable es código RTL. A continuación se muestra un ejemplo de este tipo de nivel.
 
<source lang=verilog>
module flipflop(d, clk, q, q_bar);
input d, clk;
output q, q_bar;
reg q, q_bar;
 
always@(posedge clk)
begin
q <= #1 d;
q_bar <= #1 !d;
end
endmodule
</source>
 
 
===Nivel de comportamiento===
La principal característica de este nivel es su total independencia de la estructura del diseño. En este nivel, el diseñador define el comportamiento del circuito, definiéndonos mediante algoritmos en paralelo. Cada un de los algoritmos están formados por un conjunto de instrucciones que se ejecutan de forma secuencial. En ocasiones es posible utilizar código no sintetizable con el fin de realizar los denominados ''testbenches''. Seguidamente se muestra un ejemplo de este nivel.
 
 
<source lang=verilog>
module (clk, A, B, C, D);
input clk, A, B;
output C, D;
reg C;
 
always@(C)
begin
D <= C + 10;
end
 
always@(posedge clk)
begin
C <= A + B;
end
endmodule
</source>