笔试|面试|FPGA知识点大全系列(3)


前言

本文接笔试|面试|FPGA知识点大全系列(2)
本文首发于微信公众号“FPGA学习者”,更多精彩内容敬请关注。


13.对FPGA开发的理解

目前FPGA的应用主要是三个方向:
第一:传统方向,主要用于通信设备的高速接口电路设计

这一方向主要是用FPGA处理高速接口的协议,并完成高速的数据收发和交换。这类应用通常要求用具备高速收发接口的FPGA,同时要求设计者懂得高速接口电路设计和高速数字电路板级设计,具备EMC/EMI设计知识以及较好的模拟电路基础,需要解决在高速收发过程中产生的信号完整性问题。

第二:数字信号处理方向或数学计算方向

很大程度上这一方向已经大大超出了信号处理的范畴,要求FPGA设计者有一定的数学功底,能够理解并改进较为复杂的数学算法,并利用FPGA内部的各种资源使之能够变为实际的运算电路。

目前真正投入使用的还是在通信领域的无线信号处理、信道编解码以及图像信号处理等领域,其它领域的研究正在开展中。

第三:SOPC

SOPC(System-on-a-Programmable-Chip,片上可编程系统)利用FPGA平台搭建一个嵌入式系统的底层硬件环境,然后在上面进行嵌入式软件开发。

14.FPGA内部资源

目前主流FPGA都采用了SRAM工艺的查找表(LUT)结构, LUT本质上就是一个RAM。FPAG内部主要组成部分有:可编程输入/输出块(IOB)、可配置逻辑块(CLB)、嵌入式块RAM(BRAM)、丰富的布线资源、底层内嵌功能资源、内嵌专用硬核资源等。

(1)可编程输入/输出块:为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(bank),每个bank的接口标准由其接口电压VCCO决定,一个bank只能有一种VCCO,但不同bank的VCCO可以不同。只有相同电气标准的端口才能连接在一起。

(2)可配置逻辑块:由查找表和可编程寄存器组成,查找表完成纯组合逻辑功能,内部寄存器可配置成触发器或锁存器。

(3)嵌入式块RAM:可以配置成单端口RAM、双端口RAM、内容地址存储器(CAM)以及FIFO等常用存储结构。

(4)丰富的布线资源:布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。主要分为四类:全局布线资源、长线资源、短线资源、分布式布线资源。

(5)底层内嵌的功能单元:主要包括DLL、PLL、DSP、CPU 等,现在越来越丰富的内嵌的功能单元,使得FPGA成为了系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SOC平台过渡。

(6)内嵌专用硬核资源:内嵌的专用硬核是相对底层软核而言的,指FPGA处理能力强大的硬核,等效于ASIC电路。主要有乘法器、串并收发器、PCI-E、以太网控制器等。

15.跨时钟域处理

单bit信号

1)电平检测:

最为简单的方法,通过寄存器打两拍进行同步,也就是所谓的电平同步器。存在问题为,输入信号必须保持两个接收时钟周期,每次同步完,输入信号要恢复到无效状态。所以,如果是从快到慢,信号很有可能被滤除。适用于慢时钟域向快时钟域。

两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。

更确切地说,输入脉冲宽度必须大于同步时钟周期与第一级触发器所需的保持时间之和。最保险的脉冲宽度是两倍同步时钟周期。所以,这样的同步电路对于从较慢的时钟域来的异步信号进入较快的时钟域比较有效,对于进入一个较慢的时钟域,则没有作用。

为什么是打两拍呢,打一拍、打三拍行不行呢?两级并不能完全消除亚稳态危害,但是提高了可靠性减少其发生概率。总的来讲,就是一级概率很大,三级改善不大。如果再加上第三级寄存器, 由于第二级寄存器对于亚稳态的处理已经起到了很大的改善作用,第三级寄存器在很大程度上可以说只是对于第二级寄存器的延拍,所以意义是不大的。

【转载一篇关于FPGA亚稳态的文章】
FPGA中的亚稳态——让你无处可逃

2)边沿检测:

在电平同步器的基础上,通过输出端的逻辑组合,可以完成对于信号边沿的提取,识别上升沿,下降沿以及双边沿,并发出相应的脉冲;比起电平同步器,更适合要求脉冲输出的电路。但同样,输入信号必须保持两个接收时钟周期。适用于慢时钟域向快时钟域。

3)脉冲同步:

先将原时钟域下的脉冲信号,转化为电平信号(使用异或门),再进行同步,同步完成之后再把新时钟域下的电平信号转化为脉冲信号(边沿检测器的功能)。

这就从快时钟域取出一个单时钟宽度脉冲,在慢时钟域建立新的单时钟宽度脉冲。结合了之前所提到的两种同步器。

但存在一个问题,输入脉冲的时间间距必须在两个接收时钟周期以上,否则新的脉冲会变宽,这就不再是单时钟脉冲了,适用于快时钟域向慢时钟域。

对于多bit的异步信号

1:可以采用保持寄存器加握手信号的方法(多数据,控制,地址);
2:特殊的具体应用电路结构,根据应用的不同而不同;
3:异步FIFO。(最常用的缓存单元是DPRAM)
4:握手反馈机制:
握手指的是两个设备之间通信的一种方式,用来通信的信号就是握手信号。最简单的握手信号是validready,也可以叫requestgrant

假设设备1向设备2发送数据,设备1不知道设备2什么时候可以接收数据,设备2也不知道设备1什么时候会发送数据,那么它们之间如果用握手通信可能是这样的顺序:
设备1将valid信号置1,告诉设备2,数据准备就绪了,请查收;
设备2此刻正处于忙碌状态无法接收数据,设备2将ready信号保持为0;
设备2空闲了,将ready信号置1接收设备1的数据;
设备1看到设备2的ready为1,它知道设备2已经接收好数据了,将valid置0同时撤销数据,准备下一次发送。

可以看到因为有握手控制,可以确保数据的正确传输,不会丢失。跨时钟域的握手设计就是利用握手控制这种优势,从而避免因为跨时钟域引起的数据传输错误。

16.Mealy型/Moore型时序电路

Mealy型时序电路,输出不仅与当前的状态有关,还与当前的输入有关,即次态是现态和当前输入的函数。

输出=f(现状,输入);

Moore型时序电路,输出只由当前状态决定,和当前的输入无关;

输出=f(现状);

17.有限状态机FSM设计

状态机描述时关键是要描述清楚几个状态机的要素,即如何进行状态转移,每个状态的输出是什么,状态转移的条件等。具体描述时方法各种各样,最常见的有三种描述方式:

(1)一段式:整个状态机写到一个always模块里面,在该模块中既描述状态转移,又描述状态的输入和输出;
(2)二段式:用两个always模块来描述状态机,其中一个always模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出;
(3)三段式:在两个always模块描述方法基础上,使用三个always模块:

第一个always模块采用同步时序描述状态转移
第二个always采用组合逻辑判断状态转移条件,描述状态转移规律;
第三个always模块描述状态输出(可以用组合电路,也可以时序电路)。

三段式状态机示例模板:

//第一个always块,描述现态到次态的状态转移
always@(posedge clk or negedge rst_n)begin
  if(~rst_n)
    current_state <= IDLE;
  else
    current_state <= next_state;
end
//第二个进程,组合逻辑always模块,描述状态转移条件判断
always@(*)begin
  next_state = x;   //要初始化,使得系统复位后能进入正确的状态
  case(current_state)
      S1: if(...)
          next_state = S2; //阻塞赋值
      S2: if(...)
          next_state = S3; //阻塞赋值
      ……
  endcase
end
//第三个进程,时序逻辑always模块,描述次态寄存器输出
always@(posedge clk or negedge rst_n)begin
  ...//初始化
  case(next_state)
      S1:
          out1 <= 1'b1; //注意是非阻塞逻辑
      S2:
          out2 <= 1'b1;
      default:... //default 的作用是免除综合工具综合出锁存器
  endcase
end

18.FPGA开发工具

目前FPGA的生产厂家主要有Altera,Xilinx,Actel,Lattice。
Altera公司生产的FPGA和CPLD,开发工具主要用Quartus;
Xilinx 公司的FPGA主要用ISE,vivado作为开发工具;

目前,Altera公司已经被Intel收购,Xilinx已经被AMD公司收购。


总结

以上就是今天要讲的内容

往期精彩

笔试|面试|FPGA知识点大全系列(1)
笔试|面试|FPGA知识点大全系列(2)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值