| module gen_test1(clk, a, b, y); | |
| input clk; | |
| input [7:0] a, b; | |
| output reg [7:0] y; | |
| genvar i, j; | |
| wire [15:0] tmp1; | |
| generate | |
| for (i = 0; i < 8; i = i + 1) begin:gen1 | |
| wire and_wire, or_wire; | |
| assign and_wire = a[i] & b[i]; | |
| assign or_wire = a[i] | b[i]; | |
| if (i % 2 == 0) begin:gen2true | |
| assign tmp1[i] = and_wire; | |
| assign tmp1[i+8] = or_wire; | |
| end else begin:gen2false | |
| assign tmp1[i] = or_wire; | |
| assign tmp1[i+8] = and_wire; | |
| end | |
| end | |
| for (i = 0; i < 8; i = i + 1) begin:gen3 | |
| wire [4:0] tmp2; | |
| for (j = 0; j <= 4; j = j + 1) begin:gen4 | |
| wire tmpbuf; | |
| assign tmpbuf = tmp1[i+2*j]; | |
| assign tmp2[j] = tmpbuf; | |
| end | |
| always @(posedge clk) | |
| y[i] <= ^tmp2; | |
| end | |
| endgenerate | |
| endmodule | |
| // ------------------------------------------ | |
| module gen_test2(clk, a, b, y); | |
| input clk; | |
| input [7:0] a, b; | |
| output reg [8:0] y; | |
| integer i; | |
| reg [8:0] carry; | |
| always @(posedge clk) begin | |
| carry[0] = 0; | |
| for (i = 0; i < 8; i = i + 1) begin | |
| casez ({a[i], b[i], carry[i]}) | |
| 3'b?11, 3'b1?1, 3'b11?: | |
| carry[i+1] = 1; | |
| default: | |
| carry[i+1] = 0; | |
| endcase | |
| y[i] = a[i] ^ b[i] ^ carry[i]; | |
| end | |
| y[8] = carry[8]; | |
| end | |
| endmodule | |
| // ------------------------------------------ | |
| module gen_test3(a, b, sel, y, z); | |
| input [3:0] a, b; | |
| input sel; | |
| output [3:0] y, z; | |
| genvar i; | |
| generate | |
| for (i=0; i < 2; i=i+1) | |
| assign y[i] = sel ? a[i] : b[i], z[i] = sel ? b[i] : a[i]; | |
| for (i=0; i < 2; i=i+1) begin | |
| if (i == 0) | |
| assign y[2] = sel ? a[2] : b[2]; | |
| else | |
| assign z[2] = sel ? a[2] : b[2]; | |
| case (i) | |
| default: | |
| assign z[3] = sel ? a[3] : b[3]; | |
| 0: | |
| assign y[3] = sel ? a[3] : b[3]; | |
| endcase | |
| end | |
| endgenerate | |
| endmodule |