- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
? 乒乓操作介绍
乒乓操作是通过“输入数据选择单元”和“输出数据选择单元’’按节拍的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算处理。把乒乓操作当作一个整体,站在这个模块的两端看数据,输入数据和输出数据都是连续不断的,因此非常适合对数据流进行流水线式处理,完成数据的无缝缓冲与处理。
处理流程:
输入数据流通过 “ 输入数据选择单元 ” 将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口 RAM(DPRAM) 、单口 RAM(SPRAM) 、 FIFO 等。在第一个缓冲周期,将输入的数据流缓存到 “ 数据缓冲模块 1” ;在第 2 个缓冲周期,通过 “ 输入数据选择单元 ” 的切换,将输入的数据流缓存到 “ 数据缓冲模块 2” ,同时将 “ 数据缓冲模块 1” 缓存的第 1 个周期数据通过 “ 输入数据选择单元 ” 的选择,送到 “ 数据流运算处理模块 ” 进行运算处理;在第 3 个缓冲周期通过 “ 输入数据选择单元 ” 的再次切换,将输入的数据流缓存到 “ 数据缓冲模块 1” ,同时将 “ 数据缓冲模块 2” 缓存的第 2 个周期的数据通过 “ 输入数据选择单元 ” 切换,送到 “ 数据流运算处理模块 ” 进行运算处理。如此循环。
举个栗子:
输入数据存储区域分为buffer1 和buffer1 ,各256个地址,为防止读写冲突,分两个状态:
state0读buffer2时,写buffer1;
state1读buffer1时,写buffer2;
当buffer存满,进行状态切换。
module pingpang( clk ,
rst_n ,
data_in , //输入数据
data_out //输出数据
);
input clk ;
input rst_n ;
input [7:0] data_in ;
output [7:0] data_out;
reg [7:0] data_out;
reg [7:0] buffer1 [255:0] ; //缓存区1
reg [7:0] buffer2 [255:0] ; //缓存区2
reg wr_flag ; //写标志, wr_flag = 0,写buffer1,wr_flag = 1,写buffer2
reg rd_flag ; //读标志, rd_flag = 0,读buffer2,wr_flag = 1,读buffer1
reg state ; //状态机, 0:写1读2, 1:写2读1 ,状态转移和输出分开编码
reg [7:0] cnt;
parameter state0=1b0;
parameter state1=1b1;
always @ (posedge clk or negedge rst_n) //状态转移
begin
if(rst_n == 1b0) cnt = 0;
else cnt = cnt + 1;
end
always @ (posedge clk or negedge rst_n) //状态转移
begin
if(rst_n == 1b0) state = 1b0;
else
begin
case(state)
state0 : if(cnt==8hff) state = 1b1;
state1 : if(cnt==8hff) state = 1b0;
default : state = 1b0;
endcase
end
end
always @ (state ) //状态输出
begin
case(state)
文档评论(0)