| `default_nettype none | |
| // Top level io for this module should stay the same to fit into the scan_wrapper. | |
| // The pin connections within the user_module are up to you, | |
| // although (if one is present) it is recommended to place a clock on io_in[0]. | |
| // This allows use of the internal clock divider if you wish. | |
| module user_module_341590933015364178( | |
| input [7:0] io_in, | |
| output [7:0] io_out | |
| ); | |
| // Clock/reset configuration from | |
| // https://github.com/omerk/tinytapeout-verilog-test/blob/main/src/user_module_339898704941023827.v | |
| // using io_in[0] as clk, io_in[1] as reset | |
| wire clk; | |
| assign clk = io_in[0]; | |
| wire reset; | |
| assign reset = io_in[1]; | |
| // Name and wire the interfaces | |
| wire [3:0] io_shiftin_ifmap; | |
| assign io_shiftin_ifmap = io_in[5:2]; // Input feature-map shift-in each clock cycle | |
| wire [2:0] io_in_filt_0; | |
| assign io_in_filt_0[2:1] = 2'b00; | |
| assign io_in_filt_0[0] = io_in[7]; // Corner filter element | |
| wire [2:0] io_in_filt_1; | |
| assign io_in_filt_1[2] = 1'b0; | |
| assign io_in_filt_1[1] = io_in[6]; // Middle filter element | |
| assign io_in_filt_1[0] = 1'b0; | |
| wire [2:0] io_in_filt_2; | |
| assign io_in_filt_2 = 3'b000; | |
| wire [1:0] io_out_ofmap; | |
| assign io_out[1:0] = io_out_ofmap; | |
| assign io_out[7:2] = 6'b000000; | |
| // Wire up the FBNA PBC unit | |
| fbna_pbc_341590933015364178 PBC (.clock(clk), | |
| .reset(reset), | |
| .io_shiftin_ifmap(io_shiftin_ifmap), | |
| .io_in_filt_0(io_in_filt_0), | |
| .io_in_filt_1(io_in_filt_1), | |
| .io_in_filt_2(io_in_filt_2), | |
| .io_out_ofmap(io_out_ofmap)); | |
| endmodule | |
| // Any submodules should be included in this file, | |
| // so they are copied into the main TinyTapeout repo. | |
| // Appending your ID to any submodules you create | |
| // ensures there are no clashes in full-chip simulation. | |
| module fbna_pbc_341590933015364178( | |
| input clock, | |
| input reset, | |
| input [3:0] io_shiftin_ifmap, | |
| input [2:0] io_in_filt_0, | |
| input [2:0] io_in_filt_1, | |
| input [2:0] io_in_filt_2, | |
| output [1:0] io_out_ofmap | |
| ); | |
| `ifdef RANDOMIZE_REG_INIT | |
| reg [31:0] _RAND_0; | |
| reg [31:0] _RAND_1; | |
| reg [31:0] _RAND_2; | |
| reg [31:0] _RAND_3; | |
| reg [31:0] _RAND_4; | |
| reg [31:0] _RAND_5; | |
| reg [31:0] _RAND_6; | |
| reg [31:0] _RAND_7; | |
| reg [31:0] _RAND_8; | |
| reg [31:0] _RAND_9; | |
| reg [31:0] _RAND_10; | |
| reg [31:0] _RAND_11; | |
| `endif // RANDOMIZE_REG_INIT | |
| reg reg_in_ifmap_0_0; // @[cmd135.sc 25:27] | |
| reg reg_in_ifmap_0_1; // @[cmd135.sc 25:27] | |
| reg reg_in_ifmap_0_2; // @[cmd135.sc 25:27] | |
| reg reg_in_ifmap_0_3; // @[cmd135.sc 25:27] | |
| reg reg_in_ifmap_1_0; // @[cmd135.sc 26:27] | |
| reg reg_in_ifmap_1_1; // @[cmd135.sc 26:27] | |
| reg reg_in_ifmap_1_2; // @[cmd135.sc 26:27] | |
| reg reg_in_ifmap_1_3; // @[cmd135.sc 26:27] | |
| reg reg_in_ifmap_2_0; // @[cmd135.sc 27:27] | |
| reg reg_in_ifmap_2_1; // @[cmd135.sc 27:27] | |
| reg reg_in_ifmap_2_2; // @[cmd135.sc 27:27] | |
| reg reg_in_ifmap_2_3; // @[cmd135.sc 27:27] | |
| wire in_filt_0_vec_0 = io_in_filt_0[0]; // @[cmd135.sc 34:44] | |
| wire in_filt_0_vec_1 = io_in_filt_0[1]; // @[cmd135.sc 34:44] | |
| wire in_filt_0_vec_2 = io_in_filt_0[2]; // @[cmd135.sc 34:44] | |
| wire in_filt_1_vec_0 = io_in_filt_1[0]; // @[cmd135.sc 35:44] | |
| wire in_filt_1_vec_1 = io_in_filt_1[1]; // @[cmd135.sc 35:44] | |
| wire in_filt_1_vec_2 = io_in_filt_1[2]; // @[cmd135.sc 35:44] | |
| wire in_filt_2_vec_0 = io_in_filt_2[0]; // @[cmd135.sc 36:44] | |
| wire in_filt_2_vec_1 = io_in_filt_2[1]; // @[cmd135.sc 36:44] | |
| wire in_filt_2_vec_2 = io_in_filt_2[2]; // @[cmd135.sc 36:44] | |
| wire _T_14 = ~(reg_in_ifmap_0_0 ^ in_filt_0_vec_0); // @[cmd135.sc 64:28] | |
| wire _T_16 = ~(reg_in_ifmap_1_0 ^ in_filt_1_vec_0); // @[cmd135.sc 65:28] | |
| wire _T_18 = ~(reg_in_ifmap_2_0 ^ in_filt_2_vec_0); // @[cmd135.sc 66:28] | |
| wire _T_20 = ~(reg_in_ifmap_0_1 ^ in_filt_0_vec_1); // @[cmd135.sc 68:28] | |
| wire _T_22 = ~(reg_in_ifmap_1_1 ^ in_filt_1_vec_1); // @[cmd135.sc 69:28] | |
| wire _T_24 = ~(reg_in_ifmap_2_1 ^ in_filt_2_vec_1); // @[cmd135.sc 70:28] | |
| wire _T_26 = ~(reg_in_ifmap_0_2 ^ in_filt_0_vec_2); // @[cmd135.sc 72:28] | |
| wire _T_28 = ~(reg_in_ifmap_1_2 ^ in_filt_1_vec_2); // @[cmd135.sc 73:28] | |
| wire _T_30 = ~(reg_in_ifmap_2_2 ^ in_filt_2_vec_2); // @[cmd135.sc 74:28] | |
| wire [3:0] _WIRE_1 = {{3'd0}, _T_14}; // @[cmd135.sc 51:34 cmd135.sc 64:24] | |
| wire [3:0] _WIRE_4 = {{3'd0}, _T_20}; // @[cmd135.sc 55:34 cmd135.sc 68:24] | |
| wire [3:0] _T_32 = _WIRE_1 + _WIRE_4; // @[cmd135.sc 86:52] | |
| wire [3:0] _WIRE_7 = {{3'd0}, _T_26}; // @[cmd135.sc 59:34 cmd135.sc 72:24] | |
| wire [3:0] _T_34 = _T_32 + _WIRE_7; // @[cmd135.sc 87:58] | |
| wire [3:0] _WIRE_2 = {{3'd0}, _T_16}; // @[cmd135.sc 52:34 cmd135.sc 65:24] | |
| wire [3:0] _T_36 = _T_34 + _WIRE_2; // @[cmd135.sc 88:58] | |
| wire [3:0] _WIRE_5 = {{3'd0}, _T_22}; // @[cmd135.sc 56:34 cmd135.sc 69:24] | |
| wire [3:0] _T_38 = _T_36 + _WIRE_5; // @[cmd135.sc 89:58] | |
| wire [3:0] _WIRE_8 = {{3'd0}, _T_28}; // @[cmd135.sc 60:34 cmd135.sc 73:24] | |
| wire [3:0] _T_40 = _T_38 + _WIRE_8; // @[cmd135.sc 90:58] | |
| wire [3:0] _WIRE_3 = {{3'd0}, _T_18}; // @[cmd135.sc 53:34 cmd135.sc 66:24] | |
| wire [3:0] _T_42 = _T_40 + _WIRE_3; // @[cmd135.sc 91:58] | |
| wire [3:0] _WIRE_6 = {{3'd0}, _T_24}; // @[cmd135.sc 57:34 cmd135.sc 70:24] | |
| wire [3:0] _T_44 = _T_42 + _WIRE_6; // @[cmd135.sc 92:58] | |
| wire [3:0] _WIRE_9 = {{3'd0}, _T_30}; // @[cmd135.sc 61:34 cmd135.sc 74:24] | |
| wire [3:0] out_ofmap_vec_0 = _T_44 + _WIRE_9; // @[cmd135.sc 93:58] | |
| wire out_ofmap_vec_criterion_0 = ~(4'h4 >= out_ofmap_vec_0); // @[cmd135.sc 96:37] | |
| wire _T_50 = ~(reg_in_ifmap_0_1 ^ in_filt_0_vec_0); // @[cmd135.sc 64:28] | |
| wire _T_52 = ~(reg_in_ifmap_1_1 ^ in_filt_1_vec_0); // @[cmd135.sc 65:28] | |
| wire _T_54 = ~(reg_in_ifmap_2_1 ^ in_filt_2_vec_0); // @[cmd135.sc 66:28] | |
| wire _T_56 = ~(reg_in_ifmap_0_2 ^ in_filt_0_vec_1); // @[cmd135.sc 68:28] | |
| wire _T_58 = ~(reg_in_ifmap_1_2 ^ in_filt_1_vec_1); // @[cmd135.sc 69:28] | |
| wire _T_60 = ~(reg_in_ifmap_2_2 ^ in_filt_2_vec_1); // @[cmd135.sc 70:28] | |
| wire _T_62 = ~(reg_in_ifmap_0_3 ^ in_filt_0_vec_2); // @[cmd135.sc 72:28] | |
| wire _T_64 = ~(reg_in_ifmap_1_3 ^ in_filt_1_vec_2); // @[cmd135.sc 73:28] | |
| wire _T_66 = ~(reg_in_ifmap_2_3 ^ in_filt_2_vec_2); // @[cmd135.sc 74:28] | |
| wire [3:0] _WIRE_10 = {{3'd0}, _T_50}; // @[cmd135.sc 51:34 cmd135.sc 64:24] | |
| wire [3:0] _WIRE_13 = {{3'd0}, _T_56}; // @[cmd135.sc 55:34 cmd135.sc 68:24] | |
| wire [3:0] _T_68 = _WIRE_10 + _WIRE_13; // @[cmd135.sc 86:52] | |
| wire [3:0] _WIRE_16 = {{3'd0}, _T_62}; // @[cmd135.sc 59:34 cmd135.sc 72:24] | |
| wire [3:0] _T_70 = _T_68 + _WIRE_16; // @[cmd135.sc 87:58] | |
| wire [3:0] _WIRE_11 = {{3'd0}, _T_52}; // @[cmd135.sc 52:34 cmd135.sc 65:24] | |
| wire [3:0] _T_72 = _T_70 + _WIRE_11; // @[cmd135.sc 88:58] | |
| wire [3:0] _WIRE_14 = {{3'd0}, _T_58}; // @[cmd135.sc 56:34 cmd135.sc 69:24] | |
| wire [3:0] _T_74 = _T_72 + _WIRE_14; // @[cmd135.sc 89:58] | |
| wire [3:0] _WIRE_17 = {{3'd0}, _T_64}; // @[cmd135.sc 60:34 cmd135.sc 73:24] | |
| wire [3:0] _T_76 = _T_74 + _WIRE_17; // @[cmd135.sc 90:58] | |
| wire [3:0] _WIRE_12 = {{3'd0}, _T_54}; // @[cmd135.sc 53:34 cmd135.sc 66:24] | |
| wire [3:0] _T_78 = _T_76 + _WIRE_12; // @[cmd135.sc 91:58] | |
| wire [3:0] _WIRE_15 = {{3'd0}, _T_60}; // @[cmd135.sc 57:34 cmd135.sc 70:24] | |
| wire [3:0] _T_80 = _T_78 + _WIRE_15; // @[cmd135.sc 92:58] | |
| wire [3:0] _WIRE_18 = {{3'd0}, _T_66}; // @[cmd135.sc 61:34 cmd135.sc 74:24] | |
| wire [3:0] out_ofmap_vec_1 = _T_80 + _WIRE_18; // @[cmd135.sc 93:58] | |
| wire out_ofmap_vec_criterion_1 = ~(4'h4 >= out_ofmap_vec_1); // @[cmd135.sc 96:37] | |
| assign io_out_ofmap = {out_ofmap_vec_criterion_1,out_ofmap_vec_criterion_0}; // @[cmd135.sc 105:45] | |
| always @(posedge clock) begin | |
| reg_in_ifmap_0_0 <= io_shiftin_ifmap[0]; // @[cmd135.sc 29:46] | |
| reg_in_ifmap_0_1 <= io_shiftin_ifmap[1]; // @[cmd135.sc 29:46] | |
| reg_in_ifmap_0_2 <= io_shiftin_ifmap[2]; // @[cmd135.sc 29:46] | |
| reg_in_ifmap_0_3 <= io_shiftin_ifmap[3]; // @[cmd135.sc 29:46] | |
| reg_in_ifmap_1_0 <= reg_in_ifmap_0_0; // @[cmd135.sc 30:18] | |
| reg_in_ifmap_1_1 <= reg_in_ifmap_0_1; // @[cmd135.sc 30:18] | |
| reg_in_ifmap_1_2 <= reg_in_ifmap_0_2; // @[cmd135.sc 30:18] | |
| reg_in_ifmap_1_3 <= reg_in_ifmap_0_3; // @[cmd135.sc 30:18] | |
| reg_in_ifmap_2_0 <= reg_in_ifmap_1_0; // @[cmd135.sc 31:18] | |
| reg_in_ifmap_2_1 <= reg_in_ifmap_1_1; // @[cmd135.sc 31:18] | |
| reg_in_ifmap_2_2 <= reg_in_ifmap_1_2; // @[cmd135.sc 31:18] | |
| reg_in_ifmap_2_3 <= reg_in_ifmap_1_3; // @[cmd135.sc 31:18] | |
| end | |
| // Register and memory initialization | |
| `ifdef RANDOMIZE_GARBAGE_ASSIGN | |
| `define RANDOMIZE | |
| `endif | |
| `ifdef RANDOMIZE_INVALID_ASSIGN | |
| `define RANDOMIZE | |
| `endif | |
| `ifdef RANDOMIZE_REG_INIT | |
| `define RANDOMIZE | |
| `endif | |
| `ifdef RANDOMIZE_MEM_INIT | |
| `define RANDOMIZE | |
| `endif | |
| `ifndef RANDOM | |
| `define RANDOM $random | |
| `endif | |
| `ifdef RANDOMIZE_MEM_INIT | |
| integer initvar; | |
| `endif | |
| `ifndef SYNTHESIS | |
| `ifdef FIRRTL_BEFORE_INITIAL | |
| `FIRRTL_BEFORE_INITIAL | |
| `endif | |
| initial begin | |
| `ifdef RANDOMIZE | |
| `ifdef INIT_RANDOM | |
| `INIT_RANDOM | |
| `endif | |
| `ifndef VERILATOR | |
| `ifdef RANDOMIZE_DELAY | |
| #`RANDOMIZE_DELAY begin end | |
| `else | |
| #0.002 begin end | |
| `endif | |
| `endif | |
| `ifdef RANDOMIZE_REG_INIT | |
| _RAND_0 = {1{`RANDOM}}; | |
| reg_in_ifmap_0_0 = _RAND_0[0:0]; | |
| _RAND_1 = {1{`RANDOM}}; | |
| reg_in_ifmap_0_1 = _RAND_1[0:0]; | |
| _RAND_2 = {1{`RANDOM}}; | |
| reg_in_ifmap_0_2 = _RAND_2[0:0]; | |
| _RAND_3 = {1{`RANDOM}}; | |
| reg_in_ifmap_0_3 = _RAND_3[0:0]; | |
| _RAND_4 = {1{`RANDOM}}; | |
| reg_in_ifmap_1_0 = _RAND_4[0:0]; | |
| _RAND_5 = {1{`RANDOM}}; | |
| reg_in_ifmap_1_1 = _RAND_5[0:0]; | |
| _RAND_6 = {1{`RANDOM}}; | |
| reg_in_ifmap_1_2 = _RAND_6[0:0]; | |
| _RAND_7 = {1{`RANDOM}}; | |
| reg_in_ifmap_1_3 = _RAND_7[0:0]; | |
| _RAND_8 = {1{`RANDOM}}; | |
| reg_in_ifmap_2_0 = _RAND_8[0:0]; | |
| _RAND_9 = {1{`RANDOM}}; | |
| reg_in_ifmap_2_1 = _RAND_9[0:0]; | |
| _RAND_10 = {1{`RANDOM}}; | |
| reg_in_ifmap_2_2 = _RAND_10[0:0]; | |
| _RAND_11 = {1{`RANDOM}}; | |
| reg_in_ifmap_2_3 = _RAND_11[0:0]; | |
| `endif // RANDOMIZE_REG_INIT | |
| `endif // RANDOMIZE | |
| end // initial | |
| `ifdef FIRRTL_AFTER_INITIAL | |
| `FIRRTL_AFTER_INITIAL | |
| `endif | |
| `endif // SYNTHESIS | |
| endmodule |