Mengoptimalkan pengembangan perangkat lunak pra-silikon
Di era teknologi yang bergerak cepat saat ini, pendekatan paling umum untuk menangani kebutuhan pasar adalah system-on-chip (SoC). SoC pada dasarnya adalah prosesor yang dikelilingi oleh akselerator fungsi dan banyak I/O untuk periferal terkait yang didukungnya. Sejak revolusi data seluler pada tahun 2002, penggunaan SoC telah menjadi prasyarat untuk memfasilitasi fitur-fitur utama yang mendefinisikan sebuah smartphone. Dengan cara yang sama, SoC telah menjadi perangkat yang digunakan untuk menciptakan produk konsumen “pintar” seperti TV, mobil, dan pasar Internet-of-Things (IoT) yang terus berkembang.
Meningkatnya permintaan untuk SoC telah menciptakan pasar yang sangat kompetitif. Karena itu, SoC menjadi lebih kompleks, periferal di SoC terus berkembang, dan waktu untuk memasarkan menyusut. Komponen penting untuk mencocokkan kompleksitas pengembangan SoC adalah ketersediaan perangkat lunak. Ada sedikit ruang untuk kesalahan, dan perangkat lunak harus siap sesegera mungkin. Untuk memenuhi tantangan ini, pengembangan perangkat lunak harus dimulai sebelum ketersediaan bagian SoC.
Pengembangan perangkat lunak SoC
Secara tradisional, pengembangan perangkat lunak akan dimulai setelah sampel silikon pertama tiba dari manufaktur. Ketika sampel SoC tiba, tim perangkat lunak dan validasi akan memulai aktivitas pengembangan mereka, dan upaya peningkatan SoC yang besar akan dimulai. Tim yang mengerjakan SoC akan berkumpul dari seluruh dunia untuk berada di bawah satu atap untuk waktu yang terbatas guna mendukung pengembangan SoC.
Pengembangan perangkat lunak umumnya memakan waktu berbulan-bulan setelah sampel pertama tiba sebelum siap untuk diproduksi. Sementara itu, validasi silikon akan selesai, yang akan memberikan sedikit kepercayaan untuk memulai produksi massal untuk produk terkait.
Namun, karena meningkatnya kompleksitas dalam desain SoC, apa yang biasanya memakan waktu berbulan-bulan dalam pengembangan perangkat lunak sekarang dapat berkembang menjadi bertahun-tahun sebelum perangkat lunak siap untuk diproduksi. Meningkatnya jumlah periferal yang didukung dan evolusi periferal tersebut juga menciptakan kesenjangan dalam keahlian materi pelajaran. Tim perangkat lunak akan diminta untuk mengisi celah tersebut dengan menyediakan sumber daya bagi pengembang baru dengan keahlian di domain tersebut (audio, video, USB, Ethernet, dll).
Untuk dapat memberikan perangkat lunak siap produksi di awal proyek, pengembangan perangkat lunak tidak dapat menunggu sampai sampel silikon pertama tersedia. Pendekatan shift-kiri perlu diambil di mana pengembangan perangkat lunak dimulai sedini mungkin dan, bahkan lebih baik, pada saat yang sama ketika desain perangkat keras SoC dimulai. Pengembangan perangkat lunak pra-silikon juga dapat membantu mengidentifikasi bug implementasi SoC dan berpotensi mengurangi biaya perbaikan logam atau tapeout masker penuh. Beberapa metodologi dianggap memenuhi persyaratan ini.
Pendekatan pengembangan pra-silikon
Untuk memulai pengembangan perangkat lunak sebelum tapeout SoC, pengembang dapat menggunakan beberapa pendekatan seperti pembuatan prototipe perangkat lunak, testbench RTL, papan FPGA, emulator perangkat keras, dll. Karena pendekatan ini biasanya berfokus pada modul individual, masing-masing pendekatan ini memiliki tantangannya sendiri karena tujuannya adalah mengembangkan perangkat lunak untuk memunculkan seluruh SOC daripada modul individual. Jika kita memecah masalah menjadi modul yang lebih kecil, hal pertama yang diperlukan sebelum pengembangan driver dapat dimulai adalah pengetahuan tentang setiap prosesor, akselerator, atau periferal yang sedang dikembangkan.
Model Sistem C
Model perilaku C dapat dibangun untuk setiap IP SoC, dan driver perangkat lunak mandiri dapat diuji pada model perilaku ini. Tetapi pendekatan ini memiliki beberapa masalah. Pertama, ada upaya perangkat lunak yang sangat besar yang diperlukan, yang berarti tim perangkat lunak yang besar atau tim model khusus diperlukan untuk mendukung implementasi model itu sendiri. Oleh karena itu pengembangan model tidak akan hemat biaya. Kedua, keakuratan model perilaku tergantung pada interpretasi pengembang. Kesenjangan komunikasi apa pun antara pemilik desain IP dan pengembang model dapat mengakibatkan perilaku yang tidak akurat. Hal ini mengakibatkan banyak upaya yang sia-sia untuk memperbaiki masalah yang terkait dengan salah tafsir desain.
bangku uji RTL
Untuk mengatasi masalah ketidakakuratan ini, pendekatan lain yang dapat diambil adalah dengan menggunakan testbench Verilog. Testbench biasanya dikembangkan dan dikelola oleh tim desain SoC untuk verifikasi. Testbench Verilog didasarkan pada spesifikasi register transfer language (RTL) dari SoC, yang mewakili SoC lengkap, bukan hanya beberapa blok IP. Akibatnya, siklus-ke-siklus akurat. Saat RTL berkembang, testbench bergerak sejalan dengannya. Ini memastikan bahwa ini adalah representasi SoC yang paling mutakhir dan akurat saat sedang dikembangkan. Untuk tujuan pengembangan perangkat lunak, testbench Verilog juga dapat digunakan untuk mengembangkan driver perangkat lunak.
Perangkat lunak yang dikembangkan menggunakan metode ini akurat dan dapat membantu mengurangi waktu pengaktifan perangkat lunak saat sampel SoC tiba setelah proses fabrikasi. Tetapi ada masalah dengan pendekatan ini. Karena testbench Verilog adalah siklus yang akurat, sangat lambat. Mengembangkan perangkat lunak dalam lingkungan seperti itu dimungkinkan, tetapi akan sangat lambat untuk dikembangkan dan di-debug. Mungkin diperlukan waktu berbulan-bulan untuk mengembangkan driver dengan metodologi ini. Verilog testbench dapat digunakan dengan memulai lebih awal – pada dasarnya meningkatkan jumlah waktu yang dibutuhkan dalam pra-silikon untuk memperhitungkan kecepatan solusi yang lambat (tetapi tergantung pada ketersediaan testbench). Dalam pendekatan alternatif, tim perangkat lunak lain dapat menggunakan metodologi ini (hanya bekerja pada pengembangan pra-silikon) – pada dasarnya meningkatkan jumlah sumber daya yang dibutuhkan, sehingga tidak menghilangkan masalah yang serupa dengan masalah dengan metode model perilaku C.
Dalam praktiknya, kami tidak dapat menerima siklus pengembangan yang tidak akurat atau panjang, kami juga tidak dapat menerima biaya tambahan yang diperlukan untuk menduplikasi atau meningkatkan jumlah sumber daya untuk mempertahankan garis waktu siklus desain yang normal. Akibatnya, kita harus mempertimbangkan pendekatan lain untuk pengembangan perangkat lunak pra-silikon. Pendekatan ini akan melibatkan emulasi setiap blok IP SoC pada field-programmable gate array (FPGA).
Prototipe FPGA
FPGA modern cukup cepat, dan karena FPGA dibuat dari RTL, mereka akurat dari siklus ke siklus. Dengan meningkatnya kompleksitas desain, blok IP memiliki lebih banyak gerbang daripada tahun lalu. Bertahun-tahun yang lalu, FPGA dibatasi oleh jumlah gerbang ASIC, yang berarti tidak mungkin untuk memasukkan blok logika yang lebih besar ke dalam satu FPGA. Sekarang dimungkinkan untuk membuat FPGA untuk setiap blok dan mengembangkan driver di dalamnya yang cepat dan akurat.
Metodologi ini lebih cepat dan tidak memerlukan tim perangkat lunak untuk mengalokasikan waktu mereka lebih awal. Karena bekerja dengan setiap blok IP yang terpisah daripada seluruh desain SoC terintegrasi, pendekatan ini membatasi perangkat lunak untuk melakukan pengembangan tingkat SoC penuh. Ini menghilangkan detail integrasi tentang bagaimana berbagai blok IP berfungsi bersama. Oleh karena itu, meskipun metode ini akan menurunkan upaya memunculkan, kesenjangan masih ada karena melewatkan detail integrasi SoC yang bersangkutan. Metode ini dapat menjadi pendekatan yang dapat diterima untuk SoC turunan, yang memiliki jumlah perubahan terbatas, tetapi tidak memiliki cakupan penuh yang diinginkan yang diperlukan untuk pengembangan perangkat lunak SoC.
klik untuk gambar lebih besar
Gambar. Sinopsis solusi pengembangan perangkat lunak pra-silikon. (Sumber:Nitin Garg)
emulator SoC
Untuk mengatasi masalah akurasi, kecepatan, dan cakupan, pendekatan yang lebih kuat dapat diambil, yaitu menggunakan emulator SoC. Ada banyak emulator SoC yang tersedia secara komersial, yang dapat meniru SoC yang sangat besar dan kompleks. Emulator SoC didasarkan pada RTL, sehingga akurat, dan 100 kali lebih cepat daripada Verilog testbench, membuatnya jauh lebih baik untuk pengembangan perangkat lunak. Karena mereka cukup cepat, port OS penuh dan pengembangan driver dapat dilakukan dalam waktu yang wajar. Emulator SoC dapat menskalakan seluruh SoC, sehingga pengembangan perangkat lunak lebih baik disesuaikan dengan SoC produksi akhir.
Menggunakan emulator SoC untuk pengembangan dan desain perangkat lunak pra-silikon mengurangi waktu dan upaya untuk memunculkan perangkat lunak karena dapat menghilangkan atau mengurangi kesenjangan pengembangan secara keseluruhan. Perangkat lunak juga dapat di-debug menggunakan alat JTAG standar pada emulator SoC. Emulator dapat digunakan untuk banyak tugas seperti pengembangan dan verifikasi ROM, pengembangan firmware dan OS, dan verifikasi tingkat IP atau SoC. Fitur lain yang menarik dari emulator SoC adalah mereka dapat menghubungkan SoC ke komponen nyata seperti yang ditampilkan di papan pengembangan. Misalnya, dimungkinkan untuk menghubungkan perangkat NAND nyata atau virtual ke SoC dalam emulator dan mengembangkan ROM, driver OS, dan sejenisnya.
Emulator SoC menawarkan lebih banyak kemungkinan daripada pendekatan pengembangan perangkat lunak lainnya. Emulator dapat menghubungkan SoC secara bersamaan ke UART, I2C, berbagai tampilan, perangkat penyimpanan, perangkat PCIe, perangkat konektivitas seperti Ethernet dan Wi-Fi dan perangkat penangkap seperti kamera dan sensor. Dengan kata lain, emulator SoC dapat mewakili papan pengembangan yang sebenarnya, sehingga seseorang dapat memunculkan kerangka kerja lengkap seperti Android, dan menjalankan kasus penggunaan lengkap sebelum mengeluarkan SoC. Misalnya, mem-boot Android dan mendekode beberapa frame video pada emulator SOC mungkin memakan waktu beberapa jam, tetapi bisa sangat berguna dalam menganalisis kinerja SOC.
Karena meningkatnya ketersediaan periferal pada SoC, emulasi SoC juga sangat berguna untuk benchmarking kinerja, yang dapat menyoroti kelemahan dalam desain sebelum tapeout. Fungsionalitas ini dapat mengurangi risiko atau tapeout berikutnya yang terkait dengan kekurangan kinerja yang tidak teridentifikasi di SoC. Emulator SoC juga memungkinkan untuk menghubungkan SoC ke FPGA pihak ketiga atau model lunak jika diperlukan untuk IP pihak ketiga.
Men-debug masalah setelah kedatangan sampel SoC juga membantu dengan emulator, mengingat fakta bahwa emulator menjalankan OS, driver, dan kerangka kerja yang sama dengan perangkat keras sebenarnya. Seringkali ada kebutuhan untuk mereplikasi masalah yang diamati dalam silikon ke emulator, sehingga dapat diselidiki pada tingkat sinyal. Menggunakan perangkat lunak yang sama antara emulator dan silikon memberikan reproduksi masalah yang lebih cepat dan akurat, memberikan akses penuh ke detail di dalam chip.
Membandingkan pendekatan pengembangan perangkat lunak SoC yang berbeda, menggunakan emulator SoC adalah pilihan yang lebih baik dari perspektif pengembangan pra-silikon dan debug pasca-silikon. Biaya tim perangkat lunak untuk menjalankan emulator SoC mungkin tampak mahal. Namun kontribusi yang diberikan emulator SoC dengan membuat perangkat lunak produksi tersedia lebih cepat dan membantu mengurangi risiko dan biaya, mungkin terbukti sangat berharga ketika mempertimbangkan dampaknya terhadap target pasar dari waktu ke waktu. Pendekatan pengembangan perangkat lunak lainnya tidak memiliki cakupan yang sama, yang berisiko, dan mungkin memerlukan sumber daya tim perangkat lunak yang lebih besar. Semua faktor dipertimbangkan, menggunakan pendekatan pengembangan perangkat lunak selain emulator SoC mungkin terbukti jauh lebih mahal dibandingkan.
Gambar 2. Perbandingan kecepatan eksekusi setiap solusi. (Sumber:Nitin Garg)
Per hukum Moore, jumlah transistor dua kali lipat setiap dua tahun dalam sirkuit terpadu (IC) karena peningkatan fungsionalitas IC. Sebagian besar SoC 64-bit berbasis ARM saat ini memiliki 100-300 juta gerbang logika. Dari pendekatan pengembangan perangkat lunak SoC saat ini, emulator SoC telah terbukti mampu menskalakan dan mendukung kebutuhan tim pengembangan perangkat lunak yang menghadapi tantangan yang terkait dengan meningkatnya kompleksitas SoC di pasar yang kompetitif saat ini.
Referensi
Trimberger, Stephen M. “Tiga Zaman FPGA.” IEEE Xplore PDF Teks Lengkap: 2015, ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7086413.
BRUNET, JEAN-MARIE. “Mengapa Desain SoC Modern Merangkul Emulasi.” Desain Komputasi Tertanam , 5 September 2018, embedded-computing.com/embedded-computing-design/why-modern-soc-designs-embrace-emulation.
“Emulasi Sosial.” Emulasi Sosial , 2019, www.aldec.com/en/solutions/hardware_emulation_solutions/co-emulation–soc-emulation.
“Menjejalkan Lebih Banyak Komponen ke Sirkuit Terpadu.” http://www.cs.utexas.edu/ , 2006, cs.utexas.edu/~fussell/courses/cs352h/papers/moore.pdf.