13 Verilog语法_流水线设计
软件版本:无操作系统:WIN10 64bit硬件平台:适用所有系列FPGA登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!1概述本小节讲解Verilog语法的流水线设计,需要掌握流水线的设计方法。2流水线简介2.1 什么是流水线流水线的基本思想是:把一个重复的过程分解为若干个子过程,每个子过程由专门的功能元件来实现。将多个处理过程在时间上错开,依次通过各功能段,这样每个子过程就可以与其他子过程并行进行。例:小张在快递站工作,日常任务就是打包快递,打包快递分为四个步骤,称重、打包、贴单和入库,每个步骤耗时5分钟。临近双十一,快递寄送任务变多,小张一个人忙不过来,临时添加三个人一起打包快递,每人负责一个步骤,原先打包4个快递需要80分钟,现在需要35分钟。如图所示:2.2 设计流水线设计一个32位的全加器,使用四级流水线。例:modulefull_add (input rst_n,input clk,input add_a,input add_b,input c_in,input vld,output add_sum,output c_out,output sum_vld);
reg c_in_ff;reg add_a_ff;reg add_b_ff;reg add_a_1;reg add_b_1;reg add_a_2;reg add_b_2;reg add_a_3;reg 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 sum1;reg sum2;reg sum3;reg add_sum;always@(posedge clk or negedge rst_n) //输入数据的四级缓存beginif (!rst_n) begin c_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; endelse begin c_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; endendalways@(posedge clk or negedge rst_n) //四级流水线设计begin if (!rst_n) begin sum1 <= 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 else begin {cout1,sum1} <=9'b0+add_a_ff+add_b_ff+c_in_ff; {cout2,sum2} <= {9'b0+add_a_1+add_b_1+cout1,sum1}; {cout3,sum3} <= {9'b0+add_a_2 +add_b_2 +cout2,sum2}; {c_out,add_sum} <= {9'b0+add_a_3 +add_b_3 +cout3,sum3}; end endendmodule
流水线设计就是将路径系统的分割成一个个数字处理单元,并在各个处理单元之间插入寄存器来暂存中间阶段的数据。被分割的单元能够按阶段并行的执行,相互间没有影响。所以最后流水线设计能够提高数据的吞吐率,即提高数据的处理速度。
页:
[1]