Bird
Raised Fist0
Verilogprogramming~10 mins

File I/O for test vectors ($readmemh, $writememh) in Verilog - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to read a hex file into memory using $readmemh.

Verilog
initial begin
  $readmemh([1], memory_array);
end
Drag options to blanks, or click blank then click option'
Adata.hex
B'data.hex'
C"data.hex"
Ddata
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting to put the filename in quotes.
Using single quotes instead of double quotes.
2fill in blank
medium

Complete the code to write the memory contents to a hex file using $writememh.

Verilog
initial begin
  $writememh([1], memory_array);
end
Drag options to blanks, or click blank then click option'
Aoutput
B"output.hex"
C'output.hex'
Doutput.hex
Attempts:
3 left
💡 Hint
Common Mistakes
Not using quotes around the filename.
Using single quotes instead of double quotes.
3fill in blank
hard

Fix the error in the code to correctly read a hex file into a memory array.

Verilog
reg [7:0] mem [0:15];
initial begin
  $readmemh([1], mem);
end
Drag options to blanks, or click blank then click option'
A"data.hex"
B'data.hex'
Cdata.hex
Ddata
Attempts:
3 left
💡 Hint
Common Mistakes
Using unquoted filename causing syntax error.
Using single quotes instead of double quotes.
4fill in blank
hard

Fill both blanks to read a hex file and write the memory contents back to another file.

Verilog
reg [15:0] mem_array [0:31];
initial begin
  $readmemh([1], mem_array);
  $writememh([2], mem_array);
end
Drag options to blanks, or click blank then click option'
A"input.hex"
B"output.hex"
Cinput.hex
Doutput.hex
Attempts:
3 left
💡 Hint
Common Mistakes
Not quoting filenames.
Mixing quoted and unquoted filenames.
5fill in blank
hard

Fill all three blanks to read a hex file, modify memory, and write it back.

Verilog
reg [7:0] mem [0:7];
integer i;
initial begin
  $readmemh([1], mem);
  for (i = 0; i < 8; i = i + 1) begin
    mem[i] = mem[i] [2] 1;
  end
  $writememh([3], mem);
end
Drag options to blanks, or click blank then click option'
A"data_in.hex"
B+
C"data_out.hex"
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using '-' instead of '+' for increment.
Not quoting filenames.

Practice

(1/5)
1. What is the primary purpose of the Verilog system task $readmemh?
easy
A. To load hexadecimal data from a file into a memory array
B. To write memory contents to a file in binary format
C. To initialize registers with random values
D. To display memory contents on the console

Solution

  1. Step 1: Understand $readmemh usage

    $readmemh is used to read hexadecimal data from a file and load it into a memory array in Verilog.
  2. Step 2: Compare with other options

    Other options describe writing data, random initialization, or display, which are not the purpose of $readmemh.
  3. Final Answer:

    To load hexadecimal data from a file into a memory array -> Option A
  4. Quick Check:

    $readmemh loads hex data [OK]
Hint: Remember: $readmemh reads hex data into memory [OK]
Common Mistakes:
  • Confusing $readmemh with $writememh
  • Thinking it writes data instead of reading
  • Assuming it reads binary instead of hex
2. Which of the following is the correct syntax to write memory contents to a hex file in Verilog?
easy
A. $readmemh("data.hex", mem_array);
B. $writememh("output.hex", mem_array);
C. $writehex("output.hex", mem_array);
D. $dumpmemh("output.hex", mem_array);

Solution

  1. Step 1: Identify the correct system task for writing

    $writememh is the Verilog system task used to write memory contents to a hex file.
  2. Step 2: Check syntax correctness

    The syntax $writememh("output.hex", mem_array); correctly specifies the file name and memory array.
  3. Final Answer:

    $writememh("output.hex", mem_array); -> Option B
  4. Quick Check:

    Write memory to hex file = $writememh [OK]
Hint: Use $writememh to save memory to hex file [OK]
Common Mistakes:
  • Using $readmemh instead of $writememh
  • Misspelling the system task name
  • Using non-existent tasks like $writehex
3. Given the following Verilog code snippet, what will be the content of mem[0] after $readmemh executes if the file data.hex contains:
0A
1F
2B

reg [7:0] mem [0:2];
initial begin
$readmemh("data.hex", mem);
end
medium
A. 8'h00
B. 8'h1F
C. 8'h2B
D. 8'h0A

Solution

  1. Step 1: Understand $readmemh file loading order

    $readmemh loads the first line of the file into mem[0], second line into mem[1], and so on.
  2. Step 2: Match file content to memory

    The first line is 0A, so mem[0] will be 8'h0A.
  3. Final Answer:

    8'h0A -> Option D
  4. Quick Check:

    First file line -> mem[0] = 0A [OK]
Hint: First file line loads into mem[0] with $readmemh [OK]
Common Mistakes:
  • Assuming mem[0] gets last file line
  • Confusing hex values with decimal
  • Forgetting zero-based indexing
4. Identify the error in the following Verilog code snippet that attempts to write memory contents to a hex file:
reg [7:0] mem [0:3];
initial begin
$writememh(mem, "output.hex");
end
medium
A. Missing file extension in filename
B. Memory array size is invalid
C. Arguments to $writememh are in wrong order
D. Cannot use $writememh inside initial block

Solution

  1. Step 1: Check $writememh argument order

    The correct syntax is $writememh("filename", memory_array);. The code reverses these arguments.
  2. Step 2: Verify other aspects

    Memory size and file extension are valid, and $writememh can be used inside initial blocks.
  3. Final Answer:

    Arguments to $writememh are in wrong order -> Option C
  4. Quick Check:

    Filename first, memory second in $writememh [OK]
Hint: Filename is first argument in $writememh [OK]
Common Mistakes:
  • Swapping filename and memory array arguments
  • Thinking file extension is mandatory
  • Believing $writememh can't be in initial block
5. You want to test a memory module by loading test vectors from a hex file and then save the modified memory contents back to another hex file. Which sequence of Verilog system tasks correctly achieves this?
hard
A. $readmemh("input.hex", mem); // test
$writememh("output.hex", mem); // save
B. $writememh("input.hex", mem); // test
$readmemh("output.hex", mem); // save
C. $readmemh(mem, "input.hex"); // test
$writememh(mem, "output.hex"); // save
D. $readmemh("output.hex", mem); // test
$writememh("input.hex", mem); // save

Solution

  1. Step 1: Load test vectors correctly

    Use $readmemh("input.hex", mem); to load test vectors from the input file into memory.
  2. Step 2: Save modified memory correctly

    Use $writememh("output.hex", mem); to write the memory contents to the output file.
  3. Final Answer:

    $readmemh("input.hex", mem); // test
    $writememh("output.hex", mem); // save
    -> Option A
  4. Quick Check:

    Read first, then write with correct syntax [OK]
Hint: Read test vectors first, write results second [OK]
Common Mistakes:
  • Reversing read and write order
  • Swapping filename and memory arguments
  • Using wrong filenames for read/write
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard