Arrays help you store many values in one place. This makes your code neat and easy to manage.
Array declaration in Verilog
reg [bit_width-1:0] array_name [0:array_size-1];
reg means the array stores values that can change.
The [bit_width-1:0] sets how many bits each element has.
The [0:array_size-1] sets how many elements are in the array.
reg [7:0] data_array [0:3];
wire type.wire [15:0] address_bus [0:1];
reg [0:0] single_bit_array [0:7];
reg [3:0] empty_array [0:-1];
This program creates an array of 4 bytes. It sets each byte to a value and prints them. You see how to declare, assign, and read array elements.
module array_declaration_example(); // Declare an array of 4 elements, each 8 bits wide reg [7:0] data_array [0:3]; initial begin // Assign values to each element data_array[0] = 8'hAA; // 10101010 data_array[1] = 8'h55; // 01010101 data_array[2] = 8'hFF; // 11111111 data_array[3] = 8'h00; // 00000000 // Print all elements $display("Array elements:"); $display("data_array[0] = %h", data_array[0]); $display("data_array[1] = %h", data_array[1]); $display("data_array[2] = %h", data_array[2]); $display("data_array[3] = %h", data_array[3]); end endmodule
Array declaration time complexity is not applicable since it's a hardware description.
Arrays use space proportional to bit_width x array_size in hardware.
Common mistake: Mixing up bit width and array size syntax.
Use arrays when you need multiple similar signals grouped; use single registers for single values.
Arrays group many values of the same type in one variable.
Use reg [bit_width-1:0] array_name [0:size-1]; to declare.
Access elements by index like array_name[index].
Practice
Solution
Step 1: Understand bit width and size syntax
In Verilog, the bit width is declared first as [bit_width-1:0], so for 16 bits it is [15:0].Step 2: Declare array size correctly
The array size is declared after the variable name as [0:size-1], so for 8 elements it is [0:7].Final Answer:
reg [15:0] my_array [0:7]; -> Option CQuick Check:
Bit width then array size = reg [15:0] my_array [0:7]; [OK]
- Swapping bit width and array size positions
- Using incorrect bit range like [0:7] for bit width
- Confusing array size with bit width
Solution
Step 1: Check array size declaration
Array size must be declared as [start_index:end_index] with start_index less than end_index, usually [0:size-1].Step 2: Identify invalid range
reg [7:0] data_array [15:0]; uses [15:0], which is reversed and invalid for array indexing.Final Answer:
reg [7:0] data_array [15:0]; -> Option DQuick Check:
Array index must be ascending range [OK]
- Using descending ranges for array size
- Confusing bit width range with array index range
- Forgetting semicolon at end
reg [3:0] arr [0:3]; and the assignments arr[0] = 4'b1010;, arr[1] = 4'b0101;, what is the value of arr[1]?Solution
Step 1: Understand array declaration and assignments
The array arr has 4 elements indexed 0 to 3, each 4 bits wide. arr[0] is assigned 1010, arr[1] is assigned 0101.Step 2: Identify value of arr[1]
arr[1] was explicitly assigned 4'b0101, so its value is 0101.Final Answer:
4'b0101 -> Option AQuick Check:
arr[1] = 4'b0101 [OK]
- Mixing up indices and values
- Assuming default zero without assignment
- Confusing bit width with array size
reg [7:0] mem_array [7:0];
Solution
Step 1: Analyze array size range
The array size is declared as [7:0], which is a descending range and invalid for array indexing.Step 2: Correct array size range
The correct array size should be ascending, [0:7], to declare 8 elements indexed 0 to 7.Final Answer:
Array size range should be [0:7], not [7:0] -> Option AQuick Check:
Array index must be ascending [OK]
- Using descending ranges for array size
- Confusing bit width with array size
- Assuming [7:0] is valid for arrays
Solution
Step 1: Understand 2D array declaration syntax
In Verilog, multi-dimensional arrays are declared by stacking sizes after the variable name. The first dimension is rows, second is columns.Step 2: Apply correct sizes and bit width
Each element is 8 bits wide, so bit width is [7:0]. Rows are 4 elements indexed 0 to 3, columns are 8 elements indexed 0 to 7.Final Answer:
reg [7:0] matrix [0:3][0:7]; -> Option BQuick Check:
Bit width then rows then columns [OK]
- Swapping row and column indices
- Incorrect bit width declaration
- Using reversed index ranges
Ready to prove it?
Pass the test and this pattern moves unknown
