IC设计笔记----记录我踩过的坑

来源:互联网 发布:总决赛数据 编辑:程序博客网 时间:2024/06/07 17:31

1、Design

设计功能模块。

首先详细掌握模块功能。
然后定义接口信号,设计模块结构,尽可能复用逻辑资源。
最后再写代码。

注意:接口中的控制信号尽可能用1bit表示,也就是说,模块需要用到的控制信号,尽可能是单个的使能信号。优点是方便以后写代码,如果信号名定义合理,能够一眼看出信号功能,那么还更容易维护。否则,如果信号采用几位数据进行编码,那么在design内部还需要解码,并且不容易看出信号的含义,给维护带来困难。甚至长时间不看,自己写的代码都会忘记功能而看不懂。

例如:
假设一个计算模块,计算类型有加、减、乘、除。
如何定义信号更有利于编写代码及后续维护?
(1)编码信号(强烈不推荐
定义一个2bits的信号:
signal caozuoleixin : std_ulogic_vector(0 to 1);
– 假设:
00 对应 加
01 对应 减
10 对应 乘
11 对应 除
优点:接口信号数量少。
缺点:看到这个信号,并不能直接知道其含义,造成编写代码困难,也不利于之后对代码的维护。过了一段时间,自己看代码,如果没有清晰的注释,自己都不知道是什么含义。另外,就算有注释,可是你敢保证注释一定正确?就算注释正确,你还要再去核对编码,确认信号功能,费时费力。
所以,编码信号,墙裂不推荐!!!

(2)单bit独立信号
定义4个1bit的信号:
signal add : std_ulogic; – 加
signal sub : std_ulogic; – 减
signal mul : std_ulogic; – 乘
signal div : std_ulogic; – 除

优点:信号功能清晰,方便编写代码,日后维护也更容易。
缺点:接口信号数量增加。不过这一点点缺点,与带来的优点相比,完全可以忍受。

另外,编写代码时,经常有类似的代码段,会图省事直接copy然后修改。这样做,是可以提高效率,但是必须格外小心,要修改的地方,一定要做完整的修改。如果漏掉一些未修改的信号,那么就会在仿真时出错。往往还是一些特别难以找到的错误,匪夷所思的错误。血和泪的教训!!!!

今后,一定在修改的时候千万小心,做到对所有的代码进行了必须要的修改。

2、工具使用
IC工具很多,使用何种工具看公司购买了哪些工具以及个人喜好。我一般使用VCS、Incisive编译仿真代码,用Verdi追信号,GPRO产生测试激励。
2.1 Verdi
使用Verdi看代码追信号,很方便。

如果只是看代码,那么操作很简单。
(1)在Linux命令行中敲入verdi,就会启动Verdi的图形界面GUI。
(2)点击File->Import Design。选择要加载的文件,进行加载即可。注意,GUI只支持Verilog,不支持VHDL。

2.2 VCS
一般用VCS编译仿真,仿真阶段直接用-gui命令看波形,非常方便。

2.3 Incisive
因为工具原因,有些VHDL语法不支持,所以编译现成的库代码都有问题,需要修改。
所以,用的不多。

不过,Incisive有一个强大的功能:force。force直接将内部的寄存器在规定的时刻赋值。这样可以粗暴仿真出功能的波形。
不过,这样做有不科学的地方,最好还是按照从接口信号往内部灌注的方法为好。

原创粉丝点击