1. Apakah pernyataan assign dalam Verilog? [Panduan Pemula]
Apa itu Verilog HDL?
Verilog HDL (Bahasa Penerangan Perkakasan) ialah bahasa penerangan perkakasan yang digunakan untuk memodelkan litar digital. Berbeza dengan bahasa pengaturcaraan perisian, Verilog menggambarkan struktur dan kelakuan perkakasan (litar logik), yang kemudian boleh disimulasikan atau disintesis menjadi perkakasan sebenar seperti FPGA dan ASIC.
Antara konstruk yang paling kerap digunakan dalam Verilog ialah pernyataan assign. Ia sangat penting apabila menggambarkan litar kombinasi.Apa yang dilakukan pernyataan assign?
Pernyataan assign digunakan untuk melakukan penetapan berterusan kepada isyarat jenis wayar. “Berterusan” bermaksud setiap kali isyarat input berubah, output akan dikemas kini serta-merta untuk mencerminkan perubahan tersebut.
Sebagai contoh, untuk melakukan AND logik bagi dua isyarat dan menghantar hasilnya ke output, anda boleh menulis:assign out = in1 & in2;
Baris tunggal ini melaksanakan fungsi “sentiasa memacu out dengan AND in1 dan in2.” Dengan cara ini, assign memainkan peranan menentukan sambungan perkakasan secara eksplisit (pemasangan wayar).Menggunakan assign dalam litar kombinasi
Litar digital secara umum dibahagikan kepada litar kombinasi dan litar berurutan:- Litar kombinasi: output berubah serta-merta sebagai respons kepada input (contoh: penambah, pintu logik)
- Litar berurutan: menggunakan jam atau elemen penyimpanan untuk mengekalkan keadaan sepanjang masa (contoh: flip‑flop, kaunter)
Pernyataan assign digunakan dalam yang pertama, litar kombinasi. Oleh kerana output mesti sentiasa mencerminkan keadaan input semasa, penetapan berterusan adalah pendekatan yang paling sesuai.Mengapa pernyataan assign penting untuk pemula?
Pada peringkat awal mempelajari Verilog, memahami litar kombinasi adalah penting. Pernyataan assign adalah cara utama untuk menggambarkannya. Dari pintu logik mudah hingga penambah, perbandingan, dan ungkapan bersyarat, banyak komponen penting dapat dinyatakan secara ringkas dengan assign.
Selain itu, penggunaan assign membantu pemula memahami dengan jelas aliran isyarat sebagai perkakasan sebenar. Intuisi ini penting kemudian apabila bekerja dengan litar berurutan yang lebih kompleks atau testbench.Ringkasan: Kuasai asas pernyataan assign
Pernyataan assign Verilog ialah asas untuk menggambarkan litar kombinasi. Oleh kerana ia membolehkan anda menyatakan pemasangan wayar dan operasi logik secara ringkas, ia merupakan salah satu konstruk pertama yang harus dikuasai pemula ketika mempelajari Verilog.
2. Sintaks Asas dan Penggunaan Pernyataan assign dalam Verilog
Sintaks Asas assign
Pernyataan assign dalam Verilog mempunyai sintaks yang sangat mudah. Ia kebanyakannya digunakan untuk menetapkan ungkapan logik atau aritmetik kepada isyarat jenis wayar. Bentuk asasnya seperti berikut:assign output_signal = expression;
“Ungkapan” boleh mengandungi isyarat lain, operator logik, atau operasi bitwise. Perlu diingat bahawa assign hanya boleh digunakan dengan isyarat jenis wayar dan bukan dengan jenis reg.Contoh 1: Operasi Logik Ringkas
Salah satu penggunaan paling umum assign ialah untuk menggambarkan pintu logik. Berikut ialah contoh pintu AND, OR, dan XOR yang ditulis dengan assign:assign and_out = a & b; // AND gate
assign or_out = a | b; // OR gate
assign xor_out = a ^ b; // XOR gate
Dengan menggunakan operator, anda boleh menggabungkan pelbagai isyarat dan menetapkan hasilnya secara berterusan kepada output.Contoh 2: Operasi Peringkat Bit
Pernyataan assign juga menyokong operasi peringkat bit, seperti mengekstrak atau menggabungkan bit tertentu:assign upper_4bits = data[7:4]; // Extract the upper 4 bits of an 8-bit signal
assign lower_4bits = data[3:0]; // Extract the lower 4 bits
assign combined = {data1[3:0], data2[3:0]}; // Concatenate two 4-bit signals into 8 bits
Ini menjadikan assign sangat berguna untuk menyusun semula atau memotong data.Apa Maksud “Penetapan Berterusan”?
In Verilog, penugasan yang dibuat dengan assign dipanggil penugasan berterusan. Ini bermakna output dikemas kini serta‑merta setiap kali input berubah.
Berbeza dengan pernyataan penugasan perisian, penugasan perkakasan berkelakuan seolah‑olah isyarat disambungkan secara fizikal. Dengan kata lain, assign membolehkan anda menggambarkan propagasi isyarat yang meniru perkakasan sebenar.Menentukan Kelewatan dalam assign
Verilog juga membenarkan anda menentukan kelewatan dalam pernyataan assign. Walaupun ini terutamanya untuk simulasi (dan sering diabaikan semasa sintesis), ia boleh berguna untuk mengesahkan kelakuan:assign #5 out = a & b; // Delay the AND result by 5 time units before assigning to out
“#5” mewakili kelewatan berdasarkan unit masa yang ditetapkan. Ia membantu dalam simulasi yang kompleks tetapi tidak seharusnya dijadikan asas untuk sintesis perkakasan.Contoh: Menggunakan Ekspresi Kondisional dalam assign
Pernyataan assign juga boleh menggunakan operator kondisional (ternary) untuk melaksanakan kelakuan gaya if‑else yang ringkas:assign out = sel ? data1 : data2;
Ini bermakna: “jika sel ialah 1, output data1; jika tidak, output data2.” Ia biasanya digunakan untuk multiplexer atau penugasan bersyarat.Ringkasan: Menguasai Sintaks assign
Pernyataan assign dalam Verilog adalah konstruksi yang sederhana namun kuat. Ia menyokong operasi logik, manipulasi bit, percabangan bersyarat, dan bahkan penugasan berkelewatan untuk simulasi.
Bagi pemula, menguasai penggunaan asas assign adalah langkah pertama untuk mereka bentuk litar kombinasi dengan yakin dalam Verilog.
3. Hubungan Antara assign dan wire: Dari Pengisytiharan ke Penggunaan
Hubungan Asas Antara assign dan wire
Salah satu peraturan paling penting ketika menggunakan pernyataan assign dalam Verilog ialah assign hanya boleh digunakan dengan isyarat yang diisytiharkan sebagai wire. Jika anda mengabaikan peraturan ini, anda akan cepat menemui ralat sintaks.
Penugasan yang dibuat dengan assign dikenali sebagai penugasan berterusan, dan penugasan berterusan hanya dibenarkan pada isyarat jenis wire.Apa itu wire? — Anggap Ia Sebagai Sambungan Fizikal
Seperti namanya, jenis wire dalam Verilog memodelkan sambungan wayar fizikal dalam litar. Ia mewakili garis isyarat yang sentiasa membawa nilai yang dipacu oleh output lain.
Dengan kata lain, wire tidak menyimpan nilai secara sendiri. Sebaliknya, ia menerima nilai daripada pemacu lain (seperti pernyataan assign atau output modul) dan menyebarkannya.
Contohnya:wire a, b, out;
assign out = a & b; // out is always driven by the AND of a and b
Di sini, out mesti diisytiharkan sebagai wire. Jika ia diisytiharkan sebagai reg, penyusun akan menghasilkan ralat.Mengapa assign Tidak Boleh Digunakan dengan reg
Jenis reg digunakan untuk menyimpan nilai dalam logik berurutan. Pembolehubah reg biasanya dikemas kini di dalam blok always, bergantung pada syarat atau peristiwa jam. Ia tidak dimaksudkan untuk dipacu secara berterusan oleh assign.
Sebagai contoh, kod ini tidak sah:reg out;
assign out = a & b; // ERROR! assign cannot drive a reg
Oleh itu, peraturan umum ialah: gunakan assign dengan wire, dan gunakan always dengan reg.Mengisytiharkan Jenis wire dan Menggunakan Bus
Jenis wire boleh mewakili bukan sahaja isyarat satu bit tetapi juga bus berbilang bit:wire [3:0] a, b;
wire [3:0] out;
assign out = a & b; // Bitwise AND for each bit
Apabila mengendalikan isyarat berbilang bit, anda mesti menyatakan lebar wire secara eksplisit. Selain itu, sintaksnya sama seperti untuk isyarat satu bit.wire dalam Sambungan Modul
Dalam Verilog, wire juga biasanya digunakan untuk menyambungkan isyarat antara modul. Sebagai contoh:wire result;
module1 u1 (.a(a), .b(b), .out(result));
module2 u2 (.in(result), .y(y));
Ini menunjukkan bahawa wire bukan sahaja diperlukan untuk assign, tetapi juga berfungsi sebagai elemen sambungan asas di seluruh reka bentuk Verilog.Ringkasan: Memahami wire Adalah Kunci untuk Menggunakan assign dengan Betul
Untuk menggunakan pernyataan assign dengan betul dalam Verilog, anda mesti memahami jenis wire. wire ialah “sambungan” yang secara berterusan menerima nilai daripada isyarat lain, dan assign mendefinisikan sambungan itu.
Sebaliknya, assign tidak boleh digunakan dengan reg; reg mesti dipacu di dalam blok always. Memahami perbezaan ini memastikan penerangan perkakasan yang tepat dan cekap.
4. Apa Perbezaan Antara assign dan always? [Kekeliruan Biasa bagi Pemula]
Mengapa Pemula Keliru Antara “assign” dan “always”?
Salah satu sumber kekeliruan terbesar bagi pemula yang belajar Verilog ialah perbezaan antara pernyataan assign dan blok always. Kedua‑duanya adalah cara untuk menetapkan nilai kepada isyarat, tetapi digunakan dalam konteks yang berbeza dan dengan jenis data yang berbeza.
Dalam bahagian ini, kami akan menjelaskan perbezaan asas mereka dan cara menggunakan setiap satu dengan betul.Ciri-ciri dan Kes Penggunaan assign
Pertama, mari tinjau ciri utama pernyataan assign:- Tujuan : Menggambarkan logik kombinasi
- Jenis data : Hanya boleh digunakan dengan
wire - Masa penetapan : Penetapan berterusan (isyarat sentiasa dipacu)
- Kata kunci :
assign
Contoh: Gerbang AND 2‑input (assign)
wire a, b;
wire out;
assign out = a & b;
Di sini, apabila input berubah, output terus dikemas kini. Ini adalah kelakuan tipikal litar kombinasi.Ciri-ciri dan Kes Penggunaan always
Blok always, sebaliknya, memberikan fleksibiliti lebih. Ia biasanya digunakan untuk litar berurutan, percabangan bersyarat, atau logik yang diselaraskan dengan jam.- Tujuan : Menggambarkan logik berurutan atau tingkah laku yang lebih kompleks
- Jenis data : Digunakan untuk menetapkan nilai kepada
reg - Masa penetapan : Penetapan bersyarat (dijalankan apabila keadaan pencetus dipenuhi)
- Kata kunci :
always
Contoh: Daftar Diselaraskan Jam (always)
reg out;
always @(posedge clk) begin
out <= a & b;
end
Di sini, hasil a & b disimpan dalam out pada tepi naik jam. Untuk logik yang melibatkan masa atau keadaan, blok always diperlukan.Membandingkan wire dan reg
| Ciri | kawat | reg |
|---|
| Di mana digunakan | penyataan penetapan | di dalam blok sentiasa |
| Stores data? | Tidak (hanya mempropagasi nilai) | Ya (memegang nilai) |
| Tetapan nilai awal | Tidak dibenarkan | Dibenarkan (dalam simulasi) |
| Gaya Tugas | Penugasan berterusan | Penugasan Berhenti / Tidak Berhenti |
Kerana assign dan always sangat berkait rapat dengan jenis data, adalah berkesan untuk mempelajarinya sebagai konsep berpasangan.Yang Mana Perlu Anda Gunakan?
Berikut ialah panduan asas untuk memilih antara assign dan always:| Matlamat | Gunakan | Jenis data |
|---|
| Operasi logik (kombinasi) | tugaskan | kawat |
| Penyimpanan berkadar jam (berurutan) | selalu | reg |
| Percabangan bersyarat | sentiasa | reg |
| Pengkabelan ringkas / output logik | tugaskan | kawat |
Contoh: Gunakan always untuk pernyataan if
reg y;
always @(a or b) begin
if (a == 1) y = b;
else y = 0;
end
Jenis cabang bersyarat ini tidak dapat dinyatakan dengan assign. Satu kaedah yang baik ialah: jika anda memerlukan syarat, kawalan aliran, atau penyimpanan, gunakan always.Bolehkah Anda Menggunakan assign dan always Bersama‑sama?
Anda tidak boleh memacu isyarat yang sama daripada kedua‑dua assign dan always. Melakukannya menyebabkan konflik dan ralat sintesis kerana isyarat mempunyai banyak pemacu.
Contoh tidak sah:assign y = a & b;
always @(posedge clk)
y <= a | b; // ERROR: y is driven by both assign and always
Setiap isyarat mesti mempunyai satu pemacu yang jelas.Ringkasan: Membezakan Antara assign dan always
Apabila mereka bentuk dalam Verilog, pilihan anda antara assign atau always bergantung pada bila dan bagaimana anda mahu isyarat dikemas kini:- Logik langsung, sentiasa dikemas kini →
assign dengan wire - Logik yang melibatkan masa, syarat, atau penyimpanan →
always dengan reg
Dengan mengikuti peraturan ini, pemula dapat mengelakkan salah satu halangan paling biasa dalam Verilog: kekeliruan antara assign dan always. 
5. Contoh Praktikal Litar Kombinasi Menggunakan assign [With Diagrams]
Apa Itu Litar Kombinasi?
Mari kita mulakan dengan asas. Litar kombinasi ialah litar di mana output bergantung hanya pada nilai input semasa. Oleh kerana ia tidak mempunyai elemen memori, output ditentukan serta-merta tanpa bergantung pada keadaan lepas.
Dalam Verilog, pernyataan assign adalah cara yang paling sesuai untuk menggambarkan jenis litar ini.Gerbang Logik Asas (AND, OR, XOR)
Berikut ialah contoh cara melaksanakan pelbagai gerbang logik asas menggunakan assign:module logic_gates(
input wire a,
input wire b,
output wire and_out,
output wire or_out,
output wire xor_out
);
assign and_out = a & b;
assign or_out = a | b;
assign xor_out = a ^ b;
endmodule
Modul ini mengambil a dan b sebagai input dan menghasilkan output bagi operasi AND, OR, dan XOR. Oleh kerana tiada syarat atau jam diperlukan, semuanya dikendalikan dengan assign.Implementasi Half Adder
Contoh klasik litar kombinasi ialah Half Adder. Ia menambah dua input binari satu bit dan menghasilkan satu bit jumlah serta satu bit bawa sebagai output.Persamaan Logik
- Sum = A ⊕ B (XOR)
- Carry = A · B (AND)
Implementasi Verilog
module half_adder(
input wire a,
input wire b,
output wire sum,
output wire carry
);
assign sum = a ^ b;
assign carry = a & b;
endmodule
Half Adder ini boleh diterangkan dengan hanya dua pernyataan assign. Ia merupakan contoh peringkat pemula yang sempurna untuk berlatih assign.Implementasi Full Adder
Seterusnya, mari lihat Full Adder. Litar ini menambah tiga input satu bit (A, B, dan Cin) dan menghasilkan output Sum serta Carry.Persamaan Logik
- Sum = A ⊕ B ⊕ Cin
- Carry = (A · B) + (Cin · (A ⊕ B))
Implementasi Verilog
module full_adder(
input wire a,
input wire b,
input wire cin,
output wire sum,
output wire cout
);
wire ab_xor;
assign ab_xor = a ^ b;
assign sum = ab_xor ^ cin;
assign cout = (a & b) | (cin & ab_xor);
endmodule
Di sini, kami memperkenalkan isyarat antara ab_xor menggunakan assign. Ini menunjukkan bagaimana bahkan logik berbilang langkah dapat diekspresikan dengan bersih menggunakan wire + assign.Implementasi Multiplexer (MUX)
Satu contoh umum lain ialah Multiplexer 2-ke-1 (MUX), yang memilih antara dua input berdasarkan isyarat kawalan:module mux2to1(
input wire a,
input wire b,
input wire sel,
output wire y
);
assign y = sel ? b : a;
endmodule
Jika sel ialah 1, output ialah b; jika sel ialah 0, output ialah a. Operator ternari (kondisional) dengan assign menjadikannya sangat ringkas.Amalan Terbaik Semasa Menggunakan assign
- Deklarasikan isyarat sebagai
wire : assign tidak dapat memacu reg. - Tulis satu assign bagi setiap output : elakkan satu baris yang terlalu kompleks; pastikan ia mudah dibaca.
- Gunakan wire antara : pecahkan logik kompleks kepada langkah‑langkah untuk kejelasan.
Ringkasan: Litar Kombinasi Boleh Dilaksanakan Sepenuhnya dengan assign
Seperti yang ditunjukkan dalam bahagian ini, litar kombinasi asas semuanya boleh ditulis menggunakan pernyataan assign. Gerbang logik, penambah, dan multiplexer dapat diekspresikan dengan lancar dan jelas.
Bagi pemula, berlatih dengan litar‑litar mudah ini adalah cara terbaik untuk menjadi selesa dengan assign dan secara semula jadi membina pemahaman tentang aliran isyarat serta struktur litar.
6. Kesilapan dan Perangkap Umum Semasa Menggunakan assign
Perangkap Biasa untuk Pemula
Pernyataan assign adalah salah satu konstruk paling mudah dalam Verilog, tetapi kesederhanaannya boleh menyebabkan penyalahgunaan. Jika tidak difahami sepenuhnya, ia boleh menyebabkan ralat atau kelakuan yang tidak dijangka. Berikut ialah kesilapan paling umum yang dilakukan oleh pemula (dan juga pengguna pertengahan) dengan assign, berserta penyelesaiannya.1. Mencuba Menggunakan assign dengan reg
❌ Kesilapan Biasa:
reg out;
assign out = a & b; // ERROR! Cannot assign to a reg
💡 Punca dan Penyelesaian:
Pernyataan assign adalah hanya untuk wire. reg mesti dikemas kini di dalam blok always. Pembetulan: Tukar out kepada wire, atau gunakan blok always sebagai gantinya.2. Memandu Isyarat yang Sama dengan Beberapa Pernyataan assign
❌ Invalid Example:
assign y = a & b;
assign y = a | b; // ERROR: Multiple drivers for y
💡 Punca dan Pembetulan:
Dalam Verilog, suatu isyarat mesti hanya mempunyai satu pemacu. Beberapa pernyataan assign untuk isyarat yang sama menyebabkan konflik. Pembetulan: Gunakan blok always dengan logik bersyarat, atau perkenalkan wayar antara.3. Salah Faham assign sebagai “Penginisialisasi”
❌ Misleading Example:
assign a = 1'b0; // Not an initializer — this means a is always 0
💡 Punca dan Pembetulan:
assign adalah berterusan — ia sentiasa memacu nilai, bukan hanya pada inisialisasi. Untuk inisialisasi simulasi, gunakan initial, dan untuk sintesis, gunakan logik reset.4. Lupa Mengisytiharkan Isyarat
❌ Example:
assign result = a & b; // ERROR if result is undeclared
💡 Punca dan Pembetulan:
Semua isyarat mesti dinyatakan secara eksplisit dalam Verilog. Lupa mengisytiharkan boleh menyebabkan ralat kompilasi atau pepijat tersembunyi. Pembetulan: Sentiasa isytiharkan isyarat sebagai wire atau reg.5. Menggunakan Operasi yang Tidak Sesuai untuk Sintesis
Beberapa operasi (seperti pembahagian atau modulo) mungkin berfungsi dalam simulasi tetapi gagal semasa sintesis:assign out = a / 3; // ⚠️ May fail in FPGA synthesis
Pembetulan: Periksa kesesuaian sintesis. Tulis semula dengan logik atau gunakan always untuk operasi kompleks.6. Terlalu Banyak Menggunakan Operator Ternari Bersarang
assign out = sel1 ? a : (sel2 ? b : (sel3 ? c : d)); // Hard to read!
Pembetulan: Gunakan isyarat wire antara untuk mempermudah, atau tulis semula dengan always untuk kebolehbacaan.Petua untuk Menyelesaikan Masalah assign
- Jelas tentang jenis isyarat (wire vs reg)
- Perhatikan amaran (simulator sering menandakan potensi isu)
- Ketahui batasan alat (semak jika operasi mesra sintesis)
Ringkasan: assign Mudah tetapi Memerlukan Kehati-hatian
Walaupun assign merupakan konstruk yang mudah dan praktikal dalam Verilog, sekatan-sekatannya mesti dihormati: hanya untuk wire, tiada pemacu berganda, dan tiada inisialisasi. Mengikuti peraturan ini mengelakkan pepijat di masa depan dan menjadikan kod anda lebih mudah diselenggara.
7. Soalan Lazim (FAQ)
Pemula dan pelajar pertengahan sering mempunyai soalan yang serupa mengenai pernyataan assign dalam Verilog. Bahagian ini merangkumi soalan-soalan yang paling kerap dicari dan ditanya dalam format Soal Jawab yang jelas.S1: Yang mana lebih mudah untuk pemula, assign atau always?
J: Mulakan dengan pernyataan assign. Pernyataan assign ideal untuk pemula kerana ia menyatakan litar kombinasi dengan ringkas. Blok always lebih kompleks, kerana ia melibatkan logik berurutan dan percabangan bersyarat.- Logik mudah →
assign - Logik bergantung pada masa atau keadaan →
always
S2: Bolehkah saya menggunakan assign dengan reg?
J: Tidak. Jika anda ingin memacu reg, anda mesti menggunakan blok always. Pernyataan assign hanya berfungsi dengan wire. Pembolehubah reg mesti dikemas kini dalam always.// ✅ Correct (using always with reg)
reg out;
always @(a or b)
out = a & b;
// ❌ Incorrect (assign cannot drive reg)
reg out;
assign out = a & b;
S3: Bolehkah saya assign isyarat yang sama dalam pelbagai pernyataan assign?
J: Tidak. Ini akan menyebabkan konflik atau ralat sintesis. Dalam Verilog, suatu isyarat mesti hanya mempunyai satu pemacu. Jika beberapa pernyataan assign memacu isyarat yang sama, ia menghasilkan konflik dan tingkah laku tidak ditakrifkan. Untuk pelbagai syarat, gunakan blok always atau susun semula dengan wayar antara.S4: Adakah kelewatan (#) dalam assign mempunyai kesan perkakasan sebenar?
J: Kelewatan hanya berlaku dalam simulasi, bukan dalam sintesis. Contoh:assign #5 out = a & b;
Di sini, #5 memperkenalkan kelewatan dalam simulasi, tetapi ia diabaikan dalam sintesis FPGA atau ASIC.- Simulasi → Sah
- Sintesis → Diabaikan
Q5: Bagaimana saya menulis logik bersyarat dengan assign?
J: Gunakan operator ternary (kondisional).assign out = sel ? a : b;
Ini bermakna “jika sel ialah 1, keluarkan a; jika tidak, keluarkan b.” Untuk percabangan yang kompleks, gunakan blok always.Q6: Mengapa output tidak berubah dalam ujian assign saya?
J: Periksa sama ada input benar‑benar berubah. Output assign bergantung sepenuhnya pada isyarat inputnya. Jika input tidak berubah, output akan tetap tetap.- Adakah input ditoggel dengan betul dalam testbench?
- Adakah nilai awal diberikan dengan betul?
- Adakah gelombang simulasi menunjukkan perubahan yang dijangka?
Q7: Bolehkah litar berasaskan assign disintesis?
J: Ya, tetapi ia bergantung pada operasi yang digunakan. Kebanyakan logik yang diterangkan dengan assign (AND, OR, XOR, dll.) boleh disintesis. Walau bagaimanapun, operasi tertentu (seperti pembahagian atau aritmetik titik apung) mungkin tidak dapat disintesis pada semua alat FPGA/ASIC.- ✅ AND / OR / XOR → Boleh Disintesis
- ⚠️ Pembahagian / Nombor Real / Titik Apung → Mungkin tidak boleh disintesis
8. Glosari: Istilah Verilog Asas untuk Pemula
Berikut ialah glosari ringkas istilah Verilog utama yang perlu difahami pemula terlebih dahulu. Kami menumpukan pada istilah yang berkait rapat dengan pernyataan assign dan logik kombinasi.wire
Maksud: Satu jenis isyarat yang memodelkan “wayar” fizikal. Ia menerima nilai daripada isyarat atau output modul lain dan tidak menyimpan nilai sendiri. Poin Penting:- Nilai boleh diberikan dengan
assign - Tidak dapat menyimpan data secara sendiri
- Kebanyakannya digunakan untuk litar kombinasi
Contoh:wire a, b, out;
assign out = a & b;
reg
Maksud: Satu jenis isyarat yang boleh menyimpan nilai secara sementara. Biasanya digunakan dalam blok always. Poin Penting:- Tidak boleh diberikan dengan
assign - Digunakan untuk litar berurutan dengan memori
- Selalunya dikemas kini pada tepi jam
Contoh:reg out;
always @(posedge clk) out <= a;
assign
Maksud: Konstruk untuk penetapan berterusan kepada isyarat jenis wire. Poin Penting:- Digunakan dalam logik kombinasi
- Output berubah serta‑merta apabila input berubah
- Bahagian kanan boleh mengandungi ekspresi, operator, pemalar
Contoh:assign y = a & b;
always
Maksud: Satu blok yang dilaksanakan apabila peristiwa tertentu berlaku (contoh: tepi jam atau perubahan isyarat). Poin Penting:- Bekerja dengan pembolehubah
reg - Digunakan untuk litar berurutan atau logik bersyarat
- Menyokong pernyataan if‑statement dan case‑statement
Contoh:always @(posedge clk) begin
out <= a + b;
end
Combinational Circuit
Maksud: Litar di mana output ditentukan hanya oleh input semasa. Poin Penting:- Tiada elemen memori
- Contoh: gerbang logik, penambah, multiplexer
- Diterangkan menggunakan
assign atau always @(*)
Sequential Circuit
Maksud: Litar di mana output bergantung pada input semasa serta keadaan masa lalu. Poin Penting:- Mengandungi elemen memori (daftar, flip‑flop)
- Operasi dipacu jam
- Diterangkan menggunakan
always @(posedge clk)
Ternary Operator (Conditional Operator)
Maksud: Satu ekspresi bersyarat yang ringkas dalam bentuk condition ? true_value : false_value. Poin Penting:- Selalunya digunakan dengan
assign - Lebih ringkas berbanding pernyataan if
Contoh:assign y = sel ? a : b;
module
Maksud: Blok binaan asas bagi reka bentuk Verilog. Poin Penting:- Mengandungi port input dan output
- Boleh diinstanskan secara hierarki
Contoh:module adder(input a, input b, output sum);
assign sum = a + b;
endmodule
initial
Maksud: Satu blok yang dilaksanakan hanya sekali pada permulaan simulasi. Poin Penting:- Tidak boleh disintesis dalam perkakasan
- Digunakan dalam testbench
Contoh:initial begin
a = 0;
b = 1;
end
Non-blocking Assignment (<=)
Maksud: Operator penetapan yang digunakan di dalam blok always untuk mengemas kini daftar tanpa menyekat penetapan lain. Poin Penting:- Biasa dalam litar berurutan yang diselaraskan jam
- Membenarkan pelbagai penetapan dijalankan secara selari
Contoh:always @(posedge clk) begin
out1 <= in1;
out2 <= in2;
end
Ringkasan: Memahami Istilah Adalah Langkah Pertama untuk Menguasai Verilog
Istilah-istilah ini membentuk asas Verilog. Dengan tidak hanya menghafal sintaks tetapi juga memahami apa maksud setiap kata kunci, pemula dapat menjejaki ralat dengan lebih cepat dan mereka bentuk litar dengan lebih berkesan.
9. Kesimpulan: Menguasai Penyataan assign dalam Verilog
Dalam artikel ini, kami membincangkan penyataan assign dalam Verilog HDL dari asas hingga penggunaan lanjutan. Sebagai salah satu konstruk pertama yang harus dipelajari oleh pemula, assign adalah mudah tetapi berkuasa, dan ia penting untuk mereka bentuk litar kombinasi.Pengambilan Utama Mengenai assign
✅ Peranan assign
- Suatu konstruk untuk penetapan berterusan kepada isyarat jenis
wire - Output dikemas kini serta-merta sebagai respons kepada perubahan input
- Paling sesuai untuk litar kombinasi
✅ Peraturan Penggunaan
assign tidak boleh digunakan dengan reg- Satu isyarat tidak boleh mempunyai berbilang pemacu
assign - Tidak sesuai untuk inisialisasi — hanya untuk pemanduan berterusan
✅ Petua untuk Penggunaan Berkesan
- Bezakan dengan jelas antara
assign (untuk wire) dan always (untuk reg) - Gunakan operator ternari untuk logik bersyarat mudah
- Untuk logik kompleks, pecahkan kepada isyarat
wire antara untuk meningkatkan kebolehbacaan
Langkah Seterusnya untuk Meningkatkan Kemahiran
Setelah anda selesa dengan assign, cuba pelajari perkara berikut:- Blok
always untuk litar berurutan - Logik bersyarat dengan
if dan case - Menulis testbench dan menjalankan simulasi
- Reka bentuk hierarki menggunakan pelbagai modul
Kemahiran reka bentuk Verilog berkembang melalui latihan praktikal. Mulakan dengan litar kecil, biasakan diri menggambarkannya dengan assign, dan secara beransur-ansur menangani reka bentuk yang lebih kompleks.Kata Akhir
Dengan memahami sepenuhnya dan menguasai penyataan assign, anda akan sudah mengatasi salah satu halangan terbesar dalam reka bentuk Verilog. Dari pintu logik mudah hingga litar kombinasi yang lebih besar, assign menyediakan asas untuk segala-galanya. Kami berharap panduan ini menjadi “lembaran cheat assign” pilihan anda yang boleh dirujuk bila-bila masa semasa anda maju dalam perjalanan pembelajaran Verilog.