FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 19
Linguagens de descrição de hardware
• Modelação de um circuito (digital)
– descrições comportamentais permitem nível elevado de abstracção
– metodologia top-down: ferramentas de síntese automática
– representação textual: portabilidade, edição e documentação
– a favor do esquemático: “uma figura diz mais do que mil palavras”
• um esquema captura melhor a ideia estrutural
• ferramentas gráficas front-end produzem descrições em HDLs
– editores de esquemático: netlist em HDL (estrutural, gate-level ou RTL)
– editores de diagramas de estados: descrições sintetizáveis
– duas perspectivas na construção de um modelo
• descrever o seu funcionamento apenas para simulação
• construir uma descrição sintetizável (
$monitor(…)
não é sintetizável!)
– um modelo sintetizável deve descrever “bem” o seu funcionamento
– subsets das linguagens e regras de modelação dependem das ferramentas
HDLs
- exemplos
– VHDL - VHSIC Hardware Description Language (IEEE 1076 ‘93)
• desenvolvida para simulação, usada para síntese, fortemente tipada
– Verilog (IEEE 1364 ‘95)
• mais simples do que VHDL, poucos tipos de dados, próxima de C
– SystemC
• Extensão da linguagem C para descrever hardware
– HardwareC (univ. Berkeley)
• derivada da linguagem C, orientada para a representação de hardware
– ABEL - Advanced Boolean Equation Language (TM
Data I/O)
• programação de PLDs, equações lógicas, descrição de FSMs
– Silage (IMEC)
• aplicações de DSP, pouco controlo, data-flow
– EDIF - Electronic Data Interchange Format
FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 21
Verilog vs. VHDL
- história
•VHDL
– ‘80: por necessidade de normalização, documentação e portabilidade, e DOD funda projecto para criar linguagem de “programação” para descrever hardware – ‘83: início do desenvolvimento do VHDL (IBM, Texas, Intermetrics)
– ‘87: o DOD impõe que todos os SDs fossem descritos em VHDL; standard IEEE 1076; os sistemas electrónicos do F-22 foram um dos primeiros projectos em VHDL – ‘93: VHDL é revisto e adoptado como o standard IEEE 1076 ’93
– ‘96: adopção generalizada por ferramentas EDA; package para ferramentas de síntese (IEEE 1076.3); modelação de bibliotecas para ASIC e FPGA (IEEE 1076.4)
•Verilog
– ‘81: Gateway Design Automation, Philip Moorby cria GenRad HDL e o simulador HILO – ‘83: Gateway lançou a linguagem Verilog HDL e um simulador de Verilog
– ‘85: linguagem e simulador são enriquecidos (Verilog-XL)
– ‘87: Synopsys adopta Verilog como formato de entrada para ferramentas de síntese – ‘89/’90: Cadence compra Gateway e separa o simulador da linguagem; a linguagem é
libertada para o domínio público; é criado o OVI (Open Verilog International) – ‘93: neste ano, de todos os circuitos submetidos a fundições de silício, 85% foram
desenvolvidos e submetidos em Verilog.
– ‘95: Verilog é revisto e adoptado como o standard IEEE 1364
Verilog e VHDL - comparação
• capacidade de modelação
– semelhante para modelos estruturais
– VHDL oferece melhor suporte para modelos abstractos e modelos de atrasos
– Verilog tem melhores construções para modelar ao nível lógico e primitivas
de bibliotecas de ASICs e FPGAs
• tipos de dados
– VHDL suporta tipos de dados abstractos criados pelo utilizador
– em Verilog os tipos são muito simples e mais próximos do hw (wire e reg)
• aprendizagem
– VHDL é fortemente tipada, menos intuitiva, mais verbosa (baseada em
ADA)
– Verilog é mais simples e menos verbosa (baseada em C)
• parametrização
– VHDL tem construções para parametrizar número de bits, replicar
estruturas e configurar modelos
– Verilog suporta apenas modelos com parâmetros, instanciação com
redefinição de parâmetros
FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 23
VHDL-Verilog
(comportamental)
library IEEE; use IEEE.STD_Logic_1164.all; entity MUX_2_1 is port(S1,A1,B1,S2,A2,B2,S3,A3,B3:in std_logic; Y1,Y2,Y3:out std_logic);end entity MUX_2_1;
architecture COND_DATA_FLOW of MUX_2_1 is begin Y1 <= A1 when S1=‘1’ else B1; TWO_2_1_MUXES: process(S2,A2,B2,S3,A3,B3) begin Y2<=B2; if (S2=‘1’) then Y2<=A2; endif; if (S3=‘1’) then Y3<=A3; else Y3<=B3; endif;
end process TWO_2_1_MUXES end architecture COND_DATA_FLOW;
module MUX_2_1(S1,A1,B1,Y1, S2,A2,B2,Y2, S3,A3,B3,Y3); input S1,A1,B1,S2,A2,B2,S3,A3,B3; output Y1,Y2,Y3; reg Y2,Y3; assign Y1=S1?A1:B1; always @(S2 or A2 or B2 or S3 or A3 or B3) begin Y2=B2; if (S2) Y2=A2; if (S3) Y3=A3; else Y3=B3; end endmodule
VHDL
Verilog
VHDL-Verilog
(estrutural)
library IEEE; use IEEE.STD_Logic_1164.all; entity HALF_ADDER is port(a,b:in std_logic; sum,carry:out std_logic); end entity HALF_ADDER;architecture STRUCT of HALF_ADDER is
component xor2
port(a,b:in std_logic; c:out std_logic); end component;
component and2
port(a,b:in std_logic; c:out std_logic); end component;
begin
X1: xor2 port map(a=>a,b=>b,c=>sum); A1: and2 port map(a=>a,b=>b,c=>carry); end STRUCT; module HALF_ADDER(a,b,sum,carry); input a,b; output sum,carry; xor X1(sum,a,b); and A1(carry,a,b); endmodule
VHDL
Verilog
FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 25
Modelação em HDL
• Modelo sintetizável vs. modelo não sintetizável
– ferramentas de síntese automática inferem uma estrutura
• o modelo (comportamental ou estrutural) vai ser hardware
• regras, restrições e recomendações das ferramentas de síntese
– como é interpretado e traduzida a descrição em HDL
– simulação e implementação devem concordar
– construções específicas da tecnologia de implementação
– modelos não sintetizáveis
• não são traduzidos para hardware
• definem estímulos para simulação; monitorização de sinais
• modelam o comportamento de outros circuitos só para simulação
– circuito de relógio
– memórias ou CPUs
– circuitos de interface (por exemplo conversores A/D ou D/A)
Modelação em HDLs
recomendações gerais
• Antes de iniciar a construção do modelo
– definir a arquitectura e estruturação do projecto (particionamento)
– ferramentas de síntese não processam bem circuitos muito grandes!
• Problemas de optimização são NP-completos
• Escrever o código de modo a reflectir a arquitectura
– estruturado em módulos e funções, ter em mente a reusabilidade
– favorecer a legibilidade: nomes, comentários, parêntesis, parâmetros
• Garantir a precisão da simulação
– deve traduzir fielmente o comportamento do hardware gerado
– modelar correctamente o comportamento das partes não sintetizáveis
FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 27
Verilog HDL
(Hardware Description Language)
• Linguagem de descrição de hardware (digital)
– Suporta modelação em diferentes níveis de abstracção
– criada para modelação e simulação de circuitos digitais
– actualmente usada como fonte para ferramentas de síntese
– modelos estruturais e modelos comportamentais
– não é uma linguagem de programação!
• Unidade básica de um modelo em Verilog:
– module: um sub-circuito definido por:
• interface (entradas e saídas)
• implementação (modelo do circuito digital)
preset clear q qbar
q
qbar
preset
clear
Verilog - introdução
• Modelo estrutural de uma latch SR com portas NAND:
module ffnand(preset,clear,q,qbar);
input preset, clear;
output q, qbar;
nand #1 nand1(q, qbar, preset),
nand2(qbar, q, clear);
endmodule
interface
implementação
q
qbar
preset
clear
instância
atraso
• Circuito:
saída
entradas
primitiva
FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 29
Verilog - introdução
• Simulação do módulo ffnand
`timescale 1ns/100ps
module top_ffnand;
wire q, qb;
reg
pre, clr;
ffnand ffnand1(pre,clr,q,qb);
initial
begin
$monitor($time,
“ preset=%b, clear=%b, q=%b, qbar=%b”,
pre, clr, q, qb);
#10 pre=0; clr=1;
#10 pre=1;
#10 clr=0;
#10 clr=1;
#10 $finish;
end
endmodule
fios
estímulos
de simulação
monitor
de sinais
instância
registos
espera 10ns
escala temporal
Verilog - introdução
• Modelo completo para simulação (testbench)
– reunião dos módulos ffnand e top_ffnand
• Resultados da simulação
– produzidos pela função $monitor(...)(system task)
• sempre que algum dos sinais declarados muda de estado
– análise das formas de onda de sinais relevantes
0 preset=x clear=x q=x qbar=x
10 preset=0 clear=1 q=x qbar=x
11 preset=0 clear=1 q=1 qbar=x
12 preset=0 clear=1 q=1 qbar=0
20 preset=1 clear=1 q=1 qbar=0
30 preset=1 clear=0 q=1 qbar=0
31 preset=1 clear=0 q=1 qbar=1
32 preset=1 clear=0 q=0 qbar=1
40 preset=1 clear=1 q=0 qbar=1
valor lógico
desconhecido
FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 31
Verilog - introdução
• Um contador de 4 bits (counter)
– estruturação em 3 módulos: c16, Dff e clockgen
– clockgen
produz o sinal de relógio
– contador c16 usa instâncias do módulo Dff (flip-flops tipo D)
– hierarquia do modelo:
clockgen
c16
Dff
Dff
Dff
Dff
counter
Verilog - introdução
• Modelo do contador c16
module c16(value, clock, fifteen, ten); input clock;
output [3:0] value; output fifteen, ten;
Dff D1(value[0], clock, ~value[0]),
D2(value[1], clock, value[1] ^ value[0]), D3(value[2], clock, value[2] ^ &value[1:0]), D4(value[3], clock, value[3] ^ &value[2:0]); assign fifteen = &value;
assign ten = value[3] & ~value[2] & value[1] & ~value[0]; endmodule
vector de bits
operadores
saída ten vale 1 quando value = 1010
FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 33
Verilog - introdução
• Modelo (comportamental) do Dff
module Dff(q, clock, d);
input clock, d;
output q;
reg
q;
initial
q = 0;
always
@ (negedge clock)
#10 q = d;
endmodule
q é reg porque “segura” um valor
no início da simulação (t=0)
sempre que clock
Verilog - introdução
• Gerador de relógio (clockgen)
module clockgen(clock);
output clock;
reg
clock;
initial
#5 clock = 1;
always
#50 clock = ~clock;
endmodule
para sempre...
sinal clock gerado:
t=05 50 50
unidades de tempo reais: ‘timescale 1ns/100ps
unidade de atraso
arredondamento
dos cálculos
FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006
José Carlos Alves 35