什么是流水线
流水线设计是指系统地分割组合逻辑,在各部分(层次)之间插入寄存器,暂时保存中间数据的方法。 目的是将一个大操作分解为几个小操作,因为每个步骤的小操作时间小,所以可以提高频度,因为各个小操作并行执行,所以可以提高数据吞吐量(例如
使用流水线的优缺点
优点:流水线可以缩短组合逻辑路径的长度,提高数据吞吐量,提高时钟频率,但导致数据延迟的例子如下。
例如,在第2级组合逻辑中,假设每个级别的延迟都是相同的Tpd
1 .无管线总延迟为2Tpd
2 .流水线:各级加入寄存器(延时为Tco )后,单级延时为时钟周期受限制在 2Tpd,各级消耗1个时钟周期,http://www.Sina.com/http://www 另外, Tpd+Tco
缺点:功耗增加,面积增加,硬件复杂度增加。 特别是在cpu这样复杂逻辑的管线中,流水越深,发生需要保持管线或重置管线的情况时,时间损失就越大。 因此,使用管线不是有利无害的,而是流水线需要 2 个时钟周期来获得第一个计算结果,称为
流水线是电路设计过程中必不可少的实现方式,可以提高电路的性能。 需要设计高速电路时,需要使用流水线
流水线的设计是把延迟大的组合逻辑插入寄存器,把大的组合逻辑分成几个时钟周期完成,提高系统的最大时钟频率。
握手协议可确保数据的上游和下游正确接收数据。 握手协议的原则是,当Valid和Ready信号同时启用时,数据会在时钟的上升沿传输,从而更新上游数据。
首次延迟
介绍用Verilog设计简单的可变就绪握手电路的基本原理
本设计可以实现数据的流入和数据的流出,实现这种双端口握手的通道传输。 Valid信号和Ready信号的原理类似于FIFO的读写和空信号,就像FIFO的外面被涂层一样。
握手协议的几种连接情况
握手管道的Verilog设计(其中一级) )。
可以基于同步FIFO修改握手接口。 变更电路如下图所示。
assign valid_o=~fifo_empty;
assign ready_o=~fifo_full;
assign wr_en=ready_o valid_i;
assign rd_en=ready_i valid_o;
verilog实现代码:
module handshake _ protocol (input clk,input rst_n,input valid_i,//from pre-stageinput data_i,//from pre-SSS //from post-stageoutputregready _ o、//to pre-stageoutput regvalid_o、//topost-stageoutputregdata _ o/topo otata always@(Posedgeclk,negedge rst_n ) beginif (! rst_n ) beginvalid_o=1’b0; data_o_r=1’b0; Endelseif(valid_Iready_o ) beginvalid_o=1’b1; data_o_r=data_i; endelse valid_o=1’b0; endalways@(Posedgeclk,negedge rst_n ) beginif (! rst_n ) beginready_o=1’b0; data_o=1’b0; endelseif(ready_Ivalid_o ) beginready_o=1’b1; data_o=data_o_r; endelseready_o=1’b0; 如果endendmodulevalid_o为上拉,则表示此级别的数据已经准备好,下一级别的数据可以读取。
如果ready_o为上拉,则表示此级别的数据已被读取,较高级别的数据可以写入新数据;
另外,如果要实现高速流水线作业,即读取该级别的数据时,高级别的数据同时进入,各级寄存器无缝连接。