前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >verilog流水线设计代码_十进制BCD译码器的verilog

verilog流水线设计代码_十进制BCD译码器的verilog

作者头像
全栈程序员站长
发布2022-09-21 10:28:12
3740
发布2022-09-21 10:28:12
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

流水线概述

如下图为工厂流水线,工厂流水线就是将一个工作(比如生产一个产品)分成多个细分工作,在生产流水线上由多个不同的人分步完成。这个待完成的产品在流水线上一级一级往下传递。

比如完成一个产品,需要8道工序,每道工序需要10s,那么流水线启动后,不间断工作的话,第一个产品虽然要80s才完成,但是接下来每10s就能产出一个产品。使得速度大大提高。当然这也增加了人员等资源的付出。

对于电路的流水线设计思想与上述思想异曲同工,也是以付出增加资源消耗为代价,去提高电路运算速度。

流水线设计实例

这里以一个简单的8位无符号数全加器的设计为实例来进行讲解,

实现 assign {c_out,data_out [7:0]} = a[7:0] + b[7:0] +c_in c_out 为进位位。

(源码链接:https://pan.baidu.com/s/1-imO5A51dJ_pfWpRfOYcHg 提取码:dx0k )

如果有数字电路常识的人都知道,利用一块组合逻辑电路去做8位的加法,其速度肯定比做2位的加法慢。因此这里可以采用4级流水线设计,每一级只做两位的加法操作,当流水线一启动后,除第一个加法运算之外,后面每经过一个2位加法器的延时,就会得到一个结果。

整体结构如下,每一级通过in_valid,o_valid信号交互,分别代表每一级的输入输出有效信号。

第一级:做最低两位与进位位的加法操作,并将运算结果和未做运算的高六位传给下一级。

第二级:做2,3两位与上一级加法器的进位位的加法操作,并将本级运算结果和未做运算的高4位传给下一级。

第三级:做4,5两位与进位位的加法操作,并将运算结果和未做运算的高2位传给下一级。

第四级:做最高两位与上一级加法器输出的进位位的加法操作,并将结果组合输出。

仿真结果如下:如图,当整体模块in_valid有效时,送进去的数据a=1,b=5,c_in=1;故经过四个周期后,o_valid信号拉高,同时获得运算结果data_out=7。(本设计的流水线每级延时为一个时钟周期)

总结

流水线就是通过将一个大的组合逻辑划分成分步运算的多个小组合逻辑来运算,从而达到提高速度的目的。

在设计流水线的时候,我们一般要尽量使得每级运算所需要的时间差不多,从而做到流水匹配,提高效率。因为流水线的速度由运算最慢的那一级电路决定。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 流水线概述
  • 流水线设计实例
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档