FPGA乒乓操作你了解吗? 还不赶快来看

什么是FPGA操作

你了解其中的奥秘吗

想知道更多?

跟小编一起来学习吧

乒乓操作的处理流程为:输入数据通过“输入数据选择单元"将数据等时分配到两个数据缓冲模块中,在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1"中,在第二个缓冲周期,通过“输入数据单元”切换,将输入的数据缓存到“数据缓冲模块2’’,同时将“数据缓冲模块1”缓存的第一个周期数据通过“数据选择单元”的选择,送到“数据流运算处理模块’’进行处理,在第三个缓冲周期通过“输入数据选择单元"的再次切换,将输入的数据流缓存到“数据缓冲模块1”中,同时将“数据缓冲模块2”缓存的第二个周期的数据通过“输出数据选择单元”的切换,送到“数据流运算处理模块”进行运算处理。如此循环。

看完这段文字是否一脸茫然

别急,有更直观的处理流程图

这样是否更清楚了呢

话不多说

接下来,让我们一起来看几种框图吧

01

系统框图

02

RTL级框图

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 ; //缓存1

reg [7:0] buffer2 ; //缓存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 ,状态转移和输出分开编码

always @ (posedge clk or negedge rst_n) //状态转移

begin

if(rst_n == 1'b0) state <= 1'b0;

else

begin

case(state)

1'b0 : state <= 1'b1;

1'b1 : state <= 1'b0;

default : state <= 1'b0;

endcase

end

end

always @ (state ) //状态输出

begin

case(state)

1'b0 : begin

wr_flag = 1'b0; //写1

rd_flag = 1'b0; //读2

end

1'b1 : begin

wr_flag = 1'b1; //写2

rd_flag = 1'b1; //读1

end

default : begin

wr_flag = 1'b0;

rd_flag = 1'b0;

end

endcase

end

always @ (posedge clk or negedge rst_n)

begin

if(rst_n == 1'b0)

begin

buffer1 <= 8'b0;

buffer2 <= 8'b0;

end

else

begin

case(wr_flag)

1'b0 : buffer1 <= data_in; //wr_flag = 0 ,写buffer1

2'b1 : buffer2 <= data_in; //wr_flag = 1 ,写buffer2

default : begin

buffer1 <= 8'b0;

buffer2 <= 8'b0;

end

endcase

end

end

always @ (posedge clk or negedge rst_n)

begin

if(rst_n == 1'b0) data_out <= 8'b0;

else

begin

case(rd_flag)

1'b0 : data_out <= buffer2; //rd_flag = 0,读buffer2

1'b1 : data_out <= buffer1; //rd_flag = 1,读buffer1

default : data_out <= 8'b0 ;

endcase

end

end

endmodule

test bench:

module pingpang_tb_v;

// Inputs

reg clk ;

reg rst_n ;

reg [7:0] data_in;

// Outputs

wire [7:0] data_out;

// Instantiate the Unit Under Test (UUT)

pingpang uut (

.clk (clk ),

.rst_n (rst_n ),

.data_in (data_in ),

.data_out(data_out)

);

initial

begin

// Initialize Inputs

clk = 0;

rst_n = 0;

data_in = 0;

#100;

rst_n = 1;

end

always #10 clk = ~clk;

always @ (posedge clk or negedge rst_n)

begin

if(rst_n == 1'b0) data_in <= 8'b0;

else data_in <= data_in + 1'b1;

end

endmodule

03

综合后顶层网表

原文发布于微信公众号 - 瓜大三哥(xiguazai_tortoise)

原文发表时间:2018-04-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

2012年10月9号阿里巴巴笔试(c++)

http://blog.csdn.net/liuzhanchen1987/article/details/8058177#comments

482
来自专栏人工智能头条

TensorFlow架构与设计:OP本质论

1514
来自专栏Golang语言社区

游戏AI设计经验分享——行为树研究

http://bbs.gameres.com/thread_493700.html

930
来自专栏Java面试笔试题

什么是ORM?

对象关系映射(Object-Relational Mapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;简单的说,O...

632
来自专栏PingCAP的专栏

TiDB 源码阅读系列文章(七)基于规则的优化

本篇将主要关注逻辑优化。先介绍 TiDB 中的逻辑算子,然后介绍 TiDB 的逻辑优化规则,包括列裁剪、最大最小消除、投影消除、谓词下推、TopN 下推等等。

5.5K15
来自专栏Fish

CCF 最优灌溉

问题描述   雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。   为了灌溉,雷雷需要建立一些...

1877
来自专栏枕边书

见招拆招-PostgreSQL中文全文索引效率优化

前言 上文 使用PostgreSQL进行中文全文检索 中我使用 PostgreSQL 搭建完成了一套中文全文检索系统,对数据库配置和分词都进行了优化,基本的查询...

4458
来自专栏沃趣科技

Oracle压缩黑科技(三):OLTP压缩

原文链接:https://www.red-gate.com/simple-talk/sql/oracle/compression-in-oracle-part-...

3157
来自专栏工科狗和生物喵

【计算机本科补全计划】图的连通性check by 并查集Union Find

具体的想法来自一篇写的超好的博客,如果底子不是很好,建议看下面这篇,当然如果可以给我顺手点个赞就更好了!!

602
来自专栏小樱的经验随笔

详解斯坦纳点及斯坦纳树及模版归纳总结

①什么是斯坦纳点?   假设原来已经给定了个点,库朗等指出需要引进的点数至多为,此种点称为斯坦纳点。过每一斯坦纳点,至多有三条边通过。若为三条边,则它们两两交成...

4366

扫码关注云+社区