Memory blocks store data inside digital circuits. They keep information safe and ready to use when needed.
0
0
Why memory blocks are needed in Verilog
Introduction
When you need to save data temporarily during processing.
When you want to remember previous inputs or states in a circuit.
When building devices like RAM, ROM, or registers.
When you want to hold program instructions or data in a processor.
When designing counters or buffers that require storage.
Syntax
Verilog
module memory_block #( parameter ADDR_WIDTH = 4, parameter DATA_WIDTH = 8, parameter MEM_SIZE = 16 ) ( input wire clk, input wire [ADDR_WIDTH-1:0] addr, input wire [DATA_WIDTH-1:0] data_in, input wire we, // write enable output reg [DATA_WIDTH-1:0] data_out ); reg [DATA_WIDTH-1:0] mem [0:MEM_SIZE-1]; always @(posedge clk) begin if (we) begin mem[addr] <= data_in; end data_out <= mem[addr]; end endmodule
This example shows a simple synchronous memory block with read and write.
Memory blocks use arrays of registers to store data at different addresses.
Examples
Defines a memory array with 16 locations, each 8 bits wide.
Verilog
reg [7:0] memory_array [0:15]; // 16 locations, each 8 bits wide
Shows how to write data to and read data from the memory on clock edge.
Verilog
always @(posedge clk) begin
if (write_enable) memory_array[address] <= data_in;
data_out <= memory_array[address];
endSample Program
This program creates a small memory with 16 locations. It writes a value to address 4, then reads it back and prints it.
Verilog
module simple_memory ( input wire clk, input wire we, input wire [3:0] addr, input wire [7:0] data_in, output reg [7:0] data_out ); reg [7:0] mem [0:15]; always @(posedge clk) begin if (we) begin mem[addr] <= data_in; end data_out <= mem[addr]; end endmodule // Testbench module test; reg clk = 0; reg we; reg [3:0] addr; reg [7:0] data_in; wire [7:0] data_out; simple_memory mem_inst(clk, we, addr, data_in, data_out); always #5 clk = ~clk; // clock toggles every 5 time units initial begin we = 1; addr = 4; data_in = 8'hAA; #10; // write 0xAA at address 4 we = 0; addr = 4; #10; // read from address 4 $display("Data at address 4: %h", data_out); $finish; end endmodule
OutputSuccess
Important Notes
Memory blocks help circuits remember data between clock cycles.
Without memory, circuits can only process current inputs, not past information.
Memory blocks are essential for building complex digital systems like CPUs and controllers.
Summary
Memory blocks store and keep data inside digital circuits.
They allow circuits to remember past information and work with stored data.
Memory blocks are used in many devices like RAM, registers, and buffers.