Verilog
Kabel dan variabel Verilog multi-bit dapat disatukan untuk membentuk kabel atau variabel multi-net yang lebih besar menggunakan penggabungan operator {
dan }
dipisahkan dengan koma. Penggabungan juga diperbolehkan memiliki ekspresi dan konstanta berukuran sebagai operan selain kabel dan variabel.
Ukuran setiap operan harus diketahui untuk menghitung ukuran rangkaian lengkap.
wire a, b; // 1-bit wire
wire [1:0] res; // 2-bit wire to store a and b
// res[1] follows a, and res[0] follows b
assign res = {a, b};
wire [2:0] c;
wire [7:0] res1;
// res[0] follows c[2]
// res[2:1] is always 0
// res[4:3] follows c[1:0]
// res[5] follows a
// res[6] follows b
assign res1 = {b, a, c[1:0], 2'b00, c[2]};
Berikut adalah contoh desain kerja rangkaian input untuk membentuk output yang berbeda. Ekspresi gabungan dapat dengan mudah ditampilkan atau ditetapkan ke kabel atau variabel apa pun, tidak harus output.
module des (input [1:0] a,
input [2:0] b,
output [4:0] out1,
output [3:0] out2
);
assign out1 = {a, b};
assign out2 = {a[1], 2'b01, b[2]};
endmodule
module tb;
reg [1:0] a;
reg [2:0] b;
wire [4:0] out1;
wire [3:0] out2;
des u0 (a, b, out1, out2);
initial begin
a <= 0;
b <= 0;
$monitor("[%0t] a=%b b=%b, out1=%b out2=%b", $time, a, b, out1, out2);
#10 a <= 3;
#5 b <= 5;
#10 a <= 2;
#5 b <= 1;
#10 $finish;
end
endmodule
Perhatikan bahwa out2[2:1] selalu merupakan konstanta 2'b01.
Log Simulasixcelium> run [0] a=00 b=000, out1=00000 out2=0010 [10] a=11 b=000, out1=11000 out2=1010 [15] a=11 b=101, out1=11101 out2=1011 [25] a=10 b=101, out1=10101 out2=1011 [30] a=10 b=001, out1=10001 out2=1010 Simulation complete via $finish(1) at time 40 NS + 0
Ketika ekspresi yang sama harus diulang beberapa kali, konstanta replikasi digunakan yang harus berupa bilangan non-negatif dan tidak boleh berupa X, Z, atau variabel apa pun. Angka konstan ini juga diapit oleh kurung kurawal bersama dengan operator rangkaian asli dan menunjukkan berapa kali ekspresi akan diulang.
wire a;
wire [6:0] res;
assign res = {7{a}};
{2'bz{2'b0}} // Illegal to have Z as replication constant
{2'bx{2'b0}} // Illegal to have X as replication constant
Ekspresi replikasi tidak dapat muncul di sisi kiri tugas apa pun dan tidak dapat dihubungkan ke output
atau inout
pelabuhan.
module des;
reg [1:0] a;
reg [2:0] b;
initial begin
a <= 2;
b <= 4;
#10;
$display("a=%b b=%b res=%b", a, b, {{2{a}}, {3{b}}});
end
endmodule
Perhatikan bahwa a diulang dua kali dan b diulang tiga kali.
Log Simulasixcelium> run a=10 b=100 res=1010100100100 xmsim: *W,RNQUIE: Simulation is complete.
Operand akan dievaluasi hanya sekali ketika ekspresi replikasi dijalankan meskipun konstanta adalah nol.
Ekspresi replikasi diizinkan untuk digunakan di dalam ekspresi rangkaian reguler. Mengambil contoh di atas sebagai basis, a dan b telah dimasukkan ke dalam ekspresi gabungan total.
module des;
reg [1:0] a;
reg [2:0] b;
initial begin
a <= 2;
b <= 4;
#10;
$display("a=%b b=%b res=%b", a, b, {a, b, 3'b000, {{2{a}}, {3{b}}}});
end
endmodule
Log Simulasi xcelium> run a=10 b=100 res=101000001010100100100 xmsim: *W,RNQUIE: Simulation is complete.
module des;
reg [1:0] a;
reg [2:0] b;
reg [3:0] _var;
initial begin
a <= 2;
b <= 4;
_var <= 3;
// This is illegal because variables cannot be used
// as replication constant
$display("a=%b b=%b res=%b", a, b, {_var{a}});
end
endmodule
Ini menghasilkan kesalahan kompilasi seperti yang ditunjukkan di bawah ini.
Log SimulasiTop level design units: des $display("a=%b b=%b res=%b", a, b, {_var{a}}); | xmelab: *E,NOTPAR (./testbench.sv,12|45): Illegal operand for constant expression [4(IEEE)].
Verilog
case pernyataan memeriksa apakah ekspresi yang diberikan cocok dengan salah satu ekspresi lain dalam daftar dan bercabang sesuai. Biasanya digunakan untuk mengimplementasikan multiplexer. Konstruksi if-else mungkin tidak cocok jika ada banyak kondisi yang harus diperiksa dan akan disintesis menjadi
Parameter adalah konstruksi Verilog yang memungkinkan modul untuk digunakan kembali dengan spesifikasi yang berbeda. Misalnya, penambah 4-bit dapat diparameterisasi untuk menerima nilai jumlah bit dan nilai parameter baru dapat diteruskan selama pembuatan modul. Jadi, penambah N-bit bisa menjadi pen
Verilog adalah bahasa deskripsi perangkat keras dan tidak ada persyaratan bagi desainer untuk mensimulasikan desain RTL mereka agar dapat mengubahnya menjadi gerbang logika. Jadi apa yang perlu disimulasikan? Simulasi adalah teknik menerapkan stimulus input yang berbeda ke desain pada waktu yang
Desain module pr_en ( input [7:0] a, input [7:0] b, input [7:0] c, input [7:0] d, input [1:0] sel, output reg [7:0] out); always @ (a or b or c or d or sel) begin if (sel == 2b00) out <= a; else