当前位置:网站首页>入职数字ic设计后的一些工作心得
入职数字ic设计后的一些工作心得
2022-08-11 02:23:00 【饭真好吃】
一、代码的电路框架和时序分析
以前的课程设计写代码的方式的都比比较直接与随意,大体上了解了完设计需求之后,便开始编写代码,并不会刻意讲究时钟与复位的要求, always 块的敏感变量也是五花八门,生成的锁存器更是数不胜数,写完之后、代码能在行为级仿真中跑通,并能在开发板上使用,一学期的学习任务就算完成了。
这样做的弊端也是显著的:某些代码在行为级仿真中的结果虽然是正确的,但在实际在开发板上表现的功能却不尽人意,往往多按几个功能按键便会出现各种各样的 bug 。归根结底,是当时对代码的认识还不够深入,并设有意识到这些代码生成了什么样的电路,这样的电路会造成什么样的结果,如果能在电路的层面考虑,对代码进行优化,当时就不会出现各种各样的 bug 了。这样的技巧在工作中也是非常实用的,未来要搭建的代码很多,框架很复杂,子模块和 top 模块一层堆一层,如果不在设计之初就思考并设计好电路图,做好输入输出的时序分析,那么到后期遇到 bug 再来对代码框架进行修改是十分困难的,也不利于我们理清楚整个电路的逻辑功能。故而勤画电路图、波形图,是做好前端设计的第一步。

楼主入职后画的第一张计数器电路图
二、从不同角度去考虑代码的实用性
数字芯片设计是一个非常耗费时间与金钱的行业,成型的电路被做成掩膜版并被光刻在硅片上之后,就无法改动了。所以在代码设计时需要考虑的因素和影响非常多。在设计之处就必须先规划好电路实现的算法与功能、需要的资源。设计完成之后还要通过后端的验证和测试。因此在編写代码的时候也应该为后端时序分析, STA 所着想。
比如一个多位的计数器,如果采用同步时钟,耗费的门电路器件会比异步时钟多很多,但是 verilog HDL 设计中都不采用异步设计。因为异步时序逻辑很难控制由组合逻辑和延迟所造成的竞争和冒险,越复杂的电路,异步设计就越难调试,并且异步设计的触发条件是复杂的,任何时刻都可能触发异步变化,造成亚稳态等问题。最重要的是,异步设计会让后端验证和 STA (静态时序分析)变得及其复杂,后端中要求时钟和复位(跳变控制信号)都是比较纯净的,而过多的敏感变量会让 STA 难以进行,所以一般都不采用异步设计。同理,也不允许时钟和复位信号与其他变量去做一些逻辑操作,这样会导致时钟或复位不够纯净。
三、debug 的手段
代码编写完之后肯定要进行行为级仿真,在查看波形的时候难免会有几部分不满足设计的需求,需要进行修改。但一定不要为了单纯地凑出正确的时序而去修改电路的标准框架,比如:在 always 块的敏感列表中加入除了复位和时钟差外的其他信号,这也会使后端验证工作变复杂。又或是把同一个信号放在多个always块中去赋值。如果非要这样才能达到设计要求,那么最初的设计肯定是不合理的,要尝试从设计方法本身去找问题。
边栏推荐
- CC0 与商业 IP:哪种模式更适合 NFT?
- 软件测试面试题:缺陷等级应如何划分?
- MySQL权限控制、分区表、快速复制表
- Shengxin experiment record (part2)--tf.reduce_sum() usage introduction
- Fatal error in launcher: Unable to create process using xxx --logdir logs(tensorboard使用)
- comp3331-9331-22t1-midterm复习辅导-tutorial week 5
- 软件测试面试题:什么是α测试,β测试?
- Geogebra 教程之 04 Geogebra 小程序
- 2022英伟达显卡排名天梯图
- Mysq_Note4
猜你喜欢

Lianshengde W801 series 6-Analyze the Bluetooth communication source code of W801 from the perspective of WeChat applet (indicate method)

Detailed explanation of common methods of filtering matrix (array) elements in Matlab

数据的存储(下)——浮点型在内存中的存储

OpenCV创始人:开源绝不能完全免费!

惨遭面试官吊打高并发系统设计,回来学习 2400 小时后成功复仇

Engineering Design of Single-sided PCB Routing Impedance

gRPC闭包调度器

一次简单的 JVM 调优,拿去写到简历里

OptiFDTD应用:用于光纤入波导耦合的硅纳米锥仿真

微信公众号后台管理
随机推荐
漏洞管理计划的未来趋势
Entity到Vo的转换
惨遭面试官吊打高并发系统设计,回来学习 2400 小时后成功复仇
OpenCV创始人:开源绝不能完全免费!
超声图像三维拼接-可视化选择,总体思路
88Q2110 access C45 phy address through C22
Vulnhub靶机:GEMINI INC_ 2
超声三维重建总体架构
SyntaxError: invalid syntax
软件测试面试题:谈谈你对 cmm 和 is9000 的认识?
Detailed explanation of common methods of filtering matrix (array) elements in Matlab
ifconfig与ip命令的比较
【oops-framework】模板项目【oops-game-kit】使用简介
数据的存储(下)——浮点型在内存中的存储
如何解决高度塌陷
Matlab矩阵(数组)元素过滤常见方法详解
Inter-process communication method (2) Named pipe
备战“金九银十”,软件测试功能 / 数据库 /linux/ 接口 / 自动化 / 测试开发面试真题解析
Shengxin experiment record (part2)--tf.reduce_sum() usage introduction
Mask RCNN 网络详解