Apostrof dalam penugasan array Verilog

Sep 06 2020

Saya telah melihat contoh Verilog yang memberikan nilai ke array sebagai berikut:

array = '{'{0,1,2,3},'{4,5,6,7},'{8,9,10,11}};

Apa tujuan apostrof (') ? Bagaimana ini akan berbeda?

array = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};

Jawaban

4 TomCarpenter Sep 06 2020 at 10:06

SystemVerilog memiliki operator penugasan larik '{...}selain operator penggabungan {...}.

Konsentrasi adalah untuk array yang dikemas - pada dasarnya Anda menggabungkan beberapa sinyal ke dalam satu bus.

wire [7:0] a = {4'd7, 4'd14};

Anda juga dapat menyarangkan operator penggabungan. Berikut ini menetapkan nilai yang sama bseperti yang ditetapkan apada contoh sebelumnya. Rangkaian bersarang diratakan menjadi satu bus.

wire [7:0] b = {{1'b0,1'b1,1'b1,1'b1},{1'b1,1'b1,1'b1,1'b0}};

Penetapan array adalah untuk array yang tidak dikemas:

integer c [0:3] = '{0, 1, 2, 3};

Array juga bisa multi-dimensi, dalam hal ini Anda dapat menginisialisasi setiap dimensi (dari kanan ke kiri) dengan menumpuk penetapan array:

integer d [0:3][0:2] = '{'{0,1,2,3},'{4,5,6,7},'{8,9,10,11}};

Anda juga dapat menggabungkan keduanya (penugasan concatentation dan array):

wire [7:0] e [0:3] = '{{4'd7, 4'd14}, 8'd1, {4'd5, 4'd3}, 8'd3};


Ke dua contoh Anda.

Contoh pertama adalah inisialisasi array. Ini akan menetapkan array[0][0] = 0, array[1][0] = 1dan seterusnya, misalnya array[0][1] = 4dan array[3][2] = 11. Misalnya, ini bisa digunakan untuk menginisialisasi array yang tidak dikemas, seperti:

integer array [0:3][0:2] = '{'{0,1,2,3},'{4,5,6,7},'{8,9,10,11}}; //Valid

Dalam contoh kedua, Anda menggabungkan dua belas angka 32-bit (*) bersama-sama, yang akan menghasilkan satu angka 384 bit. Ini bisa ditugaskan ke array yang dikemas, tetapi bukan array yang tidak dikemas:

wire [383:0] array = {{0,1,2,3},{4,5,6,7},{8,9,10,11}}; //Valid
integer array [0:3][0:2] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}}; //Invalid

(*) Perhatikan, ini secara teknis berukuran literal, jadi penggabungan tidak sepenuhnya legal, meskipun sebagian besar alat sintesis akan memperlakukannya sebagai nilai 32-bit dan memungkinkan penggabungan (mungkin dengan peringatan). Selalu gunakan penentu ukuran pada literal Anda saat melakukan penggabungan.