1 FPGA之Programmable
(这里笔者更关注硬件编程和软件编程的区别讲解,有关FPGA的讲解可能存在误解,欢迎指出。)
FPGA,全称Field Programmable Gate Array,译为现场可编程门阵列。没有电路基础的初学者,可能会被Programmable一词困扰。
有编程基础的学者,会将其与C语言等软件编程语言相联系。编译-链接器等,会将我们编写的高级语言转化为0-1形式的机器语言。这串0-1形式的序列,最终会被计算机硬件读取,执行对应的计算操作。在这一过程中,0-1序列指明了计算所需的硬件(加法器、减法器、乘法器等计算机内部已有的电路器件)的操作(即指令)。在不考虑多核、多进程、多线程等情况,计算机是按指令的顺序,一行行执行代码。(这是通用电路的常规执行过程,即以时钟心跳为周期,流水线式对指令解析执行)
而在FPGA中,Programmable,指的是硬件的可编程。在计算机中,所有的功能实现,归根结底是由各种计算实现。在通用电路中,实现某一复杂功能,可能需要多个基础计算单元依次配合实现。而FPGA的思路是,直接“构建”一个能实现这个复杂功能的电路。这直接提高了实时性:原本定制电路需要多步实现,FPAG可一步实现。此外,为了应对不同功能和成本的考虑,上述“构建”过程最好是可以“修改”,由此引申出了Programmable的含义。FPGA的可编程就是对底层的硬件连接可进行编程控制。
可编程的具体体现:
(1)逻辑单元
(2)内部布线
(3)I/O单元
基于上述特点,常在如下两个场合使用FPGA:
(1)电路开发初期的功能验证(节省成本)
(2)实时性要求高(直接由电路进行功能实现)(硬件实现当然比软件实现的速度快)
2 FPAG之Verilog HDL
(这里笔者更关注硬件语言的说明,有关Verilog HDL的讲解可能存在误解,欢迎指出。)
Verilog HDL,全称Verilog Hardware Description Language,是主流的硬件描述语言之一。既可以进行行为描述,又可以进行结构描述。
模块:用verilog HDL描述的电路设计就是该电路的verilog HDL模型,简称模块。
实际电路可分级抽象为五个层次:
(1)system level
(2)algorithm level
(3)register transfer level
(4)gate level
(5)switch level
其中,前三级为行为描述,后两级为结构描述。如果按照一定规则(编译软件所做的工作),行为模块可自动转化为结构模块。
硬件编程语言的通性是:并行、层次结构、可综合性。
(1)并行:verilog语言所描述的所有赋值语句、过程块、实例引用都是并行的(这一点和软件编程语言很不一样)
(2)语言描述只是通过变量名,描述不同单元之间互相连接的关系,与其在模块中出现的顺序没有关系
(3)只有assign和实例引用语句可独立于过程块儿而存在。
3 FPAG之其他
关于FPGA等电路的发展历史,网络上很多,可自行查阅。