これまでのところ、このコードは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つある(これも次のコンパレータの入力です!)
ありがとうございました!