FIFO求和实验

本文介绍了如何使用FIFO进行串行数据流的行计算,特别是3行数据相加的情况。通过2个FIFO实现数据缓存,逐行读取并求和,循环进行直到所有数据处理完毕。实验中,FPGA接收PC机发送的求和数据,计算后通过串口返回结果。
摘要由CSDN通过智能技术生成

1、fifo求和原理

        FIFO 是存储器的一种,满足先进先出原则,前面对它已经有了详细介绍,大家可以翻阅深入学习FIFO_今天不学习明天被卷️的博客-CSDN博客

        利用fifo进行串行数据流的行计算。

        要实现 FIFO  求和, FIFO IP 核必不可少,需要用它用来做求和数据缓存。

        这里我们以3行数据相加的情况举例:3行数据相加,需要用到2个FIFO。这里给出规律,如果需要一次计算X行数据的和,则需要用到X-1个FIFO

        当数据开始输入时,将数据的第 0 行数据存储到 fifo1 中,将第 1 行数据存储到 fifo2 中,当数据的第 2 行的第 0 个数据输入的同时,读取写入 fifo1 中的的第 0 个数据和写入 fifo2 中的第 0 个数据,将三个数据求和,求和结果实时输出,在完成求和的同时,将读取的 fifo2 中的第 0 个数据写入 fifo1 中,fifo1 读出的数据弃之不用,将输入的第 2 行的数据写入 fifo2 中,当第 2 行的最后一个数据输入,完成前三行的最后一个求和运算后,第 0 行的数据已读取完成,第 1 行的数据重新写入 fifo1 ,第 2 行的数据写入 fifo2 ,当第 3 行数据开始传入时,开始进行第 1 行、第 2 行和第 3 行的数据求和运算,如此循环,直到最后一个数据输入,完成求和运算。

2、fifo实验

        系统上电后,使用 PC 机通过串口助手发送待求和数据给 FPGA,FPGA 通过串口接收模块接收待求和数据,数据拼接完成后传入数据求和模块,经过求和运算后的数据结果通过串口数据发送模块回传给 PC 机,使用串口助手查看求和结果。 

整体框图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个使用 Verilog 编写的简单的 FIFO 求和代码示例: ```verilog module FIFO_Sum ( input wire clk, input wire rst, input wire en, input wire [7:0] data_in, output wire [7:0] sum ); parameter DEPTH = 8; // FIFO的深度 reg [7:0] fifo [DEPTH-1:0]; reg [2:0] wr_ptr; reg [2:0] rd_ptr; reg [7:0] sum_reg; reg [2:0] count; always @(posedge clk or posedge rst) begin if (rst) begin wr_ptr <= 0; rd_ptr <= 0; sum_reg <= 0; count <= 0; end else if (en) begin if (count < DEPTH) begin fifo[wr_ptr] <= data_in; wr_ptr <= wr_ptr + 1; count <= count + 1; end if (count > 0) begin sum_reg <= sum_reg + fifo[rd_ptr]; rd_ptr <= rd_ptr + 1; count <= count - 1; end end end assign sum = sum_reg; endmodule ``` 上述代码实现了一个深度为 8 的 FIFO 求和模块。输入信号包括时钟 `clk`、复位信号 `rst`、使能信号 `en` 和数据输入信号 `data_in`。输出信号为求和结果 `sum`。 模块中定义了一个长度为 `DEPTH` 的 reg 数组 `fifo`,用于存储输入数据。`wr_ptr` 和 `rd_ptr` 分别表示写指针和读指针,用于控制数据的写入和读取。`sum_reg` 用于存储求和结果。`count` 记录当前 FIFO 中的数据数量。 在时钟上升沿或复位信号上升沿时,根据使能信号的状态,进行数据的写入和读取操作。当使能信号有效时,如果 FIFO 未满,将输入数据写入 FIFO,并更新写指针和数据数量;如果 FIFO 非空,从 FIFO 中读取数据并进行求和操作,同时更新读指针和数据数量。 最后,将求和结果赋值给输出信号 `sum`。 请注意,这只是一个简单的示例代码,可能需要根据实际需求进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发光中请勿扰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值