Projetando Sistemas Digitais com SystemVerilog Edna Barros Grupo de Engenharia da Computação Centro de Informática -UFPE Cin - CENTRO DE INFORMÁTICA UFPE GRECO Especificação Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 3 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 4 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. Cin - CENTRO DE INFORMÁTICA UFPE GRECO 5 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; Cin - CENTRO DE INFORMÁTICA UFPE GRECO 6 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; Cin - CENTRO DE INFORMÁTICA UFPE GRECO O tipo bit é usado basicamente na definição de vetores e pode assumir apenas valores 0 e 1. 7 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; Cin - CENTRO DE INFORMÁTICA UFPE GRECO 8 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 9 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 + Cin - CENTRO DE INFORMÁTICA UFPE GRECO 10 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] Cin - CENTRO DE INFORMÁTICA UFPE GRECO 11 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]; Cin - CENTRO DE INFORMÁTICA UFPE GRECO • Nessa construção temos 10 entradas de matrizes 4x8. Configurando assim uma matriz tridimensional. 12 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; Cin - CENTRO DE INFORMÁTICA UFPE GRECO 13 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 14 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO <condição> ? <expressão_verdadeira> :<expressão_falsa> ; 15 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 16 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. Cin - CENTRO DE INFORMÁTICA UFPE GRECO 17 Circuitos Síncronos e Assíncronos Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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. 19 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. Cin - CENTRO DE INFORMÁTICA UFPE GRECO 20 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 21 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 22 Decisões Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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. 23 Decisões Cin - CENTRO DE INFORMÁTICA UFPE GRECO Construção if else if ( condição ) begin //Local para a inserção de comandos. end else if ( condição ) begin if ( condição ) begin //Local para a inserção de comandos. end else begin //Local para a inserção de comandos. end end else begin //Local para a inserção de comandos. end Os comandos if podem ser encadeados e anihados. Caso exista uma cláusula else e nenhum dos testes condicionais se confirme ela será executada. 24 Decisões 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 25 Exemplos Multiplexador 4x1 module mux_4bits ( input [3:0] a, b, c, a[3:0] b[3:0] d, input [1:0] sel, c[3:0] output logic [3:0] y);d[3:0] Cin - CENTRO DE INFORMÁTICA UFPE GRECO always_comb case (sel) 2’b00: y <= a; 2’b01: y <= b; 2’b10: y <= c; default: y <= d; endcase endmodule y[3:0] sel[1:0] 26 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 27 Prática Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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. 28 Formas de Descrição de Circuitos Em SystemVerilog temos quatro diferentes de descrever circuitos. • • • • Cin - CENTRO DE INFORMÁTICA UFPE GRECO Forma Estrutural Fluxo de Dados Forma Comportamental RTL formas Formas de Descrição de Circuitos Forma Estrutural • Representa circuitos lógicos usando primitivas da linguagem. – Exemplo sel 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); Cin - CENTRO DE INFORMÁTICA UFPE GRECO b n1 a1 sel_b sel_n a o1 a2 sel_a out Formas de Descrição de Circuitos Forma Estrutural • Os comandos concorrente. são 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO executados de forma 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); b sel sel_b sel_n out sel_a Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO a b Black Box 2x1 MUX sel out 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. Cin - CENTRO DE INFORMÁTICA UFPE GRECO Formas de Descrição de Circuitos Descrição Comportamental • Exemplo: initial e always_comb … initial begin Soma = 0; Carry = 0; end … Cin - CENTRO DE INFORMÁTICA UFPE GRECO … 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: Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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. Cin - CENTRO DE INFORMÁTICA UFPE GRECO Mapeamento de Portas Conexão por Posição • Exemplo: 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]); Cin - CENTRO DE INFORMÁTICA UFPE GRECO endmodule modulo_Pai 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. Cin - CENTRO DE INFORMÁTICA UFPE GRECO Mapeamento de Portas Conexão Explícita 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]) ); endmodule Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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. Cin - CENTRO DE INFORMÁTICA UFPE GRECO Mapeamento de Portas Conexão por casamento 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( .* ); endmodule Cin - CENTRO DE INFORMÁTICA UFPE GRECO modulo_Pai a a b c b c d modulo_Filho d Projetando um sistema digital Estrutura: controle + processamento A entity sistema is port(...) end sistema; B 4 4 L2 L1 L1 L2 Z F ALU 2 N L3 L3 4 C Cin - CENTRO DE INFORMÁTICA UFPE GRECO architecture estrut of sistema is signal ... component processamento port(...) component controle port(...) begin U0: controle portmap(...); U1: processamento portmap(...); end estrut; Projeto: Implementação Multi-ciclo PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead ALUSrcA Control MemWrite RegWrite MemtoReg Op RegDst IRWrite [5– 0] 26 Ins truc tion [25– 0] Shift left 2 Ins truction [31-26] PC 0 M u x 1 Address Mem ory M em D ata Write data Instruction [25– 21] Read register 1 Instruction [20– 16] Read Read register 2 data 1 Registers W rite Read register data 2 Instruction [15– 0] Instruction register Instruction [15– 0] M emory data regis ter 0 M Instruction u x [15– 11] 1 0 M u x 1 16 S ign ex tend 32 GRECO S hift left 2 Zero A LU 0 4 W rite data Instruction [5– 0] Cin - CENTRO DE INFORMÁTICA UFPE B Jump address [31-0] PC [31-28] 0 M u x 1 A 28 1 M u 2 x 3 ALU control ALU res ult ALUO ut 0 M 1 u x 2 Compondo a Unidade de Processamento: ALU: Unidade Lógico-Aritmética A B 32 32 ALU 32 f 000 001 010 011 100 101 110 111 Cin - CENTRO DE INFORMÁTICA UFPE GRECO operação S=A S = A+B S = A-B S = A and B S = A xor B S = not A S = inc A S = A comp B S descrição GT N O EQ LT Z flags afetados Z,N Soma Z,N,O Subtração Z,N,O And lógico Z Ou exclusivo Z Complemento Za 1 Incremento Z, N, O Comparação EQ,GT,LT 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) Cin - CENTRO DE INFORMÁTICA UFPE GRECO Compondo a Unidade de Execução... Entrada A f Entrada B ALU eq, gt, lt shift ck Reg. desl shift descrição 000 nada 001 Load (no shift) 010 Desl. Desl.Esquerda Esquerdannvezes vezes 011 Desl. Direita Lógico n vezes 100 Desl. Direita aritmético n vezes 101 Rotação direita n vezes Cin - CENTRO DE INFORMÁTICA UFPE GRECO 110 Rotação esquerda n vezes 3 3 n reset Saída_execução Projetando a Unidade de Controle Máquinas de estados finitos FSM Cin - CENTRO DE INFORMÁTICA UFPE GRECO Máquinas de estado - FSM Computador = Processamento + Controle Status Registradores Unidades Funcionais Combinacionais ( ALU) Barramento Controle FSM gera sequencias de sinais de controle Instrui ao processamento o que fazer Controle Estado Sinais de controle (saída) Status e entradas Cin - CENTRO DE INFORMÁTICA UFPE GRECO Processamento Executando um programa Busca instrução Decodifica instrução Incrementa PC Busca operando Executa instrução Armazena resultado Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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: N 10¢ Diagrama de Blocos Coin Sensor D 5¢ Reset Clk Cin - CENTRO DE INFORMÁTICA UFPE GRECO Vending Machine FSM Open Gum Release Mechanism 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 5¢ 2 moedas de R$0.10 2 moedas de R$0.05 e uma de R$0.10 S1 5¢ 10¢ Entradas: 5¢,10¢ , reset Saída: open Cin - CENTRO DE INFORMÁTICA UFPE GRECO 10¢ S2 5¢ 10¢ S4 S5 S6 [open] [open] [open] S3 5¢ S0 10¢ S7 S8 [open] [open] Diagrama de estados: Passo3: Minimização de Estados Present State Reset 0¢ 0¢ N 5¢ D 5¢ N 10¢ D N, D 10¢ 15¢ [o p en] 15¢ reutilizar estados sempre que possível Cin - CENTRO DE INFORMÁTICA UFPE GRECO Inputs D N 0 0 1 1 0 0 1 1 0 0 1 1 X 0 1 0 1 0 1 0 1 0 1 0 1 X Next State Output Open 0¢ 5¢ 10¢ X 5¢ 10¢ 15¢ X 10¢ 15¢ 15¢ X 15¢ 0 0 0 X 0 0 0 X 0 0 0 X 1 Tabela de estados simbólicos Passo 4: Codificação de estados Present State Q1 Q0 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 0 0 0 1 1 0 1 1 Inputs D N 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Next State D1 D0 Output Open 0 0 0 1 1 0 X X 0 1 1 0 1 1 X X 1 0 1 1 1 1 X X 1 1 1 1 1 1 X X 0 0 0 X 0 0 0 X 0 0 0 X 1 1 1 X Passo 5. Escolha do FF para implementação D FF Q1 Q1 Q0 DN Q1 Q1 Q0 DN N D Q1 D Q0 N N D Q0 K-map for D0 D1 D Q CLK R Q1 N D Q0 K-map for D1 Q1 Q0 DN Q0 K-map for Open Q1 Q \ Q1 D1 = Q1 + D + Q0 N \reset N \ Q0 Q0 \N Q1 N Cin - CENTRO DE INFORMÁTICA UFPE GRECO Q1 D OPEN D0 D Q CLK R \reset Q0 D0 = N Q0 + Q0 N + Q1 N + Q1 D OPEN = Q1 Q0 Q \ Q0 8 Gates Passo 5. Escolha de FF para implementação J-K FF Present State Q1 Q0 Cin - CENTRO DE INFORMÁTICA UFPE GRECO 0 0 0 1 1 0 1 1 Inputs D N 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Next State D1 D0 0 0 1 X 0 1 1 X 1 1 1 X 1 1 1 X 0 1 0 X 1 0 1 X 0 1 1 X 1 1 1 X J1 0 0 1 X 0 1 1 X X X X X X X X X K1 J0 K 0 X X X X X X X X 0 0 0 X 0 0 0 X 0 1 0 X X X X X 0 1 1 X X X X X X X X X 0 1 0 X X X X X 0 0 0 X Passo 6: Implementação: Q1 Q0 DN Q1 Q1 Q0 DN Q1 J1 = D + Q0 N K1 = 0 N D N J0 = Q0 N + Q1 D D Q0 K-map for J1 Q1 Q1 Q0 K0 = Q1 N Q0 K-map for K1 Q1 Q1 Q0 DN N Q0 DN J D N D N CLK \ Q0 K R Q Q1 Q \ Q1 N D OPEN Q1 Q0 K-map for J0 Q0 K-map for K0 D CLK \ Q1 J K N Cin - CENTRO DE INFORMÁTICA UFPE GRECO \reset R Q Q0 Q \ Q0 7 Gates 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 Cin - CENTRO DE INFORMÁTICA UFPE GRECO Máquinas Moore e Mealy Xi Inputs Zk Outputs Com binational Logic for Outputs and Next State Máquinas Mealy Saídas dependem dos estados e entradas State Re gis ter Clock State Fe edback Sinais assincronos State Regis ter Xi Inputs Zk Outputs Clock Cin - CENTRO DE INFORMÁTICA UFPE GRECO state feedback Máquinas Moore Comb. Logic for Outputs Combina tional Logic for Nex t State (Flip-flop Inputs) Mudanças na entrada causa mudanças imediatas nas saídas Saídas como função somente do estado corrente Saídas são alteradas sincronamente com mudança de estados Diagramas de Estados Mealy Machine N D + Res et (N D + Rese t)/0 Reset/0 Moore Machine Reset 0¢ 0¢ [0] Reset Reset/0 N/0 5¢ 5¢ N D/ 0 N D ND [0] D/0 N N/0 10¢ 10¢ D D/1 N D/ 0 N+D/1 [0] N+D ND 15¢ 15¢ [1] Reset Reset/1 Saídas associadas com transições Cin - CENTRO DE INFORMÁTICA UFPE GRECO Saídas associadas com estados Representando uma FSM Notação algorítmica Linguagens de Descrição de Hardware: • • • • Cin - CENTRO DE INFORMÁTICA UFPE GRECO 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 ... Cin - CENTRO DE INFORMÁTICA UFPE 66 GRECO 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. Cin - CENTRO DE INFORMÁTICA UFPE 67 GRECO 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. Cin - CENTRO DE INFORMÁTICA UFPE 68 GRECO 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; Cin - CENTRO DE INFORMÁTICA UFPE 69 GRECO Implementação do bloco que determinará o próximo estado da máquina Cin - CENTRO DE INFORMÁTICA UFPE GRECO Implemntação do bloco que determinará a saída Cin - CENTRO DE INFORMÁTICA UFPE GRECO Projeto: Arquitetura GRECO F1 Instrução Opcode Funct Descrição Nop lw reg, desl(reg_base) sw reg, desl(reg_base) lb reg, desl(reg_base) 000000 100011 No operation (todos os outros campos são zero) Carrega palavra localizada a partir do endereço dado por (reg_base+desl) no registrador reg 00000 F2 101011 Escreve registrador reg a partir do endereço de memória dado por (reg_base+end) 100000 Carrega byte localizado no endereço dado por (reg_base+desl) no byte menos significativo do registrador reg. O sinal deve ser expandido. Carrega meia palavra localizada a partir do endereço ((reg_base) + desl) na parte menos significativa do registrador reg. O sinal deve ser extendido. Escreve byte menos significativo do registrador reg no endereço de memória dado por (reg_base+desl). Somente um byte é escrito na memória Escreve meia palavra menos significativa do registrador reg a partir do endereço de memória dado por (reg_base+desl). Somente dois bytes são escritos na memória Carrega valor constante na parte mais significativa do registrador reg = constante, os demais bits são iguais a zero. Carrega reg_hi para rd Carrega reg_lo para rd Regi. <- Regj. + Regk (com overflow) Regi = regj + cte (com overflow) Regi. <- Regj. – Regk (com overflow) Regi. <- Regj. + Regk (sem overflow) Regi = regj + cte Regi. <- Regj. – Regk Regi. <- Regj. And Regk Regi = regj and cte Regi. <- Regj. xor Regk Regi = regj xor cte Reg_hi e Reg_lo = rs * rt Reg_hi = rs/rt (quociente) e Reg_lo= resto da divisão Desloca registrador regs para dir. n vezes (aritmético), armazena valor deslocado em registrador regd. Desloca registrador regs para esq. n vezes (lógico), armazena valor deslocado em registrador regd. Desloca registrador regs para esquerda n vezes, armazena valor deslocado em registrador regd. PC=PC + (desl*4) se regi = regj PC = PC + (desl*4) se regi <> regj Regi =1 se regj < regk senão regi=0 Regi =1 se regj < cte senão regi=0 Desvio para end PC = (regi) R31 = PC; PC = end Retorno de Exceção Para a execução do programa lh reg, desl(reg_base) 100001 Cin - CENTRO DE INFORMÁTICA UFPE 6 sb reg, desl(reg_base) sh reg, desl(reg_base) lui reg, constante 101000 mfhi rd mflo rd add regi, regj,regk addi regi, regj, cte sub regi, regj, regk addu regi, regj,regk addiu regi, regj, cte subu regi, regj, regk and regi, regj,regk andi regi, regj, cte xor regi, regj, regk xori regi, regj, cte mult rs, rt div rs, rt sra regd, regs, n 000000 000000 000000 001000 000000 000000 001001 000000 000000 001101 000000 001110 000000 000000 000000 010000 010010 100000 srl regd, regs, n 000000 000010 sll regd, regs, n 000000 000000 beq regi, regj, desl bne regi, regj, end slt regi, regj, regk slti regi, regj, cte j end jr regi jal end rte Break 000100 000101 000000 001010 000010 000000 000011 010000 000000 101001 001111 100010 100001 100011 100100 100110 011000 011010 000011 101010 001000 010000 001101 F3 Opcode Opcode 6 Opcode 6 5 rs1 rb 5 5 5 5 6 Rs2 rd count funct rd 5 deslocamento 16 endereço 26 Projeto: Implementação Multi-ciclo PCWriteCond PCSource PCWrite Outputs ALUOp IorD ALUSrcB MemRead ALUSrcA Control MemWrite RegWrite MemtoReg Op RegDst IRWrite [5– 0] 26 Ins truc tion [25– 0] Shift left 2 Ins truction [31-26] PC 0 M u x 1 Address Mem ory M em D ata Write data Instruction [25– 21] Read register 1 Instruction [20– 16] Read Read register 2 data 1 Registers W rite Read register data 2 Instruction [15– 0] Instruction register Instruction [15– 0] M emory data regis ter 0 M Instruction u x [15– 11] 1 0 M u x 1 16 S ign ex tend 32 GRECO S hift left 2 Zero A LU 0 4 W rite data Instruction [5– 0] Cin - CENTRO DE INFORMÁTICA UFPE B Jump address [31-0] PC [31-28] 0 M u x 1 A 28 1 M u 2 x 3 ALU control ALU res ult ALUO ut 0 M 1 u x 2 Diagrama de estados s0 s1 s2 s3 busca instrução s4 ... s5 s6 próxima instrução Cin - CENTRO DE INFORMÁTICA UFPE GRECO Executa instrução The FPGA Design Process Design entry Synthesis Device mapping Device Cin - CENTRO DE INFORMÁTICA UFPE GRECO Test Development Functional simulation Timing simulation O ambiente Quartus Processing Design entry Editor de texto Editor de waveform Compilador Database builder Logic synthesizer Editor gráfico Editor de símbolos Time extractor Partitioner Fitter Netlist writer Design doctor Assembler Editor de floorplan Simulador Editor waveform Message processor & Hierarchy display Device program. Timinig analyzer Cin - CENTRO DE INFORMÁTICA UFPE GRECO Verification Programming