diff options
author | justanothercatgirl <sotov@twistea.su> | 2025-05-14 19:16:38 +0300 |
---|---|---|
committer | justanothercatgirl <sotov@twistea.su> | 2025-05-14 20:24:21 +0300 |
commit | 11508800cfaefc1c25a793760bf10d3fd997af80 (patch) | |
tree | 8ed58e143243415830f97ea74b9ba4613df23e85 /2-b.v |
Diffstat (limited to '2-b.v')
-rw-r--r-- | 2-b.v | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -0,0 +1,46 @@ +module max_argmax(data_in, data_max, argmax); + parameter WIDTH=8, SIZE=2; + input [WIDTH*(1<<SIZE)-1:0] data_in; + output [WIDTH-1:0] data_max; + output [SIZE-1:0] argmax; + if (SIZE == 1) begin + wire [WIDTH-1:0] + a1 = data_in[WIDTH*2-1:WIDTH], + a2 = data_in[WIDTH-1:0]; + assign data_max = a1 > a2 ? a1 : a2; + assign argmax = a1 > a2 ? 1'b0 : 1'b1; + end else begin + wire [WIDTH*(1<<(SIZE-1))-1:0] + w1 = data_in[WIDTH*(1<<SIZE)-1:WIDTH*(1<<(SIZE-1))], + w2 = data_in[WIDTH*(1<<(SIZE-1))-1:0]; + wire [WIDTH-1:0] a1, a2; + wire [SIZE-2:0] i1, i2; + max_argmax#(WIDTH, SIZE-1) m1(w1, a1, i1); + max_argmax#(WIDTH, SIZE-1) m2(w2, a2, i2); + assign data_max = a1 > a2 ? a1 : a2; + assign argmax[SIZE-2:0] = a1 > a2 ? i1 : i2; + assign argmax[SIZE-1] = a1 > a2 ? 1'b0 : 1'b1; + end +endmodule + +/* +module test; + reg [63:0]vals; + wire [7:0]out; + wire [2:0]idx; + max_argmax#(8, 3) adder(vals, out, idx); + initial begin + $monitor("%d, %b", out, idx); + vals[63:56] = 25; + vals[55:48] = 24; + vals[47:40] = 25; + vals[39:32] = 13; + vals[31:24] = 25; + vals[23:16] = 121; + vals[15:8] = 2; + vals[7:0] = 200; + #1; + end +endmodule +*/ + |