FPGA之乒乓操作
比如将乒乓操作运用在液晶显示的控制模块上,如图所示。
module pingpang
(
input clk ,
input rst_n ,
input [:] data_in , // 输入数据
output reg [:] data_out // 输出数据
); // ------------------------------------------------------ //
reg [:] buffer1 ; // 缓存1
reg [:] buffer2 ; // 缓存2
reg wr_flag ; // 写标志,wr_flag=0,写buffer1,wr_flag=1,写buffer2
reg rd_flag ; // 读标志,rd_flag=0,读buffer2,rd_flag=1,读buffer1
reg state ; // 状态机,0:写1读2,1:写2读1,状态转移和输出分开编码
// ------------------------------------------------------ //
// 状态转移
always @ (posedge clk or negedge rst_n)
begin
if(rst_n == 'b0)
begin
state <= 'b0;
end
else
begin
state <= !state;
//case(state)
// 1'b0 : state <= 1'b0; // 写1读2->写2读1
// 1'b1 : state <= 1'b1; // 写2读1->写1读2
// default : state <= 1'b0;
//endcase
end
end
// ------------------------------------------------------ //
// 状态输出
always @ (state)
begin
case(state)
'b0:
begin
wr_flag = 'b0; // 写1
rd_flag = 'b0; // 读2
end
'b1:
begin
wr_flag = 'b1; // 写2
rd_flag = 'b1; // 读1
end
default:
begin
wr_flag = 'b0;
rd_flag = 'b0;
end
endcase
end
// ------------------------------------------------------ //
// 写buffer数据
always @ (posedge clk or negedge rst_n)
begin
if(rst_n == 'b0)
begin
buffer1 <= 'b0;
buffer2 <= 'b0;
end
else
begin
case(wr_flag)
'b0 : buffer1 <= data_in; // wr_flag = 0,写buffer1
'b1 : buffer2 <= data_in; // wr_flag = 1,写buffer2
default :
begin
buffer1 <= 'b0;
buffer2 <= 'b0;
end
endcase
end
end
// ------------------------------------------------------ //
// 读buffer数据
always @ (posedge clk or negedge rst_n)
begin
if(rst_n == 'b0)
begin
data_out <= 'b0;
end
else
begin
case(rd_flag)
'b0 : data_out <= buffer2; // rd_flag=0,读buffer2
'b1 : data_out <= buffer1; // rd_flag=1,读buffer1
default : data_out <= 'b0;
endcase
end
end
// ------------------------------------------------------ //
endmodule
2.2 FPGA仿真代码
`timescale 1ns / 1ps
module pingpang_tb();
reg clk ;
reg rst_n ;
reg [:] data_in ;
wire[:] data_out;
always # clk = ~clk;
initial
begin
rst_n <= 'b0 ;
clk <= 'b0 ;
#;
rst_n <= 'b1 ;
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
data_in <= 'd0;
else
data_in <= data_in + 'b1;
end
pingpang dut
(
.clk (clk ),
.rst_n (rst_n ),
.data_in (data_in ),
.data_out (data_out )
);
endmodule
3.仿真结果

FPGA之乒乓操作的更多相关文章
- 【FPGA技巧篇一】FPGA设计的四种常用思想与技巧之一 :乒乓操作
本文篇章将讨论一下的四种常用 FPGA 设计思想与技巧: 乒乓操作. 串并转换. 流水线操作. 数据接口同步化, 都是 FPGA 逻辑设计的内在规律的体现, 合理地采用这些设计思想能在FPGA设计工作 ...
- FPGA SD 卡 之 乒乓操作 、同步fifo
这里记录一个实际的需要使用乒乓操作的例子:读sd卡数据的时,在spi的模式下.发送单数据块的读取命令,在回应之后会有 512字节的数据.使用乒乓操作,可以用两个八位的寄存器,就可以完成连续的512字节 ...
- sdram之乒乓操作
在实时显示时,为了保证画面显示的完整性需要对SDRAM进行乒乓操作. SDRAM 中有 4 个bank ,地址分别为00 01 10 11,后面将用 0 1 2 3来描述 bank 0和1 作为第一个 ...
- DMA缓冲区乒乓操作的处理
http://www.51hei.com/bbs/dpj-141761-1.html https://blog.csdn.net/sunnydreamrain/article/details/8288 ...
- FPGA重要设计思想
FPGA重要设计思想 1.速度和面积互换原则.以面积换速度可以实现很高的数据吞吐率,其实串/并转换.就是一种以面积换速度的思想 2.乒乓操作. 3.串/并转换的思想. 高速数据处理的重要技巧之一. ...
- [华清远见]FPGA公益培训
本套视频教程为华清远见 网络公益培训活动,主讲人:姚远老师,华清远见高级讲师. ------------------------------------------------------------ ...
- 【转】 FPGA设计的四种常用思想与技巧
本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作.串并转换.流水线操作.数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作 ...
- CPLD VS FPGA
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL.GAL.CPLD等可编程器件的基础上进一步发展的产物.它是作为专用集成电路(ASIC)领域中的 ...
- FPGA/CPLD设计思想与技巧
本文讨论的四种常用FPGA/CPLD设计思想与技巧:乒乓操作.串并转换.流水线操作.数据接口同步化,都是FPGA/CPLD逻辑设计的内在规律的体现,合理地采用这些设计思想能在FPGA/CPLD设计工作 ...
随机推荐
- GitOps:Kubernetes多集群环境下的高效CICD实践
为了解决传统应用升级缓慢.架构臃肿.不能快速迭代.故障不能快速定位.问题无法快速解决等问题,云原生这一概念横空出世.云原生可以改进应用开发的效率,改变企业的组织结构,甚至会在文化层面上直接影响一个公司 ...
- windows 和 linux 安装 tensorflow
安装 跟往常一样,我们用 Conda 来安装 TensorFlow.你也许已经有了一个 TensorFlow 环境,但要确保你安装了所有必要的包. OS X 或 Linux 运行下列命令来配置开发环境 ...
- vue element 给指数的div加loading
const loading = this.$loading({ lock: true, text: 'Loading', spinner: 'el-icon-lo ...
- 为什么有时候Css样式表某个属性引用不成功?
首次使用博客,很多东西都在探索,第一篇文章也不知道发布点什么,就随便写写,是在word里面写的,也懒得排版,将就这用吧. 闲着没事找了酷狗的API写了个简单的静态网页,完成了搜索,展示,播放功能.就想 ...
- hdu 2225 The nearest fraction (数学题)
Problem - 2225 一道简单数学题,要求求出一个分母不超过m的最接近sqrt(n)的分数. 做法就是暴力枚举,注意中间过程不能用浮点数比较,误差要求比较高. 代码如下: #include & ...
- clear简单的例子
非常实用,非常简单的例子,结果都在图片里 <html> <head> <style> .keepbj { width:800px; height: 300px; b ...
- settTimeout vs setInterval
setTimeout:过一段固定的时间后,将代码提交到代码队列中排队. setInterval:每隔一段固定的时间,执行一次代码. 他们两都接受两个参数,第一个参数是字符串或者函数,第二个参数是设定的 ...
- pytorch 状态字典:state_dict 模型和参数保存
pytorch 中的 state_dict 是一个简单的python的字典对象,将每一层与它的对应参数建立映射关系.(如model的每一层的weights及偏置等等) (注意,只有那些参数可以训练的l ...
- tp5 字段验证表中是否唯一
namespace app\ps\validate; /** * 客户分类验证器 */ class CustomerCategory extends PsBase { // 验证规则 protecte ...
- Python--day25--面向对象之封装
狭义上的封装的例子:(例1)Python就只有两种类型:公有和私有,没有Java中说的那种保护类型 例2: 例3:正常的方法调用私有方法 封装总结: