0
\$\begingroup\$

I am trying to define a 2d array in verilog but I don't understand them very well in the way they are assigned. What I mean is if I define an array like

reg [6:0] array[7:0]

I hope I defined an array with 8 rows and 7 columns. If a number is assigned lets say:

array[0] = 7'b1100000; array[1] = 7'b0101000;

In what order are they placed? My intention is to read the first bit in every row. So if I read like this do I get the result:

array[0][0]-->should give 1(the first bit of first row)
array[0][1]-->should give 0(the first bit of second row)

So is my assignment way correct? Or should I play with the order like:

reg array[0:6] array[0:7]
asked Apr 28, 2013 at 17:02
\$\endgroup\$
5
  • \$\begingroup\$ Which bit do you consider to be the "first", the MSB or the LSB of a word? You need to define your bit and word indices accordingly. \$\endgroup\$ Commented Apr 28, 2013 at 17:33
  • \$\begingroup\$ MostSignificantBit \$\endgroup\$ Commented Apr 28, 2013 at 17:36
  • \$\begingroup\$ What happens when you simulate your code? Did you get any errors when you tried to compile your proposed line of code at the bottom of your question? \$\endgroup\$ Commented Apr 28, 2013 at 17:51
  • \$\begingroup\$ NO I don't get any errors \$\endgroup\$ Commented Apr 28, 2013 at 17:52
  • \$\begingroup\$ Why don't you try loading array[0] with 7'h55 and array[1] with 7'h2A, then see what you get for array[0][0] and array[0][1]? \$\endgroup\$ Commented Apr 28, 2013 at 21:22

1 Answer 1

2
\$\begingroup\$

Get yourself a copy of the latest SystemVerilog (supperset of Verilog) LRM. Available for from IEEE.

Read section 7.4 "Packed and unpacked arrays". Pay special attention to section 7.4.4 and 7.4.5.

Below is example code:

parameter P = 6:0;
parameter U = 7:0;
// {[packed_range]} name {[unpacked_range]};
reg [P] array [U]; // U unpacked of packed sized P
reg [1:0] [P] array2; // 1:0 packed of packed size P
reg [0:1] [P] array3; // 0:1 packed of packed size P
initial begin
array[0] = 7'b1100000; // assign the packed portion of unpacked
array[1] = 7'b0101000;
array2[0] = array[0]; array2[1] = array[1];
array3[0] = array[0]; array3[1] = array[1];
// U P
$display("%b",array[0][0]); // prints 0 -- U's entry 0, P's entry 0
$display("%b",array[0][1]); // prints 0 -- U's entry 0, P's entry 1
$display("%b",array[0][3]); // prints 0 -- U's entry 0, P's entry 3
$display("%b",array[1][3]); // prints 1 -- U's entry 1, P's entry 3
$display("%d",array[0][6:4]); // prints 6 -- U's entry 0, P's range 6:4
$display("%d",array[1][6:4]); // prints 2 -- U's entry 1, P's range 6:4
$display("%d",array[1]); // prints 28 -- U's entry 1, P's range 6:0 (implied)
//$display("%d",array[1:0][0]); // ** ILLEGAL
//$display("%d",array); // ** ILLEGAL cannot print unpacked
$display("%b",array2[1][3]); // prints 1 -- [1:0]'s entry 1, P's entry 3
$display("%d",array3[1]); // prints 28 -- [0:1]'s entry 1, P's range 6:0 (implied)
$display("%b",array2); // prints 01010001100000 -- implies {array2[1],array2[0]}
$display("%b",array3); // prints 11000000101000 -- implies {array3[0],array3[1]}
end
answered May 1, 2013 at 18:00
\$\endgroup\$

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.