Ủng hộ tôi
Hàng đợi (Queue) là một thành phần phần cứng quan trọng được sử dụng để đệm dữ liệu và lưu trữ dữ liệu tạm thời. Hàng đợi hoạt động tuân theo nguyên tắc mục dữ liệu đầu tiên được nhập (được ghi) vào Hàng đợi là mục dữ liệu đầu tiên được xóa (đọc) khỏi nó, hay còn gọi là FIFO (First-In-First-Out).
Dưới đây là ví dụ về Hàng đợi FIFO đồng bộ đơn giản được mô tẳ bằng Verilog HDL:
module QueueFIFO (
input wire clk, // Clock signal
input wire reset, // Reset signal
input wire write_en, // Write enable signal
input wire read_en, // Read enable signal
input wire [31 : 0] data_in, // Input data
output reg [31 : 0] data_out, // Output data
output reg full, // Full flag
output reg empty // Empty flag
);
parameter DEPTH = 8; // Depth of the FIFO (can be modified as needed)
reg [31 : 0] memory [0 : DEPTH-1]; // Memory array to store data
reg wr_ptr = 0; // Write pointer
reg rd_ptr = 0; // Read pointer
// Full and empty flag logic
always @(*) begin
full = ((wr_ptr == DEPTH - 1) && (rd_ptr == 0)) || (wr_ptr == rd_ptr - 1);
empty = (wr_ptr == rd_ptr);
end
// Write operation
always @(posedge clk) begin
if (reset) begin
wr_ptr <= 0;
end else if (write_en && !full) begin
memory[wr_ptr] <= data_in;
wr_ptr <= (wr_ptr == DEPTH - 1) ? 0 : wr_ptr + 1;
end
end
// Read operation
always @(posedge clk) begin
if (reset) begin
rd_ptr <= 0;
end else if (read_en && !empty) begin
data_out <= memory[rd_ptr];
rd_ptr <= (rd_ptr == DEPTH - 1) ? 0 : rd_ptr + 1;
end
end
endmodule