快速入门数字芯片设计,UCSD ECE111(十一)Project的一些注意事项

简介: 快速入门数字芯片设计,UCSD ECE111(十一)Project的一些注意事项

这篇文章带来ECE111第十一节课的Slides以及自己的一些补充。

该课程的网站如下:


https://link.zhihu.com/?target=http%3A//cwcserv.ucsd.edu/~billlin/classes/ECE111/index.php


还差最后一节Slides这门课就结束了,不知道这一系列文章有没有给大家提供一些帮助,如果持续跟进加上自己动手写前面几个Project的话,我想对于初学者而言还是会有很大的提升的,大家有任何意见和建议欢迎评论或者私信我。

这节课其实还是围绕上节课的Project展开的,因此我不会每一节Slides都讲,主要觉得意义不大。但是一些我觉得有帮助的设计建议我会着重讲一下,这些是需要大家重点掌握的。

哈希算法中对每一个Block一共有64轮加密,每次加密使用的是不同的 �� ,很多人设计的时候就会习惯性的使用64个这样的数组。这样设计并不是不能达到要求,但芯片的功耗、面积是需要我们重点考虑的指标。设计的时候对于可以明显优化的地方一定要重点考虑。

  • 首先是避免使用64个数组,这主要是因为 �� 是具有周期性的。它的数据依赖关系只取决于这16组数据,如下图所示。对于0~15轮的�� 而言,直接就是当前的block,共512bit。对于16~31轮的�� 而言,可以发现只取决于0~29轮。可以发现距离自己最远(也就是数据依赖关系最远的也不过相差16轮)。因此从理论上只需要16个这样的数组即可。这样的数组本质上就是寄存器,当然你也可以用SRAM实现。这里为了性能好,一般是采用寄存器。除了本例之外,大家在别的设计中也需要挖掘数据依赖关系最远相差多少轮,这取决于要用几级寄存器“记忆”之前的数据!

  • 然后要避免使用变量选择逻辑。如W[t]<=,我解释一下这是为什么。对于硬件而言,它没有那么聪明,知道你写出的代码实际上只要用到某个元素,它综合的时候会默认包含所有的情况,你的t如果是从0~63的话。他默认就是从你所有“有可能”的输入中选择一个进行输出,这就会生成大量64选一的逻辑。而这些逻辑的资源开销和延迟都是无法接受的。
    如下图所示,你如果写这样的一个函数(组合逻辑)。硬件又怎么知道你的t是否只会选某一个值呢?它当然会考虑你的t所有可能的情况,把所有的输入都连到一个MUX,然后根据你执行过程中的t值选择其中一个进行输出,这个资源开销太大了。
    为了避免这个逻辑,我们再回头看上面的�� 取值,如果我们只允许使用16组的话,那么我们在算最新一轮的�� 的话,以t=16为例。此时t-15=1。因此本质上我们使用W[1]替代W[t-15]即可。并且再思考一下,这个16组数据是在t>=16以后,一直持续不断地更新的。也就是W[16]算出来实际上会替换最旧的一个W,实际上就是一个移位寄存器,我们用计算的新值替换掉16轮之前的值!
    这样写出的代码生成的电路图如下下图所示,是不是清晰太多了?每运算出来一个新的值,整个移位寄存器滑动一次,W[1]变到W[0],W[2]变到W[1],我画了一下,大家将就看。

  • 还需要注意如果使用流水线实现,我们在某一拍运算的时候,会不会缺少数据?比如要算新的A~H寄存器的值,是依赖于最新一轮的W[t]的,这一组数应该提前准备好!不要等到你要算的时候发现这一组数在这一拍还没有。其实关键就是大家要提前画一下波形,哪一组数在哪一拍要准备好,这个是要明确的。靠大脑思考可能反应不过来,可以动手画一下,或者用wavedrom这种软件都是可以的。
  • 还要注意关键路径的优化,这是提升时序最重要的点。我们每一轮运算其实都是算一组新的A~H寄存器的值。而计算A~H寄存器需要W[t]和K[t]的值。K[t]是常数,早就准备好了,而W[t]则是需要计算过程中实时更新的。如果我们提前准备好W[t],就不需要在这一周期用组合逻辑运算好再给别的逻辑,从而可以有效地减少逻辑延迟。
    我们看一下下面那个function,可以知道计算下一轮需要上一轮的H和K,而这是早就又得了,至于W也可以提前得到,这样这三个数的和在上一拍都准备好了,可以提前进行运算。

其实上述关于组合逻辑优化的关键点就在于,我这一轮运算需要很多的中间数据,我要先运算出来这些中间数据,才能够运算我的最终数据,这个时候我们完全可以看这些中间数据可不可以提前算出来,也就是找不存在数据依赖的数据!

举个例子,就比如我要运算E=A+B+C+D。而A和B都是我上一个周期就能够运算出来的结果(这个时钟周期更新,比如A=x,B=y),而C和D是依赖于这一轮新更新的其它数据的数据,那确实不能提前运算得到。

但这样的话我们也完全可以用一个新的寄存器,提前算好F(因为A和B是上一轮进行运算的结果,因此同理F也可以在上一轮进行相应的运算得到,当然如果计算F是关键路径的话这个方法就失效了)。这样这个时钟周期的上升沿,我就已经有了F这个数据了,我只要算E=F+C+D即可。这样就少算了一个加法,就可以缩短你的关键路径!(大家可以结合下面这个PPT理解)

纸上得来终觉浅,有些东西只是单纯的讲一遍大家可能还是难以体会。大家可以针对这个SHA256运算的例子,自己去写代码试一下,看哪些中间变量确实是可以提前得到的,而不需要等新的一轮时钟上升沿到来以后再进行运算。提前准备好数据,加速你的设计。

目录
相关文章
|
14天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
8089 15
|
13天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
2133 12
|
13天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1814 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
11天前
|
人工智能 编解码 并行计算
MiniMax-H3 一键整合包技术文档:8G 显存运行 AI 漫剧制作 —— 角色替换 / 动作迁移 / 文图生视频部署与调参指南
MiniMax H3 是 MiniMax 开源的全模态视频生成模型,支持文/图/音/视多条件输入,输出最高2K、15秒带双声道音频视频。本文档详述其Int8量化版在8GB显存下的本地一键部署、三段式工作流(EDIT/REPLACE/CONTINUE)、参数调优及常见问题排查。(239字)
|
7天前
|
人工智能 Linux 开发者
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
Codex是OpenAI推出的AI编程智能体,可读取本地项目、理解需求并自动修改代码。支持桌面GUI、命令行(CLI)及VS Code/Cursor插件三种形态,覆盖可视化操作、终端高效开发与编辑器无缝集成场景,助开发者用自然语言驱动编码全流程。(239字)
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
|
26天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3859 10
|
21天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
2217 1

热门文章

最新文章