深入浅出FPGA-1-Cyclone芯片内部

文章出处:http://blog.csdn.net/rill_zhen/article/details/7768552


引言

在学FPGA之前,一定弄明白一件事情,就是,FPGA到底是什么?

好吧,这一节主要说一下这个问题,当然不止这一个问题。

弄明白了这个问题,下一节开始说verilog语言的问题。

 

1.1FPGA实现类型

众所周知,FPGA不同于ASIC的最要的特性就是,FPGA是可重配置的。可重配置,就是这个芯片的功能是可重新定义的。配置什么呢,配置逻辑,什么是逻辑?逻辑由最小逻辑单元和连线两部分内容组成。

1》如果配置内容的逻辑部分(真值表)是通过RAM存放的,那么这个FPGA就是基于RAM的。

2》如果配置内容的逻辑部分(真值表)是通过FLASH存放的,那么这个FPGA就是基于FLASH的。

3》如果配置内容的逻辑部分(真值表)是那都没存,直接修改硬连线,那么这个FPGA就是基于熔丝/反熔丝的。这种只能配置一次,严格意义上说不算FPGA。

4》由于存在FLASH或RAM的内容在高辐射等影响下,容易发生变化,所以我猜,神九上面的FPGA是基于熔丝/反熔丝的。

 

2,FPGA最小单元

altera公司叫LE。xilux有另外一个名字。其实都一样。

下面就亲眼看一下LE到底是什么,怎么看呢?

1》打开quartusII,

2》找到chipplaner

3》你会看到好多小格子

4》逐级放大,然后双击一个小格子,

5》你会看到几个门,和很多线,

6》有的线是灰的,有的线是蓝的。

7》有的门是灰的,有的门是蓝的。

8》配置文件就是描述哪些门是灰的,哪些是蓝的,哪些线是灰的,哪些线是蓝的。

9》再双击一个小格子,你会发现和刚才那个小格子一样,好了,有很多很多。芯片型号EP2C8Q。。。其中‘C’后面的‘8’就是8K,就是LE的数量。

10》FPGA芯片有的是4线的,5线的,什么意思呢,其实FPGA的最小单元就是一个多路选择器。4线就是4选16路选择器。

11》16路的内容存在的memery(可以是RAM或FLASH)里,内容就是真值表的输出。

12》通过修改真值表,就可以实现不同的逻辑。

13》通过修改很多很多个LE的真值表,就可以修改整个FPGA芯片的逻辑,即,重配置。

 

3,FPGA和ASIC的关系

如果把werilog语言描述的电路映射成FPGA的单元(LE),那么就是FGPA。

如果把werilog语言描述的电路映射成制造IC的公司的元件,布线,像制造PCB那样,(只不过电阻和电容都很小)那么就是ASIC。

在流片之前要用FPGA验证。

 

4,自己写完verilog代码,到底会生成什么样的电路呢?

打开qartusII,找到RTL vewer,然后你就可以看到你的代码生成什么样的电路了。

就像你画完原理图得到的结果。就像是一个尺寸很小的PCB一样。可以这样认为,一个小芯片,就是一个浓缩版的PCB板子。

 

5,verilog代码是如何生成ASIC的?

1》用notepad++等编辑器写代码

2》用modulesim等仿真工具进行RTL仿真:前仿真

3》用QartusII等软件进行编译,生成中间表示形式,然后进行逻辑优化,综合,生成门级表示形式,和自带的元件库(也是用verilog写的,只不过是开关级的)

4》用modulesim等仿真工具进行门级,开关级仿真:后仿真

5》将QartusII综合后的配置文件(sof,pof)烧到板子上,验证

6》ASIC back end flow ,sign off。

7》让ASIC厂子造几片,验证

8》批量造

 

6,小结

这一节讨论了很多问题,需要理解,其实FPGA不是从天上掉下来的,有他一步步的发展过程。和传统PCB制造,软件编译等领域有很多联系啊,对比一下,会比较容易理解。

FPGA读写SDRAM read_write_a_worde实验完整Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 `timescale 1 ns/ 1 ps // synopsys translate_on module sdram_top( clk, reset_n, sdram_bank_addr, write_data, read_data, read_req, write_req, rw_ack, bus_signal, init_done, sdram_clk, sdram_data, sdram_command, sdram_address, sdram_dqm ); // 系统信号 input clk; //20M系统时钟 input reset_n; //复位信号,低电平有效 // 内部信号 input [21:0] sdram_bank_addr; //读写SDRAM的地址 input [15:0] write_data; //写如sdram的数据 output [15:0] read_data; //从sdram读出的数据 input read_req; //读数据请求信号 input write_req; //写数据请求信号 output rw_ack; //读写应答信号 output bus_signal; //忙信号 output init_done; //初始化完成信号,输出,高电平有效 // SDRAM接口信号 output sdram_clk; //sdram时钟信号 inout [15:0] sdram_data; //sdram读写数据 output [4:0] sdram_command; //cke、cs_n、ras、cas_n、we_n,SDRAM指令信号 output [13:0] sdram_address; //[13:12]BA , [11:0]Addr,SDRAM地址信号 output [1:0] sdram_dqm; //SDRAM数据掩码 //连接线 wire init_start; //初始化开始信号,高电平有效 wire [4:0] sdram_init_command; //cke、cs_n、ras、cas_n、we_n,SDRAM指令信号 wire [4:0] sdram_rw_command; //cke、cs_n、ras、cas_n、we_n,SDRAM指令信号 wire [13:0] sdram_init_address; //[13:12]BA , [11:0]Addr,SDRAM地址信号 wire [13:0] sdram_rw
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值