欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 米联客-FPGA程序设计Verilog语法入门篇连载-13 Verilog语法_流水线设计

米联客-FPGA程序设计Verilog语法入门篇连载-13 Verilog语法_流水线设计

2025/2/23 6:33:21 来源:https://blog.csdn.net/u011570052/article/details/141198940  浏览:    关键词:米联客-FPGA程序设计Verilog语法入门篇连载-13 Verilog语法_流水线设计

软件版本:无

操作系统:WIN10 64bit

硬件平台:适用所有系列FPGA

板卡获取平台:https://milianke.tmall.com/

登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!

1概述

本小节讲解Verilog语法的流水线设计,需要掌握流水线的设计方法。

2流水线简介

2.1 什么是流水线

流水线的基本思想是:把一个重复的过程分解为若干个子过程,每个子过程由专门的功能元件来实现。将多个处理过程在时间上错开,依次通过各功能段,这样每个子过程就可以与其他子过程并行进行。

例:小张在快递站工作,日常任务就是打包快递,打包快递分为四个步骤,称重、打包、贴单和入库,每个步骤耗时5分钟。临近双十一,快递寄送任务变多,小张一个人忙不过来,临时添加三个人一起打包快递,每人负责一个步骤,原先打包4个快递需要80分钟,现在需要35分钟。如图所示:

2.2 设计流水线

设计一个32位的全加器,使用四级流水线。例:

module  full_add (input           rst_n,input           clk,input    [31:0] add_a,input    [31:0] add_b,input           c_in,input           vld,output   [31:0] add_sum,output          c_out,output          sum_vld);reg         c_in_ff;reg [31:0]  add_a_ff;reg [31:0]  add_b_ff;reg [31:0]  add_a_1;reg [31:0]  add_b_1;reg [31:0]  add_a_2;reg [31:0]  add_b_2;reg [31:0]  add_a_3;reg [31:0]  add_b_3;reg         vld_temp;reg         vld_1;reg         vld_2;reg         vld_3;reg         sum_vld;reg         cout1;reg         cout2;reg         cout3;reg         c_out;reg [7:0]   sum1;reg [15:0]  sum2;reg [23:0]  sum3;reg [31:0]  add_sum;                                      always@(posedge clk or negedge rst_n)                        //输入数据的四级缓存beginif (!rst_n)beginc_in_ff  <= 'd0;add_a_ff <= 'd0;add_a_1  <= 'd0;add_a_2  <= 'd0;add_a_3  <= 'd0;            add_b_ff <= 'd0;add_b_1  <= 'd0;add_b_2  <= 'd0;add_b_3  <= 'd0;            vld_temp <= 'd0;vld_1    <= 'd0;vld_2    <= 'd0;vld_3    <= 'd0;sum_vld  <= 'd0;end elsebeginc_in_ff  <= c_in;add_a_ff <= add_a;add_a_1  <= add_a_ff;add_a_2  <= add_a_1;add_a_3  <= add_a_2;add_b_ff <= add_b;add_b_1  <= add_b_ff;add_b_2  <= add_b_1;add_b_3  <= add_b_2;vld_temp <= vld;vld_1    <= vld_temp;vld_2    <= vld_1;vld_3    <= vld_2;sum_vld  <= vld_3;          end end always@(posedge clk or negedge rst_n)               //四级流水线设计beginif (!rst_n)beginsum1     <= 8'b0;sum2     <= 16'd0;sum3     <= 24'd0;add_sum  <= 32'd0;cout1    <= 1'b0;cout2    <= 1'b0;cout3    <= 1'b0;c_out    <= 1'b0;              end elsebegin{cout1,sum1}        <=  9'b0+add_a_ff[7:0]  +add_b_ff[7:0]  +c_in_ff;{cout2,sum2}        <= {9'b0+add_a_1[15:8]  +add_b_1[15:8]  +cout1,sum1};{cout3,sum3}        <= {9'b0+add_a_2[23:16] +add_b_2[23:16] +cout2,sum2};{c_out,add_sum  }   <= {9'b0+add_a_3[31:24] +add_b_3[31:24] +cout3,sum3};              end        end endmodule

 

流水线设计就是将路径系统的分割成一个个数字处理单元,并在各个处理单元之间插入寄存器来暂存中间阶段的数据。被分割的单元能够按阶段并行的执行,相互间没有影响。所以最后流水线设计能够提高数据的吞吐率,即提高数据的处理速度。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词