Fracturable Multiplier Example


      <pb_type name="mult_36" height="3"> 
          <input name="a" num_pins="36"/> 
          <input name="b" num_pins="36"/> 
          <output name="out" num_pins="72"/> 

          <mode name="two_divisible_mult_18x18"> 
            <pb_type name="divisible_mult_18x18" num_pb="2"> 
              <input name="a" num_pins="18"/> 
              <input name="b" num_pins="18"/> 
              <output name="out" num_pins="36"/> 

              <mode name="two_mult_9x9"> 
                <pb_type name="mult_9x9_slice" num_pb="2"> 
                  <input name="A_cfg" num_pins="9"/> 
                  <input name="B_cfg" num_pins="9"/> 
                  <output name="OUT_cfg" num_pins="18"/> 

                  <pb_type name="mult_9x9" blif_model=".subckt multiply" num_pb="1" area="300"> 
                    <input name="a" num_pins="9"/> 
                    <input name="b" num_pins="9"/> 
                    <output name="out" num_pins="18"/> 
                    <delay_constant max="2.03e-13" min="1.89e-13" in_port="{a b}" out_port="out"/> 
                  </pb_type> 

                  <interconnect> 
                    <direct name="a2a" input="mult_9x9_slice.A_cfg" output="mult_9x9.a"> 
                      <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_9x9_slice.A_cfg" out_port="mult_9x9.a"/> 
                      <C_constant C="1.89e-13" in_port="mult_9x9_slice.A_cfg" out_port="mult_9x9.a"/> 
                    </direct> 
                    <direct name="b2b" input="mult_9x9_slice.B_cfg" output="mult_9x9.b"> 
                      <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_9x9_slice.B_cfg" out_port="mult_9x9.b"/> 
                      <C_constant C="1.89e-13" in_port="mult_9x9_slice.B_cfg" out_port="mult_9x9.b"/> 
                    </direct> 
                    <direct name="out2out" input="mult_9x9.out" output="mult_9x9_slice.OUT_cfg"> 
                      <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_9x9.out" out_port="mult_9x9_slice.OUT_cfg"/> 
                      <C_constant C="1.89e-13" in_port="mult_9x9.out" out_port="mult_9x9_slice.OUT_cfg"/> 
                    </direct> 
                  </interconnect> 
                </pb_type> 
                <interconnect> 
                  <direct name="a2a" input="divisible_mult_18x18.a" output="mult_9x9_slice[1:0].A_cfg"> 
                    <delay_constant max="2.03e-13" min="1.89e-13" in_port="divisible_mult_18x18.a" out_port="mult_9x9_slice[1:0].A_cfg"/> 
                    <C_constant C="1.89e-13" in_port="divisible_mult_18x18.a" out_port="mult_9x9_slice[1:0].A_cfg"/> 
                  </direct> 
                  <direct name="b2b" input="divisible_mult_18x18.b" output="mult_9x9_slice[1:0].B_cfg"> 
                    <delay_constant max="2.03e-13" min="1.89e-13" in_port="divisible_mult_18x18.b" out_port="mult_9x9_slice[1:0].B_cfg"/> 
                    <C_constant C="1.89e-13" in_port="divisible_mult_18x18.b" out_port="mult_9x9_slice[1:0].B_cfg"/> 
                  </direct> 
                  <direct name="out2out" input="mult_9x9_slice[1:0].OUT_cfg" output="divisible_mult_18x18.out"> 
                    <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_9x9_slice[1:0].OUT_cfg" out_port ="divisible_mult_18x18.out"/> 
                    <C_constant C="1.89e-13" in_port="mult_9x9_slice[1:0].OUT_cfg" out_port="divisible_mult_18x18.out"/> 
                  </direct> 
                </interconnect> 
              </mode> 

              <mode name="mult_18x18"> 
                <pb_type name="mult_18x18_slice" num_pb="1"> 
                  <input name="A_cfg" num_pins="18"/> 
                  <input name="B_cfg" num_pins="18"/> 
                  <output name="OUT_cfg" num_pins="36"/> 

                  <pb_type name="mult_18x18" blif_model=".subckt multiply" num_pb="1"  area="1000"> 
                    <input name="a" num_pins="18"/> 
                    <input name="b" num_pins="18"/> 
                    <output name="out" num_pins="36"/> 
                    <delay_constant max="2.03e-13" min="1.89e-13" in_port="{a b}" out_port="out"/> 
                  </pb_type> 

                  <interconnect> 
                    <direct name="a2a" input="mult_18x18_slice.A_cfg" output="mult_18x18.a"> 
                      <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_18x18_slice.A_cfg" out_port="mult_18x18.a"/> 
                      <C_constant C="1.89e-13" in_port="mult_18x18_slice.A_cfg" out_port="mult_18x18.a"/> 
                    </direct> 
                    <direct name="b2b" input="mult_18x18_slice.B_cfg" output="mult_18x18.b"> 
                      <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_18x18_slice.B_cfg" out_port="mult_18x18.b"/> 
                      <C_constant C="1.89e-13" in_port="mult_18x18_slice.B_cfg" out_port="mult_18x18.b"/> 
                    </direct> 
                    <direct name="out2out" input="mult_18x18.out" output="mult_18x18_slice.OUT_cfg"> 
                      <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_18x18.out" out_port="mult_18x18_slice.OUT_cfg"/> 
                      <C_constant C="1.89e-13" in_port="mult_18x18.out" out_port="mult_18x18_slice.OUT_cfg"/> 
                    </direct> 
                  </interconnect> 
                </pb_type> 
                <interconnect> 
                  <direct name="a2a" input="divisible_mult_18x18.a" output="mult_18x18_slice.A_cfg"> 
                    <delay_constant max="2.03e-13" min="1.89e-13" in_port="divisible_mult_18x18.a" out_port="mult_18x18_slice.A_cfg"/> 
                    <C_constant C="1.89e-13" in_port="divisible_mult_18x18.a" out_port="mult_18x18_slice.A_cfg"/> 
                  </direct> 
                  <direct name="b2b" input="divisible_mult_18x18.b" output="mult_18x18_slice.B_cfg"> 
                    <delay_constant max="2.03e-13" min="1.89e-13" in_port="divisible_mult_18x18.b" out_port="mult_18x18_slice.B_cfg"/> 
                    <C_constant C="1.89e-13" in_port="divisible_mult_18x18.b" out_port="mult_18x18_slice.B_cfg"/> 
                  </direct> 
                  <direct name="out2out" input="mult_18x18_slice.OUT_cfg" output="divisible_mult_18x18.out"> 
                    <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_18x18_slice.OUT_cfg" out_port="divisible_mult_18x18.out"/> 
                    <C_constant C="1.89e-13" in_port="mult_18x18_slice.OUT_cfg" out_port="divisible_mult_18x18.out"/> 
                  </direct> 
                </interconnect> 
              </mode> 
            </pb_type> 
            <interconnect> 
              <direct name="a2a" input="mult_36.a" output="divisible_mult_18x18[1:0].a"> 
                <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_36.a" out_port="divisible_mult_18x18[1:0].a"/> 
                <C_constant C="1.89e-13" in_port="mult_36.a" out_port="divisible_mult_18x18[1:0].a"/> 
              </direct> 
              <direct name="b2b" input="mult_36.b" output="divisible_mult_18x18[1:0].a"> 
                <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_36.b" out_port="divisible_mult_18x18[1:0].a"/> 
                <C_constant C="1.89e-13" in_port="mult_36.b" out_port="divisible_mult_18x18[1:0].a"/> 
              </direct> 
              <direct name="out2out" input="divisible_mult_18x18[1:0].out" output="mult_36.out"> 
                <delay_constant max="2.03e-13" min="1.89e-13" in_port="divisible_mult_18x18[1:0].out" out_port ="mult_36.out"/> 
                <C_constant C="1.89e-13" in_port="divisible_mult_18x18[1:0].out" out_port="mult_36.out"/> 
              </direct> 
            </interconnect> 
          </mode> 

          <mode name="mult_36x36"> 
            <pb_type name="mult_36x36_slice" num_pb="1"> 
              <input name="A_cfg" num_pins="36"/> 
              <input name="B_cfg" num_pins="36"/> 
              <output name="OUT_cfg" num_pins="72"/> 

              <pb_type name="mult_36x36" blif_model=".subckt multiply" num_pb="1" area="4000"> 
                <input name="a" num_pins="36"/> 
                <input name="b" num_pins="36"/> 
                <output name="out" num_pins="72"/> 
                <delay_constant max="2.03e-13" min="1.89e-13" in_port="{a b}" out_port="out"/> 
              </pb_type> 

              <interconnect> 
                <direct name="a2a" input="mult_36x36_slice.A_cfg" output="mult_36x36.a"> 
                  <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_36x36_slice.A_cfg" out_port="mult_36x36.a"/> 
                  <C_constant C="1.89e-13" in_port="mult_36x36_slice.A_cfg" out_port="mult_36x36.a"/> 
                </direct> 
                <direct name="b2b" input="mult_36x36_slice.B_cfg" output="mult_36x36.b"> 
                  <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_36x36_slice.B_cfg" out_port="mult_36x36.b"/> 
                  <C_constant C="1.89e-13" in_port="mult_36x36_slice.B_cfg" out_port="mult_36x36.b"/> 
                </direct> 
                <direct name="out2out" input="mult_36x36.out" output="mult_36x36_slice.OUT_cfg"> 
                  <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_36x36.out" out_port="mult_36x36_slice.OUT_cfg"/> 
                  <C_constant C="1.89e-13" in_port="mult_36x36.out" out_port="mult_36x36_slice.OUT_cfg"/> 
                </direct> 
              </interconnect> 
            </pb_type> 
            <interconnect> 
              <direct name="a2a" input="mult_36.a" output="mult_36x36_slice.A_cfg"> 
                <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_36.a" out_port="mult_36x36_slice.A_cfg"/> 
                <C_constant C="1.89e-13" in_port="mult_36.a" out_port="mult_36x36_slice.A_cfg"/> 
              </direct> 
              <direct name="b2b" input="mult_36.b" output="mult_36x36_slice.B_cfg"> 
                <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_36.b" out_port="mult_36x36_slice.B_cfg"/> 
                <C_constant C="1.89e-13" in_port="mult_36.b" out_port="mult_36x36_slice.B_cfg"/> 
              </direct> 
              <direct name="out2out" input="mult_36x36_slice.OUT_cfg" output="mult_36.out"> 
                <delay_constant max="2.03e-13" min="1.89e-13" in_port="mult_36x36_slice.OUT_cfg" out_port="mult_36.out"/> 
                <C_constant C="1.89e-13" in_port="mult_36x36_slice.OUT_cfg" out_port="mult_36.out"/> 
              </direct> 
            </interconnect> 
          </mode> 



        <fc_in type="frac"> 0.15</fc_in> 
        <fc_out type="frac"> 0.125</fc_out> 
        <pinlocations pattern="spread"/> 

        <gridlocations> 
          <loc type="col" start="4" repeat="5" priority="2"/> 
        </gridlocations> 
      </pb_type>