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

楼主入职后画的第一张计数器电路图
二、从不同角度去考虑代码的实用性
数字芯片设计是一个非常耗费时间与金钱的行业,成型的电路被做成掩膜版并被光刻在硅片上之后,就无法改动了。所以在代码设计时需要考虑的因素和影响非常多。在设计之处就必须先规划好电路实现的算法与功能、需要的资源。设计完成之后还要通过后端的验证和测试。因此在編写代码的时候也应该为后端时序分析, STA 所着想。
比如一个多位的计数器,如果采用同步时钟,耗费的门电路器件会比异步时钟多很多,但是 verilog HDL 设计中都不采用异步设计。因为异步时序逻辑很难控制由组合逻辑和延迟所造成的竞争和冒险,越复杂的电路,异步设计就越难调试,并且异步设计的触发条件是复杂的,任何时刻都可能触发异步变化,造成亚稳态等问题。最重要的是,异步设计会让后端验证和 STA (静态时序分析)变得及其复杂,后端中要求时钟和复位(跳变控制信号)都是比较纯净的,而过多的敏感变量会让 STA 难以进行,所以一般都不采用异步设计。同理,也不允许时钟和复位信号与其他变量去做一些逻辑操作,这样会导致时钟或复位不够纯净。
三、debug 的手段
代码编写完之后肯定要进行行为级仿真,在查看波形的时候难免会有几部分不满足设计的需求,需要进行修改。但一定不要为了单纯地凑出正确的时序而去修改电路的标准框架,比如:在 always 块的敏感列表中加入除了复位和时钟差外的其他信号,这也会使后端验证工作变复杂。又或是把同一个信号放在多个always块中去赋值。如果非要这样才能达到设计要求,那么最初的设计肯定是不合理的,要尝试从设计方法本身去找问题。
边栏推荐
猜你喜欢

117. 本地开发好的 SAP UI5 应用部署到 ABAP 服务器时,中文字符变成乱码的原因分析和解决方案

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

第二课第一周第4-6节 医学预后案例欣赏+作业解析
![[4G/5G/6G专题基础-154]: 5G无线准入控制RAC(Radio Admission Control)](/img/5d/5e6cb3e4199c678c06a3b8fab37aa0.png)
[4G/5G/6G专题基础-154]: 5G无线准入控制RAC(Radio Admission Control)

JVM类加载机制

关于地图GIS开发事项的一次实践整理(上)

通过热透镜聚焦的高斯光束

redis学习五redis的持久化RDB,fork,copyonwrite,AOF,RDB&AOF混合使用
![报错处理:org.xml.sax.SAXParseException: 不允许有匹配 “[xX][mM][lL]“ 的处理指令目标](/img/35/650c92ac4c5fc2d5826f3216a09e65.png)
报错处理:org.xml.sax.SAXParseException: 不允许有匹配 “[xX][mM][lL]“ 的处理指令目标

SyntaxError: invalid syntax
随机推荐
生信实验记录(part3)--scipy.spatial.distance_matrix
软件测试面试题:谈谈你对 cmm 和 is9000 的认识?
JVM类加载机制
MySQL中的DDL常规操作总结
想进阿里?先来搞懂一下分布式事务
全局大喇叭--广播机制
学军中学推理社2017届招新试题
软件测试面试题:软件测试的过程的V模型,说出它的缺点?
0 in the figure, etc. LeetCode565. Array nesting
Fatal error in launcher: Unable to create process using xxx --logdir logs(tensorboard使用)
[Detailed explanation of C data storage] (1) - in-depth analysis of the storage of shaping data in memory
13.cuBLAS开发指南中文版--cuBLAS中的Level-1函数copy()和dot()
年薪30W,BAT抢着要,懂面试技巧的测试人究竟多吃香?
[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
软件测试面试题:什么是数据的对立性,有几个层次?
掌握这几招,轻松K.O面试官,Offer拿到吐
Docker 链接sqlserver时出现en-us is an invalid culture错误解决方案
Pytorch/TensorFlow/Numpy常用函数汇总
Mysql_Note6
夫妻一方婚内向异性大额转款,怎么判