Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Verilog escalar e vetorial


Verilog precisa representar bits individuais, bem como grupos de bits. Por exemplo, um elemento sequencial de bit único é um flip-flop. No entanto, um elemento sequencial de 16 bits é um registrador que pode conter 16 bits. Para isso, a Verilog tem escalar e vetor redes e variáveis.

Escalar e Vetorial


Uma rede ou reg declaração sem uma especificação de intervalo é considerada de 1 bit e é uma escalar . Se um intervalo for especificado, então o net ou reg torna-se uma entidade multibit conhecida como um vetor .

  
  
	wire 	    o_nor;           // single bit scalar net
	wire [7:0]  o_flop;          // 8-bit vector net
	reg         parity;          // single bit scalar variable
	reg  [31:0] addr;            // 32 bit vector variable to store address

  

O intervalo dá a capacidade de endereçar bits individuais em um vetor. O bit mais significativo do vetor deve ser especificado como o valor à esquerda no intervalo, enquanto o bit menos significativo do vetor deve ser especificado à direita.
  
  
	wire  [msb:lsb]   name;
	integer           my_msb;
	
	wire [15:0]        priority;      // msb = 15, lsb = 0
	wire [my_msb: 2]   prior;         // illegal

  

Uma rede de 16 bits chamada prioridade será criada no exemplo acima. Observe que o msb e lsb deve ser uma expressão constante e não pode ser substituída por uma variável. Mas eles podem ser qualquer valor inteiro - positivo, negativo ou zero; e o lsb valor pode ser maior, igual ou menor que o valor msb.

Seleções de bits


Qualquer bit em uma variável vetorizada pode ser selecionado individualmente e atribuído um novo valor conforme mostrado abaixo. Isso é chamado de seleção de bits . Se a seleção de bits estiver fora dos limites ou a seleção de bits for x ou z , o valor retornado será x .
  
  
	reg [7:0]      addr;         // 8-bit reg variable [7, 6, 5, 4, 3, 2, 1, 0]
	
	addr [0] = 1;                // assign 1 to bit 0 of addr
	addr [3] = 0;                // assign 0 to bit 3 of addr
	addr [8] = 1;                // illegal : bit8  does not exist in addr

  

Seleções parciais


Um intervalo de bits contíguos pode ser selecionado e é conhecido como seleção de parte . Existem dois tipos de seleção de peça, uma com seleção de peça constante e outra com seleção de peça indexada.
  
  
	reg [31:0]    addr;
	
	addr [23:16] = 8'h23;         // bits 23 to 16 will be replaced by the new value 'h23 -> constant part-select

  

Ter uma variável part-select permite que ela seja usada efetivamente em loops para selecionar partes do vetor. Embora o bit inicial possa ser variado, a largura deve ser constante.
[<start_bit> +: <width>]     // part-select increments from start-bit
[<start_bit> -: <width>]     // part-select decrements from start-bit
  
  
module des;
  reg [31:0]  data;
  int         i;
  
  initial begin
    data = 32'hFACE_CAFE;
    for (i = 0; i < 4; i++) begin
      $display ("data[8*%0d +: 8] = 0x%0h", i, data[8*i +: 8]);
    end
    
    $display ("data[7:0]   = 0x%0h", data[7:0]);
    $display ("data[15:8]  = 0x%0h", data[15:8]);
    $display ("data[23:16] = 0x%0h", data[23:16]);
    $display ("data[31:24] = 0x%0h", data[31:24]);
  end
  
endmodule

  
Registro de simulação
ncsim> run
data[8*0 +: 8] = 0xfe              // ~ data [8*0+8 : 8*0]
data[8*1 +: 8] = 0xca              // ~ data [8*1+8 : 8*1]
data[8*2 +: 8] = 0xce              // ~ data [8*2+8 : 8*2]
data[8*3 +: 8] = 0xfa              // ~ data [8*3+8 : 8*3]

data[7:0]   = 0xfe
data[15:8]  = 0xca
data[23:16] = 0xce
data[31:24] = 0xfa
ncsim: *W,RNQUIE: Simulation is complete.

Erros comuns

  
  
module tb;
   reg [15:0]    data;
   
   initial begin
      $display ("data[0:9] = 0x%0h", data[0:9]);   // Error : Reversed part-select index expression ordering
   end
endmodule

  

Verilog

  1. Tutorial Verilog
  2. Concatenação Verilog
  3. Atribuições Verilog
  4. Verilog Blocking &Non-Blocking
  5. Funções Verilog
  6. Tarefa Verilog
  7. Atraso de Atribuição Inter e Intra Verilog
  8. Gerador de Relógio Verilog
  9. Funções matemáticas Verilog
  10. Formato de hora Verilog