Verilog将一个FIFO写入数据1-20,并将奇数读出到FIFO2,偶数读到FIFO3内,并读出
时间: 2024-03-01 09:55:34 浏览: 69
以下是一个Verilog代码示例,用于将数据1-20写入FIFO并将奇数读出到FIFO2,偶数读出到FIFO3内,并输出读取到的数据:
```
module fifo_example(
input clk,
input rst,
input wr_en,
input [4:0] wr_data,
output [4:0] rd_data2,
output [4:0] rd_data3
);
reg [4:0] fifo [0:19]; //FIFO 深度为 20
reg [4:0] wr_ptr;
reg [4:0] rd_ptr2;
reg [4:0] rd_ptr3;
initial begin
wr_ptr = 0;
rd_ptr2 = 0;
rd_ptr3 = 0;
end
always @(posedge clk) begin
if (rst) begin
wr_ptr <= 0;
rd_ptr2 <= 0;
rd_ptr3 <= 0;
end else begin
if (wr_en) begin
fifo[wr_ptr] <= wr_data;
wr_ptr <= wr_ptr + 1;
end
if (rd_ptr2 != wr_ptr && fifo[rd_ptr2] % 2 != 0) begin
rd_data2 <= fifo[rd_ptr2];
rd_ptr2 <= rd_ptr2 + 1;
end
if (rd_ptr3 != wr_ptr && fifo[rd_ptr3] % 2 == 0) begin
rd_data3 <= fifo[rd_ptr3];
rd_ptr3 <= rd_ptr3 + 1;
end
end
end
endmodule
```
在此代码中,使用一个20个元素的FIFO数组,以及三个指针:wr_ptr用于写操作,rd_ptr2和rd_ptr3用于奇偶数读操作。在时钟上升沿时,检查下一个数据是否为奇数或偶数,并将其写入FIFO2或FIFO3,如果对应的读指针不等于写指针,也会将其读取到输出端口rd_data2或rd_data3中。需要注意的是,在FIFO空或满的情况下,写指针和读指针不会移动。
阅读全文