一、初识FPGA
1. 基本概念:
1.1 FPGA与ASIC不同,ASIC是定制IC,内部功能固话,FPGA是可编程器件;FPGA具有可重配置性、适用于小型项目,ASIC适用于大型项目
1.2 FPGA与CPLD不同,CPLD基于ROM结构,下电后代码不会丢失,FPGA基于RAM结构,下电后代码丢失,所以一般配有一个配置ROM;FPGA硬件设计相对复杂,内部逻辑门更大更广,适用于更复杂的应用。
1.3 一般的硬件主流主流厂商有Altera与Xilinx;语法一般有Verilog和VHDL。
2. 基本结构:
2.1 逻辑块(可编程的组合逻辑):
数字电路=时序逻辑电路+组合逻辑电路(真值表可由用户动态设定)
Xilinx->CLB->LC
Altera->LAB->LE
2.2 内部互联线(可编程的布线结构):
层次化布线网络、起点终点都是IOB。
2.3 IOE(可编程的输入\输出管脚):
设定管脚的信号来源与去向、连接布线网络;
设定信号方向为输入、输出或双向管脚;
设定输入输出的延时参数;
设定管脚的缺省方式。
2.4 FPGA阿德启动配置芯片采用FLASH工艺结构,写入时需进行数据擦除、坏块检查、写入数据校验等操作,写入速度慢、过程时间长。
2.5 调试模式的数据下载:
编程器连接FPGA的JTAG接口,将计算机上的编程数据文件直接写入芯片,下电后会丢失但其加载速度快。
3. 应用领域:
1逻辑粘合
2实时控制:可快速处理软件中断的相应
3信号处理:FPGA比ASIC更具可升级性与灵活性,比DSP更具并行处理的能力
4协议实现
5片上系统:将CPU、DSP以及各种接口控制模块、甚至Flash和SSDRAM集成在FPGA上
4. 开发流程:
模块分析->设计输入->实现->时序收敛->仿真测试->板级调试
二、利用quartus完成3个FPGA仿真实验:
1
要将两块3-8译码器拼接成4-16译码器,即要将一块作为低位片一块作为高位片,根据74139芯片的特性,只有STa输入高电平且STb与STc均输入高电平时才进行译码。
将低位片的STb与高位片的Sta连接同一个输入D3,低位片的Stas始终输入高电平,则:当D3=1时,D3D2D1D0=1000~1111,仅高位片八位译码;
当D3=0时,D3D2D1D0=0000~0111,仅低位片八位译码
使用Quartus设计电路逻辑如下:
波形仿真图如下:
仿真结果符合预期,且出现了“毛刺”,即电路的冒险与竞争现象,这是由于译码器各位翻转时,当需要多位在同一时序周期内翻转时并不会用时翻转。
2
要是用一个161计数器芯片设计一个M=12的计数器,即要求当计数器跳转到11后,下一个CLK到达后将计数器重置为零或直接清零,本实验采用置数为零的原理。当计数器为11即Q3Q2Q1Q0=1011时,Q3·Q1·Q0=1,将这三位作为一个与非门的输入,输出连接到161芯片的LD上,当下一个CLK到来后使其从1011跳转为0000。同时该与非门的输出也可用于做OV的高电平溢出。
电路逻辑设计如下:
仿真结果如下:
3
用161芯片设计一个M=19的实验需结合上两个实验的主要思想,采用两块161芯片组合。一块作为低位片,将其Q3Q2Q1Q0四位输出作为一个与非门的输入,输出端连接高位片的D0与CTt、CTp,取反后与高位片LD相连。
当Q3Q2Q1Q0=1111时,高位片进行置数功能,Q0输出1。其他时刻CTt与CTp均为1,高位片执行保持状态。
当Q4Q3Q2Q1=10100时,Q4·Q2=1,将这两位输出作为一个与非门的输入,输出分别连接两块芯片的CR用于清零。
当Q4Q3Q2Q1Q0=10011,即19时,Q4·Q1 ·Q0=1,将这三位作为一个与门的输入用于输出OV。
电路逻辑设计如下:
仿真结果如下:
三、小结
利用quartus进行仿真实验,最重要的还是要先自己设计好电路逻辑,并分析可能出现的问题,对输出结果进行预先判定。当仿真输出结果有偏差时,就能根据对应的预期结果波形很快的找出问题所在,也便于更进一步的熟悉电路逻辑、更改或升级电路逻辑。