java流水线工程设计_进阶项目(7)流水线设计讲解

写在前面的话

作为初学者,通常情况下我们所设计的电路都是低速的电路,一般都在百兆以下。那么,当我们需要设计高速电路的时候,就需要用到流水线。本节,梦翼师兄和大家一起初步地学习流水线。

流水线基本概念

流水线的设计,就是指对延时较大的组合逻辑插入寄存器,把较大的组合逻辑拆分成几个时钟周期来完成,以提高系统的最大时钟频率。但是这样做,会导致数据输出的延时,假若插入一个寄存器,则数据输出就到产生一个时钟周期的延时,假若插入N个寄存器,就会产生N个时钟周期的延时,下面我们用两幅图来描述这种关系。

0f424c22a95f352313781133330821b0.png

上图的总延时等于max{2,3} + 4 = 7ns;系统的时钟周期必须要大于7ns。当经过流水线改造之后,如下图所示:

3979d642678192a6ee7234dc75b31014.png

经过流水线改造之后,总延时等于max{2,3} + 1 + 4 = 8ns;但是系统的时钟周期只要大于4ns即可(引入了触发器,数据的采集需要发生在时钟上升沿),总处理数据的吞吐量增加了。

流水线改造实例

接下来我们用一个很简单的例子来说明如何对电路进行简单的流水线改造,假设我们现在要实现(4*a+6*b)-10,那么我们可以用原理图的方式来实现这一算法。

首先,跟之前的项目一样,新建一个项目工程。当工程建立完毕之后,我们不需要新建verilog HDL file,而是新建一个Block Diagram / Schematic File,如下图所示:

66487553fdb73d5a2872d834d407ee8f.png

然后我们在新建的原理图里面,双击一下鼠标左键,然后在左上角的library里面找到lpm_mult,如下图所示:

124257abb2605573b215fef776dd830e.png

点击【OK】,选择一下程序保存的路径然后选择【NEXT】,如下图所示:

f2fb3de5bfc72ca87ef68a72490e714a.png

点击【NEXT】之后,会弹出配置乘法器的选项,如下图所示:

6242fa8bef462748d89b74399ded2777.png

这里是选择乘法器的位宽,直接点击【NEXT】得到下图:

98d9f35c9a072e836bd03b235d3d58af.png

如上图所示,选择让输入的数据乘以一个常数,然后点击【Finish】;同理再新建一个输入的数据乘以常数6的乘法器。

现在我们已经实现了4*a与6*b,接下来我们新建一个加法器双击原理图,在library里面找到lmp_add_sub,然后点击【OK】,选择好程序保存的路径之后,就会出现配置加法的选项,如下图所示:

777f3c1cf7e928c2177427982cf97f2e.png

选择仅仅使用减法,而且把位宽调到16位,然后点击【NEXT】如下图所示:

1b1f47d824a090a80a97d871b8b8d9cb.png

选择输入的数据减去一个固定的常数,然后选择【Finish】即可。接着我们新建一个Verilog HDL File文件,写一个16位的寄存器组;

代码如下:

/****************************************************

*   Engineer        :   梦翼师兄

*   QQ               :   761664056

*   The module function:  寄存器

*****************************************************/

00  module reg_data(clk,data_in,data_out);

01  input clk;//时钟输入端口

02  input [15:0]data_in;//数据输入端口

03

04  output reg [15:0]data_out;//数据输入端口

05

06  always@(posedge clk)

07      begin

08          data_out<=data_in;//输出数据等于输入数据

09      end

10  endmodule

接着我们选择左上角的File,然后选择Creat/Updata,再选择Crear Symbol File,将代码文件转换成原理图文件

27f7207a970759de99f9efba9624cd6c.png

然后我们回到原理图的文件里面,双击原理图,在左上角的library里面会多出一个projet,然后在projet里面找到刚才写的寄存器,然后双击放进原理图里面,然后我们用一样的方法,再新建一个8位位宽的寄存器组,然后放进原理图里面,完成之后把线连接好,如下图所示:

9633fe0c1ca217b7ca69f5c0342c3f6e.png然后还没有接线的模块,可以选择右键,选择Generate Pins for Symbol Ports

02fef65e45dd3f20873e8d87f7298c7c.png然后再把未接上的线给全部接上,如下图所示:

4a2408cdd831d17aa00b5bb44e081781.png

把所以先接上之后,可以按crtl+L,进行全编译,查看静态时序分析,观察系统时钟最大频率是多少。如下图所示:

9e29c00a3692943c41ca9b43d0b290bd.png

由上图可知,在还未改造成流水线结构的时候,系统时钟的最大频率是151.88Mhz,然后我们现在开始改造流水线结构(在各节点加入寄存器),看看系统时钟最大频率能上升多少,改流水线结构,如下图所示:

ccdbcbe9d3faab0aab9dcee68ffb94e6.png

在改造流水线之后,我们可以再一次全编译(ctrl + L),之后我们再继续查看静态时序分析报告,观察系统时钟频率的最大值,如下图所示:

0379e6a32ad968513ce1cfd834c65573.png

经过流水线改造之后,系统时钟的最大频率由151.88Mhz提升至了303.12Mhz,大幅系统时钟频率。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值