반응형

조합 논리는 논리 게이트로 구현되며 조합 논리에서 출력은 현재 입력의 함수입니다. 디자이너의 목표는 최소한의 논리 게이트 또는 논리 셀을 사용하여 논리를 구현하는 것입니다. 최소화 기법은 K-map, Boolean algebra, Shannon의 확장 정리입니다.

디자이너의 사고 과정은 디자인이 더 적은 논리 밀도로 더 나은 성능을 갖도록 해야 합니다. 면적 최소화 기술은 조합 논리 또는 부울 함수의 설계에서 중요한 역할을 합니다.

 

구성의 역할

조합 논리를 모델링하기 위해 할당 및 always @ 구문을 사용합니다. Always procedural 블록 내에서 if else로 구성하고 대부분의 경우 멀티플렉서 종류의 논리를 추론합니다.

 

if-else는 순차 구조이고 구문은 다음과 같습니다.

if (condition)

//blocking assignment executed if condition is true

else

// blocking assignment is executed if condition specified in if () is false

 

NOT 또는 논리 반전

NOT 논리는 반전 논리라고도 합니다.

합성 가능한 설계는 다음 예제와 같다.

 

module not_gate( input a_in, output reg y_out);
always@(a_in)
begin
  y_out = ~a_in;
end
endmodule

 

module not_gate( input a_in, output y_out);
assign y_out = ~a_in;
endmodule

 

NOT 게이트의 진리표

a_in y_out
0 1
1 0

 

 

OR 논리

OR 논리는 입력 중 하나가 논리 1일 때 논리 1로 출력을 생성합니다.

 

OR 게이트 진리표

a_in b_in y_out
0 0 0
0 1 1
1 0 1
1 1 1

 

module or_gate(input a_in, b_in , output reg y_out);
always@(a_in, b_in)
begin
  if ( a_in==0 && b_in ==0)
    y_out = 0;
  else
    y_out = 1;
end
endmodule

 

다음 그림은 OR 논리의 RTL 개략도이며, OR 논리 게이트의 입력 포트는 a_in, b_in, 출력 포트는 y_out입니다. 회로도에서 볼 수 있듯이 추론된 논리는 2:1 멀티플렉서 및 기타 연산자를 사용하여 논리를 추론합니다. 합성 결과는 EDA 도구에 따라 다르며 ASIC FPGA 설계의 경우 합성 결과가 다를 수 있습니다.

 

 

다중 입력 OR 게이트의 경우 비트 연산자( | )를 사용할 수 있습니다.

 

module or_gate(input [7:0] a_in, b_in , output [7:0] y_out);
assign y_out = a_in | b_in;
endmodule

 

 

NOR 논리

NOR 논리는 OR 논리의 반전입니다.

NOR 논리의 진리표

a_in b_in y_out
0 0 1
0 1 0
1 0 0
1 1 0

 

module nor_gate(input a_in, b_in , output reg y_out);
always@(a_in, b_in)
begin
  if ( a_in==0 && b_in ==0)
    y_out = 1;
  else
    y_out = 0;
end
endmodule

 

NOR 논리 게이트의 입력 포트는 a_in, b_in, 출력 포트는 y_out입니다. 그림과 같이 추론된 논리는 등호 연산자와 AND 게이트를 사용하여 NOR 게이트를 구현합니다.

 

 

다중 입력 OR 게이트의 경우 비트 연산자 OR( | )의 비트 NOT(~)을 사용할 수 있습니다.

 

module nor_gate(input [7:0] a_in, b_in , output [7:0] y_out);
assign y_out = ~(a_in | b_in);
endmodule

 

 

AND 논리

AND 논리는 입력 a_in, b_in이 모두 논리 1일 때 논리 1로 출력을 생성합니다.

 

AND 논리의 진리표

a_in b_in y_out
0 0 0
0 1 0
1 0 0
1 1 1

 

module and_gate(input a_in, b_in , output reg y_out);
always@(a_in, b_in)
begin
  if
( a_in==1 && b_in ==1)
    y_out = 1;
  else
    y_out = 0;
end
endmodule

 

낸드 로직

NAND AND 논리의 반전입니다.

 

NAND 논리의 진리표

a_in b_in y_out
0 0 1
0 1 1
1 0 1
1 1 0

 

module nand_gate(input a_in, b_in , output reg y_out);
always@(a_in, b_in)
begin
  if
( a_in==1 && b_in ==1)
    y_out = 0;
  else
    y_out = 1;
end
endmodule

 

NAND 로직의 RTL 회로도는 다음 그림과 같으며, NAND 로직 게이트의 입력 포트는 a_in, b_in으로 명명되고 출력은 y_out으로 명명됩니다. 추론된 논리는 멀티플렉서를 사용하여 AND NOT을 생성합니다.

 

 

다중 입력 NAND 게이트는 할당 구성을 사용하고 비트 NOT(~) 및 비트 AND(&) 연산자가 있는 표현식을 사용하여 코딩되며 다음 예제와 같습니다.

 

module nand_gate(input [7:0] a_in, b_in , output [7:0] y_out);
assign y_out = ~(a_in & b_in);
endmodule

 

 

2입력 XOR 논리

두 개의 입력 XOR을 배타적 논리합(exclusive OR logic)이라고 하며 두 입력이 같지 않을 때 논리 1로 출력을 생성합니다.

 

XOR 논리의 진리표

a_in b_in y_out
0 0 0
0 1 1
1 0 1
1 1 0

 

module xor_gate(input a_in, b_in , output reg y_out);
always@(a_in, b_in)
begin
  if
( a_in != b_in )
    y_out = 1;
  else
    y_out = 0;
end
endmodule

 

다중 입력 XOR 게이트에 대한 RTL은 비트 단위 연산자를 사용하여 코딩됩니다.

 

module xor_gate ( input [7:0] a_in, b_in , output [7:0] y_out );
assign y_out = (a_in ^ b_in);
endmodule

 

2입력 XNOR 논리

두 개의 입력 XNOR를 배타적 NOR 논리라고 하며 두 개의 입력이 같을 때 논리 1로 출력을 생성합니다. XNOR XOR 논리의 반전입니다.

 

module xnor_gate(input a_in, b_in , output reg y_out);
always@(a_in, b_in)
begin
  if
( a_in == b_in )
    y_out = 1;
  else
    y_out = 0;
end
endmodule

 

라이브러리에서 XNOR 게이트를 사용할 수 없는 경우 AND-OR-invert를 사용하거나 최소 수의 NAND 또는 NOR 게이트를 사용하여 XNOR 논리를 실현할 수 있습니다.

 

다중 입력 XNOR에 대한 RTL은 다음 예제와 같습니다.

module xnor_gate(input [7:0] a_in, b_in , output [7:0] y_out);
assign y_out = (a_in ~^ b_in);
endmodule

 

tri-state 논리

Tristate에는 논리 0, 논리 1 및 고임피던스 z의 세 가지 논리 상태가 있습니다.

 

tri-state 버퍼 논리의 진리표

Enable data_in data_out
1 0000 0000
1 1111 1111
0 xxxx zzzz

 

module tri_state_logic ( input [3:0] data_in, input enable, output reg [3:0] data_out );

always@(data_in, enable)
begin
  if
(enable)
    data_out = data_in;
  else
    data_out= 4'bZZZZ;
end
endmodule

반응형

+ Recent posts