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

Verilog 할당

네트와 변수에 값을 배치하는 것을 할당이라고 합니다. 세 가지 기본 형식이 있습니다.

법적 LHS 값

할당에는 두 부분이 있습니다. 오른쪽(RHS)과 왼쪽(LHS) 사이에 등호(=) 또는 보다 작음 기호(<=)가 있습니다.

과제 유형 왼쪽
절차적
  • 변수(벡터/스칼라)
  • 벡터 reg, 정수 또는 시간 변수의 비트 선택 또는 부분 선택
  • 기억 단어
  • 위 항목의 연결
연속
  • 순(벡터/스칼라)
  • 벡터 네트의 비트 선택 또는 부분 선택
  • 비트 선택과 부분 선택의 연결
절차적 연속
  • 순 또는 변수(벡터/스칼라)
  • 벡터 네트의 비트 선택 또는 부분 선택

RHS는 최종 값으로 평가되는 모든 표현식을 포함할 수 있으며 LHS는 RHS의 값이 할당되는 네트 또는 변수를 나타냅니다.

  
  
module tb;
	reg clk;
	wire a, b, c, d, e, f;
	reg  z, y;
	
	// clk is on the LHS and the not of clk forms RHS
	always #10 clk = ~clk;
	
	// y is the LHS and the constant 1 is RHS
	assign y = 1; 
	
	// f is the LHS, and the expression of a,b,d,e forms the RHS
	assign f = (a | b) ^ (d & e);

	always @ (posedge clk) begin
		// z is the LHS, and the expression of a,b,c,d forms the RHS
		z <= a + b + c + d;
	end
	
	initial begin
		// Variable names on the left form LHS while 0 is RHS
		a <= 0; b <= 0; c <= 0; d <= 0; e <= 0;
		clk <= 0;
	end
endmodule

  

절차적 할당

절차 할당은 항상, 초기, 작업 및 함수와 같은 절차 내에서 발생하며 변수에 값을 배치하는 데 사용됩니다. 변수는 동일한 변수에 대한 다음 할당까지 값을 유지합니다.

시뮬레이션이 시뮬레이션 시간 중 특정 시점에서 이 명령문을 실행할 때 값이 변수에 배치됩니다. 이것은 if-else-if, case 문 및 반복 메커니즘과 같은 제어 흐름 문을 사용하여 원하는 방식으로 제어 및 수정할 수 있습니다.

  
  
	reg [7:0]  data;
	integer    count;
	real       period;
	
	initial begin
		data = 8'h3e;
		period = 4.23;
		count = 0;
	end
	
	always @ (posedge clk) 
		count++;

  

변수 선언 할당

초기 값은 다음과 같이 선언 시 변수에 배치할 수 있습니다. 할당에는 기간이 없으며 동일한 변수에 대한 다음 할당이 발생할 때까지 값을 유지합니다. 배열에 대한 변수 선언 할당은 허용되지 않습니다.

  
  
	module my_block;
		reg [31:0] data = 32'hdead_cafe;
	
		initial begin
			#20  data = 32'h1234_5678;    // data will have dead_cafe from time 0 to time 20
			                              // At time 20, data will get 12345678
		end
	endmodule

  
  
  
	reg [3:0] a = 4'b4;
	
	// is equivalent to 
	
	reg [3:0] a;
	initial a = 4'b4;

  

아래와 같이 초기 블록에서 선언 시 변수가 초기화되고 초기 블록에서 시간 0인 경우 평가 순서가 보장되지 않으므로 8'h05 또는 8'hee를 가질 수 있습니다.

  
  
	module my_block;
		reg [7:0]  addr = 8'h05;
		
		initial 
			addr = 8'hee;
	endmodule

  
  
  
	reg [3:0] array [3:0] = 0;           // illegal
	integer i = 0, j;                    // declares two integers i,j and i is assigned 0
	real r2 = 4.5, r3 = 8;               // declares two real numbers r2,r3 and are assigned 4.5, 8 resp.
	time startTime = 40;                 // declares time variable with initial value 40

  

절차적 블록 및 할당은 이후 섹션에서 더 자세히 다룰 것입니다.

지속적 할당

단계별 시뮬레이션 예제를 보려면 여기를 클릭하십시오!

이것은 스칼라 및 벡터 네트에 값을 할당하는 데 사용되며 RHS가 변경될 때마다 발생합니다. 게이트 상호 연결을 지정하지 않고 조합 논리를 모델링하는 방법을 제공하고 논리 표현식으로 네트를 쉽게 구동할 수 있습니다.

  
  
    // Example model of an AND gate
	wire  a, b, c;
	
	assign a = b & c;

  

b 또는 c가 값을 변경할 때마다 RHS의 전체 표현식이 평가되고 a 새 값으로 업데이트됩니다.

순 선언 할당

이를 통해 net을 선언하는 동일한 명령문에 연속 할당을 배치할 수 있습니다. net은 한 번만 선언할 수 있으므로 net에 대해 하나의 선언 할당만 가능합니다.

  
  
	wire  penable = 1;

  

절차적 연속 할당

이는 네트 또는 변수에 표현식을 지속적으로 할당할 수 있도록 하는 절차적 명령문으로 두 가지 유형이 있습니다.

할당 해제 할당

이것은 변수에 대한 모든 절차적 할당을 무시하고 deassign과 동일한 신호를 사용하여 비활성화됩니다. . 변수의 값은 절차적 또는 절차적 연속 할당을 통해 변수가 새 값을 얻을 때까지 동일하게 유지됩니다. assign의 LHS 문은 비트 선택, 부분 선택 또는 배열 참조가 될 수 없지만 변수 또는 변수의 연결일 수 있습니다.

  
  
	reg q;
	
	initial begin
		assign q = 0;
		#10 deassign q;
	end

  

강제 해제

이는 assign - deassign과 유사합니다. 문에 적용할 수 있지만 네트 및 변수에도 적용할 수 있습니다. LHS는 네트의 비트 선택, 네트의 부분 선택, 변수 또는 네트일 수 있지만 배열에 대한 참조 및 변수의 비트/부분 선택은 될 수 없습니다. force 명령문은 release을 사용하여 해제될 때까지 변수에 대한 다른 모든 할당을 무시합니다. 키워드.

  
  
	reg o, a, b;
	
	initial begin
		force o = a & b;
		...
		release o;
	end

  

verilog

  1. Verilog 튜토리얼
  2. Verilog 연결
  3. Verilog 기능
  4. Verilog 작업
  5. Verilog 클록 생성기
  6. Verilog 수학 함수
  7. Verilog 시간 형식
  8. Verilog 타임스케일 범위
  9. Verilog 파일 IO 작업
  10. 베릴로그 헬로월드