산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

Verilog 스칼라 및 벡터

Verilog는 비트 그룹뿐만 아니라 개별 비트도 표현해야 합니다. 예를 들어, 단일 비트 순차 요소는 플립플롭입니다. 그러나 16비트 순차 요소는 16비트를 저장할 수 있는 레지스터입니다. 이를 위해 Verilog에는 scalar가 있습니다. 및 벡터 그물과 변수.

스칼라 및 벡터

네트 또는 reg 범위 지정이 없는 선언은 1비트 너비로 간주되며 스칼라입니다. . 범위가 지정되면 net 또는 reg 벡터로 알려진 다중 비트 엔티티가 됩니다. .

<노스크립트> scalar and vector in verilog
  
  
	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

  

범위는 벡터의 개별 비트를 처리할 수 있는 기능을 제공합니다. 벡터의 최상위 비트는 범위에서 왼쪽 값으로 지정되어야 하고 벡터의 최하위 비트는 오른쪽에 지정되어야 합니다.

  
  
	wire  [msb:lsb]   name;
	integer           my_msb;
	
	wire [15:0]        priority;      // msb = 15, lsb = 0
	wire [my_msb: 2]   prior;         // illegal

  

위의 예에서 우선순위라고 하는 16비트 폭의 네트가 생성됩니다. msblsb 상수 표현식이어야 하며 변수로 대체될 수 없습니다. 그러나 양수, 음수 또는 0과 같은 모든 정수 값이 될 수 있습니다. 및 lsb 값은 msb 값보다 크거나 같거나 작을 수 있습니다.

비트 선택

벡터 변수의 모든 비트는 아래와 같이 개별적으로 선택하고 새 값을 할당할 수 있습니다. 이것을 비트 선택이라고 합니다. . 비트 선택이 범위를 벗어나거나 비트 선택이 x인 경우 또는 z , 반환된 값은 x가 됩니다. .

<노스크립트> bit-select in verilog
  
  
	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

  

일부 선택

<노스크립트> part-select in verilog

연속 비트 범위를 선택할 수 있으며 부분 선택이라고 합니다. . 부분 선택에는 두 가지 유형이 있습니다. 하나는 일정한 부분 선택을 사용하는 것이고 다른 하나는 색인화된 부분 선택을 사용하는 것입니다.

  
  
	reg [31:0]    addr;
	
	addr [23:16] = 8'h23;         // bits 23 to 16 will be replaced by the new value 'h23 -> constant part-select

  

가변 부분 선택을 사용하면 루프에서 벡터의 부분을 선택하는 데 효과적으로 사용할 수 있습니다. 시작 비트는 다양할 수 있지만 너비는 일정해야 합니다.

[<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

  
시뮬레이션 로그
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.

일반적인 오류

  
  
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. Verilog 튜토리얼
  2. Verilog 연결
  3. Verilog 할당
  4. Verilog 차단 및 비 차단
  5. Verilog 기능
  6. Verilog 작업
  7. Verilog Inter 및 Intra 할당 지연
  8. Verilog 클록 생성기
  9. Verilog 수학 함수
  10. Verilog 시간 형식