generic mux dengan FOR

F

fran6

Guest
Halo,
Aku ingin membangun de multiplekser yang jumlah input yang bisa diperbaiki dengan parameter atau mendefinisikan.Saya ingin tahu apakah orang-2 lembar kode Verilog menghasilkan hasil yang sama dalam FPGA:
dengan:
Kode:

`define NB_WB_DEVICES 3

kawat wb_ack_i;

kawat [ `NB_WB_DEVICES-1: 0] wb_ack_i_mux;

 
Pertama-tama, kode 1 bukanlah MUX, melainkan multi-input gerbang OR.

Sebuah MUX akan memiliki jumlah input dan output, ditambah dengan pemilih (yang memilih input pergi ke output).Contohnya adalah 4-ke-1 mux, yang mempunyai 4 input, 1 output, dan 2 memilih baris (yang dapat mengambil nilai 00, 01, 10 atau 11 dan memilih pergi ke input output).

The 2nd potongan kode tidak akan mensintesis karena untuk loop tidak synthesizable.Seperti yang saya tulis di thread lain:

-----

Ada kesalahan yang banyak orang lakukan ketika mulai program untuk FPGA, terutama jika orang-orang yang sebelumnya diprogram bahasa terstruktur seperti 'C'.

Anda harus berpikir, seluruh desain Anda, bahwa Anda melaksanakan fungsi-fungsi perangkat keras, dan bukan program sekuensial.Anda harus ingat bahwa segala sesuatu terjadi secara paralel.Sebagai contoh, Anda tidak dapat mensintesis untuk loop.A untuk loop adalah hal yang berurutan.Ini bagus untuk simulasi (testbenching) saja.Jadi, untuk merancang sesuatu yang bekerja seperti untuk loop, Anda harus mensintesis sebuah counter, dan melakukan hal yang berbeda tergantung pada output.Penghitung menjadi satu entitas, dan tindakan (logika blok) tergantung pada output counter entitas lain.

-----

Di sini, jika Anda ingin merancang multi-input gerbang OR, dengan lebar parameterizable, cara untuk melakukannya akan

`define NB_WB_DEVICES 3
kawat wb_ack_i;
kawat [ `NB_WB_DEVICES-1: 0] wb_ack_i_mux;

menetapkan wb_ack_i = | wb_ack_i_mux [ `NB_WB_DEVICES-1: 0];

Perhatikan karakter pipa ('|', ATAU) sebelum wb_ack_i_mux di baris di atas.

Yang unary karakter pipa '|' didefinisikan sebelum sebuah identifier adalah sedikit-untuk-bit OR, yang berarti bahwa itu akan mengambil semua bit dalam wb_ack_i_mux [ `NB_WB_DEVICES-1: 0] dan OR itu togetter, memberikan hasil 1-bit.

 
Aku punya perbedaan pendapat dengan tidak loop UNTUK synthesisable.Saya hal yang kedua adalah memberikan masalah karena pernyataan dengan menetapkan UNTUK ....Untuk pernyataan di Verilog hanya dapat digunakan di dalam inital / selalu ...dan menetapkan tidak dapat digunakan di dalam inital / selalu.menetapkan tugas kontinu!
Kedua potongan kode kesalahan akan memberikan bahkan pada simulasi.Silahkan menulis ulang kode ...Anda dapat membuat kode Anda tapi sebagian pengerjaan ulang adalah requried...

 
halo,
terima kasih atas jawaban Anda.
Solusi ini:
Kode:

menetapkan wb_ack_i = | wb_ack_i_mux [ `NB_WB_DEVICES-1: 0];
 
Untuk loop tidak mensintesis.
tetapi sebagai semiconductorman bilang ..ya itu harus berada di dalam suatu proses atau pernyataan selalu Verilog.
Coz i telah menggunakan untuk loop untuk merancang filter FIR dan ya itu bekerja dengan sangat baik ........

 
Aku tahu itu mensintesis dalam 'menghasilkan' blok (Verilog 2001).Untuk dalam blok prosedural, hal itu mungkin tergantung pada synthesizer.

 
Big Boy wrote:

Aku tahu itu mensintesis dalam 'menghasilkan' blok (Verilog 2001).
Untuk dalam blok prosedural, hal itu mungkin tergantung pada synthesizer.
 
Verilog 2001 menambahkan banyak fitur baru.Aku juga masih awal bahasa HDL, dan menemukan bahwa Verilog tampaknya memiliki banyak keterbatasan dalam hal VHDL, tetapi dengan Verilog 2001, Verilog jauh lebih matang, menutup banyak celah yang hilang dari VHDL.

Lihat http://www.sutherland-hdl.com/papers/2000-HDLCon-paper_Verilog-2000.pdf aa sangat baik ini ringkasan dari apa yang baru dalam Verilog 2001.

 

Welcome to EDABoard.com

Sponsor

Back
Top