原创 基于FPGA的流水线设计

2010-12-28 10:47 1623 8 9 分类: 消费电子

FPGA/CPLD重要设计思想及工程应用

流水线设计篇

概述

流水线设计是高速电路设计中的一个常用设计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法来提高系统的工作频率。

流水线处理的应用

在很多领域的高速电子系统中都运用了流水线处理的方法,如高速通信系统、高速采集系统、高速导航系统、高速搜索系统等等。流水线处理方式之所以能够很大程度上提高数据流的处理速度,是因为复制了处理模块,它是面积换取速度思想的又一种具体体现。

流水线设计应用实验

假设该设计为某实时通信系统的一个模块,该系统采样频率为5MHz,采样精度为32位。我们需要设计的内容为:对采样数据先进行加减偏移量的运算,假设需要加十六进制数00000077h的偏移量,然后把该数据压缩为16位数据,便于采样后的信号处理运算,压缩数据时保持精度相对高些。这里我们假设信号处理运算很简单,就是将压缩后的数据先减去十六进制数00ffh,然后取差值的低八位数据值做为该设计的输出。

在程序里,进行了四步的流水线作业。所以在功能仿真出来的波形图中可以看到,在en使能(粗黄线)后的三个时钟周期(也即第四个时钟上升沿)后(细黄线)en_out拉高了,dout端开始有输出的数据,而且输出的数据是每一个时钟周期来一个,和输入的数据是同步的。所谓流水作业,在实际硬件电路中就是把一个大的组合逻辑分成各个小的组合逻辑,每一个输入的信号都必须顺次通过各个阶段的操作,而各个阶段的操作又是同步进行的,这就像工厂的生产流水线一样,会有源源不断的数据信号从输出端送出。另外,从这个实验中也可以更深刻的体会到Verilog的并行性。

tu1.jpg



另外从综合后的RTL视图中可以看到四级的流水结构:

tu2.jpg



程序:

module liu_shui(clk,rst,data,en,en_out,dout);



input clk;//时钟信号



input rst;//复位信号



input[31:0] data;//输入信号



input en;//输入信号使能,如果为1说明有信号输入



output en_out;//输出信号使能,如果为1说明输出经过处理的信号



output[7:0] dout;//输出信号







wire en_1,en_2,en_3;



wire[31:0] dout_1;



wire[15:0] dout_2,dout_3;







liu_1 liu_1(clk,rst,data,en,en_1,dout_1);



liu_2 liu_2(clk,rst,dout_1,en_1,en_2,dout_2);



liu_3 liu_3(clk,rst,dout_2,en_2,en_3,dout_3);



liu_4 liu_4(clk,rst,dout_3,en_3,en_out,dout);





endmodule





module liu_1(clk,rst,data,en,en_1,dout_1);



input clk;



input rst;



input[31:0] data;



input en;



output en_1;



output[31:0] dout_1;







reg[31:0] dout_1;



reg en_1;







always@(posedge clk)



begin



if(!rst) begin dout_1 <= 32'h00000000;en_1 <= 0; end



else if(en) begin dout_1 <= data+32'h00000077;en_1 <= 1; end



else en_1 <= 0;



end





endmodule





module liu_2(clk,rst,dout_1,en_1,en_2,dout_2);



input clk;



input rst;



input[31:0] dout_1;



input en_1;



output en_2;



output[15:0] dout_2;







reg[15:0] dout_2;



reg en_2;







always@(posedge clk)



begin



if(!rst) begin dout_2 <= 16'h0000;en_2 <= 0; end



else if(en_1) begin dout_2 <= dout_1[31:16];en_2 <= 1; end



else en_2 <= 0;



end





endmodule





module liu_3(clk,rst,dout_2,en_2,en_3,dout_3);



input clk;



input rst;



input[15:0] dout_2;



input en_2;



output en_3;



output[15:0] dout_3;







reg[15:0] dout_3;



reg en_3;



parameter num="16"'h00ff;







always@(posedge clk)



begin



if(!rst) begin dout_3 <= 16'h0000;en_3 <= 0; end



else if(en_2) begin dout_3 <= dout_2-num;en_3 <= 1; end



else en_3 <= 0;



end





endmodule





module liu_4(clk,rst,dout_3,en_3,en_out,dout);



input clk;



input rst;



input[15:0] dout_3;



input en_3;



output en_out;



output[7:0] dout;







reg[7:0] dout;



reg en_out;







always@(posedge clk)



begin



if(!rst) begin dout <= 8'h00;en_out <= 0; end



else if(en_3) begin dout <= dout_3[7:0];en_out <= 1; end



else en_out <= 0;



end



endmodule

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1851420 2015-8-28 19:18

为什么不写在一个modulez 中呢?这样好看一些,用4个always顺序块去实现

用户1677109 2014-5-30 17:09

质量标杆

忆轻狂 2013-4-29 22:29

我记得华硕当初能够打响电脑,就是因为有一台电脑在火灾中存活下来,以后,坚如磐石这个口号就出现了

100325258_284169027 2013-4-18 15:45

侥幸

kent_rao_738407428 2013-4-18 14:33

说得有道理。但用于上万美元仪器上的塑料绝非普通的塑料,强调、稳定性和耐高温的性能远不是普通塑料壳能比的啊

用户1540383 2013-4-18 08:08

面板上的塑胶键还完好无损。只能说明这三台仪器很幸运。不能说明它的质量。

kent_rao_738407428 2013-4-17 16:39

图上的3台全部是仪器,不是电脑啊!

用户1277994 2013-4-17 16:25

这不合理啊,电脑有防火功能吗?

用户1602177 2013-4-17 16:05

哈哈,厉害~~话说,左下那台显示屏可安好?没有点亮啊~~
相关推荐阅读
用户1587532 2012-12-04 14:56
被忽略的硬件常识
          在特权同学的《都是IO弱上拉惹的祸》一文中,提及了Altera的CPLD在初始化时管脚通常会处于弱上拉状态。在实际示波器采样来看,就表现在上电初 期IO脚会有一个短暂(当时是持...
用户1587532 2012-12-04 14:56
都是IO弱上拉惹的祸
         开发的一款液晶驱动器,接收MCU过来的指令和数据进行图像显示。使用了一片可编程(带使能和PWM调节控制)的背光芯片。在CPLD设计中,上电复位状态将背光使能拉低(关闭),直到MC...
用户1587532 2011-12-29 09:39
四通道波形动态演示效果
 ">http:// http://v.youku.com/v_show/id_XMzM3MDY2NjYw.html   这效果,Cortex-M3可以吗?     ...
用户1587532 2011-12-21 12:54
高速绘图显示,还是FPGA给力
  示波器的效果,曾经以为难于上青天,殊不知咱用FPGA一样能够轻松效仿。目前只是单通道的显示效果,随后送上4通道独立或叠加的波形效果。          感兴趣的朋友不妨去看看他的详细参数:...
用户1587532 2011-10-12 10:23
Keil存储空间自定义分配
Keil存储空间自定义分配          看来Capital-Micro的软件支持包做得还不够到位啊,在51编程环境KeilC中使用Astro II器件光有个Capital Micro D...
用户1587532 2011-09-22 16:38
源同步信号跨时钟域采集的两种方法
源同步信号跨时钟域采集的两种方法            对于数据采集接收的一方而言,所谓源同步信号,即传输待接收的数据和时钟信号均由发送方产生。FPGA应用中,常常需要产生一些源同步接口信...
EE直播间
更多
我要评论
1
8
关闭 站长推荐上一条 /3 下一条