usando o icarus verilog

Discussão em 'Dicas e tutoriais' iniciado por kodo no kami, 26 Abril 2018.

  1. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    228
    Sexo:
    Masculino
    Avaliações:
    +299 / -0
    bom galera nesse tutorial estaremos mexendo com o icarus verilog, sendo ele um sintetizador e simulador da linguagem verilog. A linguagem verilog é uma linguagem de descrição de hardware, por ela podemos descrever o funcionamento interno de um hardware especifico, podemos como exemplo recriar todo o funcionamento de uma arquitetura ou de um processador usando apenas uma determinada linguagem. Existem inclusive chips construídos especificamente para sintetizar internamente toda aquela logica usando esse tipo de linguagem como ocorre nos FPGA, onde podemos recriar uma arquitetura e o seu funcionamento em cima daquele chip e daquela linguagem (ainda não tive a oportunidade de mexer com FPGA T.T ). Bom galera para começar a gente baixa o icarus no site oficial, o icarus é opensource e existem para diversas plataformas como windows e linux (em boa parte das distros linux ele ja tem no repositorio da distro)

    site oficial

    depois de baixar e instalar via repositório ou via binário (dependendo temos que coloca nas variáveis de ambiente para conseguir executar ele em qualquer diretório), criamos um código basicão que ira exibir uma string na tela do simulador (não vou ensinar a linguagem verilog nesse tutorial apenas o uso do icarus), para isso criamos em um arquivo o nosso codigo verilog (normalmente com extensão .v)

    Código (Forge Crash):
    module kodo;
    initial begin
       $display("ola mundo by kodo");
    end
    endmodule
     
    o codigo a cima vai exibir na tela do simulador a mensagem "ola mundo by kodo", para a gente sintetizar e rodar no simulador usamos o comando iverilog, passamos como argumento o nosso código fonte (também podemos ter uma saída com um nome especifico usando o argumento -o seguido do nome do arquivo de saída antes do nome do código fonte)

    Código (Forge Crash):
    iverilog -o kodo.out kodo.v
    [​IMG]

    para simular ele usamos o comando vvp seguido do arquivo de saida

    Código (Forge Crash):
    vvp kodo.out
    [​IMG]

    outro exemplo seria sintetizar um clock, que ira exibir uma mensagem quando tiver uma borda de subida e outra mensagem quando for uma borda de descida

    Código (Forge Crash):
    module kodo;
    reg clock = 0;

    initial begin
    end

    always #100 clock = ~clock;

    always @(posedge clock)
    begin
       $display("borda de subida");
    end

    always @(negedge clock)
    begin
       $display("borda de descida");
    end
    endmodule
     
    [​IMG]

    no exemplo anterior ele ficara preso em um loop infinito, se a gente apertar control+c vai dar um break e depois ira cair em um terminal interativo, onde podemos digitar finish para sair, cont para continuar, step para rodar passo a passo, ls para listar os modulos, entre outros comandos

    [​IMG]

    podemos exportar um vcd e carregar em um programa para exibir toda essa mudança dos estados. Para fazer isso usamos as diretivas $dumpfile e $dumpvars, nesse meu exemplo a baixo sera armazenado no registrador k o estado invertido do clock

    Código (Forge Crash):
    module kodo;
    reg clock = 0, k = 0;

    initial begin
       $dumpfile("kodo.vcd");
       $dumpvars(0,clock);
       $dumpvars(1,k);
    end

    always #100 clock = ~clock;

    always @(clock)
    begin
       k = ~clock;
    end
    endmodule
    [​IMG]

    depois do dump bastaria carregar o nosso vcd em algum programa que interprete esse formato como o gtkwave, waview ou qualquer outro desse genero.

    [​IMG]

    bom galera esse é o básico do icarus ^^

    by kodo no kami
     
    • Gostei Gostei x 4
    • Top Top x 1
    • Amigável Amigável x 1
  2. Ketuo
    Offline

    Ketuo Membro Conhecido VIP Sabotador.com VIP Sabotador.com

    Afiliado:
    28 Fevereiro 2017
    Mensagens:
    701
    Sexo:
    Feminino
    Avaliações:
    +478 / -1
    Apelido no Minecraft:
    Kaljak_Sirah1
    Como sempre, ótimos tutoriais :grin:
     
    • Amigável Amigável x 1
  3. Homem Bom
    Offline

    Homem Bom Veterano Veterano VIP Sabotador.com VIP Sabotador.com Ex-Staff

    Afiliado:
    18 Dezembro 2012
    Mensagens:
    2,499
    Sexo:
    Masculino
    Avaliações:
    +1,666 / -0
    Apelido no Minecraft:
    arthur_goelzer
    Eu já deu uma lida básica sobre VHDL naquele livro do D'amore, pretendo investir em um FPGA assim que eu conseguir equipamentos de medição mais avançados :) Descrição de hardware é outro nível mano
     
    • Amigável Amigável x 1
  4. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    228
    Sexo:
    Masculino
    Avaliações:
    +299 / -0
    opa valeu ai mano, tamos ai \o

    vhdl tambem é bem massa mano, pelo que eu andei olhando tem a sintaxe bem mais estruturada que a do verilog, acho ela um pouco mais complicada tambem =/
     
    • Gostei Gostei x 1
  5. Agleylson
    Offline

    Agleylson Membro Ativo VIP Industrial

    Afiliado:
    6 Junho 2016
    Mensagens:
    74
    Sexo:
    Masculino
    Avaliações:
    +62 / -0
    Apelido no Minecraft:
    Agley1997
    apareceu né'-'
     
    • Amigável Amigável x 1
  6. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    228
    Sexo:
    Masculino
    Avaliações:
    +299 / -0
    tu que sumiu mano '-' , eu to sempre on ~ meu lema é, onde tiver uma garrafa de cachaça ou um codigo a ser compilado eu estarei la kkkk
     
    • Engraçado Engraçado x 1
  7. Agleylson
    Offline

    Agleylson Membro Ativo VIP Industrial

    Afiliado:
    6 Junho 2016
    Mensagens:
    74
    Sexo:
    Masculino
    Avaliações:
    +62 / -0
    Apelido no Minecraft:
    Agley1997
    tenho um codigo ali para você resolver
     

Compartilhe esta Página