Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Verilog

Rangkaian 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.

Contoh Penggabungan Verilog

  
  
	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 Simulasi
xcelium> 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

Operator Replikasi

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 Simulasi
xcelium> 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.

Replikasi Bersarang

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.

Penggunaan ilegal

  
  
  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 Simulasi
	Top 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

  1. Tutorial Verilog
  2. Tugas Verilog
  3. Pemblokiran &Non-Pemblokiran Verilog
  4. Fungsi Verilog
  5. Tugas Verilog
  6. Generator Jam Verilog
  7. Fungsi Matematika Verilog
  8. Format Waktu Verilog
  9. Lingkup Skala Waktu Verilog
  10. Operasi File IO Verilog