1 / 81

Projetando Sistemas Digitais com SystemVerilog

Projetando Sistemas Digitais com SystemVerilog. Edna Barros Grupo de Engenharia da Computação Centro de Informática -UFPE. P. C. W. r. i. t. e. C. o. n. d. P. C. S. o. u. r. c. e. P. C. W. r. i. t. e. A. L. U. O. p. O. u. t. p. u. t. s. I. o. r. D. A.

carlow
Download Presentation

Projetando Sistemas Digitais com SystemVerilog

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Especificação • Diagrama de Gajski

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

  5. Definindo Entidades • Definição das portas do circuito • A definição dos terminais de um módulo é feita da seguinte forma. moduleteste ( input logicA,B, input C, output logicS1, output logicS2 ); ..... endmodule

  6. Definindo Entidades • Exemplo: no código abaixo está descrito um somador de 1 bit modulesomador1Bit ( inputA, B, output Soma, Carry); always_comb Soma <= A ^ B; //A xor B always_combCarry <= A & B; //A and B endmodule

  7. b sel_b sel a1 n1 sel_n out o1 a a2 sel_a Formas de Descrição de Circuitos • Forma Estrutural • Representacircuitoslógicosusandoprimitivasdalinguagem. • Exemplo Module X (input a, b, sel output out); notn1(sel_n, sel); and a1(sel_b, b, sel_b); anda2(sel_a, a, sel); oro1(out, sel_b, sel_a); endmodule

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

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

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

  11. Mapeamento de Portas modulo_Pai modulemodulo_Filho( inputsig_a, sig_b, output logic sig_c,sig_d);// descrição do module endmodule modulemodulo_Pai(...); logic[3:0] g; child_modU1(g[3],g[1], g[0],g[2]); endmodule • Conexão por Posição • Exemplo:

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

  13. Mapeamento de Portas modulemodulo_Filho(inputsig_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 modulo_Pai Conexão Explícita

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

  15. modulo_Pai a b c d a b c dmodulo_Filho Mapeamento de Portas Conexão por casamento modulemodulo_Filho( inputa, b, output logicc,d);// descrição do module endmodule modulemodulo_Pai(...); logica,b,c,d; child_mod U1( .* ); endmodule

  16. b sel_b sel sel_n out sel_a a Formas de Descrição de Circuitos • Fluxo de Dados • Representasinais de saídaemfunção de sinais de entrada. always_combout <= (sel & a) | (~sel & b);

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

  18. a Black Box 2x1 MUX out b sel Formas de Descrição de Circuitos modulemux_2x1(inputa, b, sel, output logic out); always_comb if(sel == 1) out = a; else out = b; endmodule • Forma Comportamental • Representa o comportamentona forma de um algoritmo.

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

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

  21. Formas de Descrição de Circuitos • Decrição RTL(Register Transfer Level) • Descreve o queacontece a cadatransiçãoativa do sinal de relógio. • Exemplo: always_ff @(posedge clock) begin pisca <= ~pisca; end

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

  23. 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. intunsignedvalor; intsignedvalor;

  24. 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 unsignedvalor; • O tipo bit é usado basicamente na definição de vetores e pode assumir apenas valores 0 e 1.

  25. 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; shortrealvalor;

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

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

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

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

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

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

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

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

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

  35. Circuitos Sequenciais e Combinacionais Com SystemVerilog podemos construir circuitos sequenciais e combinacionais 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.

  36. Circuitos Sequenciais e Combinacionais • 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.

  37. Circuitos Sequenciais e Combinacionais • O exemplo abaixo demonstra a forma de declaração da construção always_ff always_ff @ ( posedgeclkorposedgerstornegedgeneg ) begin local para a descrição da lógica síncrona. end

  38. Circuitos Sequenciais e Combinacionais • Para circuitos combinacionais é 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

  39. Decisões Em SystemVerilog temos basicamente 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.

  40. Decisões Os comandos if podem ser encadeados e anihados. Caso exista uma cláusula else e nenhum dos testes condicionais se confirme ela será executada. • Construção if else if ( condição ) begin //Local para a inserção de comandos. end elseif( 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

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

  42. a[3:0] b[3:0] y[3:0] c[3:0] d[3:0] sel[1:0] Exemplos modulemux_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 Multiplexador 4x1

  43. Exemplos module Shift_reg4 ( input Data_in, clock, reset, output logic Data_out); logic [3:0] Data_reg; always_combData_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 Registrador de deslocamento do quatro bits.

  44. Prática O contador é trigado na subida do clock. O valor de Data_in deverá ser carregado 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. Construa o contador indicado abaixo

  45. Prática module up_down_counter ( input clk, reset, load, count_up, counter_on, input [2:0] Data_in, output logic [2:0] Count); always_ff@ (posedgereset or posedgeclk)‏begin if (reset) Count = 0; else if (load) Count <= Data_in; else if (counter_on) begin if (count_up) Count <= Count +1; else Count <= Count –1; end end endmodule Solução

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

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

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

  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 B Entrada A 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 Desl. Esquerda n vezes Desl. Esquerda n vezes 010 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

More Related