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 FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 19 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 • standard para representação de circuitos electrónicos ao nível estrutural FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 20 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 FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 21 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 22 VHDL-Verilog (comportamental) Verilog VHDL 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; 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; 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; 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 FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 23 VHDL-Verilog (estrutural) VHDL 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; Verilog module HALF_ADDER(a,b,sum,carry); input a,b; output sum,carry; xor X1(sum,a,b); and A1(carry,a,b); endmodule 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; FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 24 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) FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 25 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 26 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) q preset clear qbar preset • implementação (modelo do circuito digital) clear q qbar FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 27 Verilog - introdução • Modelo estrutural de uma latch SR com portas NAND: atraso primitiva module ffnand(preset,clear,q,qbar); input preset, clear; output q, qbar; interface nand #1 nand1(q, qbar, preset), nand2(qbar, q, clear); implementação instância endmodule saída • Circuito: preset clear FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves entradas q qbar 28 Verilog - introdução • Simulação do módulo ffnand escala temporal `timescale 1ns/100ps fios module top_ffnand; wire q, qb; reg pre, clr; registos ffnand ffnand1(pre,clr,q,qb); instância initial begin $monitor($time, “ preset=%b, clear=%b, q=%b, qbar=%b”, pre, clr, q, qb); espera 10ns #10 #10 #10 #10 #10 pre=0; clr=1; pre=1; clr=0; clr=1; $finish; monitor de sinais estímulos de simulação end endmodule FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 29 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 10 11 12 20 30 31 32 40 preset=x preset=0 preset=0 preset=0 preset=1 preset=1 preset=1 preset=1 preset=1 clear=x clear=1 clear=1 clear=1 clear=1 clear=0 clear=0 clear=0 clear=1 FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves q=x q=x q=1 q=1 q=1 q=1 q=1 q=0 q=0 qbar=x qbar=x qbar=x qbar=0 qbar=0 qbar=0 qbar=1 qbar=1 qbar=1 valor lógico desconhecido 30 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: counter c16 Dff clockgen Dff Dff Dff FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 31 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], D2(value[1], D3(value[2], D4(value[3], clock, clock, clock, clock, vector de bits saídas de 1 bit ~value[0]), value[1] ^ value[0]), value[2] ^ &value[1:0]), value[3] ^ &value[2:0]); assign fifteen = &value; assign ten = value[3] & ~value[2] & value[1] & ~value[0]; operadores endmodule saída ten vale 1 quando value = 1010 FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 32 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; q é reg porque “segura” um valor no início da simulação (t=0) sempre que clock endmodule FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 33 Verilog - introdução • Gerador de relógio (clockgen) module clockgen(clock); output clock; reg clock; initial #5 clock = 1; always #50 clock = ~clock; para sempre... sinal clock gerado: endmodule t=0 5 unidades de tempo reais: ‘timescale 1ns/100ps 50 50 arredondamento dos cálculos unidade de atraso FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 34 Verilog - introdução • O circuito completo (módulo counter) module counter; wire [3:0] count; wire clock, ten, fifteen; c16 contador( count, clock, fifteen, ten); clockgen clock( clock ); initial $monitor($time, “ Clk=%b, Count=%d, is_10=%b, is_15=%b”, clock, count, ten, fifteen); endmodule FEUP/DEEC, Projecto de Sistemas Digitais, 2005/2006 José Carlos Alves 35