지금까지 2 비트 비교기에 대한이 코드를 사용했습니다.캐스케이드 2 비트 비교기를 사용하는 2n 비트 비교기 구현
module twobitcomparator(xgtyin,xety,xltyin,x1,x0,y1,y0,xgty,xety,xlty);
//I/O
output xgty, xety, xlty; //xgty - x>y, xlty - x<y, xety - x=y
input x1, x0, y1, y0, xgtyin, xetyin, xltyin;
//specify circuit behavior
assign r = (xgyin);
assign s = (xlyin);
assign t = (xetyin);//not sure if I need an xetyin
assign a = (x1&~y1);
assign b = (x1&x0&~y0);
assign c = (x0&~y1&~y0);
assign xgty = (a|b|c|r);//X>Y
assign d = (~x0&~y0);
assign e = (x0&y0);
assign f = (x1&y1);
assign g = (~x1&~y1);
assign xety = ((d|e)&(f|g));//X=Y
assign h = (~x1&~x0&y0);
assign i = (~x1&y1);
assign j = (~x0&y1&y0);
assign xlty = (h|i|j|s);//X<Y
endmodule
이 모양이 좋습니까? 나는 그것을 위해 테스트 벤치를 작성하고 파도를 바라 보았고 결과물은 입력에 대해 정확했지만 가장 효율적인 방법인지는 확실치 않습니다.
계단식의 경우, 최상위 비트 비교기의 결과 (불균형 인 경우)가 나머지 비교기를 통해 전송되어야하며 최종 결과가된다는 것을 알고 있습니다. 그것들이 동일하다면, 가장 높은 비트 비교기를 찾아야 만합니다. 여기서는 불평등이 있고, 제가 언급 한 것처럼 계단식으로 연결될 필요가 있습니다.
내가 캐스 캐 이드를 사용하는 데 어려움을 겪었으므로 Verilog에 익숙하지 않은데 어떻게 각 비교기의 결과를 다음 단계로 가져 오는지 실마리가 없습니다. 여기 내 시도입니다.
module ncompare#(parameter n = 2)(input [2*n-1:0] xgyin, xlyin,
input [2*n-1:0] x1, x0, y1, y0,
output [2*n-1:0] xgy, xey, xly,
output xqyout);
wire xqyin;
assign xqyin = 1'b0;
twobitcomparator s1(.xgyin(xgyin[xqyin]), .xlyin(xlyin[xqyin]),
.x1(x1[2*n-1]), .x0(x0[2*n-2]), .y1(y1[2*n-1]), .y0(y0[2*n-2]),
.xgy(xgy[ripple0]), .xey(xey[ripple1]), .xly(xly[ripple2]));
twobitcomparator s0(.xgyin(xgyin[ripple0]), .xlyin(xlyin[ripple2]),
.x1(x1[1]), .x0(x0[0]), .y1(y1[1]), .y0(y0[0]),
.xgy(xgy[ripple3]), .xey(xey[ripple4]), .xly(xly[ripple5]));
endmodule
는 나는 내가 어떤 매개 변수 N을 위해 일해야하기 때문에 생성 문을 사용할 필요가 있다고 생각하지만 난 어떻게 만 검토 한 모든 예는 하나 개의 출력 및 I이 있기 때문에 생성 사용하는 단서가 없다 3 개가 있습니다 (다음 비교기의 입력입니다!)
모든 도움에 감사드립니다! I 대신 개별 비트들로 처리하는 버스로서 두 비트 입력을 처리 한
module twobitcomparator(xgtyin,xltyin,x,y,xgty,xlty,xety);
output xgty, xety, xlty;
input xgtyin, xltyin;
input [1:0] x,y;
assign xgty = xgtyin | (~xltyin & ((x[1] > y[1]) | ((x[1] == y[1]) & (x[0] > y[0]))));
assign xlty = xltyin | (~xgtyin & ((x[1] < y[1]) | ((x[1] == y[1]) & (x[0] < y[0]))));
assign xety = ~(xlty | xgty);
endmodule
로