【发布时间】:2017-02-25 13:30:35
【问题描述】:
到目前为止,我有这个用于 2 位比较器的代码。
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
我认为我需要使用 generate 语句,因为我需要使它适用于任何参数 n 但我不知道如何使用 generate 因为我看过的所有示例都只有一个输出并且我有三个(即也是下一个比较器的输入!啊!)
感谢您的所有帮助!
【问题讨论】:
标签: logic verilog digital-logic