当前位置:网站首页>入职数字ic设计后的一些工作心得
入职数字ic设计后的一些工作心得
2022-08-11 02:23:00 【饭真好吃】
一、代码的电路框架和时序分析
以前的课程设计写代码的方式的都比比较直接与随意,大体上了解了完设计需求之后,便开始编写代码,并不会刻意讲究时钟与复位的要求, always 块的敏感变量也是五花八门,生成的锁存器更是数不胜数,写完之后、代码能在行为级仿真中跑通,并能在开发板上使用,一学期的学习任务就算完成了。
这样做的弊端也是显著的:某些代码在行为级仿真中的结果虽然是正确的,但在实际在开发板上表现的功能却不尽人意,往往多按几个功能按键便会出现各种各样的 bug 。归根结底,是当时对代码的认识还不够深入,并设有意识到这些代码生成了什么样的电路,这样的电路会造成什么样的结果,如果能在电路的层面考虑,对代码进行优化,当时就不会出现各种各样的 bug 了。这样的技巧在工作中也是非常实用的,未来要搭建的代码很多,框架很复杂,子模块和 top 模块一层堆一层,如果不在设计之初就思考并设计好电路图,做好输入输出的时序分析,那么到后期遇到 bug 再来对代码框架进行修改是十分困难的,也不利于我们理清楚整个电路的逻辑功能。故而勤画电路图、波形图,是做好前端设计的第一步。
楼主入职后画的第一张计数器电路图
二、从不同角度去考虑代码的实用性
数字芯片设计是一个非常耗费时间与金钱的行业,成型的电路被做成掩膜版并被光刻在硅片上之后,就无法改动了。所以在代码设计时需要考虑的因素和影响非常多。在设计之处就必须先规划好电路实现的算法与功能、需要的资源。设计完成之后还要通过后端的验证和测试。因此在編写代码的时候也应该为后端时序分析, STA 所着想。
比如一个多位的计数器,如果采用同步时钟,耗费的门电路器件会比异步时钟多很多,但是 verilog HDL 设计中都不采用异步设计。因为异步时序逻辑很难控制由组合逻辑和延迟所造成的竞争和冒险,越复杂的电路,异步设计就越难调试,并且异步设计的触发条件是复杂的,任何时刻都可能触发异步变化,造成亚稳态等问题。最重要的是,异步设计会让后端验证和 STA (静态时序分析)变得及其复杂,后端中要求时钟和复位(跳变控制信号)都是比较纯净的,而过多的敏感变量会让 STA 难以进行,所以一般都不采用异步设计。同理,也不允许时钟和复位信号与其他变量去做一些逻辑操作,这样会导致时钟或复位不够纯净。
三、debug 的手段
代码编写完之后肯定要进行行为级仿真,在查看波形的时候难免会有几部分不满足设计的需求,需要进行修改。但一定不要为了单纯地凑出正确的时序而去修改电路的标准框架,比如:在 always 块的敏感列表中加入除了复位和时钟差外的其他信号,这也会使后端验证工作变复杂。又或是把同一个信号放在多个always块中去赋值。如果非要这样才能达到设计要求,那么最初的设计肯定是不合理的,要尝试从设计方法本身去找问题。
边栏推荐
- LitePal操作数据库
- Ora - 00001 in violation of the only constraint
- 一言(ヒトコト)Hitokoto API
- Alibaba 最新神作!耗时 182 天肝出来 1015 页分布式全栈手册太香了
- MySQL - 一条SQL在MySQL中是如何被执行的?
- 想进阿里?先来搞懂一下分布式事务
- Experiment record of Shengxin (part3)--scipy.spatial.distance_matrix
- 软件测试面试题:什么是数据的对立性,有几个层次?
- How to realize the repeatable design of FPGA
- 【oops-framework】模板项目【oops-game-kit】使用简介
猜你喜欢
英伟达 GPU 架构简史
数据的存储(下)——浮点型在内存中的存储
How to solve the problem of Tomcat booting and crashing
关于地图GIS开发事项的一次实践整理(上)
通过热透镜聚焦的高斯光束
[4G/5G/6G专题基础-154]: 5G无线准入控制RAC(Radio Admission Control)
Vulnhub靶机:GEMINI INC_ 2
Lianshengde W801 series 5-WeChat applet and W801 Bluetooth communication routine (read notes)
MySQL Basics [Part 1] | Database Overview and Data Preparation, Common Commands, Viewing Table Structure Steps
This Thursday evening at 19:00, Lesson 5 of the sixth phase of knowledge empowerment丨OpenHarmony WiFi subsystem
随机推荐
LitePal操作数据库
漏洞管理计划的未来趋势
How to create an index when sql uses where and groupby?
软件测试面试题:在频繁的版本发布中,如何回归测试?
花甲的思考
【C 数据存储详解】(1)——深度剖析整形数据在内存中的存储
Research on the Application of Privacy Computing Fusion
数据存储全方案----详解持久化技术
软件测试面试题:什么是α测试,β测试?
自动生成数据库设计文档利器
js原型和原型链及原型继承
This Thursday evening at 19:00, Lesson 5 of the sixth phase of knowledge empowerment丨OpenHarmony WiFi subsystem
软件测试面试题:缺陷等级应如何划分?
TRCX: doping process analysis
0图中等 LeetCode565. 数组嵌套
Experiment record of Shengxin (part3)--scipy.spatial.distance_matrix
软件测试面试题:单元测试的策略有哪些?
OpenWrt之opkg详解
Shengxin experiment record (part2)--tf.reduce_sum() usage introduction
ARM development (4) How to read the chip manual for novice Xiaobai, bare metal driver development steps and pure assembly to achieve lighting, assembly combined with c lighting, c to achieve lighting