Openhard作为一个开源的硬件社区,首先要有一个沟通的硬件基础,也即有一个公共的硬件平台让五湖四海的FPGA爱好者、全国各高校的师生能够方便地进行技术交流。Opencores.org的组织者们就定义了一套硬件平台、SOC内部互联的总线规范,这样所有社区的开发者可以在此基础上有效地系统工作,把自己开发出来的功能模块、IP分享出来,其他人才可以方便地验证、改进。
目前Openhard社区还在建设的初期阶段,我们计划采用的硬件平台还是一个功能相对简单的电路板 -
由Xilinx的全球大学项目合作伙伴Digilent提供的BASYS电路板,它的基本功能、特点如下:
- 10万门Spartan-3E FPGA,内部有4个18位相乘器,72Kbit的快速双口块RAM
- 板上有USB2.0接口芯片,通过此接口使用者可以对FPGA进行编程,另外整个电路板上的电压也可以通过USB端口获得的5V直流电压产生得到
- 板上有1个PS/2键盘接口;1个3位的VGA接口
- 8个LED用以显示状态输出;4各7段数码显示;4个按键、8个拨码开关用以输入控制
- 4个6脚插头用以用户I/O扩展
很多高人都觉得此电路板过于简单、FPGA门数不够、资源不够等,笔者倒认为不尽然,这个电路板对于培养中、上等水平的硬件工程师已经绰绰有余,只有在有限的资源上做出尽可能多的应用,才能真正学到“硬件工程师”所需要学习的知识。4年前我曾见证两位工程师用Verilog写的、实现同一功能的代码,一位写了整整40多行,读起来非常困难,让人着实佩服该工程师的逻辑思维,另外一位却只用了5行,简洁明了,我认为后者是一位真正的硬件工程师。
器件容量的不断增加、开发工具的日趋简化推动了FPGA的大面积普及,但同时也造成了更多的硬件工程师不再关心硬件的基础知识,软硬件的根本差异,这方面的优劣仁者见仁,在此我不做更多的讨论。谈谈根据我自己的直观认识,这个BASYS板能够做些什么吧:
- 构建一个8031内核,8031架构的8位处理器有多种,从12个时钟周期执行一条指令到一个时钟周期执行一条指令,你能做到多高的效率?不妨挑战一下自己
- 构建其它RISC内核,8位的、16位的
- 构建ROM、RAM,同微处理器一起构成SOC系统
- 双口RAM、FIFO,可用于数据通信、数据采集等
- I2C、SPI都是非常常用的串行接口,很多外设都通过这些串行总线进行通信,编写一个功能完整的串行总线接口逻辑、并支持主、从功能是需要很深的功力的。
- SDIO/MMC,如果能够在此板上编写出一个SDIO的读写逻辑,你就可以通过此板进行SD存储卡、WiFi无线网卡(用在PDA上)的读写
- 其他扩展功能、接口,比如UART,IrDA,GPIO等
- Digilent提供一系列的外设模块,比如A/D,
D/A等,虽然这些模块通过串行接口连接,速度不快,但是还是能够实现数据采集、信号合成方面的多种应用,你可以学习到DDS、调制、解调等的工作原理,你可以对采集到的波形进行FFT变换、直接中频取样等各种处理。你可以做出一个数字示波器、频谱仪、逻辑分析仪或合成任意波形的信号发生器
- 有了USB2.0高速的数据传输通道,可以软、硬件配合支持更多的应用。
能够在此系统上验证以上的功能的人,应该算是硬件高手了,高手可以在简单的BASYS板上成长起来。