上面的话题都是当代 ASIC ( Application Specific Intergrated Circuits ) 技术的主要应用领域,大致可以分为三个方面吧。
第一:芯片设计和验证领域,这个也是当前最热门的领域;
第二:数控,自动化,特种仪器仪表,特种设备领域,由于需求特殊,很难找到量产的通用芯片,所以用 CPLD / FPGA 来实现硬逻辑就成了唯一的选择;
第三:需要现场系统重构的场合,如手机,车载电子设备等等,因应不同的系统即时任务,对 CPLD / FPGA 进行现场编程,以适应不同的算法和控制任务;
和 CPLD / FPGA 目前的广泛应用不是很相称的是开源和自由软件在 ASIC 方面还比较原始,要达到像 Apach, GCC ... 等这些开源软件那样的成熟程度,恐怕还有相当长一段路要走,但是作为学习或者是门数有限的中小规模的电路仿真,现有的 GNU 工具应该是个很好的选择,因为现在的商业 ASIC 工具实在是太贵。
本文仅仅是一个介绍性的文章,通过一个开源项目的简单例子来说明一下硬件设计的基本概念,本文所涉及到的相关知识请大家自己找资料学习。有兴趣的朋友可以去开源硬件设计网站 http://opencores.org 看一下,上面从 CPU,内存到各种通讯控制器等等的设计应有尽有。
本文将以 Gentoo Linux 作为系统来说明,用其他发行版的朋友,请自行安装相应的软件包(iverilog, gtkwave)。硬件描述语言采用 verilog 。
2、安装应用;
下面让我们来做一个硬件设计的 hello world:
第一步:安装相关的软件包
# emerge iverilog gtkwave
第二步:编译 verilog 源代码
$ cp -rv /usr/share/doc/iverilog-0.8 ~
$ gunzip ~/iverilog-0.8/*.gz
我们将 iverilog 的文档复制并解压到我们的用户目录下面,里面有 iverilog 的一些范例和文章,大家自行阅读一下。现在我们用其中的一个内存设计的简单例子来练习一下。
$ cp ~/iverilog-0.8
$ iverilog -o show_vcd show_vcd.vl
这样将编译出一个仿真脚本命令 ./show_vcd, 运行这个命令,就会得到一个仿真文件 show_vcd.vcd, 我们再用另外一个 GNU 项目 gtkwave 来查看这个芯片设计的引脚以及各个寄存器的时序。
$ ./show_vcd
$ gtkwave ./show_vcd.vcd &
上面的命令打开了仿真文件,但是正常情况下,你还是看不到任何东西。在 gtkwave 窗口中选择 "Search"->"Signal Search Tree", 将打开信号查看选择窗口,点选你要查看的芯片引脚或者寄存器,然后点击 "Append" 按钮,在 gtkwave 主窗口中就会出现相应的时序信号。
本文的两个附件是我分别用 iverilog + gtkwave 以及商业软件 Xilinx ModelSim 的仿真结果的截图,可以看出 GNU 工具的仿真结果和商业 ASIC 工具的仿真结果是完全相同的。