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

게이트 레벨 모델링

대부분의 디지털 디자인은 RTL과 같은 더 높은 수준의 추상화에서 수행되지만 과 같은 조합 요소를 사용하여 더 낮은 수준에서 더 작은 결정론적 회로를 구축하는 것이 직관적이 되는 경우가 있습니다. 및 또는 . 이 수준에서 수행되는 모델링을 일반적으로 게이트 수준 모델링이라고 합니다. 게이트를 포함하므로 하드웨어 회로도와 Verilog 코드 간에 일대일 관계가 있습니다.

Verilog는 primitives로 알려진 몇 가지 기본 논리 게이트를 지원합니다. 이미 사전 정의되어 있으므로 모듈처럼 인스턴스화할 수 있습니다.

및/또는/Xor 게이트

이러한 프리미티브는 AND를 구현합니다. 및 또는 많은 스칼라 입력을 받고 단일 스칼라 출력을 제공하는 게이트. 이러한 프리미티브에 대한 인수 목록의 첫 번째 터미널은 입력이 변경될 때마다 업데이트되는 출력입니다.

  
  
module gates (	input a, b, 
				output c, d, e);

	and (c, a, b); 	// c is the output, a and b are inputs
	or  (d, a, b);	// d is the output, a and b are inputs
	xor (e, a, b); 	// e is the output, a and b are inputs
endmodule

  
  
  
module tb;
	reg a, b;
	wire c, d, e;
	integer i;
	
	gates u0 ( .a(a), .b(b), .c(c), .d(d), .e(e));
	
	initial begin
		{a, b} = 0;
		
      $monitor ("[T=%0t a=%0b b=%0b c(and)=%0b d(or)=%0b e(xor)=%0b", $time, a, b, c, d, e);
		
		for (i = 0; i < 10; i = i+1) begin
			#1 	a <= $random;
				b <= $random;
		end
	end
endmodule

  
시뮬레이션 로그
ncsim> run
[T=0 a=0 b=0 c(and)=0 d(or)=0 e(xor)=0
[T=1 a=0 b=1 c(and)=0 d(or)=1 e(xor)=1
[T=2 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0
[T=4 a=1 b=0 c(and)=0 d(or)=1 e(xor)=1
[T=5 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0
[T=6 a=0 b=1 c(and)=0 d(or)=1 e(xor)=1
[T=7 a=1 b=0 c(and)=0 d(or)=1 e(xor)=1
[T=10 a=1 b=1 c(and)=1 d(or)=1 e(xor)=0
ncsim: *W,RNQUIE: Simulation is complete.

Nand/Nor/Xnor 게이트

위의 모든 게이트의 역함수는 nand 형식으로도 사용할 수 있습니다. , norxnor . primitives 역 버전으로 전환됩니다.

  
  
module gates (	input a, b, 
				output c, d, e);

	// Use nand, nor, xnor instead of and, or and xor
	// in this example
	nand (c, a, b); 	// c is the output, a and b are inputs
	nor  (d, a, b);		// d is the output, a and b are inputs
	xnor (e, a, b); 	// e is the output, a and b are inputs
endmodule

  
  
  
module tb;
	reg a, b;
	wire c, d, e;
	integer i;
	
	gates u0 ( .a(a), .b(b), .c(c), .d(d), .e(e));
	
	initial begin
		{a, b} = 0;
		
      $monitor ("[T=%0t a=%0b b=%0b c(nand)=%0b d(nor)=%0b e(xnor)=%0b", $time, a, b, c, d, e);
		
		for (i = 0; i < 10; i = i+1) begin
			#1 	a <= $random;
				b <= $random;
		end
	end
endmodule

  
시뮬레이션 로그
ncsim> run
[T=0 a=0 b=0 c(nand)=1 d(nor)=1 e(xnor)=1
[T=1 a=0 b=1 c(nand)=1 d(nor)=0 e(xnor)=0
[T=2 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1
[T=4 a=1 b=0 c(nand)=1 d(nor)=0 e(xnor)=0
[T=5 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1
[T=6 a=0 b=1 c(nand)=1 d(nor)=0 e(xnor)=0
[T=7 a=1 b=0 c(nand)=1 d(nor)=0 e(xnor)=0
[T=10 a=1 b=1 c(nand)=0 d(nor)=0 e(xnor)=1
ncsim: *W,RNQUIE: Simulation is complete.

이 게이트는 두 개 이상의 입력을 가질 수 있습니다.

  
  
module gates (	input a, b, c, d, 
				output x, y, z);

  and (x, a, b, c, d); 	// x is the output, a, b, c, d are inputs
  or  (y, a, b, c, d);	// y is the output, a, b, c, d are inputs
  nor (z, a, b, c, d); 	// z is the output, a, b, c, d are inputs
endmodule

  
  
  
module tb;
	reg a, b, c, d;
	wire x, y, z;
	integer i;
	
  gates u0 ( .a(a), .b(b), .c(c), .d(d), .x(x), .y(y), .z(z));
	
	initial begin
      {a, b, c, d} = 0;
		
      $monitor ("[T=%0t a=%0b b=%0b c=%0b d=%0b x=%0b y=%0b x=%0b", $time, a, b, c, d, x, y, z);
		
		for (i = 0; i < 10; i = i+1) begin
			#1 	a <= $random;
				b <= $random;
          		c <= $random;
          		d <= $random;

		end
	end
endmodule

  
시뮬레이션 로그
ncsim> run
[T=0 a=0 b=0 c=0 d=0 x=0 y=0 x=1
[T=1 a=0 b=1 c=1 d=1 x=0 y=1 x=0
[T=2 a=1 b=1 c=1 d=0 x=0 y=1 x=0
[T=3 a=1 b=1 c=0 d=1 x=0 y=1 x=0
[T=4 a=1 b=0 c=1 d=0 x=0 y=1 x=0
[T=5 a=1 b=0 c=1 d=1 x=0 y=1 x=0
[T=6 a=0 b=1 c=0 d=0 x=0 y=1 x=0
[T=7 a=0 b=1 c=0 d=1 x=0 y=1 x=0
[T=8 a=1 b=1 c=1 d=0 x=0 y=1 x=0
[T=9 a=0 b=0 c=0 d=1 x=0 y=1 x=0
[T=10 a=0 b=1 c=1 d=1 x=0 y=1 x=0
ncsim: *W,RNQUIE: Simulation is complete.

버프/비게이트

이 게이트에는 하나의 스칼라 입력과 하나 이상의 출력만 있습니다. buf 버퍼를 나타내며 극성의 변경 없이 단순히 입력에서 출력으로 값을 전송합니다. not 입력에서 신호의 극성을 반전시키는 인버터를 나타냅니다. 따라서 입력에서 0은 1을 생성하고 그 반대의 경우도 마찬가지입니다.

  
  
module gates (	input a, 
				output c, d);

  buf (c, a); 		// c is the output, a is input
  not (d, a);		// d is the output, a is input
endmodule

  
  
  
module tb;
	reg a;
	wire c, d;
	integer i;
	
	gates u0 ( .a(a), .c(c), .d(d));
	
	initial begin
		a = 0;
		
      $monitor ("[T=%0t a=%0b c(buf)=%0b d(not)=%0b", $time, a, c, d);
		
		for (i = 0; i < 10; i = i+1) begin
			#1 	a <= $random;
		end
	end
endmodule

  
시뮬레이션 로그
xcelium> run
[T=0 a=0 c(buf)=0 d(not)=1
[T=2 a=1 c(buf)=1 d(not)=0
[T=8 a=0 c(buf)=0 d(not)=1
[T=9 a=1 c(buf)=1 d(not)=0
xmsim: *W,RNQUIE: Simulation is complete.

포트 목록의 마지막 터미널은 게이트의 입력에 연결되고 다른 모든 터미널은 게이트의 출력 포트에 연결됩니다. 다음은 거의 사용되지 않는 다중 출력 버퍼의 예입니다.

  
  
module gates (	input  a, 
				output c, d);

  not (c, d, a); 		// c,d is the output, a is input
  
endmodule

  
시뮬레이션 로그
xcelium> run
[T=0 a=0 c=1 d=1
[T=2 a=1 c=0 d=0
[T=8 a=0 c=1 d=1
[T=9 a=1 c=0 d=0
xmsim: *W,RNQUIE: Simulation is complete.

버프/알림

출력을 활성화하기 위한 추가 제어 신호가 있는 버퍼 및 인버터는 bufif를 통해 사용할 수 있습니다. 및 notif 기초 요소. 이 게이트는 제어 신호가 활성화된 경우에만 유효한 출력을 가지며 그렇지 않으면 출력이 하이 임피던스가 됩니다. 두 가지 버전이 있습니다. 하나는 bufif1과 같이 1로 표시되는 정상적인 제어 극성입니다. 및 notif1 bufif0와 같이 0으로 표시된 제어 극성이 반전된 두 번째 및 notif0 .


verilog

  1. 기본 게이트 기능
  2. 트랜지스터, 접합 전계 효과(JFET)
  3. 집적 회로
  4. C# 변수 범위
  5. 추상화 계층 설계
  6. Verilog 게이트 레벨 예
  7. Verilog 게이트 지연
  8. 스위치 레벨 모델링
  9. 직급 직원이란 무엇입니까?
  10. 선반의 수평을 맞추는 방법