Setelah menemukan artikel "
Menghancurkan monopoli ... ", penulis, sebagai pribadi, meskipun sangat jauh dari
EDA , tetapi secara alami ingin tahu, tidak terlalu malas untuk mengikuti tautan dan tanpa sadar menangkap dirinya berpikir bahwa salah satu solusi teknis utama adalah penggunaan deretan sel
standar (
sel standar) tata letak) - terlihat sangat kontroversial.
Ya, pengaturan ini intuitif, karena kami menulis dan membaca dengan cara yang serupa, di samping itu, secara teknologi sederhana untuk mengatur sel dalam baris, sangat mudah untuk menghubungkan bus VDD dan GND. Di sisi lain, masalah kombinatorial yang sulit muncul, perlu untuk memotong sirkuit menjadi potongan-potongan linier dan mengatur potongan-potongan ini sedemikian rupa untuk (secara kasar) meminimalkan total panjang sendi.
Dan tentu saja, muncul pertanyaan apakah ada solusi alternatif ... itu bagaimana jika ...
Gambar 1 baris khas sel standar ( dari sini )Bagaimana jika
Dari sudut pandang pengurangan panjang ikatan total, akan berguna untuk mengatur sel-sel standar di sepanjang salah satu
kurva ex
sweeping : Peano atau Hilbert.
Kurva ini terdiri dari massa berbagai "sudut dan celah", pasti ada konfigurasi di mana sel standar yang terhubung rata-rata berdekatan satu sama lain.
Atau dapat berfungsi sebagai iterasi nol untuk pengoptimalan lebih lanjut.
Gambar 2 Kurva Hilbert, bidang 8X8 dan 64X64- Kurva yang menyapu mirip dengan diri sendiri, yang cocok dengan konsep keseluruhan.
- Mereka memiliki lokalitas yang tinggi yaitu titik yang terletak di suatu tempat di dekat kurva kemungkinan besar berada di dekat dan di luar angkasa.
- Berisi jaringan saluran yang terorganisir secara hierarkis.
- Untuk rangkaian logis, Anda dapat memilih kuadrat atau persegi panjang yang cocok 1x2,2x1 di mana ia ditempatkan secara berlebihan dan "memindahkan" sepanjang kurva sapuan (lihat Gambar 3) untuk memilih geometri yang optimal, karena ini hanya satu derajat kebebasan dengan fungsi biaya yang agak murah .
- Kenyamanan koneksi ban (VDD / GND) akan tetap ada.
- ...
Gambar 3 Tiga buah kurva Hilbert dengan shift yang berbeda.Jadi:
- kami akan bereksperimen dengan kurva Hilbert
- kami akan bereksperimen dalam kotak 64X64 (Gambar 3)
- pada langkah dasar kurva dapat ada beberapa sel dan ruang standar - berapa banyak tepatnya dan dalam urutan apa - parameter percobaan
- semua langkah dasar diatur secara identik
- langkah-langkah dasar berjalan dengan tumpang tindih yaitu jika langkah dimulai dengan sel standar, harus ada ruang di ujungnya, dan sebaliknya
- semua spasi dan sel standar berukuran sama - 1X1
- semua sel diserialisasi dalam urutan tertentu, urutan ini juga merupakan parameter
- satu parameter lagi adalah pergeseran dari awal kurva (titik (0,0)), mulai dari mana kita akan mengatur sel standar dalam urutan tertentu
- panjang ikatan antara sel standar dihitung menurut L1 (jarak Manhattan)
- jumlah panjang semua obligasi adalah nilai yang diinginkan, setelah menentukan jumlah minimum, kita akan menemukan lokasi yang optimal
Dan sebagai kelinci percobaan, mari kita ambil penambah 8-bit. Ini cukup sederhana, tetapi tidak sepele. Ada banyak elemen dan koneksi di dalamnya untuk merasakan potensi pro dan kontra. Pada saat yang sama, tidak ada cukup dari mereka untuk dapat bereksperimen "di lutut".
Penghancur
4 adalah diagram skematis dari penambah bit tunggal penuhGambar 5 Jadi lihat utilitas grafik ini Neato dari graphwiz6 penambah yang ditandatangani 8-bit, diambil di siniTapi kami hanya akan bekerja dengan bilangan bulat, tanpa flag kesalahan W.
Gbr. 7 Jadi penambah 8-bit melihat utilitas titik graphwiz.Itu terlihat seperti tarian angsa kecil.
Gambar. 8 adalah grafik yang sama setelah optimasi menggunakan neato.Hitungan DOTdigraf sum8 {
a_0;
a_1;
a_2;
a_3;
a_4;
a_5;
a_6;
a_7;
b_0;
b_1;
b_2;
b_3;
b_4;
b_5;
b_6;
b_7;
s_0;
s_1;
s_2;
s_3;
s_4;
s_5;
s_6;
s_7;
p0;
p1;
and1_0;
and1_1;
and1_2;
and1_3;
and1_4;
and1_5;
and1_6;
and1_7;
and2_0;
and2_1;
and2_2;
and2_3;
and2_4;
and2_5;
and2_6;
and2_7;
and3_0;
and3_1;
and3_2;
and3_3;
and3_4;
and3_5;
and3_6;
and3_7;
and4_0;
and4_1;
and4_2;
and4_3;
and4_4;
and4_5;
and4_6;
and4_7;
or1_0;
or1_1;
or1_2;
or1_3;
or1_4;
or1_5;
or1_6;
or1_7;
or2_0;
or2_1;
or2_2;
or2_3;
or2_4;
or2_5;
or2_6;
or2_7;
or3_0;
or3_1;
or3_2;
or3_3;
or3_4;
or3_5;
or3_6;
or3_7;
or4_0;
or4_1;
or4_2;
or4_3;
or4_4;
or4_5;
or4_6;
or4_7;
not1_0;
not1_1;
not1_2;
not1_3;
not1_4;
not1_5;
not1_6;
not1_7;
a_0 -> and1_0;
a_1 -> and1_1;
a_2 -> and1_2;
a_3 -> and1_3;
a_4 -> and1_4;
a_5 -> and1_5;
a_6 -> and1_6;
a_7 -> and1_7;
b_0 -> and1_0;
b_1 -> and1_1;
b_2 -> and1_2;
b_3 -> and1_3;
b_4 -> and1_4;
b_5 -> and1_5;
b_6 -> and1_6;
b_7 -> and1_7;
a_0 -> or1_0;
a_1 -> or1_1;
a_2 -> or1_2;
a_3 -> or1_3;
a_4 -> or1_4;
a_5 -> or1_5;
a_6 -> or1_6;
a_7 -> or1_7;
b_0 -> or1_0;
b_1 -> or1_1;
b_2 -> or1_2;
b_3 -> or1_3;
b_4 -> or1_4;
b_5 -> or1_5;
b_6 -> or1_6;
b_7 -> or1_7;
and1_0 -> or3_0;
and1_1 -> or3_1;
and1_2 -> or3_2;
and1_3 -> or3_3;
and1_4 -> or3_4;
and1_5 -> or3_5;
and1_6 -> or3_6;
and1_7 -> or3_7;
and1_0 -> and3_0;
and1_1 -> and3_1;
and1_2 -> and3_2;
and1_3 -> and3_3;
and1_4 -> and3_4;
and1_5 -> and3_5;
and1_6 -> and3_6;
and1_7 -> and3_7;
or1_0 -> and2_0;
or1_1 -> and2_1;
or1_2 -> and2_2;
or1_3 -> and2_3;
or1_4 -> and2_4;
or1_5 -> and2_5;
or1_6 -> and2_6;
or1_7 -> and2_7;
or1_0 -> or2_0;
or1_1 -> or2_1;
or1_2 -> or2_2;
or1_3 -> or2_3;
or1_4 -> or2_4;
or1_5 -> or2_5;
or1_6 -> or2_6;
or1_7 -> or2_7;
and2_0 -> or3_0;
and2_1 -> or3_1;
and2_2 -> or3_2;
and2_3 -> or3_3;
and2_4 -> or3_4;
and2_5 -> or3_5;
and2_6 -> or3_6;
and2_7 -> or3_7;
or2_0 -> and4_0;
or2_1 -> and4_1;
or2_2 -> and4_2;
or2_3 -> and4_3;
or2_4 -> and4_4;
or2_5 -> and4_5;
or2_6 -> and4_6;
or2_7 -> and4_7;
and3_0 -> or4_0;
and3_1 -> or4_1;
and3_2 -> or4_2;
and3_3 -> or4_3;
and3_4 -> or4_4;
and3_5 -> or4_5;
and3_6 -> or4_6;
and3_7 -> or4_7;
or3_0 -> not1_0;
or3_1 -> not1_1;
or3_2 -> not1_2;
or3_3 -> not1_3;
or3_4 -> not1_4;
or3_5 -> not1_5;
or3_6 -> not1_6;
or3_7 -> not1_7;
not1_0 -> and4_0;
not1_1 -> and4_1;
not1_2 -> and4_2;
not1_3 -> and4_3;
not1_4 -> and4_4;
not1_5 -> and4_5;
not1_6 -> and4_6;
not1_7 -> and4_7;
and4_0 -> or4_0;
and4_1 -> or4_1;
and4_2 -> or4_2;
and4_3 -> or4_3;
and4_4 -> or4_4;
and4_5 -> or4_5;
and4_6 -> or4_6;
and4_7 -> or4_7;
or4_0 -> s_0;
or4_1 -> s_1;
or4_2 -> s_2;
or4_3 -> s_3;
or4_4 -> s_4;
or4_5 -> s_5;
or4_6 -> s_6;
or4_7 -> s_7;
p0 -> and2_0;
p0 -> or2_0;
p0 -> and3_0;
or3_0 -> and2_1;
or3_0 -> or2_1;
or3_0 -> and3_1;
or3_1 -> and2_2;
or3_1 -> or2_2;
or3_1 -> and3_2;
or3_2 -> and2_3;
or3_2 -> or2_3;
or3_2 -> and3_3;
or3_3 -> and2_4;
or3_3 -> or2_4;
or3_3 -> and3_4;
or3_4 -> and2_5;
or3_4 -> or2_5;
or3_4 -> and3_5;
or3_5 -> and2_6;
or3_5 -> or2_6;
or3_5 -> and3_6;
or3_6 -> and2_7;
or3_6 -> or2_7;
or3_6 -> and3_7;
or3_7 -> p1;
}
Eksperimen 1
- langkah dasar dari kurva Hilbert - (pass, cell, cell, pass)
- simpul grafik (sel satuan) diurutkan berdasarkan abjad
Gbr.9 pada X - bergeser dari awal, pada Y - panjang semua jalurJarak minimum (yang pertama) pada pergeseran 207 (Total panjang semua ikatan adalah 1968), mari kita lihat seperti apa pengaturan optimal ini.
Gambar 10 adalah grafik optimal untuk shift 207, itu tidak terlihat sangat bagus.Eksperimen 2
- langkah dasar dari kurva Hilbert - (pass, cell, cell, pass)
- simpul grafik (sel satuan) dalam urutan alami (seperti yang muncul dalam deskripsi grafik, lihat deskripsi grafik di atas) -
11 pada X - pergeseran dari awal, pada Y - panjang semua jalurGambar. 12 grafik optimal untuk geser 11 panjang 750Eksperimen 3
- langkah dasar dari kurva Hilbert - (pass, cell, cell, pass)
- urutan simpul ditentukan dengan melintasi lebar grafik, simpul tanpa tautan di awal daftar, akhir pekan di akhir
Gbr.13 pada X - bergeser dari awal, pada Y - panjang semua jalurGbr. 14 Pengaturan optimal - shift 3, panjang total 1451
Letakkan semua simpul input di awal dan output di akhir tidak terlalu bagus
sebuah ide.Eksperimen 4
- langkah dasar dari kurva Hilbert - (lulus, sel, sel) Sic!
- urutan vertex adalah alami, seperti dalam percobaan 2
Gbr.15 pada X - bergeser dari awal, pada Y - panjang semua jalurGbr. 16 Pengaturan optimal - shift 10, total panjang 503Eksperimen 5
Kita perlu melakukan sesuatu dengan IO, kita mendefinisikannya di post-processing, yaitu untuk setiap shift
membangun susunan tanpa simpul IO, lalu buat kerangka tingkat absorben di sekitar grafik, terapkan simpul IO ke titik terdekat yang tidak diduduki bingkai dan hitung panjang akhir
- langkah dasar kurva Hilbert - (lewati, sel, sel)
- urutan simpul ditentukan dengan melihat lebar, tetapi tanpa simpul IO
Gbr.17 pada X adalah pergeseran dari awal, pada Y adalah panjang dari semua jalurGambar. 18 Lokasi optimal adalah pergeseran 607, panjang total 484, rata-rata 3,33793Kelihatannya bagus, tetapi bagaimana jika kita mengoptimalkan bukan total panjang jalan, tetapi jumlahnya dengan luas persegi panjang yang diduduki. Dimensinya berbeda, jadi kami akan berasumsi bahwa kami menghitung bukan panjang lintasan, tetapi area di bawah lintasan.
Eksperimen 6
Parameternya sama seperti pada percobaan 5, kami mengoptimalkan area.
Gbr.19 pada X - bergeser dari awal, pada Y - panjang semua jalurGbr. 20 Pengaturan optimal - shift 966, panjang total 639, rata-rata 3,30345Persegi panjang itu ternyata cukup panjang. Tetapi bagaimana jika kita menganggap bukan bidang persegi panjang, tetapi kuadrat dari sisi miring, mendorong kita ke bentuk yang lebih persegi?
Eksperimen 7
Parameternya sama seperti pada percobaan 5, kami mengoptimalkan kuadrat dari sisi miring.
Gbr.21 pada X adalah pergeseran dari awal, pada Y adalah panjang dari semua jalurGbr. 22 Pengaturan optimal - shift 70, panjang total 702, rata-rata 3,46207Eksperimen 8
- langkah dasar dari kurva Hilbert - (sel, lewati) Sic!
- urutan simpul ditentukan dengan melihat lebar, tetapi tanpa simpul IO
Kami berasumsi bahwa biaya berjalan di Y adalah dua kali lipat dari pada X, ini lebih dekat dengan kenyataan.
Gbr.23 pada X adalah pergeseran dari awal, pada Y adalah panjang dari semua jalurGbr. 24 Pengaturan optimal - shift 344, total panjang 650, rata-rata 3,8Kesimpulan
Pendahuluan "Pilihan Editor" - Eksperimen 6.
Akan menyenangkan untuk mengatur simpul IO, tetapi ini membutuhkan petunjuk dari samping,
di mana tepatnya (arah) kelas simpul ini harus ditempatkan.
Tapi pertama-tama saya ingin mendengar pendapat para ahli.
PS : terima kasih kepada
YuriPanchul dan
andy_p untuk kurangnya reaksi negatif refleks.
UPD (11/02/2019): menambahkan βpercobaan 8β, di mana sel standar terletak di simpul kurva Hilbert, mis. ketat pada kisi persegi. Selain itu, di satu sisi, mereka digabungkan menjadi baris tradisional, dan di sisi lain, mereka berada di sepanjang kurva Hilbert.