初识FPGA及三个简单仿真实验报告

来源:互联网 发布:营销网络地图图片制作 编辑:程序博客网 时间:2024/06/15 05:18

一、初识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进行仿真实验,最重要的还是要先自己设计好电路逻辑,并分析可能出现的问题,对输出结果进行预先判定。当仿真输出结果有偏差时,就能根据对应的预期结果波形很快的找出问题所在,也便于更进一步的熟悉电路逻辑、更改或升级电路逻辑。