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

楼主入职后画的第一张计数器电路图
二、从不同角度去考虑代码的实用性
数字芯片设计是一个非常耗费时间与金钱的行业,成型的电路被做成掩膜版并被光刻在硅片上之后,就无法改动了。所以在代码设计时需要考虑的因素和影响非常多。在设计之处就必须先规划好电路实现的算法与功能、需要的资源。设计完成之后还要通过后端的验证和测试。因此在編写代码的时候也应该为后端时序分析, STA 所着想。
比如一个多位的计数器,如果采用同步时钟,耗费的门电路器件会比异步时钟多很多,但是 verilog HDL 设计中都不采用异步设计。因为异步时序逻辑很难控制由组合逻辑和延迟所造成的竞争和冒险,越复杂的电路,异步设计就越难调试,并且异步设计的触发条件是复杂的,任何时刻都可能触发异步变化,造成亚稳态等问题。最重要的是,异步设计会让后端验证和 STA (静态时序分析)变得及其复杂,后端中要求时钟和复位(跳变控制信号)都是比较纯净的,而过多的敏感变量会让 STA 难以进行,所以一般都不采用异步设计。同理,也不允许时钟和复位信号与其他变量去做一些逻辑操作,这样会导致时钟或复位不够纯净。
三、debug 的手段
代码编写完之后肯定要进行行为级仿真,在查看波形的时候难免会有几部分不满足设计的需求,需要进行修改。但一定不要为了单纯地凑出正确的时序而去修改电路的标准框架,比如:在 always 块的敏感列表中加入除了复位和时钟差外的其他信号,这也会使后端验证工作变复杂。又或是把同一个信号放在多个always块中去赋值。如果非要这样才能达到设计要求,那么最初的设计肯定是不合理的,要尝试从设计方法本身去找问题。
边栏推荐
- 请讲一讲JS中的 for...in 与 for...of (下)
- Summary of DDL routine operations in MySQL
- Entity到Vo的转换
- 本周四晚19:00知识赋能第六期第5课丨OpenHarmony WiFi子系统
- Ninjutsu_v3_08_2020-安全渗透系统安装
- HPSO and multi-core LSSVM based network intrusion detection
- 测试3年,开口就要25k?面试完最多给15k...
- 网络安全笔记第四天day4(kali基本操作)
- comp3331-9331-16s2-midterm复习
- YTU 2418: C语言习题 矩阵元素变换
猜你喜欢

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

最新国产电源厂家及具体型号pin-to-pin替代手册发布

88Q2110 access C45 phy address through C22

项目构建工具-Gradle入门

Tomca启动闪退问题如何解决

关于地图GIS的一次实践整理(下) Redis的GIS实践

Oops novice template Framework project guide
![[Detailed explanation of C data storage] (1) - in-depth analysis of the storage of shaping data in memory](/img/a1/b1c04d44ea74560a0be55a3b715d25.png)
[Detailed explanation of C data storage] (1) - in-depth analysis of the storage of shaping data in memory

MySQL - 一条SQL在MySQL中是如何被执行的?
![[The method of calling the child page from the parent page of the iframe] Stepping on the pit: It is the key to use `[x]` when getting elements. You cannot use `.eq(x)`, otherwise it will not be obtai](/img/ec/0cca8c7011770429c34a6aa1f36460.png)
[The method of calling the child page from the parent page of the iframe] Stepping on the pit: It is the key to use `[x]` when getting elements. You cannot use `.eq(x)`, otherwise it will not be obtai
随机推荐
ora-00001违反唯一约束
comp3331-9331-16s2-midterm复习
【PHP】入门知识
3342:字符串操作 题解
软件测试面试题:对 RUP,CMM,CMMI,XP,PSP,TSP 的认识?
一言(ヒトコト)Hitokoto API
CC0 与商业 IP:哪种模式更适合 NFT?
14.cuBLAS开发指南中文版--cuBLAS中的Level-1函数nrm2()和rot()
超声三维重建总体架构
ifconfig与ip命令的比较
The latest domestic power supply manufacturers and pin-to-pin replacement manuals for specific models are released
Matlab矩阵(数组)元素过滤常见方法详解
OpenWrt之opkg详解
生信实验记录(part2)--tf.reduce_sum()用法介绍
OpenCV创始人:开源绝不能完全免费!
ARM开发(四)新手小白如何阅读芯片手册,裸机驱动开发步骤以及纯汇编实现点灯,汇编结合c点灯,c实现点灯
0 in the figure, etc. LeetCode565. Array nesting
WeChat public account background management
shell脚本入门
Oops Framework模板项目新手引导