Projetando Sistemas Digitais com SystemVerilog

Slides:



Advertisements
Apresentações semelhantes
Lexium Motion Controller - LMC
Advertisements

SystemVerilog: Síntese de Lógica combinatória Função lógica combinatória pode ser representada como: logic_output(t) = f(logic_inputs(t)) Regras Evite.
1 Hardware Description Language (HDL) Para quê precisamos de uma Linguagem de Descrição de Hardware ? Modelar, Representar e simular hardware digital Concorrência.
Sistema de controle e monitoramento da fonte de alta-tensão:
Fernando Moraes e Ney Laert Vilar Calazans
Ney Laert Vilar Calazans
Parte 2 – Introdução a VHDL Uso de Hierarquia LABORG Fernando Gehm Moraes César Marcon Ney Laert Vilar Calazans 31/agosto/2009.
Introdução aos Sistemas Digitais
Eletrônica Digital Projeto de Circuitos Combinacionais Aritméticos
Unidades de Execução e de Controle Sistemas Digitais.
Verilog AULA - 3.
FLI – ModelSim Pedro Velho.
VERILOG HDL (HARDWARE DESCRIPTION LANGUAGE)
Hardware Description Language (HDL)
Decodificador 2 para 4 (2 : 4)
O latch RS QN (QN)inv 1 S R QN+1 (QN+1)inv
Máquina de Estados Uma máquina de estados finitos ou autômato finito é uma modelagem de um comportamento composto por estados, transições e ações Um estado.
O Flip-Flop Mestre/Escravo
Introdução à estrutura e funcionamento de um sistema informático
Circuitos combinatórios
Projeto de Somador com e sem Sinal
Estrutura e funcionamento de um computador
Circuitos Digitais - Somadores e Subtradores SOMADORES E SUBTRADORES.
Prof.Corradi Finite State Machines.
Antonyus Pyetro Infra-estrutura de Hardware – IF674
Antonyus Pyetro Infra-estrutura de Hardware – IF674
Implantação de um Centro de Processamento de Alto Desempenho sobre recursos não-dedicados Andamento das atividades Abmar Barros.
Dispositivos Lógicos Programáveis (DLP) Ideia e Arquiteturas
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I prof. Dr. César Augusto M. Marcon prof. Dr. Edson Ifarraguirre Moreno Qualificadores.
Test-bench para Somador
Material Didático Proposto
ENGENHARIA DE AUTOMAÇÃO INDUSTRIAL
SISTEMAS DIGITAIS AULA 5
Prof.: Bruno Rafael de Oliveira Rodrigues
AUTOMAÇÃO INDUSTRIAL.
Estilos de Arquitetura- uma outra visão
Abner C. Barros GRECO – Grupo de Engenharia da Computação CIn –UFPE
Experimentos Práticos Arquitetura de Software para Celulares
Portifólio Grupo de Engenharia da Computação (GrecO)
Introdução às Tecnologias de Informação e Comunicação
Análise e Projeto Orientado a Objetos
Introdução à INFORMÁTICA
Input » Processamento » Output »
Introdução a Organização e Arquitetura de Computadores
MPS – Aula prática Diagrama de Pacotes / Esteriótipos Web
Decodificadores e Codificadores
Organização de Computadores
Hardware Description Language Aula 4 –VHDL (introdução)
Hardware Description Language Aula 9 –Verilog HDL Prof. Afonso Ferreira Miguel, MSc.
FUNDAMENTOS DE COMPUTAÇÃO
Sistemas Digitais Somadores.
VERILOG.
VERILOG Monitoria Infra-Estrutura de Hardware Álvaro João – ajss Húgaro Bernardino – hbb Fred Rabelo - ferrf Leonardo Leandro – lsl2 Jéssica de.
Teste.
Lojas de Informática e eletrônicos
Projetando Sistemas Digitais com SystemVerilog
Introdução à Engenharia de Computação
Colégio da Imaculada Colégio da Imaculada Curso Técnico em Informática
Verilog HDL. Introduzida em 1985 pela Gateway Design System Corporation Após 1990, passou a ser de domínio público, e em 1995 passou a ser padrão IEEE.
Introdução 1ª Semana # Introdução # Álgebra Lógica Simbólica Famílias Lógicas 2ª Semana # Organização de um Computador # Memória Registradores Instruções.
Sistemas Digitais Aula 10 GRECO-CIN-UFPE.
Projeto Lógico Estruturado de Software Wolley W. Silva.
Teste.
Teste.
Teste.
Teste\. testes.
ELD - Eletrônica Digital
XOR, Detecção de Erro, Comparadores
Módulo 3 – Circuitos Combinatórios
Módulo 3 – Circuitos Combinatórios
Transcrição da apresentação:

Projetando Sistemas Digitais com SystemVerilog Edna Barros Grupo de Engenharia da Computação Centro de Informática -UFPE

Especificação Diagrama de Gajski

Definindo Entidades Definição das portas do circuito A definição dos terminais de um módulo é feita da seguinte forma. module teste ( input logic A,B, input C, output logic S1, output logic S2 ); endmodule

Definindo Entidades Exemplo: no código abaixo está descrito um somador de 1 bit module somador1Bit ( input A, B, output Soma, Carry); always_comb Soma <= A ^ B; //A xor B always_comb Carry <= A & B; //A and B endmodule

Principais Tipos Para valores inteiros, SystemVerilog possui uma boa diversidade de definições. Os bits dos tipos abaixo podem assumir apenas valores zero ou um. shortint: inteiro sinalizado de 16 bits. int: inteiro sinalizado de 32 bits. longint: inteiro sinalizado de 64 bits.

Principais Tipos Temos ainda o tipo integer o qual seus bits podem assumir valor 1, 0, Z e X. integer: inteiro sinalizado de 64 bits. Os tipos podem ser forçados a serem sinalizados ou não-sinalizados. Para isso deve-se usar as palavras signed ou unsigned. int unsigned valor; int signed valor;

Principais Tipos O tipo byte representa um conjunto de oito bits que podem ser interpretados como um inteiro sinalizado ou um caractere ASCII. byte valor; byte unsigned valor; O tipo bit é usado basicamente na definição de vetores e pode assumir apenas valores 0 e 1.

Principais Tipos O tipos logic também é usado na definição de vetores . Seus bits podem assumir valor 0, 1, Z e X. Por padrão os terminais de entrada e saída dos módulos possuem esse tipo. SystemVerilog possui ainda os tipos real (64 bits) e shortreal (32 bits). Esses ainda não são sintetizáveis. real valor; shortreal valor;

Principais Tipos Temos também o tipo string que representa uma cadeia de caracteres. Esse tipo possui um bom conjunto de métodos definidos. Deve ser delimitado por aspas duplas e pode ter até 1024 caracteres. string nome = “String”; byte a = “A” //Atribui A para a bit [10:0] c = “41” //Atribui 000_0100_0001 a C

Trabalhando com Números Com SystemVerilog podemos trabalhar com números decimais, hexadecimais e binários. Para tanto, devem ser declarados o tamanho em bits do número e seu tipo. 6'd33 8'hA6 8'b1000_1101 Obs: os números podem ser explicitamente sinalizados através do uso de - ou +

Vetores de Bits Para a definição de vetores de bits procedemos das formas apresentadas abaixo. Vetor unidimensional logic [msb: lsb] nome_vetor; Vetor bidimensional logic [msb: lsb] nome_vetor [minimo :máximo]; Vetor tridimensional logic [msb:lsb] [máximo:mínimo] nome_vetor[mínimo: máximo]

Vetores de Bits Exemplos Abaixo é definido um vetor de oito bits. logic [7:0] vetor; No próximo exemplo temos um vetor de 64 posições, sendo cada uma de 4 bits. logic [3:0] matriz [0:63]; Nessa construção temos 10 entradas de matrizes 4x8. Configurando assim uma matriz tridimensional. logic [3:0] [7:0] matriz [0:10];

Vetores de Bits O acesso aos elementos do vetor são demonstrados nos exemplos abaixo. string [4:0] vet = { “H”, ”P”, ”C”, ”I”, “n”}; vet[3] = vet[2]; logic [7:0] matriz [0:4]; matriz [0] = 8’b1010_0011; matriz [0] [7] = 1’b0; logic [3:0] [7:0] matriz [0:7]; matriz [0] = 8'b1010_0011; matriz [0][2][7] = 1'b1;

Operadores Os operadores de SystemVerilog são parecidos com os da linguagem C. Nesta apresentação é demonstrado apenas um subconjunto dos operadores da linguagem. Temos os seguintes operadores unários lógicos ~ : negação bit a bit ! : negação lógica + : positivo - : negativo

Operadores Operadores lógicos binários >> : deslocamento lógico para a direita. << : deslocamento para a esquerda. == : verifica a igualdade entre os operandos. != : verifica e diferença entre dois operandos. =< : menor ou igual >= : maior ou igual. > : maior. < : menor. | ou || : ou lógico. ^ : ou exclusivo. & ou && : and lógico. ? : operador condicional <condição> ? <expressão_verdadeira> :<expressão_falsa> ;

Operadores Operadores de atribuição = : atribuição simples += : atribuição com soma -= : atribuição com subtração *= : atribuição com multiplicação /= : atribuição com divisão %= : atribuição do resto

Operadores Operadores Aritméticos * : multiplicação. / : divisão. %: resto da divisão. + : soma. - : subtração. Observação: em operações lógicas o valor Z é tratado como X. Observação: em operações aritméticas a presença de um bit Z ou X torna todo o resultado X.

Operadores A tabela abaixo demonstra a ordem de precedência dos operadores.

Circuitos Síncronos e Assíncronos Com SystemVerilog podemos construir circuitos síncronos e assíncronos com o uso das construções always_ff e always_comb. always_ff é usado para criar um bloco síncrono de código. always_comb é usado para a descrição de lógica puramente combinacional.

Circuitos Síncronos e Assíncronos No caso da construção always_ff a definição de quais os valores irão sincronizar o bloco de código é feita através das palavras posedge e negedge. posedge indica que a partir da subida de um determinado sinal o bloco síncrono será ativado. negedge indica que a partir da descida de um determinado sinal o bloco síncrono será ativado.

Circuitos Síncronos e Assíncronos O exemplo abaixo demonstra a forma de declaração da construção always_ff always_ff @ ( posedge clk or posedge rst or negedge neg ) begin local para a descrição da lógica síncrona. end

Circuitos Síncronos e Assíncronos Para circuitos assíncronos é usado o bloco always_comb. Tal bloco será sensível à mudança de qualquer sinal nele contido. always_comb begin local para a descrição da lógica assíncrona. end

Decisões Em SystemVerilog temos basicmente duas formas de efetuar tomadas de decisões. Uma delas é feita através da construção if, else if e else. Outra forma é através do comando case. Diferentemente de VHDL, em que existem construções diferentes para circuitos síncronos e assíncronos, SystemVerilog apresenta essas duas formas de construir tomadas de decisões para ambos tipos de lógica.

Decisões Construção if else if ( condição ) begin //Local para a inserção de comandos. end else if ( condição ) else Os comandos if podem ser encadeados e anihados. Caso exista uma cláusula else e nenhum dos testes condicionais se confirme ela será executada.

Decisões case (X)‏ 2’b00: Y = A + B; 2’b01: Y = A – B; Construção Case Na construção case um teste de valor é executado e de acordo com o resultado um conjunto de operações é executado. case (X)‏ 2’b00: Y = A + B; 2’b01: Y = A – B; 2’b10: Y = A / B; default: Y = 0; endcase

Exemplos Multiplexador 4x1 module mux_4bits ( input [3:0] a, b, c, d, input [1:0] sel, output logic [3:0] y); always_comb case (sel)‏ 2’b00: y <= a; 2’b01: y <= b; 2’b10: y <= c; default: y <= d; endcase endmodule sel[1:0] a[3:0] y[3:0] b[3:0] c[3:0] d[3:0]

Exemplos Registrador de deslocamento do quatro bits. module Shift_reg4 ( input Data_in, clock, reset, output logic Data_out); logic [3:0] Data_reg; always_comb Data_out = Data_reg[0]; always_ff @ (negedge reset or posedge clock) begin if (reset == 0) Data_reg <= 0; else Data_reg <= {Data_in, Data_reg[3:1]}; end endmodule

Prática Construa o contador indicado abaixo O contador é trigado na subida do clock. O valor de Data_in deverá ser carragado quando load = 1. O contador conta quando counter_on = 1. Caso cont_up = 1 o contador é incrementado, Caso count_up = 0 o contador é decrementado. O reset deve ser assíncrono.

Trabalhando com Portas Lógicas Podemos também trabalhar com portas lógicas através de operadores definidos na linguagem. Onde os resultados fazem parte de uma atribuição permanente. logic C; always_comb C <= A | B; Essa construção tem o mesmo significado da descrição anterior.

Formas de Descrição de Circuitos Em SystemVerilog temos quatro formas diferentes de descrever circuitos. Forma Estrutural Fluxo de Dados Forma Comportamental RTL

Formas de Descrição de Circuitos Forma Estrutural Representa circuitos lógicos usando primitivas da linguagem. Exemplo not n1(sel_n, sel); and a1(sel_b, b, sel_b); and a2(sel_a, a, sel); or o1(out, sel_b, sel_a); sel b a out sel_n sel_b sel_a n1 a1 a2 o1

Formas de Descrição de Circuitos Forma Estrutural Os comandos são executados de forma concorrente. module or_nand_1 ( input enable, x1, x2, x3, x4, output logic y); logic w1, w2; or (w1, x1, x2); or (w2, x3, x4); nand (y, w1, w2, enable); endmodule

Formas de Descrição de Circuitos Fluxo de Dados Representa sinais de saída em função de sinais de entrada. always_comb out <= (sel & a) | (~sel & b); sel b a out sel_n sel_b sel_a

Formas de Descrição de Circuitos Fluxo de Dados Todas as atribuições permanentes executam concorrentemente. A ordem das atribuições no arquivo não importa. module or_nand_2 ( input enable, x1, x2, x3, x4, output logic y); always_comb y <= !(enable & (x1 | x2) & (x3 | x4)); endmodule

Formas de Descrição de Circuitos Forma Comportamental Representa o comportamento na forma de um algoritmo. module mux_2x1(input a, b, sel, output logic out); always_comb if (sel == 1) out = a; else out = b; endmodule a b sel out Black Box 2x1 MUX

Formas de Descrição de Circuitos Forma Comportamental As duas principais formas de descrição comportamental são initial e always_comb. initial: determina um bloco não sintetizável que será executado apenas uma vez no início da simulação. always_comb: determina um bloco sintetizável que ira executar de forma repetida.

Formas de Descrição de Circuitos Descrição Comportamental Exemplo: initial e always_comb … initial begin Soma = 0; Carry = 0; end … always_comb begin Soma = A ^ B; Carry = A & B; end

Formas de Descrição de Circuitos Decrição RTL (Register Transfer Level) Descreve o que acontece a cada transição ativa do sinal de relógio. Exemplo: always_ff @(posedge clock) begin pisca <= ~pisca; end

Mapeamento de Portas Após criar vários módulos componentes de um mesmo circuito, SystemVerilog nos permite ligá-los em um módulo maior de três formas diferentes. Conexão por Posição Conexão Explícita. Conexão por Casamento

Mapeamento de Portas Conexão por Posição As conexões são dadas através da posição das portas do módulo filho. A ordem de ligação das portas é significativa.

Mapeamento de Portas Conexão por Posição Exemplo: modulo_Pai module modulo_Filho( input sig_a, sig_b, output logic sig_c,sig_d); // descrição do module endmodule module modulo_Pai(...); logic [3:0] g; child_mod U1(g[3],g[1], g[0],g[2]);

Mapeamento de Portas Conexão Explícita Neste caso os sinais de ligação internos são explicitamente ligados às portas dos módulos componentes. A ordem de ligação das portas não é significativa.

Mapeamento de Portas Conexão Explícita modulo_Pai .sig_b(g[1]), ); module modulo_Filho( input sig_a, sig_b, output logic sig_c,sig_d); // descrição do module endmodule module modulo_Pai( ... ); logic [3:0] g; modulo_Filho U1( .sig_c(g[0]), .sig_b(g[1]), .sib_d(g[2]), .sig_a(g[3]) ); modulo_Pai

Mapeamento de Portas Conexão por Casamento Neste caso a conexão se dá de forma totalmente implícita. Sinais internos ao módulo pai são declarados com o mesmo nome das portas dos módulos filhos. A conexão se dá de forma automática. Esse tipo de conexão está muito sujeita a erros.

Mapeamento de Portas Conexão por casamento modulo_Pai a b c d module modulo_Filho( input a, b, output logic c,d); // descrição do module endmodule module modulo_Pai(...); logic a,b,c,d; child_mod U1( .* ); a b c d modulo_Filho a b c d modulo_Pai

Projetando um sistema digital Estrutura: controle + processamento entity sistema is port(...) end sistema; architecture estrut of sistema is signal ... component processamento component controle begin U0: controle portmap(...); U1: processamento portmap(...); end estrut; 4 2 Z N ALU L1 L3 L2 A B C F L3

Projeto: Implementação Multi-ciclo D M e m R a d W i t o g P C n I A L U O p S c B s u l [ 5 – ] 3 1 - 2 6 x J x t e n d 3 2 1 6 I s r u c i o [ 5 – ] g A L U l Z M m y a B S h i f t l e 2 P C M u x 1 R g s r W d a I n c o [ 5 – ] 4 1 o n [ 2 5 – ] 2 6 2 8 S h i f t l e f t 2 P C [ 3 1 - 2 8 ] A d d r e s s M u x M e m o r y 1 M e m D a t a A L U O u t W r i t e M d a t a 1 u 2 x 3

Compondo a Unidade de Processamento: ALU: Unidade Lógico-Aritmética A B S Z N O EQ LT GT ALU 32

Compondo a Unidade de Processamento.... Permitir que a saída da ALU seja deslocada Registrador de deslocamento Load e shift síncronos (descida) Clear assíncrono Deslocamentos (n vezes): Esquerda Entrada: 0 Direita (lógico e aritmético) Entrada: 0 ou MSB (Bit mais significativo) Rotação (direita ou esquerda): Entrada: LSB, MSB Saída: MSB, LSB (Bit Menos Significativo)

Compondo a Unidade de Execução... Entrada A Entrada B Z N f ALU O eq, gt, lt ck shift Reg. desl 3 shift descrição 3 n reset 000 nada 001 Load (no shift) Saída_execução 010 Desl. Esquerda n vezes Desl. Esquerda n vezes 011 Desl. Direita Lógico n vezes 100 Desl. Direita aritmético n vezes 101 Rotação direita n vezes 110 Rotação esquerda n vezes

Projetando a Unidade de Controle Máquinas de estados finitos FSM

Máquinas de estado - FSM Computador = Processamento + Controle Status Registradores Unidades Funcionais Combinacionais ( ALU) Barramento FSM gera sequencias de sinais de controle Instrui ao processamento o que fazer Controle Controle Estado Status e entradas Sinais de controle (saída) Processamento

Executando um programa Busca instrução Decodifica instrução Incrementa PC Busca operando Executa instrução Armazena resultado

Metodologia de projeto Seis passos 1. Entender especificação informal do problema 2. Obter especificação abstrata da FSM 3. Minimização de estados 4. Codificação de estados 5. Escolher tipos de FF para implementação do reg. de estados 6. Implementar a FSM

Exemplo: Máquina de vendas autom. Comportamento: entrega pacote de bombom a cada 15 centavos depositado slot para moedas não dá troco Passo 1: Entendendo o problema: 10¢ Diagrama de Blocos 5¢

Passo 2. Especificação abstrata Moedas típicas: Reset 3 moedas de R$0.10 1 moeda de R$0.05 e uma moeda de R$0.10 1 moeda de R$0.10 e uma moeda de R$0.05 2 moedas de R$0.10 2 moedas de R$0.05 e uma de R$0.10 S0 5¢ 10¢ S1 S2 10¢ 5¢ 10¢ 5¢ S3 S4 S5 S6 [open] [open] [open] 10¢ 5¢ Entradas: , , reset Saída: open 5¢ 10¢ S7 S8 [open] [open] Diagrama de estados:

Passo3: Minimização de Estados Present State 0¢ 5¢ 10¢ 15¢ Inputs Next Output Open X 1 D 1 X N 1 X State 0¢ 5¢ 10¢ X 5¢ 10¢ 15¢ X 10¢ 15¢ 15¢ X 15¢ reutilizar estados sempre que possível Tabela de estados simbólicos

Passo 4: Codificação de estados Next State D 1 0 1 1 0 X X 1 1 X X Present State Q N Inputs Output Open X

Passo 5. Escolha do FF para implementação D FF Q1 Q1 Q1 Q1 Q0 Q1 Q0 Q1 Q0 D N D N D N N N N D D D Q0 Q0 Q0 K-map for D1 K-map for D0 K-map for Open D1 = Q1 + D + Q0 N D0 = N Q0 + Q0 N + Q1 N + Q1 D OPEN = Q1 Q0 8 Gates

Passo 5. Escolha de FF para implementação J-K FF

Passo 6: Implementação: Q1 Q1 J1 = D + Q0 N K1 = 0 J0 = Q0 N + Q1 D K0 = Q1 N Q1 Q0 Q1 Q0 D N D N N N D D Q0 Q0 K-map for J1 K-map for K1 Q1 Q1 Q1 Q0 Q1 Q0 D N D N N Q J Q 1 Q D CLK \ Q 1 \ Q K Q R N N N D D OPEN Q 1 D Q Q0 Q0 J Q \ Q 1 CLK K-map for J0 K-map for K0 \ Q K Q R N 7 Gates \reset

Metodologia de projeto Seis passos 1. Entender especificação informal do problema 2. Obter especificação abstrata da FSM 3. Minimização de estados 4. Codificação de estados 5. Escolher tipos de FF para implementação do reg. de estados 6. Implementar a FSM

Máquinas Moore e Mealy Máquinas Mealy Saídas dependem dos estados e entradas Mudanças na entrada causa mudanças imediatas nas saídas Sinais assincronos Máquinas Moore Saídas como função somente do estado corrente Saídas são alteradas sincronamente com mudança de estados

Saídas associadas com transições Diagramas de Estados Moore Machine Mealy Machine Saídas associadas com transições Saídas associadas com estados

Representando uma FSM Notação algorítmica Linguagens de Descrição de Hardware: VHDL Verilog SystemC SystemVerilog

Máquinas de Estados Uma máquina de estados em SystemVerilog possui o seguinte formato. module nome_modulo ( input … , output … ); enum logic [tamanho-1: 0] {estado_0, estado_1, ... } estado; always_ff @ (negedge reset or posedge clk)‏ if (reset == 1'b0) state <= state_0; else case (estado)‏ estado_0: estado <= estado_1; estado_1: ... ... default: estado <= estado_0; endcase always_comb ... endmodule

Tipo Enumerados O programador SystemVerilog tem a possibilidade de criar novos tipos enumerados. Para tanto, deve usar o modelo abaixo. enum logic [tamanho-1: 0] {estado_0, estado_1, ... } estado; O comando acima define uma enumeração onde o estado poderá assumir qualquer valor entre os declarados entre chaves. Os parâmetros entre colchetes define número de bits necessários para representar o conjunto de estados.

Tipo Enumerados Outra forma de declarar tipos enumerados é mostrada abaixo. enum {estado_0,estado_1, ... } estados; Neste caso a definição é simplificada porém a ferramenta de síntese usa um tamanho padrão para representar o conjunto de estados. Possivelmente serão usados vetores de 32 bits para representar o conjunto de estados. Isso poderá gerar grande disperdício de componentes.

Tipo Enumerados Exemplos de uso: enum logic [1:0]{busca, decodifica, opera, reset} cont; cont <= busca; enum { verde, branco, grena } verdadeiro_tricolor; verdadeiro_tricolor <= verde;

Implementação do bloco que determinará o próximo estado da máquina

Implemntação do bloco que determinará a saída

Projeto: Arquitetura

Projeto: Implementação Multi-ciclo D M e m R a d W i t o g P C n I A L U O p S c B s u l [ 5 – ] 3 1 - 2 6 x J x t e n d 3 2 1 6 I s r u c i o [ 5 – ] g A L U l Z M m y a B S h i f t l e 2 P C M u x 1 R g s r W d a I n c o [ 5 – ] 4 1 o n [ 2 5 – ] 2 6 2 8 S h i f t l e f t 2 P C [ 3 1 - 2 8 ] A d d r e s s M u x M e m o r y 1 M e m D a t a A L U O u t W r i t e M d a t a 1 u 2 x 3

Diagrama de estados busca instrução s0 s1 s2 s3 s4 s5 ... Executa próxima instrução

The FPGA Design Process Design entry Test Development Synthesis Functional simulation Device mapping Timing simulation Device

O ambiente Quartus Processing Design entry Verification Programming Editor de texto Editor de waveform Compilador Database builder Logic synthesizer Editor gráfico Editor de símbolos Time extractor Partitioner Fitter Editor de floorplan Netlist writer Design doctor Assembler Message processor & Hierarchy display Simulador Editor waveform Device program. Timinig analyzer Verification Programming