uisrc 发表于 2024-1-7 13:30:18

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]
查看完整版本: 13 Verilog语法_流水线设计