Skip to content

Latest commit

 

History

History

verilog

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Verilog


Consulte os arquivos no diretório: examples.


Sumário

  • Hello World
  • Portas vetoriais e escalares
  • Drivers
  • Always
  • Assignment
  • Funções
  • Códigos
  • Noções Gerais
  • Links e Referências

Hello World


/*
 * Simple hello world example.
 * Iesus Hominum Salvator.
 */

module main;

initial
    begin
        $display("Hello, World!");
        $finish;
    end

endmodule

Compilar:

iverilog -o hello hello.v

Simulação:

vvp hello

Portas vetoriais e escalares


inout read_enable; // port named read_enable is bi-directional
inout [7:0] address; //port "address" is bidirectional (little-endian)

Drivers


É por onde os dados podem passar. Só existem dois tipos: fios (wire), e registradores (register).


wire and_gate_output; // "and_gate_output" is a wire that only outputs

reg d_flip_flop_output; // "d_flip_flop_output" is a register; it stores and outputs a value

reg [7:0] address_bus; // "address_bus" is a little-endian 8-bit register

Always


always  @ (a or b or sel)
begin
  y = 0;
  if (sel == 0) begin
    y = a;
  end else begin
    y = b;
  end
end

Assignment


 =   blocking assignment (executa o código sequencialmente)
<=   nonblocking assignment (executa em paralelo)

Atrasa sua execução em 5 unidades de tempo:

always begin
   #5 clk = ~clk;
end
// Tri-state buffer.
assign out = (enable) ? data : 1'bz;

// Simple buffer.
assign out = data;

Funções


function parity;
input [31:0] data;
integer i;
begin
  parity = 0;
  for (i= 0; i < 32; i = i + 1) begin
    parity = parity ^ data[i];
  end
end
endfunction

Noções Gerais


Números:

Sintaxe: <tamanho>'<raiz><valor>;

Exemplo: 4'b0000;

Quando <tamanho> é menor que <valor>, os bits mais à esquerda de <valor> são truncados. Quando <tamanho> for maior que <valor>, os bits mais à esquerda serão preenchidos, com base no valor do bit mais à esquerda em <valor>.

  • '0' ou '1' mais à esquerda são preenchidos com '0'.
  • 'Z' mais à esquerda são preenchidos com 'Z'.
  • 'X' mais à esquerda são preenchidos com 'X'.

Nota: X significa desconhecido e Z significa alta impedância, 1 para Logic High ou 1 e 0 para Logic Low ou 0.


Códigos


Diretório: examples.


  • hello-world - interação com o simulador.

  • module-1, counter-1 - exemplificando a estrutura geral, envolvendo os wires, regs, estruturas gerais do código, comportamentos, código do dispositivo e código de simulação.

  • basic-1 - utilização de transistores N-MOS e P-MOS (nível simplificado).

  • basic-2 - utilização do Power Supply e Ground.

  • basic-3 - uso dos transistores NMOS, PMOS, especificando detalhes de suas portas, e construindo com eles uma NOT-GATE (CMOS Inverter).


Links e Referências


https://www.asic-world.com/verilog

https://www.chipverify.com/verilog/verilog-tutorial

http:https://iverilog.icarus.com/

https://hardwarebee.com/

https://www.asic-world.com/verilog/gate1.html

http:https://www.cs.nthu.edu.tw/~tcwang/4120-spring04/lec5.pdf

https://web.stanford.edu/class/ee183/handouts_win2003/VerilogQuickRef.pdf

https://sutherland-hdl.com/pdfs/verilog_2001_ref_guide.pdf

http:https://www.referencedesigner.com/tutorials/verilog/verilog_14.php