Saat menulis Verilog, saya menggunakan berbagai "linter" yang akan memberikan kesalahan dan peringatan. Ini adalah simulator saya (ModelSim), kompiler saya (Quartus II), bersama dengan linter (Verilator). Bersama-sama, saya memiliki cakupan yang baik untuk perangkap umum, seperti ketidakcocokan ukuran bus dan kait disimpulkan.
Sayangnya, tidak satu pun dari tiga alat mendeteksi register yang tidak diatur ulang. Untuk melihat apa yang saya maksud, pertimbangkan yang berikut ini.
reg a;
reg b;
always @(posedge clk_i or posedge rst_i) begin
if(rst_i) begin
a <= 1'b0; // Reset a
// Ooops, forgot to reset b
end else begin
// Do stuff with a and b
end
end
Bagaimana saya dapat memiliki alat saya secara otomatis mendeteksi register yang tidak diatur ulang?
Jawaban:
Tak satu pun dari alat yang Anda sebutkan adalah alat linting sungguhan. Alat-alat ini tidak seharusnya memberi Anda cakupan linting yang baik.
Saya melihat dua alat linting komersial dan keduanya memiliki aturan untuk mendeteksi non-reset jepit.
Saya melihat tiga opsi:
Sekarang, # 2 mungkin tidak sesederhana itu. Saya tidak tahu apakah ada linter bebas yang bagus di luar sana, dan yang profesional mahal dan akan membawa Anda banyak waktu untuk pengaturan.
# 3 adalah pendekatan yang akan saya gunakan. Jika Anda tahu bahasa skrip apa pun (Perl, Python, ...) Anda perlu paling banyak satu hari untuk menulis skrip yang mencari jepit yang tidak disetel ulang. Jika Anda tidak tahu bahasa skrip apa pun, ada StackOverflow di mana Anda dapat meminta bantuan - beberapa hari dan Anda selesai. Ini juga akan menambahkan alat lain ke dalam kotak alat pribadi Anda yang sangat dihargai di kalangan desainer front-end - penulisan skrip pemrosesan teks.
Semoga berhasil!
sumber
Ketika saya menjalankan Modelsim pada desain VHDL saya, itu memberi saya peringatan pada Waktu = 0ps tentang logika dengan sinyal input tipe 'X' atau 'U'. Saya lupa pesan peringatan yang tepat. Melewati peringatan ini dapat memberi tahu saya apa yang tidak saya inisialisasi.
sumber
Saya mengandalkan tes fungsional daripada alat linting untuk ini, saya cenderung beralih ulang dan memainkan kembali bagian-bagian dari bangku tes. Jika perangkat berfungsi dengan benar setelah reset, maka Anda telah cukup mereset ruang status, atau bangku tes Anda tidak bagus!
sumber
Terkadang alat desain akan menampilkan serangkaian laporan yang memberi Anda segala macam info menarik. Misalnya, Xilinx mungkin menyebutnya sebagai Laporan Peta, yang memberi tahu Anda komponen logis apa yang dipetakan ke komponen fisik apa.
Pada contoh di atas, reg a akan dipetakan ke FDCE (Flip flop, D, dengan Asynchronous Clear, dan clock Enable), sementara reg b akan dipetakan ke FDE (Flip flop, D, dan clock Enable). Ini akan memberi tahu Anda bahwa reg b tidak memiliki reset.
sumber