小白速通:Verilog流水线实现及时序分析

目录

  • 题目:
  • 时序分析:时钟频率为50MHz
    • 数据1: a=10, b=20, c=30, d=40, e=2
    • 数据2: a=5, b=15, c=25, d=35, e=3
    • 数据3: a=8, b=12, c=16, d=24, e=4
  • 流水线效率分析

题目:

      verilog中,y=(a+b+c+d)*e,时钟频率为50Mhz,用流水线的形式表示,并说明运算完需要多少ns?

图片帮助理解:T1-T4只能做1辆车,但是T4后,每个时钟周期就能做一辆车(如果没有流水线,就每做1辆车都需要4个T的时间)
在这里插入图片描述

      在Verilog中,将表达式 y=(a+b+c+d)*e 用流水线形式实现,可以分为多个阶段,每个阶段对应一个时钟周期。
      流水线设计可以提高电路的吞吐量,但会增加延迟(latency)。下面是具体实现及时序分析。

流水线实现:
      将该表达式分为3个流水线阶段:

  1. 第一阶段:计算 a+b 和 c+d
  2. 第二阶段:计算 (a+b)+(c+d)
  3. 第三阶段:计算 ((a+b)+(c+d))*e

代码实现:

module pipeline_mult (input wire clk,         // 时钟信号,50MHzinput wire rst_n,       // 复位信号,低电平有效input wire [7:0] a,     // 假设都是8位输入input wire [7:0] b,input wire [7:0] c, input wire [7:0] d,input wire [7:0] e,output reg [15:0] y     // 输出可能需要更宽的位宽
);// 第一级流水线寄存器reg [8:0] sum_ab;      // a+b的结果,需要多一位防止溢出reg [8:0] sum_cd;      // c+d的结果reg [7:0] e_reg1;      // 保存e的值传递到下一级// 第二级流水线寄存器reg [9:0] sum_abcd;    // (a+b)+(c+d)的结果reg [7:0] e_reg2;      // 保存e的值传递到下一级// 第一级流水线always @(posedge clk or negedge rst_n) beginif (!rst_n) beginsum_ab <= 9'b0;sum_cd <= 9'b0;e_reg1 <= 8'b0;end else beginsum_ab <= a + b;sum_cd <= c + d;e_reg1 <= e;    // 将e传递到下一级endend// 第二级流水线always @(posedge clk or negedge rst_n) beginif (!rst_n) beginsum_abcd <= 10'b0;e_reg2 <= 8'b0;end else beginsum_abcd <= sum_ab + sum_cd;e_reg2 <= e_reg1;  // 将e传递到下一级endend// 第三级流水线 - 最终结果always @(posedge clk or negedge rst_n) beginif (!rst_n) beginy <= 16'b0;end else beginy <= sum_abcd * e_reg2;  // 最终的乘法计算endendendmodule

时序分析:时钟频率为50MHz

意味着时钟周期为:
      T = 1/f = 1/(50*10^6) = 20 ns
在这个流水线设计中:
      第一个输入需要经过3个时钟周期(3级流水线)才能产生有效输出;单次计算的延迟(latency)为:3 * 20 ns = 60 ns ;但一旦流水线填满,之后每个时钟周期都会产生一个新的结果(吞吐量为每20ns一个结果) 。因此,对于单个计算实例,从输入到计算完成需要60 ns的时间。但是流水线的优势在于可以同时处理多个计算实例,每20 ns就能输出一个结果。
给小白,解释一下这个疑问:

Clock       : |¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|¯|_|
Time (ns)   :  0  20  40  60  80 100 120 140 160 180 200 220输入数据:
a           : |10 |  5|  8|   |   |   |   |   |   |   |   |   |   |   |   |
b           : |20 | 15| 12|   |   |   |   |   |   |   |   |   |   |   |   |
c           : |30 | 25| 16|   |   |   |   |   |   |   |   |   |   |   |   |
d           : |40 | 35| 24|   |   |   |   |   |   |   |   |   |   |   |   |
e           : | 2 |  3|  4|   |   |   |   |   |   |   |   |   |   |   |   |第一级流水线:
sum_ab      : |   | 30| 20| 20|   |   |   |   |   |   |   |   |   |   |   |
sum_cd      : |   | 70| 60| 40|   |   |   |   |   |   |   |   |   |   |   |
e_reg1      : |   |  2|  3|  4|   |   |   |   |   |   |   |   |   |   |   |第二级流水线:
sum_abcd    : |   |   |100| 80| 60|   |   |   |   |   |   |   |   |   |   |
e_reg2      : |   |   |  2|  3|  4|   |   |   |   |   |   |   |   |   |   |输出结果:
y           : |   |   |   |200|240|240|   |   |   |   |   |   |   |   |   |↑   ↑   ↑数据1 数据2 数据3

看完这2个图,你应该大致明白了,不明白的话,继续看下面这个分析:
详细时序分析:

数据1: a=10, b=20, c=30, d=40, e=2

  1. 时钟周期1 (0-20ns):
  • 输入数据: a=10, b=20, c=30, d=40, e=2
  • 寄存器尚未更新
  1. 时钟周期2 (20-40ns):
  • 第一级流水线:
    • sum_ab = 10 + 20 = 30
    • sum_cd = 30 + 40 = 70
    • e_reg1 = 2
    • 其他级别未更新
  1. 时钟周期3 (40-60ns):
  • 第二级流水线:
    • sum_abcd = 30 + 70 = 100
    • e_reg2 = 2
    • 第三级流水线尚未更新
  1. 时钟周期4 (60-80ns):
  • 输出结果:
    • y = 100 * 2 = 200 (实例1的最终结果)

数据2: a=5, b=15, c=25, d=35, e=3

  1. 时钟周期2 (20-40ns):
    • 输入数据: a=5, b=15, c=25, d=35, e=3
    • 寄存器尚未更新
  2. 时钟周期3 (40-60ns):
    • 第一级流水线:
    • sum_ab = 5 + 15 = 20
    • sum_cd = 25 + 35 = 60
    • e_reg1 = 3
    • 其他级别未更新
  3. 时钟周期4 (60-80ns):
    • 第二级流水线:
    • sum_abcd = 20 + 60 = 80
    • e_reg2 = 3
    • 第三级流水线尚未更新
  4. 时钟周期5 (80-100ns):
    • 输出结果:
    • y = 80 * 3 = 240 (数据2的最终结果)

数据3: a=8, b=12, c=16, d=24, e=4

  1. 时钟周期3 (40-60ns):
    • 输入数据: a=8, b=12, c=16, d=24, e=4
    • 寄存器尚未更新
  2. 时钟周期4 (60-80ns):
    • 第一级流水线:
    • sum_ab = 8 + 12 = 20
    • sum_cd = 16 + 24 = 40
    • e_reg1 = 4
    • 其他级别未更新
  3. 时钟周期5 (80-100ns):
    • 第二级流水线:
    • sum_abcd = 20 + 40 = 60
    • e_reg2 = 4
    • 第三级流水线尚未更新
  4. 时钟周期6 (100-120ns):
    • 输出结果:
    • y = 60 * 4 = 240 (数据3的最终结果)

流水线效率分析

  1. 延迟 (Latency):
  • 每个计算实例从输入到输出需要3个时钟周期 = 60 ns
  1. 吞吐量 (Throughput):
  • 流水线满载后,每20 ns产生一个结果
  • 3个计算实例总共需要时间 = 60 ns (首个结果) + 40 ns (接下来2个结果) = 100 ns
  • 如果是没有流水线的设计,需要 3 * 60 ns = 180 ns
  1. 性能提升:
  • 流水线设计对于处理大量连续数据时,性能提升明显
  • 在这个例子中,处理3个连续实例的时间从180 ns减少到了100 ns,提升约44%
    这种波形图清晰地展示了流水线的工作原理,显示了每个计算实例如何逐级推进,最终产生结果,以及多个实例如何在流水线中重叠执行,提高总体处理效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-创建网格

创建网格 文章目录 创建网格1、概述2、更新Globals.h文件3、创建单元4、创建网格5、传递事件6、清空单元7、反馈单元格已清除8、测试9、完整代码10、总结在本文中,将详细介绍如何构建一个二维的交互式扫雷单元格网格。 1、概述 在本文中,我们将专注于构建扫雷游戏的基础结构…

高精度矢量内积计算方法 (单精度浮点, 超长矢量)

高精度矢量内积计算方法 (单精度浮点, 超长矢量) 对于单精度浮点类型的超长矢量(超过1亿元素)内积计算&#xff0c;累加误差确实是一个重要问题。以下是几种减少误差的方法&#xff1a; 1. Kahan求和算法 这是最常用的补偿求和算法&#xff0c;可以有效减少累加误差&#xf…

Java基础:Logback日志框架

什么是日志 日志技术 可以将系统执行信息&#xff0c;方便的记录到指定位置&#xff08;控制台&#xff0c;文件中&#xff0c;数据库中&#xff09; 可以随时可以开关的形式控制日志的启停&#xff0c;无需侵入到源代码中去进行修改 LogBack日志框架 LogBack快速入门 logb…

MessageQueue --- RabbitMQ WorkQueue and Prefetch

MessageQueue --- RabbitMQ WorkQueue and Prefetch 什么是WorkQueue分发机制 --- RoundRobin分发机制 --- PrefetchSpring example use prefetch --- Fair Dispatch 什么是WorkQueue Work queues&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同…

RNN模型与NLP应用——(9/9)Self-Attention(自注意力机制)

声明&#xff1a; 本文基于哔站博主【Shusenwang】的视频课程【RNN模型及NLP应用】&#xff0c;结合自身的理解所作&#xff0c;旨在帮助大家了解学习NLP自然语言处理基础知识。配合着视频课程学习效果更佳。 材料来源&#xff1a;【Shusenwang】的视频课程【RNN模型及NLP应用…

详解AI采集框架Crawl4AI,打造智能网络爬虫

大家好&#xff0c;Crawl4AI作为开源Python库&#xff0c;专门用来简化网页爬取和数据提取的工作。它不仅功能强大、灵活&#xff0c;而且全异步的设计让处理速度更快&#xff0c;稳定性更好。无论是构建AI项目还是提升语言模型的性能&#xff0c;Crawl4AI都能帮您简化工作流程…

从零开始玩python--python版植物大战僵尸来袭

大家好呀&#xff0c;小伙伴们&#xff01;今天要给大家介绍一个超有趣的Python项目 - 用pygame制作植物大战僵尸游戏的进阶版本。相信不少小伙伴都玩过这款经典游戏&#xff0c;今天我们就用Python来实现它&#xff0c;让编程学习变得更加有趣&#xff01;&#x1f31f; 一、…

图解AUTOSAR_SWS_FlashTest

AUTOSAR Flash Test模块详解 基于AUTOSAR 4.4.0规范的Flash测试模块分析与图解 目录 概述 1.1 Flash Test模块的作用 1.2 工作原理架构设计 2.1 整体架构 2.2 依赖关系状态管理 3.1 状态转换图 3.2 前台与后台测试模式配置结构 4.1 配置类图 4.2 关键配置参数交互流程 5.1 序列…

【mongodb】mongodb的字段类型

目录 1. 基本数据类型1.1 String1.2 Number1.3 Boolean1.4 Date1.5 Null1.6 ObjectId1.7 Array1.8 Binary Data1.9 Object 2. 特殊数据类型2.1 Regular Expression2.2 JavaScript2.3 Symbol2.4 Decimal1282.5 Timestamp2.6 MinKey/MaxKey2.7 DBPointer 3. 常用字段类型示例4. 注…

MySQL篇(五)MySQL主从同步原理深度剖析

MySQL篇&#xff08;五&#xff09;MySQL主从同步原理深度剖析 MySQL篇&#xff08;五&#xff09;MySQL主从同步原理深度剖析一、引言二、MySQL主从同步基础概念主库&#xff08;Master&#xff09;从库&#xff08;Slave&#xff09;二进制日志&#xff08;Binary Log&#x…

论文学习16:Learning Transferable Visual Models From Natural Language Supervision

代码来源 Learning Transferable Visual Models From Natural Language Supervisionhttps://arxiv.org/pdf/2103.00020 模块作用 当前最先进的计算机视觉系统被训练用于预测一组固定的、预先定义的目标类别。这种受限的监督方式限制了它们的通用性和可用性&#xff0c;因为要…

[MySQL初阶]MySQL(9)事务机制

标题&#xff1a;[MySQL初阶]MySQL&#xff08;9&#xff09;事物机制 水墨不写bug 文章目录 一、认识事务1、多线程访问数据库出现的问题2、对CURD的限制是通过事务机制实现的3、事务的四个属性4、哪些引擎支持事务 二、事务的提交与autocommit设置三、事务的隔离性和隔离级别…

spring-cloud-alibaba-nacos-config使用说明

一、核心功能与定位 Spring Cloud Alibaba Nacos Config 是 Spring Cloud Alibaba 生态中的核心组件之一&#xff0c;专为微服务架构提供动态配置管理能力。它通过整合 Nacos 的配置中心功能&#xff0c;替代传统的 Spring Cloud Config&#xff0c;提供更高效的配置集中化管理…

SonarQube数据库配置

SonarQube部署完成后&#xff0c;在浏览器地址栏输入http://IP:9000可以进入登录页面&#xff0c;以本机运行为例&#xff0c;地址为http://127.0.0.1:9000/&#xff0c;默认登录名&#xff1a;admin&#xff0c;登录密码也是admin。登录后会要求设置密码&#xff1a; 按要求设…

医药档案区块链系统

1. 医生用户模块​​ ​​目标用户​​&#xff1a;医护人员 ​​核心功能​​&#xff1a; ​​检索档案​​&#xff1a;通过关键词或筛选条件快速定位患者健康档案。​​请求授权​​&#xff1a;向个人用户发起档案访问权限申请&#xff0c;需经对方确认。​​查看档案​…

CSS3学习教程,从入门到精通, 化妆品网站 HTML5 + CSS3 完整项目(26)

化妆品网站 HTML5 CSS3 完整项目 下面是一个完整的化妆品网站项目&#xff0c;包含主页、登录页面和注册页面。我将按照您的要求提供详细的代码和注释。 1. 网站规划与需求分析 需求分析 展示化妆品产品信息提供用户注册和登录功能响应式设计&#xff0c;适配不同设备美观…

ROS2 多机时间同步(Chrony配置简明指南)

适用场景&#xff1a; 主机运行 ROS2 Humble&#xff08;发布 /scan 等&#xff09;&#xff0c;板子运行 ROS2 Foxy&#xff08;发布 /tf 等&#xff09;&#xff0c;两边通过 ROS_DOMAIN_ID 跨平台通讯。需要保证系统时间对齐&#xff0c;避免 TF 插值失败、建图抖动等问题。…

Nginx配置伪静态,URL重写

Nginx配置伪静态&#xff0c;URL重写 [ Nginx ] 在Nginx低版本中&#xff0c;是不支持PATHINFO的&#xff0c;但是可以通过在Nginx.conf中配置转发规则实现&#xff1a; location / { // …..省略部分代码if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s/$1 l…

电路笔记(元器件):ADC LTC系列模数转换器的输出范围+满量程和偏移调整

LTC1740(LTC1740官方文档)是Analog Devices&#xff08;原Linear Technology&#xff09;公司生产的一款高性能、低功耗的14位模数转换器(ADC)。它通常用于需要高精度和快速采样率的应用中&#xff0c;如通信系统、数据采集设备等。同类产品 LTC1746&#xff1a;一款14位、40Ms…

续-算法-数学知识

3、欧拉函数 1、定义&#xff1a; 1~n 中与 n 互质的数的个数 例如&#xff1a;6 的有 1 2 3 4 5 6 其中&#xff0c;与 n 互质 的 数的个数为 2个分别是&#xff1a;1、5 2、计算&#xff1a; $ N p_1^{a1} p_2^{a2} p_3^{a3} … p_k^{ak} $&#xff08;例如&#x…