追风者

数字电路的设计环境(转帖)

0
阅读(3325)

转帖地址http://blog.sina.com.cn/s/blog_495437290100a3ka.html

从07年三月份开始工作到现在一年多了,在这一年里换个几个地方,总体感觉各个地方的差别不大。我只想说说我对工作的感受,只想让想尽快进入数字IC设计的朋友尽快进入这行,这行的门槛相对较高,比做平常的软件难于上手。但这行做通之后,嵌入式和软件比较容易。

       我先说说这一年的历程吧,一开始学verilog 语言,大概花了一周的时间,因为时间不允许我花太多的时间去学习,也大概一周的的时间学会了Linux的常用命令,及nc+Debussy的数字IC开发环境,接着就是设计的一些概念流程。

       接着因为工作的需要又学会了VHDL,现在又在学systemc和systemverilog,用cygwin代替Linux的开发环境,在Windows下开发。毕竟这样可以整合两个操作系统的优势,

       做的项目也不多,第一个就是毕业设计做的uart接口设计,这一块现在做的比较好用了,也不会像网上有些人提到的uart误码率在0.5%是合要求的,这种人只可以做做实验,是不能做实际项目的,因为根本不知道为什么而错,只观察到现象而不去解决,设计大忌!

第二个项目则是一个视频的发送卡,主要和外设打交道,这和内部的信号有太大的区别就是延时的不确定性,也让我在此费了好多时间。

第三个则是做的基于AMBA总线的验证平台。

在这期间也画了一段时间的pcb,我对此认为还算没有浪费太多时间,因为这样也了解了一些外部的信号的特性,掌握了芯片的接口设计的一些要求。这算是这段时间的意义吧。

       说了这么多,先来介绍一些现在数字IC设计中常用的工具及工作环境吧,以便快速学会开发环境吧。

1、命令行工具,常用的命令行工具,无论是Linux还是Windows下的,像

常用的ls(dir),mv(move),cp(copy)mkdir(md/mkdir),rm(remove),(del)grep

2、  cygwin,可以在官方下载,www.cygwin.cn,一般只在这个站点下载一个下载的小软件,然后再找一个快一些的镜像站点下载,校内的话清华有代理点,其它的代理站点可以在网上找到,当然如果不要最新的版本,可以下载别人下载好的,迅雷资源上好像有。同时需要说明的是cygwin和vmware不同,vmware是虚拟机,所以vmware占用内存很大,而且速度超慢,所以一开始我装了Linux系统,而cygwin将Linux下的接口转换到windows下,所以耗的资源很小。

3、FPGA验证方面我只推荐Altera和Xilinx的,至于Lattic这类不推荐,Altera的软件是Quartus现在最新的版本是8.0,而Xilinx是10.0,这些软件一般可以在官方下载,这些软件如果觉得没必要那么新,主要是对器件的支持,就下低一点的版本,因为这些软件越来越大。最新版本一般装完超过5G。

4、仿真的工具,请不要用Quartus或Xilinx的仿真工具,这些只能说做简单的逻辑而已。仿真的工具主要有modelsim,ncsim(ldv,IUS),VCS,分别是Mentor,Candence,Synopsys,vcs我没有用过,modelsim和ncsim我一直在用,先说modelsim,官方提供学生版,免费的,至于功能少了什么我不知道,只知道有这个版本,而SE版,可以注册后下到,试用期为1个月,至于破解的问题,网上就很多了。相对来说modelsim较容易下载到,而LDV(IUS为Linux环境的,在装了cygwin后Linux下的软件就可以装在cygwin下了)在网上不好找,破解也不好找,VCS没用过,也没去找。所以建议用modelsim了。还得说的是不推荐用图形界面使用这些工具。

5、调试工具debussy,上面的仿真工具都带有调试及看波形的工具,但不推荐,推荐使用debussy。

6、代码检查工具nlint,和debussy同出novas这家公司,你的代码也许在前仿真时没有任何问题,但拿到综合工具去综合却综合不了,原因就是你的代码是不可综合的,所以设计之前要弄代码对应放入结构,那样你就很清楚那些可以综合那些不可以,建议是代码写完用调试工具检查基本语法,在仿真前用nlint做代码检查,一般你的代码符合code style的标准,nlint一般也可以通过,不过值得提的是里面的rule太多,有些并不适合,所以需要自己确定那些需要报error,那些需要报warning。这两个工具相对较容易下到,破解也比较容易。

7、综合工具,FPGA综合的可以用FPGA自己带的,也可以用Synplicity的synplify,而芯片的综合用synopsys的DC。一般对于初步设计这两个工具可以不用。

8、编辑器,也许有人开始在笑了,写代码什么编辑器不能用啊,没错,记事本,不也是编辑器吗?那么我需要的是一种快速的编辑器而且能够高亮显示语法。记事本可以做到吗?推荐使用gvim,一个开源的软件,你可以随意改动,无论是Linux还是Windows下都有相应的版本。既然开源,就容易找到了。对于gvim有很多教程。如果操作熟练的话手不用离开主键盘区就可以完成所有的操作。还有一个编辑器ultraedit,不推荐使用。

 

再说一说软件安装的一些问题,对于modelsim和ncsim最好不要安装在带空格的文件路径下,对于一般的设计没什么问题,有时也玩玩别人写的cpu,有些开源的cpu的编译有问题。还有就是常用的命令,只要将其目录添加到环境变量path中,在命令行下就可以使用了,这样就非常方便了。像cygwin下的bin目录,ldv和modelsim下的bin目录。还有key文件环境变量是LM_LINCENSE_FILE

       还有就是makefile仿真的脚本,一个和批处理差不多的linux工具,但比批处理功能要强得多,教程也可以在网上找到。

       上面所说的一切仅仅是工具,对于这些,是慢慢熟练的过程吧,并不需要一开始就对每一个工具非常熟悉,而是使用中不断了解。

接下来说说设计相关的,首先在开始时我犯了硬件设计的一个大忌,用设计软件的思想去设计硬件,很快就更改了。同时希望设计时要先了解的是硬件的结构,如果对结构不清晰,那么写出来的代码很差,而且容易出错,同时要说明的是时序是设计出来的,而不是凑出来的。设计的经验是不断积累的,积累的就是你如何去快速地验证你的设计没有问题。

迄今,我现在没有涉足的是cpu,只希望现在的项目开始去了解这一块,我也希望在学校有时间的并想在这一块发展的人好好去看看cpu,开源的cpu现在已经不少了,功能做的比较强大的是gailser做的leon3,在其官网http://www.gaisler.com/cms/ 可以下载到,其总线为AMBA总线,这是ARM公司的协议,也是ARM商业cpu采用的总线,leon3,我希望在学校能够玩玩cpu,这样的cpu不仅有源码,也可以运行软件,还可以配置不同的外设,各种ram,usb,vga,uart,这些都有,还有一个fpga免费的cpu是NIOS II,Aletra公司的,但这个没有源码,不适合学习做逻辑设计。还有简单的cpu更适合学习。可以在http://www.opencore.org上找到。

 

推荐的书有夏宇闻的verilog教程,但只是初步用这个教程,接下来看英文的是卡内基梅陇大学的几本书,有综合的,有验证的,都可以在http://www.eetop.cn/blog/找到,这上面的资料、书籍比较多。这些书籍都太长,不建议全看,大致翻,具体要用那就看那。

常用的网站有http://www.opencore.org上面有大量的开源代码。有的提供打包下载,所有的可以通过cvs这个工具下载,只不过比较慢。

http://www.freemodelfoundry.com/ 这个网站主要提供的是存储器的的仿真model,同时要说明的是常见的仿真model一般可以到官方下载到。

常见的EDA论坛

http://www.eetop.cn/blog/

http://www.edaboard.cn/

http://www.baisi.net/

 

 

 

附测试环境文件:

test.v文件内容

`define    cy    20.0

`define    UD  1

`timescale      1ns/100ps

 

module sim;

 

initial

begin

       $fsdbDumpfile("wave.fsdb");

       $fsdbDumpvars;

end 

 

 

 

 

//=================================

//   clock generator                                     

//=================================

reg  SYSCLK;

 

initial       SYSCLK = 0;

always #(`cy/2) SYSCLK = ~SYSCLK;

 

reg         RST_B;

 

initial

begin

       reset;

       repeat(100)  

              @(posedge SYSCLK);

       $finish;

end

 

//=================================

//            RESET

//=================================

task    reset;

begin

       @(posedge SYSCLK);#1;

       RST_B=1'h0;

       @(posedge SYSCLK);

       @(posedge SYSCLK);

       @(posedge SYSCLK);

       @(posedge SYSCLK);#1;

       RST_B=1'h1;

end

endtask

 

endmodule

 

 

simfiles.f(文件里面放的是文件的路径)

test.v

 

makefile内容

DEBUSSY=D:/EDA/Novas/Debussy

NLINT=D:/EDA/Novas/nLint2.2v24

 

all:

       make ncsim

ncsim:

      ncverilog+access+r+loadpli1="$(DEBUSSY)/share/PLI/nc_xl/WINNT/loadpli1/debpli:debpli_boot" -f simfiles.f -l sim.log

 

mod:

       qverilog -l sim.log -f simfiles.f -R -pli "$(DEBUSSY)/share/PLI/modelsim_pli54/WINNT/novas.dll"

modelsim:

       -make work

       make comp

       make vsim

work:

       vlib work

       vmap work work

comp:

       vlog -f simfiles.f

vsim:

       vsim -c -pli "$(DEBUSSY)/share/PLI/modelsim_pli54/WINNT/novas.dll" sim -do "run -all" -l sim.log

       rm -f transcript

debussy:

       $(DEBUSSY)/bin/debussy.exe -2001 -f simfiles.f -ssf wave.fsdb&

nlint:

       $(NLINT)/bin/nLint.exe -gui -2001 -f simfiles.f&

 

这几个文件是用来测试软件是否安装好。