文章目录
一、案例分析
案例要求:写一个 fifo 控制器,输入的数据是 86 行 86 列的矩阵(每个数据8bit),数据由串口传输过来,传过来的数据先一行一行用 fifo 缓存,然后每三行的同一列进行一次加,即第 0,1,2行,第 1,2,3 行……第 84,85,86 行,每三行作为一组,每一组的每一列的三个数据进行一次加运算。



框架示意图:
这里的uart_rx模块和uart_tx模块直接使用rs232中设计好的。

二、fifo_ctrl模块设计
2.1 波形设计:

2.2 代码实现
2.2.1 fifo_ctrl
module fifo_ctrl(
input wire clk,
input wire rst,
input wire [7:0] rx_data,
input wire pi_flag,
output reg [7:0] po_sum,
output reg po_flag
);
reg[9:0] cnt_col,cnt_row;
reg wr_en1_r,wr_en2_r;
wire wr_en1,wr_en2;
reg [7:0] data_in1_r;
wire [7:0] data_in1;
wire [7:0] dout1,dout2;
reg rd_en_r;
wire rd_en;
reg flag_add;
parameter COL_MUX=85;
parameter ROW_MUX=85;
// cnt_col
always @(posedge clk) begin
if(rst==1'b1) begin
cnt_col <= 'd0;
end
else if (pi_flag==1'b1 && cnt_col==COL_MUX) begin
cnt_col<='d0;
end
else if (pi_flag==1'b1) begin
cnt_col<=cnt_col+1'b1;
end
end
// cnt_row
always @(posedge clk) begin
if(rst==1'b1) begin
cnt_row <= 'd0;
end
else if (cnt_row==ROW_MUX && pi_flag==1'b1 && cnt_col==COL_MUX) begin
cnt_row<='d0;
end
else if (pi_flag==1'b1 && cnt_col==COL_MUX) begin
cnt_row<=cnt_row+1'b1;
end
end
// wr_en1_r
assign wr_en1=wr_en1_r

本文详细描述了一个86x86矩阵数据处理的FIFO控制器设计,包括波形设计、代码实现(如fifo_ctrl模块、顶层文件top_fifo_ctrl和仿真文件tb_fifo_ctrl),以及uart通信。控制器负责接收串口数据,缓存并按每三行一组进行列加运算,输出结果。

被折叠的 条评论
为什么被折叠?



