| module mux_if_unbal_4_1 #(parameter N=4, parameter W=1) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* |
| if (s == 0) o <= i[0*W+:W]; |
| else if (s == 1) o <= i[1*W+:W]; |
| else if (s == 2) o <= i[2*W+:W]; |
| else if (s == 3) o <= i[3*W+:W]; |
| else o <= {W{1'bx}}; |
| endmodule |
| |
| module mux_if_unbal_5_3 #(parameter N=5, parameter W=3) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* begin |
| o <= {W{1'bx}}; |
| if (s == 0) o <= i[0*W+:W]; |
| if (s == 1) o <= i[1*W+:W]; |
| if (s == 2) o <= i[2*W+:W]; |
| if (s == 3) o <= i[3*W+:W]; |
| if (s == 4) o <= i[4*W+:W]; |
| end |
| endmodule |
| |
| module mux_if_unbal_5_3_invert #(parameter N=5, parameter W=3) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* |
| if (s != 0) |
| if (s != 1) |
| if (s != 2) |
| if (s != 3) |
| if (s != 4) o <= i[4*W+:W]; |
| else o <= i[0*W+:W]; |
| else o <= i[3*W+:W]; |
| else o <= i[2*W+:W]; |
| else o <= i[1*W+:W]; |
| else o <= {W{1'bx}}; |
| endmodule |
| |
| module mux_if_unbal_5_3_width_mismatch #(parameter N=5, parameter W=3) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* begin |
| o <= {W{1'bx}}; |
| if (s == 0) o <= i[0*W+:W]; |
| if (s == 1) o <= i[1*W+:W]; |
| if (s == 2) o[W-2:0] <= i[2*W+:W-1]; |
| if (s == 3) o <= i[3*W+:W]; |
| if (s == 4) o <= i[4*W+:W]; |
| end |
| endmodule |
| |
| module mux_if_unbal_4_1_missing #(parameter N=5, parameter W=3) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* begin |
| if (s == 0) o <= i[0*W+:W]; |
| // else if (s == 1) o <= i[1*W+:W]; |
| // else if (s == 2) o <= i[2*W+:W]; |
| else if (s == 3) o <= i[3*W+:W]; |
| else o <= {W{1'bx}}; |
| end |
| endmodule |
| |
| module mux_if_unbal_5_3_order #(parameter N=5, parameter W=3) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* begin |
| o <= {W{1'bx}}; |
| if (s == 3) o <= i[3*W+:W]; |
| if (s == 2) o <= i[2*W+:W]; |
| if (s == 1) o <= i[1*W+:W]; |
| if (s == 4) o <= i[4*W+:W]; |
| if (s == 0) o <= i[0*W+:W]; |
| end |
| endmodule |
| |
| module mux_if_unbal_4_1_nonexcl #(parameter N=4, parameter W=1) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* |
| if (s == 0) o <= i[0*W+:W]; |
| else if (s == 1) o <= i[1*W+:W]; |
| else if (s == 2) o <= i[2*W+:W]; |
| else if (s == 3) o <= i[3*W+:W]; |
| else if (s == 0) o <= {W{1'b0}}; |
| else o <= {W{1'bx}}; |
| endmodule |
| |
| module mux_if_unbal_5_3_nonexcl #(parameter N=5, parameter W=3) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* begin |
| o <= {W{1'bx}}; |
| if (s == 0) o <= i[0*W+:W]; |
| if (s == 1) o <= i[1*W+:W]; |
| if (s == 2) o <= i[2*W+:W]; |
| if (s == 3) o <= i[3*W+:W]; |
| if (s == 4) o <= i[4*W+:W]; |
| if (s == 0) o <= i[2*W+:W]; |
| end |
| endmodule |
| |
| module mux_case_unbal_8_7#(parameter N=8, parameter W=7) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* begin |
| o <= {W{1'bx}}; |
| case (s) |
| 0: o <= i[0*W+:W]; |
| default: |
| case (s) |
| 1: o <= i[1*W+:W]; |
| 2: o <= i[2*W+:W]; |
| default: |
| case (s) |
| 3: o <= i[3*W+:W]; |
| 4: o <= i[4*W+:W]; |
| 5: o <= i[5*W+:W]; |
| default: |
| case (s) |
| 6: o <= i[6*W+:W]; |
| default: o <= i[7*W+:W]; |
| endcase |
| endcase |
| endcase |
| endcase |
| end |
| endmodule |
| |
| module mux_if_bal_8_2 #(parameter N=8, parameter W=2) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* |
| if (s[0] == 1'b0) |
| if (s[1] == 1'b0) |
| if (s[2] == 1'b0) |
| o <= i[0*W+:W]; |
| else |
| o <= i[1*W+:W]; |
| else |
| if (s[2] == 1'b0) |
| o <= i[2*W+:W]; |
| else |
| o <= i[3*W+:W]; |
| else |
| if (s[1] == 1'b0) |
| if (s[2] == 1'b0) |
| o <= i[4*W+:W]; |
| else |
| o <= i[5*W+:W]; |
| else |
| if (s[2] == 1'b0) |
| o <= i[6*W+:W]; |
| else |
| o <= i[7*W+:W]; |
| endmodule |
| |
| module mux_if_bal_5_1 #(parameter N=5, parameter W=1) (input [N*W-1:0] i, input [$clog2(N)-1:0] s, output reg [W-1:0] o); |
| always @* |
| if (s[0] == 1'b0) |
| if (s[1] == 1'b0) |
| if (s[2] == 1'b0) |
| o <= i[0*W+:W]; |
| else |
| o <= i[1*W+:W]; |
| else |
| if (s[2] == 1'b0) |
| o <= i[2*W+:W]; |
| else |
| o <= i[3*W+:W]; |
| else |
| o <= i[4*W+:W]; |
| endmodule |
| |
| module cliffordwolf_nonexclusive_select ( |
| input wire x, y, z, |
| input wire a, b, c, d, |
| output reg o |
| ); |
| always @* begin |
| o = a; |
| if (x) o = b; |
| if (y) o = c; |
| if (z) o = d; |
| end |
| endmodule |
| |
| module cliffordwolf_freduce ( |
| input wire [1:0] s, |
| input wire a, b, c, d, |
| output reg [3:0] o |
| ); |
| always @* begin |
| o = {4{a}}; |
| if (s == 0) o = {3{b}}; |
| if (s == 1) o = {2{c}}; |
| if (s == 2) o = d; |
| end |
| endmodule |
| |
| module case_nonexclusive_select ( |
| input wire [1:0] x, y, |
| input wire a, b, c, d, e, |
| output reg o |
| ); |
| always @* begin |
| case (x) |
| 0: o = b; |
| 2: o = b; |
| 1: o = c; |
| default: begin |
| o = a; |
| if (y == 0) o = d; |
| if (y == 1) o = e; |
| end |
| endcase |
| end |
| endmodule |
| |
| module case_nonoverlap ( |
| input wire [2:0] x, |
| input wire a, b, c, d, e, |
| output reg o |
| ); |
| always @* begin |
| case (x) |
| 0, 2: o = b; // Creates $reduce_or |
| 1: o = c; |
| default: |
| case (x) |
| 3: o = d; 4: o = d; // Creates $reduce_or |
| 5: o = e; |
| default: o = 1'b0; |
| endcase |
| endcase |
| end |
| endmodule |
| |
| module case_overlap ( |
| input wire [2:0] x, |
| input wire a, b, c, d, e, |
| output reg o |
| ); |
| always @* begin |
| case (x) |
| 0, 2: o = b; // Creates $reduce_or |
| 1: o = c; |
| default: |
| case (x) |
| 0: o = 1'b1; // OVERLAP! |
| 3, 4: o = d; // Creates $reduce_or |
| 5: o = e; |
| default: o = 1'b0; |
| endcase |
| endcase |
| end |
| endmodule |
| |
| module case_overlap2 ( |
| input wire [2:0] x, |
| input wire a, b, c, d, e, |
| output reg o |
| ); |
| always @* begin |
| case (x) |
| 0: o = b; 2: o = b; // Creates $reduce_or |
| 1: o = c; |
| default: |
| case (x) |
| 0: o = d; 2: o = d; // Creates $reduce_or |
| 3: o = d; 4: o = d; // Creates $reduce_or |
| 5: o = e; |
| default: o = 1'b0; |
| endcase |
| endcase |
| end |
| endmodule |