Memory Block with Reconfigurable Aspect Ratio Example
<pb_type name="memory" height="1">
<input name="addr1" num_pins="14"/>
<input name="addr2" num_pins="14"/>
<input name="data" num_pins="16"/>
<input name="we1" num_pins="1"/>
<input name="we2" num_pins="1"/>
<output name="out" num_pins="16"/>
<clock name="clk" num_pins="1"/>
<mode name="mem_1024x16_sp">
<pb_type name="mem_1024x16_sp" blif_model=".subckt single_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr" num_pins="10" port_class="address"/>
<input name="data" num_pins="16" port_class="data_in"/>
<input name="we" num_pins="1" port_class="write_en"/>
<output name="out" num_pins="16" port_class="data_out"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[9:0]" output="mem_1024x16_sp.addr">
</direct>
<direct name="data1" input="memory.data[15:0]" output="mem_1024x16_sp.data">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_1024x16_sp.we">
</direct>
<direct name="dataout1" input="mem_1024x16_sp.out" output="memory.out[15:0]">
</direct>
<direct name="clk" input="memory.clk" output="mem_1024x16_sp.clk">
</direct>
</interconnect>
</mode>
<mode name="mem_2048x8_dp">
<pb_type name="mem_2048x8_dp" blif_model=".subckt dual_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr1" num_pins="11" port_class="address1"/>
<input name="addr2" num_pins="11" port_class="address2"/>
<input name="data1" num_pins="8" port_class="data_in1"/>
<input name="data2" num_pins="8" port_class="data_in2"/>
<input name="we1" num_pins="1" port_class="write_en1"/>
<input name="we2" num_pins="1" port_class="write_en2"/>
<output name="out1" num_pins="8" port_class="data_out1"/>
<output name="out2" num_pins="8" port_class="data_out2"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[10:0]" output="mem_2048x8_dp.addr1">
</direct>
<direct name="address2" input="memory.addr2[10:0]" output="mem_2048x8_dp.addr2">
</direct>
<direct name="data1" input="memory.data[7:0]" output="mem_2048x8_dp.data1">
</direct>
<direct name="data2" input="memory.data[15:8]" output="mem_2048x8_dp.data2">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_2048x8_dp.we1">
</direct>
<direct name="writeen2" input="memory.we2" output="mem_2048x8_dp.we2">
</direct>
<direct name="dataout1" input="mem_2048x8_dp.out1" output="memory.out[7:0]">
</direct>
<direct name="dataout2" input="mem_2048x8_dp.out2" output="memory.out[15:8]">
</direct>
<direct name="clk" input="memory.clk" output="mem_2048x8_dp.clk">
</direct>
</interconnect>
</mode>
<mode name="mem_2048x8_sp">
<pb_type name="mem_2048x8_sp" blif_model=".subckt single_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr" num_pins="11" port_class="address"/>
<input name="data" num_pins="8" port_class="data_in"/>
<input name="we" num_pins="1" port_class="write_en"/>
<output name="out" num_pins="8" port_class="data_out"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[10:0]" output="mem_2048x8_sp.addr">
</direct>
<direct name="data1" input="memory.data[7:0]" output="mem_2048x8_sp.data">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_2048x8_sp.we">
</direct>
<direct name="dataout1" input="mem_2048x8_sp.out" output="memory.out[7:0]">
</direct>
<direct name="clk" input="memory.clk" output="mem_2048x8_sp.clk">
</direct>
</interconnect>
</mode>
<mode name="mem_4096x4_dp">
<pb_type name="mem_4096x4_dp" blif_model=".subckt dual_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr1" num_pins="12" port_class="address1"/>
<input name="addr2" num_pins="12" port_class="address2"/>
<input name="data1" num_pins="4" port_class="data_in1"/>
<input name="data2" num_pins="4" port_class="data_in2"/>
<input name="we1" num_pins="1" port_class="write_en1"/>
<input name="we2" num_pins="1" port_class="write_en2"/>
<output name="out1" num_pins="4" port_class="data_out1"/>
<output name="out2" num_pins="4" port_class="data_out2"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[11:0]" output="mem_4096x4_dp.addr1">
</direct>
<direct name="address2" input="memory.addr2[11:0]" output="mem_4096x4_dp.addr2">
</direct>
<direct name="data1" input="memory.data[3:0]" output="mem_4096x4_dp.data1">
</direct>
<direct name="data2" input="memory.data[7:4]" output="mem_4096x4_dp.data2">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_4096x4_dp.we1">
</direct>
<direct name="writeen2" input="memory.we2" output="mem_4096x4_dp.we2">
</direct>
<direct name="dataout1" input="mem_4096x4_dp.out1" output="memory.out[3:0]">
</direct>
<direct name="dataout2" input="mem_4096x4_dp.out2" output="memory.out[7:4]">
</direct>
<direct name="clk" input="memory.clk" output="mem_4096x4_dp.clk">
</direct>
</interconnect>
</mode>
<mode name="mem_4096x4_sp">
<pb_type name="mem_4096x4_sp" blif_model=".subckt single_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr" num_pins="12" port_class="address"/>
<input name="data" num_pins="4" port_class="data_in"/>
<input name="we" num_pins="1" port_class="write_en"/>
<output name="out" num_pins="4" port_class="data_out"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[11:0]" output="mem_4096x4_sp.addr">
</direct>
<direct name="data1" input="memory.data[3:0]" output="mem_4096x4_sp.data">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_4096x4_sp.we">
</direct>
<direct name="dataout1" input="mem_4096x4_sp.out" output="memory.out[3:0]">
</direct>
<direct name="clk" input="memory.clk" output="mem_4096x4_sp.clk">
</direct>
</interconnect>
</mode>
<mode name="mem_8192x2_dp">
<pb_type name="mem_8192x2_dp" blif_model=".subckt dual_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr1" num_pins="13" port_class="address1"/>
<input name="addr2" num_pins="13" port_class="address2"/>
<input name="data1" num_pins="2" port_class="data_in1"/>
<input name="data2" num_pins="2" port_class="data_in2"/>
<input name="we1" num_pins="1" port_class="write_en1"/>
<input name="we2" num_pins="1" port_class="write_en2"/>
<output name="out1" num_pins="2" port_class="data_out1"/>
<output name="out2" num_pins="2" port_class="data_out2"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[12:0]" output="mem_8192x2_dp.addr1">
</direct>
<direct name="address2" input="memory.addr2[12:0]" output="mem_8192x2_dp.addr2">
</direct>
<direct name="data1" input="memory.data[1:0]" output="mem_8192x2_dp.data1">
</direct>
<direct name="data2" input="memory.data[3:2]" output="mem_8192x2_dp.data2">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_8192x2_dp.we1">
</direct>
<direct name="writeen2" input="memory.we2" output="mem_8192x2_dp.we2">
</direct>
<direct name="dataout1" input="mem_8192x2_dp.out1" output="memory.out[1:0]">
</direct>
<direct name="dataout2" input="mem_8192x2_dp.out2" output="memory.out[3:2]">
</direct>
<direct name="clk" input="memory.clk" output="mem_8192x2_dp.clk">
</direct>
</interconnect>
</mode>
<mode name="mem_8192x2_sp">
<pb_type name="mem_8192x2_sp" blif_model=".subckt single_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr" num_pins="13" port_class="address"/>
<input name="data" num_pins="2" port_class="data_in"/>
<input name="we" num_pins="1" port_class="write_en"/>
<output name="out" num_pins="2" port_class="data_out"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[12:0]" output="mem_8192x2_sp.addr">
</direct>
<direct name="data1" input="memory.data[1:0]" output="mem_8192x2_sp.data">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_8192x2_sp.we">
</direct>
<direct name="dataout1" input="mem_8192x2_sp.out" output="memory.out[1:0]">
</direct>
<direct name="clk" input="memory.clk" output="mem_8192x2_sp.clk">
</direct>
</interconnect>
</mode>
<mode name="mem_16384x1_dp">
<pb_type name="mem_16384x1_dp" blif_model=".subckt dual_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr1" num_pins="14" port_class="address1"/>
<input name="addr2" num_pins="14" port_class="address2"/>
<input name="data1" num_pins="1" port_class="data_in1"/>
<input name="data2" num_pins="1" port_class="data_in2"/>
<input name="we1" num_pins="1" port_class="write_en1"/>
<input name="we2" num_pins="1" port_class="write_en2"/>
<output name="out1" num_pins="1" port_class="data_out1"/>
<output name="out2" num_pins="1" port_class="data_out2"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[13:0]" output="mem_16384x1_dp.addr1">
</direct>
<direct name="address2" input="memory.addr2[13:0]" output="mem_16384x1_dp.addr2">
</direct>
<direct name="data1" input="memory.data[0:0]" output="mem_16384x1_dp.data1">
</direct>
<direct name="data2" input="memory.data[1:1]" output="mem_16384x1_dp.data2">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_16384x1_dp.we1">
</direct>
<direct name="writeen2" input="memory.we2" output="mem_16384x1_dp.we2">
</direct>
<direct name="dataout1" input="mem_16384x1_dp.out1" output="memory.out[0:0]">
</direct>
<direct name="dataout2" input="mem_16384x1_dp.out2" output="memory.out[1:1]">
</direct>
<direct name="clk" input="memory.clk" output="mem_16384x1_dp.clk">
</direct>
</interconnect>
</mode>
<mode name="mem_16384x1_sp">
<pb_type name="mem_16384x1_sp" blif_model=".subckt single_port_ram" class="memory" num_pb="1" area="1000">
<input name="addr" num_pins="14" port_class="address"/>
<input name="data" num_pins="1" port_class="data_in"/>
<input name="we" num_pins="1" port_class="write_en"/>
<output name="out" num_pins="1" port_class="data_out"/>
<clock name="clk" num_pins="1" port_class="clock"/>
</pb_type>
<interconnect>
<direct name="address1" input="memory.addr1[13:0]" output="mem_16384x1_sp.addr">
</direct>
<direct name="data1" input="memory.data[0:0]" output="mem_16384x1_sp.data">
</direct>
<direct name="writeen1" input="memory.we1" output="mem_16384x1_sp.we">
</direct>
<direct name="dataout1" input="mem_16384x1_sp.out" output="memory.out[0:0]">
</direct>
<direct name="clk" input="memory.clk" output="mem_16384x1_sp.clk">
</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="2" repeat="5" priority="2"/>
</gridlocations>
</pb_type>