第一次写博客,同时也表示学习FPGA的决心。
学习的初步目标是能够驾驭XILINX XC7K325T,写点简单的程序,或者用起来别人的复杂代码。预期一个月。
从简单入手可能更容易理解,使用黑金开发板AX309,型号SPARTAN-6 XC6SLX9。
跑了几个程序之后,发现别人的程序越来越不好理解,在没有备注的情况下更难,于是想搞清楚写程序的逻辑是什么。看了很多关于说编写verilog与编写C语言思想完全不同的文章,verilog是一种硬件描述语言要时刻想到底层的电路,但是1、这个底层电路到底指的什么呢?2、与verilog之间的关系是什么呢?
RTL级,register transfer level,指的是用寄存器这一级别的描述方式来描述电路的数据流方式;而Behavior级指的是仅仅描述电路的功能而可以采用任何verilog语法的描述方式。鉴于这个区别,RTL级描述的目标就是可综合,而行为级描述的目标就是实现特定的功能而没有可综合的限制。当然,RTL级描述也是采用的verilog,但是是verilog中的可综合子集。既然描述对象是寄存器,就要了解FPGA的基本组成了。
register transfer level
FPGA芯片主要由三部分组成,分别是IOE(input output element,输入输出单元)、LAB(logic array block,逻辑阵列块,对于Xilinx称之为可配置逻辑块CLB)和Interconnect(内部连接线)。
CLB包含了LUT(Look-Up-Table查找表)、触发器、相关逻辑。LUT(Look-Up-Table)其本质是一个静态存储器SRAM,目前FPGA多采用4输入的LUT,每个LUT可以看作一个有4位地址线的16x1的RAM。当我们通过原理图或HDL语言描述了一个逻辑电路后,FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM。这样,在FPGA工作时,每输入一个信号进行逻辑运算就等于输入一个地址进行查