a linguagem verilog ii

Upload: matheus-telles-barreto

Post on 14-Oct-2015

115 views

Category:

Documents


0 download

TRANSCRIPT

  • DESCRIO VERILOG NVEL RTL

    ASD 2010 - Prof. Marcos Morais

  • DESCREVENDO HARDWARE COM SOFTWARE

    Hardware is called hardware because its hard

    The Art of Electronics, Horowitz and Hill, 1980

  • NVEL RTL

    A descrio em RTL (Register TransferLevel, nvel de transferncia de registradores) indica como e quando o contedo de registradores so transformados e armazenados em outros registradores (ou os mesmos de origem).

    Utilizado para descrever lgica seqencial e lgica combinacional

    Na lgica combinacional os registradores so temporrios e desaparecem no resultado final

  • Sentenas procedurais e lgica

    LGICA COMBINACIONAL EM RTL

  • REVISANDO DESCRIO COM ASSIGN Descreva o circuito abaixo em verilog

    usando assign:

    module mux2to1 (f, a, b, sel);output f;input a, b, sel;

    assign f = s ? a : b;

    endmodule

  • BLOCOS ALWAYS

    Para sntese, descrevem partes de hardware que existem, esto disponveis:

    module mux2to1 (f, a, b, sel);output f;input a, b, sel;reg f;always @(a or b or sel)

    f= s ? a : b;endmodule

    Lista de sensibilidadecontm sinais cuja mudana faz o bloco executar

  • SENTENAS PROCEDURAIS

    Podemos utilizar sentenas procedurais com estilo de linguagem de alto nvel (HLL) para implementar lgica. Considere o exemplo:

    Descreva esta funo em palavras (comandos). Dica: if

  • IF...

    if (sel == 1) f = a;

    elsef = b;

  • MULTIPLEXADOR COM ALWAYSmodule mux(f, a, b, sel); output f; input a, b, sel;reg f;always @(a or b or sel)

    if (sel) f = a;else f = b;

    endmodule

    Mdulos podem conter umou mais blocos always

    Lista de sensibilidadecontm sinais cuja mudana faz o bloco executar

  • module mux(f, a, b, sel); output f; input a, b, sel;reg f;always @(a or b or sel)

    if (sel) f = a;else f = b;

    endmodule

    Um reg se comporta como memria: mantm o seu valor at que seja imperativamente atribudo outro valor

    O corpo de um bloco always contm cdigo imperativo tradicional

    MULTIPLEXADOR COM ALWAYS

  • DOIS TIPOS PRINCIPAIS DE DADOS: NETS

    Os nets (fiao) representam as conexes entre as coisas

    No retm os seus valores Obtm os seus valores de uma sada como

    uma porta ou outro mdulo No podem ser atribudos em um bloco initial

    ou always

  • DOIS TIPOS PRINCIPAIS DE DADOS: REGS

    regs representam armazenamento de dados Comportam-se como uma memria Retm o seu valor at que seja

    explicitamente atribudo em um bloco always ou initial

    Nunca ligado a nada Pode ser usado para modelar latches, flip-

    flops, etc., mas no correspondem exatamente a eles

  • NETS E REGISTRADORES

    Fios e registradores podem ser bits, vetores ou arrays

    wire a; // fio simplestri [15:0] dbus; // barramento tristate de 16 bitsreg [-1:4] vec; // registrador de 6 bitsinteger imem[0:1023]; // array de 1024 inteirosreg [31:0] dcache[0:63]; // Uma memria de 32 bits

  • ATRIBUIO PROCEDURAL

    No interior de um bloco initial* ou alwayssum = a + b + cin; Tal como C: O lado direito avaliado e atribudo

    ao lado esquerdo antes que a prxima sentena execute

    A sentena do lado direito pode conter fios (wires) e/ou regs

    A do lado esquerdo tem que ser um reg (apenas primitivas ou atribuies contnuas

    podem atribuir valores a fios)

  • BLOCOS ALWAYS

    always @(reg_lista_sensibilidade_1, reg_lista_sensibilidade_1, etc)begin

    /* Este bloco de codigo executado sempre que qualquer das variaveis reg_lista_sensibilidade muda de valor */

    end

    O cdigo entre o begin e o end do blocoalways executado sequencialmentesempre que qualquer das variveis regmencionadas nos parnteses, conhecidacomo lista de sensibilidade, mudar seusvalores.

  • PROJETO ASSNCRONO

    \* Ao usar projeto assincrono simplesmente listamos os regs na lista de sensibilidade *\

    always @ (reg_1,reg_2,reg_3)begin

    \\ codigo vai aquiend

    Usado para definir lgica combinacional e latches, como vimos.

  • PROJETO SNCRONO

    \* Listamos os nomes dos reg e tambm especificamos uma borda do clock nas implementacoes sincronas. Por exemplo, para executar na borda de subida: */

    always @ (posedge clk)

    \\ Executar na borda de descida do clock:

    always @ (negedge clk)

  • VARIVEIS REG

    Apenas variveis reg podem ser manipuladas em blocos always. Isto vale para entradas, sadas e fios.

    Entradas, sadas e fios so nets. Estes no armazenam valores. Para armazenar valores preciso defini-los novamente como reg.

    output saida_1;reg saida_1;

  • CASE

    always@(variavel_reg)case(variavel_reg)

    valor_reg_1: acao_1;valor_reg_2: acao_2;\\ etc

    endcase

    case(variavel_reg)valor_variavel_reg_1:

    beginacao_1;acao_2;\\ etc

    endvalor_variavel_reg_2:

    beginacao_1;acao_2;\\ etc

    endendcase

  • EXEMPLO: DECODIFICADOR 7 SEGMENTOSmodule decod7seg (entrada, saida);input [3:0] entrada;output [0:6] saida;reg [0:6] saida;

    always @ (entrada)begin

    case (entrada)4d0: saida= 7h7E;4d1: saida= 7h30;

    .

    .default: saida= 7b0000001; // -

    end

  • IF...ELSE

    always@(reg_lista_sensibilidade_1)if condicao_1 acao_1;else if condicao_2 acao_2;else acao_3;

    end

    if (condicao)begin

    reg_1=1'b1;reg_2=1'b1;reg_3=1'b1;

    end

  • EXEMPLOS COM SENTENAS IMPERATIVAS

    if (select == 1) y = a;else y = b;case (op)2b00: y = a + b;2b01: y = a - b;2b10: y = a b;default: y = hxxxx;

    endcase

  • OPERADORES

    Operadores aritmticos

    + Adio

    - Subtrao

    * Multiplicao

    / Diviso

    % Mdulo

    Operadores booleanos&& AND lgico

    ! Not lgico

    || OR lgico

    & AND bit-a-bit

    ~ NOT bit-a-bit

    | OR bit-a-bit

    ^ XOR bit-a-bit

    & (unrio) Reduo AND

    ~(unrio) Reduo NOT

    |(unrio) Reduo OR

    ^(unrio) Reduo XOR

  • OPERADORES DE REDUO

    reg_1 =|input_1; /* Are SOME of our bits 1? Eg |0110=1 */reg_2 =&input_2; /* Are ALL of our bits 1? Eg &1111=1 */reg_3 =~|input_3; /* Are ALL bits equal to 0? Eg ~|0000=1 */reg_4 =~&|input_4; /* Are SOME bits equal to zero? Eg

    ~&0001=1 */

  • Operadores relacionais

    < Menor que

    > Maior que

    = Maior que ou igual a

    == Igual a

    != No igual a

  • COM OU SEM SINAL

    Verilog trata os valores numricos como strings de bits sem sinal. O tratamento do sinal deve ser feito com lgica auxiliar.

  • EXEMPLO: CONTADOR

    module counter(direction,reset,clock,count_value);input direction, reset,clock;output [7:0] count_value;reg [7:0] count_value;

    always @(posedge clock)begin

    count_value

  • LAOS

    Lao for: sintaxe idntica a Cfor (atribuio inicial; expresso; atrib. passo)Sentenas

    O nmero de vezes que o for executa tem que ser fixo para poder ser sintetizado.

  • module sum(enable,op1);input enable;output [15:0] op1;reg [15:0] op1;reg [15:0] storage;reg [7:0] i;

    always @(posedge enable)begin

    for (i = 8'b00; i < 8'd255; i = i+8'd1)begin

    storage=storage+i;end

    op1=storage;end

    endmodule

    EXEMPLO: SOMA OS NMEROS DE 0 A 254

  • INFERNCIA DE LATCHES

    Ocorre quando no so explicitados todos os valores que podem ser atribudos a uma varivel.

    Neste caso, o valor de a retido. a s muda quando b colocado em 1. Conseqentemente temos um latch.

    // Bad code infers a latch!always @ (b or c)

    beginif (b) begin

    a = c;end

    end

  • EVITANDO LATCHES

    Este cdigo gera o resultado correto e demonstra um mecanismo de evitar latches.

    a recebe sempre zero e somente se b e cforem ambos 1 que a recebe 1.

    Outra opo usar um else.

    // Good code! Gives intended behaviour.always @ (b or c)

    begina = 0;if (b) begin

    a = c;end

    end

  • MODELAGEM COMPORTAMENTAL

  • USANDO VERILOG PARA SIMULAO

    O testbench gera estmulos e verifica a resposta

    Acoplado ao modelo do sistema O par executa simultaneamente

    Modelo do sistema

    Estmulo

    Resposta

    Testbench

    Verifica o resultado

  • SIMULAO DE EVENTOS DISCRETOS

    Idia bsica: somente trabalhe quando algo muda

    Centrado sobre uma fila de eventos que contm eventos marcados com o tempo de simulao em que devem ser executados

    Paradigma bsico da simulao Executa todo evento para o tempo simulado atual Fazendo isto muda o estado do sistema e pode

    escalonar eventos no futuro Quando no h eventos restantes no tempo atual,

    avana o tempo simulado para o tempo de evento mais cedo da fila

  • MODELAGEM COMPORTAMENTAL

    Maneira muito mais fcil de escrever testbenches Tambm pode ser usado para fazer modelos

    abstratos dos circuitos Mais fcil de escrever Simula mais rpido

    Mais flexvel Prov sequenciamento Verilog obteve sucesso em parte porque permitiu que

    o modelo e o testbench fossem descritos conjuntamente

    Aula posterior especfica sobre simulao com verilog e verificao funcional

  • DOIS COMPONENTES PRINCIPAIS DE VERILOG: COMPORTAMENTAL

    Processos concorrentes, disparados por eventos (comportamental)

    Blocos initial e always Cdigo imperativo que pode realizar tarefas

    padro de manipulao de dados (atribuio, if-then, case)

    Processos ou esto executando (no caso eles podem produzir atrasos) ou esto esperando por um evento de disparo

  • BLOCOS INITIAL E ALWAYS

    initialbegin

    // sentenas// imperativas

    end

    Roda quando a simulao comea

    Termina quando o controle atinge o end

    Bom para prover estmulos

    alwaysbegin

    // sentenas// imperativas

    end

    Roda quando a simulao comea

    Restarta quando o controle atinge o end

    Bom para modelagem ou para especificar hardware

  • ALWAYS E INITIAL

    Executam at encontrar um atrasoinitial begin#10 a = 1; b = 0;#10 a = 0; b = 1;

    end Ou uma espera por um eventoalways @(posedge clk) q = d;always beginwait(i);a = 0;wait(~i);a = 1;

    end

  • OPERADORES DE ATRIBUIO

    Atribuio bloqueante: = Atribuio no-bloqueante:

  • module assignment_test();reg [0:4] a,b,c,e;reg [0:7] d;initial

    begina=4'd2;$display ("A is %d", a);$display ("B is %d", b);$display ("D is %d", d);$display ("\n\n");b=4'd3;$display ("A is %d", a);$display ("B is %d", b);$display ("D is %d", d);$display ("\n\n");d=(a+b);$display ("A is %d", a);$display ("B is %d", b);$display ("D is %d", d);$display ("\n\n");

    endendmodule

  • RESULTADO

    Sada do compilador(atribuio bloqueante)

    Sada do compilador(atribuio no-bloqueante)

    A is 2B is xD is x

    A is 2B is 3D is x

    A is 2B is 3D is 5

    A is xB is xD is x

    A is xB is xD is x

    A is xB is xD is x

    Atribuio bloqueante: execuo seqencial Atribuio no-bloqueante: simultnea apenas no

    final

  • COMO USAR

    Basicamente:Use no-bloqueante em lgica sequencialUse bloqueante em lgica combinacional

  • SYSTEMVERILOG

  • SYSTEMVERILOG

    Em verilog wire utilizado para conexes input e output so wires reg utilizado para descrever memria Um reg pode desaparecer Um reg no um registrador!

    Systemverilog simplifica tudo utilizando a palavra chave logic

    logic pode ser utilizado no lugar de um wire, no lugar de um reg e no lugar do par wire,reg.

    System verilog possui tipos de dados com sinal

  • NA PRTICA

    Cdigos fonte verilog tem a extenso .v Cdigos em systemverilog tem a extenso

    .sv

  • O QUE VIMOS HOJE

    Modelagem de circuitos lgicos no nvel RTL usando descries procedurais

    O uso do reg como indicador de variveis O bloco always como indicador de hardware Conceitos de simulao com verilog

  • PRXIMA AULA

    CIRCUITOS SEQUENCIAIS E CONTROLE

    Descrio verilog nvel rtlDescrevendo hardware com softwareNvel RTLLgica combinacional em rtlRevisando descrio com assignBlocos alwaysSentenas proceduraisIF...Multiplexador com AlwaysMultiplexador com AlwaysDois tipos principais de dados: NetsDois tipos principais de dados: RegsNets e RegistradoresAtribuio ProceduralBlocos alwaysProjeto assncronoProjeto sncronoVariveis regCaseExemplo: decodificador 7 segmentosif...elseExemplos com sentenas imperativasOperadoresOperadores de reduoSlide Number 25Com ou sem sinalExemplo: contadorLaosExemplo: soma os nmeros de 0 a 254Inferncia de latchesEvitando latchesModelagem COMPORTAMENTALUsando Verilog para SimulaoSimulao de Eventos DiscretosModelagem ComportamentalDois componentes principais de Verilog: ComportamentalBlocos Initial e AlwaysAlways e InitialOperadores de atribuioSlide Number 40ResultadoComo usarsystemverilogSystemverilogNa prticaO que vimos hojeCircuitos seqUenciais e controle