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

Verilog 데이터 유형

Verilog 언어에서 데이터 유형의 주요 목적은 플립플롭의 비트와 같은 데이터 저장 요소와 논리 게이트와 순차 구조 사이를 연결하는 와이어와 같은 전송 요소를 나타내는 것입니다.

변수에는 어떤 값이 있습니까?

거의 모든 데이터 유형은 real을 제외하고 아래와 같이 4가지 다른 값 중 하나만 가질 수 있습니다. 및 event 데이터 유형.

0 논리 0 또는 거짓 조건을 나타냅니다.
1 논리 1 또는 참 조건을 나타냅니다.
x 알 수 없는 논리 값을 나타냅니다(0 또는 1일 수 있음)
z 고임피던스 상태를 나타냄

다음 이미지는 이러한 값이 타이밍 다이어그램과 시뮬레이션 파형에 어떻게 표시되는지 보여줍니다. 대부분의 시뮬레이터는 red X을 나타냅니다. 및 주황색 중간은 하이 임피던스 또는 Z를 나타냅니다. .

<노스크립트> verilog value system

verilog 값 설정은 무엇을 의미합니까?

Verilog는 기본적으로 플립플롭과 같은 하드웨어 요소와 NAND 및 NOR와 같은 조합 논리를 설명하는 데 사용되기 때문에 하드웨어에서 발견되는 가치 시스템을 모델링해야 합니다. 논리 1은 전압 공급 Vdd를 나타냅니다. 이는 제조 기술 노드에 따라 0.8V에서 3V 이상 사이의 범위일 수 있습니다. 논리 0은 접지를 나타냅니다. 따라서 0V의 값입니다.

X 또는 x 이는 값이 그 당시에 단순히 알려지지 않았음을 의미하며 0 또는 1일 수 있습니다. 이는 X 방식과 상당히 다릅니다. 부울 논리로 처리되며 여기서 "관심 없음"을 의미합니다.

불완전한 전기 회로와 마찬가지로 아무 것도 연결되지 않은 와이어는 해당 노드에서 높은 임피던스를 가지며 Z로 표시됩니다. 또는 z . Verilog에서도 연결되지 않은 와이어는 높은 임피던스를 발생시킵니다.

네트와 변수

네트변수 서로 다른 하드웨어 구조를 나타내고 값을 할당하고 유지하는 방식이 다른 두 가지 주요 데이터 유형 그룹입니다.

네트

네트 논리 게이트와 같은 하드웨어 엔티티 사이를 연결하는 데 사용되므로 자체적으로 값을 저장하지 않습니다. 아래 그림에서 net_11이라는 네트는 AND 게이트의 출력과 data_0이라는 플립플롭의 첫 번째 입력을 연결하는 데 사용됩니다. 비슷한 방식으로 AND 게이트의 두 입력은 net_45와 net_67에 연결됩니다.

<노스크립트> nets and variables

특성이 다른 다양한 유형의 네트가 있지만 가장 인기 있고 널리 사용되는 네트 디지털 디자인에서 유형은 wire입니다. . wire 요소를 연결하고 단일 게이트 또는 연속 할당에 의해 구동되는 네트를 연결하는 데 사용되는 Verilog 데이터 유형입니다. wire 브레드보드의 두 구성 요소를 연결하는 데 사용되는 전선과 유사합니다.

<노스크립트> breadboard-wires

다중 네트에 대한 요구 사항이 있는 경우 함께 묶어 단일 wire을 형성할 수 있습니다. . 아래 표시된 이미지에는 각 와이어에 4개의 개별 값을 보낼 수 있는 4비트 와이어가 있습니다. 너비가 1보다 큰 개체는 다음 기사에서 볼 수 있는 벡터라고 합니다.

  
  
wire [3:0] 	n0; 		// 4-bit wire -> this is a vector

  
<노스크립트> wire type net

아래 코드와 같이 네트, 매개변수 또는 변수에 의해 이미 선언된 이름을 다시 선언하는 것은 불법입니다.

  
  
module design;
	wire    abc;
	wire 	a;
	wire 	b;
	wire 	c;
	
	wire    abc;   // Error: Identifier "abc" previously declared
	
	assign abc = a & b | c;
endmodule

  

변수

<노스크립트> reg type variable

반면에 변수는 데이터 저장 요소의 추상화이며 값을 보유할 수 있습니다. 플립플롭은 저장 요소의 좋은 예입니다.

Verilog 데이터 유형 reg 할당 간에 값을 보유할 수 있으므로 하드웨어 레지스터를 모델링하는 데 사용할 수 있습니다. reg 조합 논리를 나타내는 데에도 사용할 수 있기 때문에 항상 플립플롭을 나타낼 필요는 없습니다.

왼쪽에 표시된 이미지에는 1비트를 저장할 수 있는 플립플롭이 있고 오른쪽에 4비트를 저장할 수 있는 플립플롭이 있습니다.

<노스크립트> flip-flops with different widths

기타 데이터 유형

정수

integer 32비트 너비의 범용 변수로 하드웨어 모델링 및 정수 값 저장 시 다른 용도로 사용할 수 있습니다.

  
  
    integer     count;              // Count is an integer value > 0

  

시간

time 변수는 부호 없는 64비트 너비이며 디버깅 목적으로 시뮬레이션 시간 수량을 저장하는 데 사용할 수 있습니다. realtime 변수는 단순히 시간을 부동 소수점 수량으로 저장합니다.

  
  
    time        end_time;           // end_time can be stored a time value like 50ns
    realtime    rtime;              // rtime = 40.25ps 

  

진짜

real 변수는 부동 소수점 값을 저장할 수 있으며 integer과 같은 방식으로 할당할 수 있습니다. 및 reg .

  
  
    real        float;              // float = 12.344  - can store floating numbers

  

  
  
module testbench;
  integer  	int_a; 				// Integer variable
  real 		real_b; 			// Real variable
  time 		time_c; 			// Time variable
  
  initial begin
    int_a 	= 32'hcafe_1234; 	// Assign an integer value
    real_b 	= 0.1234567; 		// Assign a floating point value

    #20; 						// Advance simulation time by 20 units
    time_c 	= $time; 			// Assign current simulation time
    
    // Now print all variables using $display system task
    $display ("int_a 	= 0x%0h", int_a);
    $display ("real_b 	= %0.5f", real_b);
    $display ("time_c 	= %0t", time_c);
  end
endmodule

  
시뮬레이션 로그
ncsim> run
int_a 	= 0xcafe1234
real_b 	= 0.12346
time_c 	= 20
ncsim: *W,RNQUIE: Simulation is complete.

Verilog 문자열

문자열은 reg에 저장됩니다. , 및 reg의 너비 변수는 문자열을 담을 만큼 충분히 커야 합니다. 문자열의 각 문자는 ASCII 값을 나타내며 1바이트가 필요합니다. 변수의 크기가 문자열보다 작으면 Verilog는 문자열의 가장 왼쪽 비트를 자릅니다. 변수의 크기가 문자열보다 크면 Verilog는 문자열 왼쪽에 0을 추가합니다.

  
  
// "Hello World" requires 11 bytes

reg [8*11:1] str = "Hello World";         // Variable can store 11 bytes, str = "Hello World"
reg [8*5:1]  str = "Hello World";         // Variable stores only 5 bytes (rest is truncated), str = "World"
reg [8*20:1] str = "Hello World";         // Variable can store 20 bytes (rest is padded with zeros), str = "         Hello World"

  

다음은 위에 제공된 세 가지 변수를 시뮬레이션할 수 있는 방법을 보여주는 전체 예입니다.

  
  
module testbench;
  reg [8*11:1] str1;
  reg [8*5:1]  str2;
  reg [8*20:1] str3;
  
  initial begin
    str1 = "Hello World";
    str2 = "Hello World";
    str3 = "Hello World";
    
    $display ("str1 = %s", str1);
    $display ("str2 = %s", str2);
    $display ("str3 = %s", str3);
  end
endmodule

  

str1은 "Hello World" 문자열의 11바이트를 모두 저장할 수 있는 올바른 크기이므로 전체 문자열이 인쇄됩니다. 그러나 str2는 5바이트만 저장할 수 있으므로 상위 6바이트는 잘리고 "World"만 저장하게 됩니다. 세 번째 변수 str3은 11바이트보다 크고 왼쪽에 빈 공간을 채우므로 저장된 값은 " Hello World"가 됩니다.

시뮬레이션 로그
ncsim> run
str1 = Hello World
str2 = World
str3 =          Hello World
ncsim: *W,RNQUIE: Simulation is complete.


verilog

  1. C# 변수 및 (기본) 데이터 형식
  2. C++ 데이터 유형
  3. C 데이터 유형
  4. 파이썬 데이터 유형
  5. Java 데이터 유형(기본)
  6. 5가지 유형의 데이터 센터 [예제 포함]
  7. 2021년의 8가지 클라우드 컴퓨팅 유형
  8. 예제를 포함한 8가지 데이터 침해 유형
  9. Verilog 튜토리얼
  10. Verilog 연결