Verilog将一个FIFO写数据1-20,并将奇数读出到FIFO2,偶数读到FIFO3内
时间: 2024-03-01 16:55:33 浏览: 131
Verilog写的FIFO程序
4星 · 用户满意度95%
以下是一个简单的Verilog代码,实现了将数据1-20写入FIFO,并将奇数读出到FIFO2,偶数读出到FIFO3的功能:
```
module fifo_example (
input clk,
input rst,
input write_en,
input [4:0] write_data,
output reg [4:0] read_data2,
output reg [4:0] read_data3
);
reg [4:0] fifo [0:19];
reg [4:0] ptr_in;
reg [4:0] ptr_out2;
reg [4:0] ptr_out3;
initial begin
ptr_in = 0;
ptr_out2 = 0;
ptr_out3 = 0;
end
always @(posedge clk) begin
if (rst) begin
ptr_in <= 0;
ptr_out2 <= 0;
ptr_out3 <= 0;
end else begin
if (write_en) begin
fifo[ptr_in] <= write_data;
ptr_in <= ptr_in + 1;
end
if (ptr_out2 != ptr_in && fifo[ptr_out2] % 2 != 0) begin
read_data2 <= fifo[ptr_out2];
ptr_out2 <= ptr_out2 + 1;
end
if (ptr_out3 != ptr_in && fifo[ptr_out3] % 2 == 0) begin
read_data3 <= fifo[ptr_out3];
ptr_out3 <= ptr_out3 + 1;
end
end
end
endmodule
```
该代码使用一个数组来实现FIFO,包括一个写指针ptr_in和两个读指针ptr_out2和ptr_out3。当write_en信号为高时,将write_data写入FIFO。每次时钟上升沿来临时,检查FIFO中的下一个数据是否为奇数或偶数,并将其读出到FIFO2或FIFO3中。请注意,如果读指针等于写指针,则不会进行读取操作。
阅读全文