A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Projetando Sistemas Digitais com SystemVerilog

Apresentações semelhantes


Apresentação em tema: "Projetando Sistemas Digitais com SystemVerilog"— Transcrição da apresentação:

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

2 Especificação Diagrama de Gajski

3 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

4 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

5 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.

6 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;

7 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.

8 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;

9 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

10 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 +

11 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]

12 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];

13 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;

14 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

15 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> ;

16 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

17 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.

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

19 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.

20 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.

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

22 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

23 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.

24 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.

25 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

26 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]

27 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]; (negedge reset or posedge clock) begin if (reset == 0) Data_reg <= 0; else Data_reg <= {Data_in, Data_reg[3:1]}; end endmodule

28 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.

29 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.

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

31 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

32 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

33 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

34 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

35 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

36 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.

37 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

38 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: clock) begin pisca <= ~pisca; end

39 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

40 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.

41 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]);

42 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.

43 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

44 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.

45 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

46 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

47 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

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

49 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)

50 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

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

52 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

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

54 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

55 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

56 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 10¢ S1 S2 10¢ 10¢ S3 S4 S5 S6 [open] [open] [open] 10¢ Entradas: , , reset Saída: open 10¢ S7 S8 [open] [open] Diagrama de estados:

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

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

59 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

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

61 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

62 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

63 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

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

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

66 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; (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

67 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.

68 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.

69 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;

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

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

72 Projeto: Arquitetura

73 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

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

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

76 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


Carregar ppt "Projetando Sistemas Digitais com SystemVerilog"

Apresentações semelhantes


Anúncios Google