조합 회로 설계 – 다중화

1비트 4to1 mux의 출력 데이터 유형: wire 및 reg

다중 코드는 다음과 같이 작성하는데 아래 코드는 회로 합성 오류를 발생시킨다. 컴파일 후 합성된 회로를 보고 오류가 있는 부분을 수정합니다. 문제가 표시되었습니다. 이것을 해결합시다.

module mux4x1 (sel,d0,di,d2,d3,m1,m2);
input (1:0) sel;
input d0,dl,d2,d3;
output m1, m2;
wire ml;
reg m2;
assign ml = sel(i) ? (sel(0)? d3 : d2)
	    	    : (sel(0)? d1 : d0)

always @ *

if (sel==2'b11) m2 = d3;
else if (sel==2'b10) m2 = d2;
else if (sel==2'b01) m2 = dl;
else if (sel==2'b00) m2 = dO;
endmodule

이것은 Xilinx Vivado 인코딩입니다.

module mux4x1 (sel, d0, d1, d2, d3, m1, m2);
input (1:0) sel;
input		d0,d1,d2,d3;
output		m1, m2;
wire		m1;
reg			m2;

//MSB이므로 D2나D3 선택

assign m1 = (sel(1))?(sel(0)? d3:d2) : (sel(0) ? d1 : d0);

always @ (sel,d0,d1,d2,d3)
begin
	if(sel==2'h3)	   m2 = d3; // 하고싶은걸로 하면된다.  
	else if(sel==2'h2) m2 = d2;
	else if(sel==2'h1) m2 = d1;
	else m2 = d0;
end
endmodule

오류의 원인은 변수 값이 거의 항상 지정되지 않았기 때문이라고 가정합니다.

위 코드와 다른 점은 Else If 대신 Else 문을 사용한다는 것입니다.


조합 회로 설계 - 다중화 1
합성 계획

SYNTHESIS의 스키마를 보면 정상적으로 설계되었음을 알 수 있습니다.