名称:基于“ ping pang buffer”的数据流设计Verilog代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:
基于“ping pang buffer”的数据流设计
内容:
在数据流控制中,ping-pang buffer是一种典型的设计思想,具体流程框图如图1所示。其中“ Traffic Generator”为流量生成器,生成的数据流通过“ Input Data Mux”模块等时写入FIFO0与FIFO1两个异步FIFO中.“ Output Data Mux”模块等时地从两个FIFO中读取数据,输送至“ Accumulator”模块进行累加。通过“ Input Data Mux”模块与“ Out put?Data Mux”模块按节拍,相互配合的切换,经过缓冲的数据流无停顿地送到“ Accumulato模块进行处理,从外部来看数据流的输入输出均为不间断的,因此乒乓操作非常适合对数据流进行流水线式处理。
设计细节
每一个时钟周期, Traffic Generator都生成32bit随机数据din[31:0]与伴随数据的lbit数据有效信号wren。在第一个时钟周期, Input Data Mux模块将 Traffic Generator与FIF0O相连,将数据写入FIFO0,此时FIFO1处于空闲状态。当FIFO0写满后, Input Data Mux模块立即将Traffic Generator与FIF01相连,将数据写入FIFOI,此时OutputDatMux选中FIF00,将数据从 FIFOO中读出。当 FIFOL写满后, Input Data Mux模块立即将TrafficGenerator与FIF00相连,将数据写入FIF00,此时outputDataMux选中FIF01将数据从FIFO1中读出。之后数据读写均按此规则来。
从 Output Data Mux输出的数据均送至 Accumulator模块进行累加,累加的数据存至dout[63:0]寄存器中。比较累加结束后dout的值与实际输出数值之和是否一致。
提示:
(1)系统时钟频率为200Mhz。
(2)FIFO为同步时钟FIFO,深度为42,使用 Verilog进行编写。
(3)TrafficGenerator至少生成20000组数据。
(4)仿真时需将波形截图,并配有文字说明。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
部分代码展示:
//乒乓FIFO控制 module?fifo_ctrl( input?clk, input?rst, input?[31:0]?data,//输入数据 input?wr_en_0, input?wr_en_1, output?full_0,//fifo0满 output?full_1,//fifo1满 output?rd_en_0,//fifo0读使能 output?rd_en_1,//fifo1读使能 output?[31:0]?dout_0,//FIFO0?输出 output?[31:0]?dout_1//FIFO1?输出 ); assign?rd_en_0=!wr_en_0; assign?rd_en_1=!wr_en_1; //FIFO?0 a_fifo?FIFO0 ( .clk??(clk),//200M .rst??(rst), .din??(data),//fifo写数据 .wr_en(wr_en_0),//写使能 .rd_en(rd_en_0),//读使能 .dout?(dout_0),//读数据 .empty(empty_0),//空信号 .full?(full_0)//满信号 ); //FIFO?1 a_fifo?FIFO1 ( .clk??(clk),//200M .rst??(rst), .din??(data),//fifo写数据 .wr_en(wr_en_1),//写使能 .rd_en(rd_en_1),//读使能 .dout?(dout_1),//读数据 .empty(empty_1),//空信号 .full?(full_1)//满信号 ); endmodule
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=637
427