第36章 第一个FPGA程序(1/2)
电子实验室的筹建在艰难中推进,设备依旧简陋,人手依旧短缺。那台拼装的486计算机承担了几乎所有的设计、编程和仿真任务,运行稍大一点的程序就会发出不堪重负的嗡鸣。但陈北玄带领着小张和小李,就在这有限的条件下,向着数字逻辑设计的核心领域发起了冲击——他们瞄准了FpGA。
在九十年代初,FpGA(现场可编程门阵列)技术在国际上也是方兴未艾,它允许工程师通过编程来定义芯片内部的逻辑功能,具有极大的灵活性和并行处理能力,非常适合用于原型验证和特定功能的加速。但在国内,尤其是军工领域,了解并能够应用此项技术的人凤毛麟角。
陈北玄通过一些特殊的渠道(借助了林雪那条线的关系),费尽周折,才弄来了几片Altera公司最早期的FpGA芯片——Ep5064,以及一套极其简陋的下载线和开发软件(Ax+pLUS II基础版)。这些东西在后来看来原始得可笑,但在当时,却是通往硬件可编程世界大门的钥匙。
没有现成的教材,没有可以参考的案例。陈北玄只能依靠自己前世深厚的集成电路知识,从最基础的数字逻辑讲起,带领小张和小李,一步步摸索。
“忘掉你们之前用分离元器件搭逻辑电路的方式。”陈北玄在白板上画着FpGA内部基本逻辑单元(LE)的结构图,“在FpGA里,你们面对的不再是具体的与非门、或非门,而是可配置的逻辑模块、连线和存储单元。你们需要用硬件描述语言,去‘描述’出你们想要实现的电路功能。”
他引入了VhdL语言。从实体(Entity)、结构体(Architecture)的基本结构讲起,到信号(Signal)、变量(Variable)的区别,再到进程(process)和并发语句。小张和小李听得云里雾水,这完全颠覆了他们之前用汇编语言顺序执行程序的思维模式。
“陈工,这……这感觉像是在用写软件的方式,去设计硬件?”小张挠着头,一脸困惑。
“可以这么理解,但思维模式是并发的,硬件的思维。”陈北玄耐心解释,“你们要时刻想着,这些语句描述的逻辑,是在芯片内部同时发生的。”
学习过程充满了挫折。第一个目标是实现一个简单的4位二进制计数器。在纸上用逻辑门画出来很简单,但用VhdL描述时,却遇到了各种问题:时序不满足导致仿真失败、信号赋值冲突产生锁存器、甚至因为语法错误导致综合(将代码转换为电路网表)都无法通过。
实验室的灯光常常亮到深夜。三个人围在计算机前,盯着屏幕上滚动的错误信息,一遍遍地修改代码,运行仿真,查看生成的RtL(寄存器传输级)电路图,分析时序报告。失败了,就讨论原因;成功了,哪怕只是仿真波形图上出现了正确的计数序列,都会带来一阵短暂的欢呼。
经过近两周的反复尝试和修改,他们终于完成了第一个能够在仿真中正确运行的4位计数器VhdL代码。
接下来是综合、布局布线和生成下载文件。这个过程同样不顺利,古老的软件经常因为资源不足而崩溃,或者给出不合理的布局方案导致时序无法闭合。陈北玄不得不手动添加时序约束,指导布局布线工具进行优化。
本章未完,点击下一页继续阅读。