verilog流水线设计代码_流水线cpu设计verilog

verilog流水线设计代码_流水线cpu设计verilog介绍定义:流水线设计就是将组合逻辑分割,并在各级之间插入寄存器,暂存中间数据的方法。以面积换速度。优点:每一部分延时降低——可用更快的时钟;大部分电路同时运算——提高数据吞吐率。缺点:增加面积;流水线并不减小单个数据操作的时间,减小的是整个数据流的操作时间;(不懂)功耗增加,硬件复杂度增加,特别对于复杂逻辑如cpu的流水线而言,流水越深,发生需要hold流水线或reset流水线的情况时,时间损失越大。所以使用流水线并非有利无害,大家需权衡考虑。应用场景:1)组合逻辑太长,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

介绍

定义:流水线设计就是将组合逻辑分割,并在各级之间插入寄存器,暂存中间数据的方法。以面积换速度。
在这里插入图片描述

在这里插入图片描述

优点:每一部分延时降低——可用更快的时钟;大部分电路同时运算——提高数据吞吐率。
缺点:增加面积;流水线并不减小单个数据操作的时间,减小的是整个数据流的操作时间;
(不懂)功耗增加,硬件复杂度增加,特别对于复杂逻辑如 cpu 的流水线而言,流水越深,发生需要 hold 流水线或 reset 流水线的情况时,时间损失越大。 所以使用流水线并非有利无害,大家需权衡考虑。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

应用场景
1)组合逻辑太长,比如(a+b)*c,那么在加法和乘法之间插入寄存器是比较稳妥的做法。
2)功能模块之间的流水线,用乒乓 buffer来交互数据。代价是增加了 memory 的数量,但是和获得的巨大性能提升相比,可以忽略不计。(详见乒乓设计)

(3 4不懂)
3) I/O 瓶颈,比如某个运算需要输入 8 个数据,而 memroy 只能同时提供 2 个数据,如果通过适当划分运算步骤,使用流水线反而会减少面积。
4)片内 sram 的读操作,因为 sram 的读操作本身就是两极流水线,除非下一步操作依赖读结果,否则使用流水线是自然而然的事情。

举例 8bit 流水线加法器
非流水线:

  input  [7:0] a;
  input  [7:0] b;
  output [8:0] c;
  assign c[8:0] = { 
   1'd0, a} + {1'd0, b};

两级流水线:第一级低 4bit,第二级高 4bit,所以第一个输出需要 2 个时钟周期有效,后面的数据都是 1 个周期之后有效。

  input          cin;
  input  [7:0]   cina;
  input  [7:0]   cinb;
  
  output [7:0]   sum;
  output         cout;
  
  reg            cout;
  reg            cout1; //插入的寄存器
  reg   [3 :0 ]  sum1 ; //插入的寄存器
  reg   [7 :0 ]  sum;
  reg   [3:0]    cina_reg;
  reg   [3:0]    cinb_reg;//插入的寄存器
  
  
  always @(posedge clk) //第一级流水
  begin
    { 
   cout1 , sum1} <= cina[3:0] + cinb [3:0] + cin ;
  end
  always @(posedge clk) //第一级同时要寄存高4位
  begin
    cina_reg <= cina[7:4];
    cinb_reg <= cinb[7:4];
  end
  
  always @(posedge clk) //第二级流水
  begin
    { 
   cout ,sum[7:0]} <= { 
   { 
   1'b0,cina_reg[3:0]} + {1'b0,cinb_reg[3:0]} + cout1 ,sum1[3:0]} ;
  end

参考资料
https://blog.csdn.net/times_poem/article/details/52033535

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170389.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JSTL标签使用

    JSTL标签使用文章来自 http www runoob com jsp jsp jstl htmlJSP 标准标签库 JSTL JSP 标准标签库 JSTL 是一个 JSP 标签集合 它封装了 JSP 应用的通用核心功能 JSTL 支持通用的 结构化的任务 比如迭代 条件判断 XML 文档操作 国际化标签 SQL 标签 除了这些 它还提供了一个框架来使用集成 JSTL 的自定义标签 根据 JSTL 标签所提供

    2025年11月30日
    4
  • 子网掩码和通配符掩码的区别

    子网掩码和通配符掩码的区别子网掩码子网掩码,官方的定义是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。说白了子网掩码的工作原理就是,它拥有和主机IP地址一样的位数,每一位与对应的ip地址位进行“与”操作,得出的结果就是主机所在的子网,打个比方,…

    2022年7月24日
    10
  • CreatePipe()等函数创建管道来操纵控制台

    CreatePipe()等函数创建管道来操纵控制台#include  #include    #define BUFSIZE 4096   HANDLE hChildStdinRd, hChildStdinWr, hChildStdinWrDup,    hChildStdoutRd, hChildStdoutWr, hChildStdoutRdDup,    hInputFile, hStdout;   BO

    2022年7月14日
    18
  • Docker 启动redis镜像

    Docker 启动redis镜像查看本地所有容器:dockerps-a查看本地运行中的容器:dockerps查看所有镜像:dockerimagesdaocker启动redis镜像同时设置密码:dockerrun-d–nameredis1-p6379:6379redis–requirepass“gs123456”参数解释:-d:后台运行-name为容器的名字-p端口映射–requirepass:redis密码redis为镜像名…

    2025年11月27日
    5
  • jmeter并发测试结果分析_jmeter并发测试结果分析

    jmeter并发测试结果分析_jmeter并发测试结果分析

    2022年9月29日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号