当前位置:文档之家› PCIe总线基础及FPGA设计实战

PCIe总线基础及FPGA设计实战

PCIe总线基础及FPGA设计实战
PCIe总线基础及FPGA设计实战

PCI Express总线基础及FPGA设计实战

1. PCI Express基础

PCIe总线是基于PCI总线发展起来的,很多基本概念都来自于PCI总线,有必要在介绍PCIe之前了解PCI总线。

1.1 PCI基础

PCI总线作为处理器系统的局部总线,其主要目的是为了连接外部设备,而不是作为处理器系统的系统总线连接Cache和主存储器。PCI总线作为系统总线的延伸,其设计考虑了许多与处理器相关的内容,孤立的研究PCI总线并不可取,因此需要将PCI作为存储器系统的一个部分来研究。

1.1.1 几个重要概念

1)PCI总线空间与处理器空间隔离

PCI设备具有独立的地址空间,即PCI总线地址空间,该空间与存储器地址空间通过HOST 主桥隔离。处理器需要通过HOST主桥才能访问PCI设备,而PCI设备需要通过HOST主桥才能方位主存储器。

要注意区分存储器地址空间和PCI总线地址。在一个处理器系统中,存储器域、PCI总线域与HOST主桥的关系如下图。

图中的处理器系统由一个CPU、一个DRAM控制器和两个HOST主桥组成。在这个处理器系统中,包含CPU域、DRAM域、存储器域和PCI总线域地址空间。其中HOST主桥x和HOST 主桥y分别管理PCI总线x域与PCI总线y域。CPU访问PCI设备,必须通过HOST主桥进

行地址转换,而PCI设备访问存储器设备,也需要HOST主桥进行地址转换。HOST主桥的一个重要作用就是将存储器访问的存储器地址转换成PCI总线地址。

CPU域地址空间是指CPU所能直接访问的地址空间集合。

DRAM域地址空间是指DRAM控制器所能访问的地址空间集合,又称为主主存储器域。

存储器域是CPU域和DRAM域的集合。存储器域包括CPU内部的通用寄存器、存储器映射寻址的寄存器、主存储器空间和外部设备空间。在Intel的x86处理系统中,外部设备空间与PCI总线域地址空间等效。因为在x86处理器系统中,使用PCI总线同一管理全部外部设备。

值得注意的是,存储器域的外部设备空间,在PCI总线域中还有一个地址映射。当处理器访问PCI设备时,首先访问的是这个设备在存储器域上的PCI设备空间,之后HOST主桥将这个存储器域的PCI总线地址转换成PCI总线域的物理地址,然后通过PCI总线事务访问PCI总线域的地址空间。

2)可扩展性

PCI总线具有很强的扩展性。在PCI总线中,HOST主桥可以直接推出一条PCI总线,这条总线也是该HOST主桥管理的第一条PCI总线,该总线还可以通过PCI桥扩展一系列PCI 总线,并以HOST主桥作为根节点,形成1棵PCI总线树。这些PCI总线都可以连接PCI设备,但是一棵PCI设备树上,最多只能挂接256个PCI设备(包括PCI桥)。

3)动态配置机制

PCI设备使用的地址可以根据需要由系统软件动态分配。PCI总线使用这种方式合理地解决设备间的地址冲突,从而实现了“即插即用”功能。每一个PCI设备都有独立的配置空间,在配置空间中包含该设备在PCI总线中使用的基地址即BAR地址,从而保证每一个PCI 设备使用的物理地址并不相同。PCI桥的配置空间中包含有其下PCI子树所能使用的地址范围。

x86系统的工作流程是:主板上的BIOS程序会扫描PCI/PCIE设备,读取其BAR空间的大小,动态地为PCI/PCIE设备分配地址空间。在调试过中发现,假如将BAR空间设置成2G,x86系统会报no bootable device的错误,原因应该是BIOS给PCIE设备分配了2G的地址空间,暂用了硬盘的地址空间,导致无法加载操作系统。

4)总线带宽

PCI总线与之前的局部总线相比,极大提高了数据传送带宽,32位/33MHz的PCI总线可以提供132MB/s的峰值带宽,而64位/66MHz的PCI总线可以提供的峰值带宽为532MB/s。虽然PCI总线所能提供的峰值带宽远不能和PCIe总线相比,但是与之前的局部总线ISA、EISA和MCA总线相比,仍然具有极大的优势。

ISA总线的最高主频为8MHz,位宽为16,其峰值带宽为16MB/s;EISA总线的最高主频为8.33MHz,位宽为32,其峰值带宽为33MB/s;而MCA总线的最高主频为10MHz,最高位宽为32,其峰值带宽为40MB/s。PCI总线提供的峰值带宽远高于这些总线。

5)共享总线机制

PCI设备通过仲裁获得PCI总线的使用权后,才能进行数据传送,在PCI总线上进行数据传送,并不需要处理器进行干预。PCI总线仲裁器不在PCI总线规范定义的范围内,也不一定是HOST主桥和PCI桥的一部分,虽然绝大多数HOST主桥和PCI桥都包含PCI总线仲裁器,但是在某些处理器系统设计中也可以使用独立的PCI总线仲裁器。

PCI设备使用共享总线方式进行数据传递,在同一条总线上,所有PCI设备共享同一总线带宽,这将极大地影响PCI总线的利用率。这种机制显然不如PCIe总线采用的交换结构。

6)中断机制

PCI总线上的设备可以通过四根中断请求信号INTA~D#向处理器提交中断请求。与ISA 总线上的设备不同,PCI总线上的设备可以共享这些中断请求信号,不同的PCI设备可以将这些中断请求信号线与后,与中断控制器的中断请求引脚连接。PCI设备的配置空间记录了该设备使用这四根中断请求信号的信息。

PCI总线还进一步提出了MSI(Message Signal Interrupt)机制,该机制使用存储器写总线事务传递中断请求,并可以使用x86处理器FSB(Front Side Bus)总线提供的Interrupt Message总线事务,从而提高了PCI设备的中断请求效率。

1.1.2 PCI总线的组成结构。

图中与PCI总线相关的模块包括:HOST主桥、PCI总线、PCI桥和PCI设备。PCI总线是由HOST主桥和PCI桥推出,HOST主桥与主存储器控制器在同一级总线上,因此PCI设备可以方便通过HOST主桥访问存储器,即进行DMA操作。在一些简单的处理器系统中,可能不包含PCI桥,此时所有PCI设备都是连接再HOST主桥上推出的PCI总线上。在一些处理器系统中有可能有多个HOST主桥,如图1-1所示处理器系统中含有HOST主桥x和HOST主桥y。

X86处理器的HOST主桥

X86处理器使用南北桥结构连接CPU和PCI设备。其中北桥连接快速设备,如显卡和内存条,并推出PCI总线,HOST主桥包含在北桥中。而南桥连接慢速设备。

1.2 PCIE总线概述

PCI总线使用并行总线结构,在同一条总线上的所有外部设备共享总线带宽,而PCIe 总线使用高速查分总线,采用端对端的连接方式,因此在每一条PCIe链路中只能连接两个设备。这使得PCIe与PCI总线采用的拓扑结构有所不同。PCIe总线除了在连接方式上与PCI 总线不同之外,还使用一些在网络通信中使用的技术,如支持多种数据路由方式,基于多通路的数据传递方式,和基于报文的数据传送方式,并充分考虑在数据传送中出现的服务质量QoS(Quality of Service)问题。

1.2.1 基于PCIe的系统结构

前期的Intel主板中会集成单独的南北桥芯片,北桥负责连接速度较快的CPU、主存储器以及显卡等元件,南桥负责连接速度较慢的设备,包括硬盘、USB、网卡等。只要CPU读取主存储器,还需要北桥的支持,也就是CPU与主存储器的交流,会占用北桥的带宽。因此新一代的Intel主板架构,大多将北桥存储控制器整合到CPU封装中,CPU直接与主存储器交互,速度较快。

基于PCIe总线的Intel处理器架构

USB总线带宽

1.2.2 端到端的数据传递

PCI总线不同,PCIe总线采用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为数据发送端和数据接收端。

在PCIe总线的物理链路的一个数据通路(Lane)中,有两组查分信号,共4根信号线。其中发送端的TX部件与接收端的RX部件使用一组差分信号连接,该链路也被称为发送端的发送链路,也是接收端的接收链路;而发送端的RX部件与接收端TX部件使用另一组查分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。

一个PCIe链路可以由多个数据通路Lane组成,目前PCIe链路可以支持1、2、4、8、16和32Lane,即x1、x2、x4、x8、x16、x32宽度的PCIe链路。

PCIe总线物理链路间的数据传送使用基于时钟的同步传送机制,但是在物理链路上并没有时钟线,PCIE总线的接收端含有时钟恢复模块CDR(Clock Data Recovery),CDR将从接收报文中提取接收时钟,从而进行同步数据传递,PCIe设备进行链路训练时将完成时钟

的提取工作。

1.2.3 PCIe总线的层次结构

PCIe总线采用串行连接方式,并使用数据包(Packet)进行数据传输。在PCIe总线中,数据报文在接收和发送过程中,需要通过多个层次,包括事务层、数据链路层和物理层。

PCIe总线的层次组成结构与网络中的层次结构有类似之处,但PCIe总线的各个层次都是用硬件逻辑实现的。在PCIe体系结构中,根据报文首先在设备的核心层(Device Core)中产生,然后再经过该设备的事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer),最终发送出去。而接收端的数据也需要经过物理层、数据链路层和事务层,最终到达核心层。

1. 事务层

事务层定义了PCIe总线使用总线事务,其中多数总线事务与PCI总线兼容。这些总线事务可以通过Switch等设备传送到其他PCIe设备或者RC设备。RC设备也可以使用这些总线事务访问PCIe设备。

事务层接收来自PCIe设备核心层的数据,并将其封装成TLP(Transaction Layer Packet)后,发向数据链路层。此外事务层还可以从数据链路层中接收数据报文,然后转发至PCIe 设备的核心层。

2. 数据链路层

数据链路层保证来自发送端事务层的报文可以可靠、完整地发送到接收端的数据链路层。来自事务层的报文在通过数据链路层时,被添加Sequence Number前缀和CRC后缀。数据链路层使用ACK/NAK协议保证报文的可靠传递。

PCIe总线的数据链路层还定义了多种DLLP(Data Link Layer Packet),DLLP产生于

数据链路层,终止与数据链路层。

3. 物理层

物理层是PCIe的最底层,将PCIe设备连接再一起。PCIe总线的物理电气特性决定了PCIe链路只能使用端到端的连接方式。PCIe总线的物理层为PCIe设备间的数据通信提供传送介质,为数据提供可靠的物理环境。

1.2.3 PCIe体系结构的组成结构

PCIe总线作为处理器系统的局部总线,其作用于PCI总线类似,主要目的是为了连接处理器系统中的外部设备。在大多数处理器系统中,都使用RC Switch和PCIe-to-PCI桥这些基本模块连接PCIe和PCI设备。在PCIe总线中,基于PCIe总线的设备,也成为EP (Endpoint)。

基于PCIe总线的通用处理器系统如下图

图中所示的结构将PCIe总线端口、存储器控制器等一系列与外部设备有关的接口都集成在一起,并统称为RC。RC具有一个或者多个PCIe端口,可以连接各类PCIe设备。PCIe 设备包括(网卡、显卡等设备)、Switch和PCIe桥。

PCIe总线采取端到端的连接方式,每一个PCIe端口只能连接一个EP,当然PCIe端口也可以连接Switch进行链路扩展。通过Switch扩展出的PCIe链路可以继续挂接EP或者其它Switch。

2. 基于FPGA的PCIe总线分析

2.1 硬件系统设计

本章将采用xilinx的FPGA芯片搭建一个RC端和EP端的硬件平台,用于仿真学习PCIe 总线相关的知识包括DMA操作、地址映射等,以及xilinx的AXI Memoy Mapped TO PCI Express、AXI DMA等IP使用。

2.1.1 RC端系统设计

RC端硬件系统由MicroBlaze处理器、RC(采用xilinx的AXI Memony Mapped To PCI Express配置成RC模式)、内存(采用内置BRAM块)、常用外设包括GPIO、串口。

地址分配

pcie地址空间 axi_pcie_bar0 0xC000_0000~0xC000_FFFF

mem地址空间 axi_mem_0 0x0600_0000~0x0600_FFFF

2.1.2 EP端系统设计

EP端硬件系统由MicroBlaze处理器、EP(采用xilinx的AXI Memony Mapped To PCI Express配置成EP模式)、DMA以及内置BRAM块。

地址分配

pcie 地址空间 axi_pcie_bar0 0x4000_0000~0x4000_FFFF mem 地址空间 axi_mem_0 0x0800_0000~0x0800_FFFF

2.2 读写数据分析 2.2.1 读写MEM 数据

操作地址为RC 端BAR 空间存储器域地址+偏移量

例如,往EP 端偏移量为0x1000的MEM 写数据,RC 端写地址为0xC000_000+0x1000

0xC000_000为RC 端axi_pcie_bar0基地址,即EP 端PCIe 域基地址映射到RC 端存储器地址域的基地址。

将RC 端存储器域地址0xC000_1000,转换成EP 端AXI 地址0x0800_1000,最终写入到EP 端MEM 。

0xC000_1000RC

端存储器域

RC_AXIBAR2PCIEBAR_0=0xFFFF_0000

0xFFFF_1000EP_CFG_BAR0=0xFFFF_0000PCIE 总线接口

0x0000_1000EP 端PCIe 总线域

EP_PCIEBAR2AXIBAR0=0x0800_0000

0x0800_1000

EP 端AXI 总线地址域

2.2.2 DMA 操作

DMA 在EP 端,源地址和目的地址为EP 端AXI 总线地址

RC 端存储器域

EP 端存储器域

2.2.2.1读内存

读内存指将RC 端的内存的数据搬移到EP 端MEM 。数据流图如下 RC 端

EP 端

源地址为0x4000_1000,RC 端存储器域地址在

EP

端AXI 总线域的映射地址 目标地址为0x0800_2000,EP 端AXI 总线域地址

EP 端AXI 总线地址域0x4000_1000EP_AXIBAR2PCIEBAR_0=0xEEEE_00000xEEEE_1000PCIe

总线接口RP_CFG_BAR0=0xEEEE_0000

0x0000_1000RP 端PCIe

总线域

EP_PCIEBAR2AXIBAR0=0x0600_0000

RP 端存储器域

0x0600_1000

2.2.2.2写内存

写内存将EP 端的数据写入RC 端的内存。

数据流图 EP 端

RC 端

源地址为0x0800_1000,EP 端AXI 总线地址

目标地址为0x4000_2000,RC 端存储器域内存地址在EP 端AXI 总线地址域的映射地址

EP 端AXI 总线地址域

0x4000_2000EP_AXIBAR2PCIEBAR_0=0xEEEE_00000xEEEE_2000PCIE

总线接口RP_CFG_BAR0=0xEEEE_0000

0x0000_2000RP 端PCIE

总线域

EP_PCIEBAR2AXIBAR0=0x0600_0000

RP 端存储器域

0x0600_2000

3. 设计实战

本章将搭建一个基于PCIe x4的EP端硬件系统,并在安装Windows7的x86电脑上,使用WinDriver软件完成驱动开发。

3.1 EP端硬件系统搭建

地址分配

AXI Memony Mapped To PCI Express参数配置

1. 将Device/Port Type配置成功PCI Express Endpoint device

2. 将Lane Width配置成x4,将Link Speed配置成5.0GT/s

3. 配置Vendor ID和Device ID,驱动开发时将根据Vendor ID和Device ID来扫描PCIe设备。

4. 配置BAR0的地址空间为128K,配置C_PCIEBAR2AXIBAR_0为0x0800_0000

5. 配置C_AXIBAR2PCIEBAR_0为0xFFFF_0000

3.2 上板调试记录

1. BAR0的地址空间分配过大

当将Bar0空间配置成2GB时,WINDOWS7的PC机没有启动操作系统,报错no bootable device,原因应该是BIOS需要给BAR0分配2G的地址空间,占用了硬盘的地址空间,导致无法加载操作系统。

2. axi_pcie的BAR空间或C_AXIBAR2PCIEBAR0设置不正确

调试时可以使用windriver工具辅助开发,快速获取pcie设置的配置寄存器的值以及主机为pcie设备分配的bar空间大小,假设主机为pcie设备分配的bar空间为0xF7D00000~0xF7D1FFFF,总共128KB(注意x86处理器系统中存储器域地址和pcie域地址相等,而arm处理器则不一致)。

主机为锁定的dma的物理地址为0x00000000db361000(pDma->pDma->Page[0].pPhysicalAddr),进行dma写内存操作时,源地址为EP端bram 空间的地址,目标地址位置成主机为锁定的dma的物理地址,假设EP端为axi_pcie分配的空间为0x4000_0000~0x7FFF_FFFF,0xdb361000无法顺利达到axi_pcie的S_AXI总线,将EP端的axi_pcie的地址空间设置成0xC000_0000~0xFFFF_FFFF时,0xdb361000可以顺利达到axi_pcie的S_AXI总线。

但如果C_AXIBAR2PCIEBAR0设置不正确,数据也无法正常返回PC端。

假如EP 端的参数配置如下 C_AXIBAR_0 = 0xC000_0000

C_AXI_HIGHADDR_0 = 0xFFFF_FFFF C_AXIBAR2PCIEBAR0 = 0x4000_0000

axi 到pcie 地址转换如下,pcie 的最终地址为0x5b361000,无法返回PC 端。为了获取正确的pcie 域地址,需要将C_AXIBAR2PCIEBAR0的最高2比特设置成全1,如C_AXIBAR2PCIEBAR0=0xC000_0000、0xFFFF_0000都是可行的。

3.调试时发下 axi dma 每次最大传输长度为16KB-1,假如超过16KB ,dma

无法工作。原因是Width of Buffer Length Register 配置成了14bits ,16KB-1=0x3FFF 刚好达到buffer 的上限。将Width of Buffer Length Register 配置成了17bits 后,dma 可以一次传输64KB 数据。

3.3 WINDOWS下驱动开发

3.3.1 开发流程

WinDriver是Jungo公司提供的一种通用的驱动开发支持软件,它简化了用户的上层驱动开发和应用接口开发,而且易于再封装,实现商业化应用。该软件提供了对PCI Express 接口设备的驱动支持,而且也提供了对DMA实现功能的支持。开发流程及使用的函数如下图所示,使用接口函数可以分成3大类:WDC库相关、设备相关以及dma相关。

1.WDC库相关

打开Windriver驱动并初始化WDC库

DWORD DLLCALLCONV WDC_DriverOpen(WDC_DRV_OPEN_OPTIONS openOptions,const CHAR *sLicense);

关闭Windriver驱动以及WDC库

DWORD DLLCALLCONV WDC_DriverClose(void);

2.设备相关

扫描PCI设备,dwVendorId为厂商ID,dwDeviceId为器件ID,pPciScanResult为扫描到的PCI设备。

WDC_PciScanDevices(DWORD dwVendorId, DWORD dwDeviceId,WDC_PCI_SCAN_RESULT *pPciScanResult);

返回设备信息。

DWORD DLLCALLCONV WDC_PciGetDeviceInfo(WD_PCI_CARD_INFO *pDeviceInfo);

获取设备句柄。

DWORD DLLCALLCONV WDC_PciDeviceOpen(WDC_DEVICE_HANDLE *phDev,const WD_PCI_CARD_INFO *pDeviceInfo, const PVOID pDevCtx,PVOID reserved, const CHAR *pcKPDriverName, PVOID pKPOpenData);

关闭设备句柄

DWORD DLLCALLCONV WDC_PciDeviceClose(WDC_DEVICE_HANDLE hDev);

3.dma相关

WinDriver提供了两种DMA缓冲区的分配方式,即连续缓冲区和分散/聚合缓冲区。前者当用户申

请缓冲区时,分配的是一个物理地址连续的内存块;而后者分配的缓冲区在物理位置上可以是分段的,这些物理上不连续的内存段通过虚拟地址空间映射给用户的是一个在应用层连续的缓冲区。

分配一块连续物理空间的内存

DWORD DLLCALLCONV WDC_DMAContigBufLock(WDC_DEVICE_HANDLE hDev, PVOID *ppBuf,DWORD dwOptions, DWORD dwDMABufSize, WD_DMA **ppDma);

分配非连续物理空间的内存段

DWORD DLLCALLCONV WDC_DMASGBufLock(WDC_DEVICE_HANDLE hDev, PVOID pBuf,DWORD dwOptions, DWORD dwDMABufSize, WD_DMA **ppDma);

释放DMA缓存区

DWORD DLLCALLCONV WDC_DMABufUnlock(WD_DMA *pDma);

AXI DMA的Simple DMA模式的配置流程如下,具体参见pg021。

Direct Register Mode (Scatter Gather Engine is disabled) provides a configuration for doing simple DMA transfers on MM2S and S2MM channels that requires less FPGA resource utilization. Transfers are initiated by accessing the DMACR, the Source or Destination Address and the Length registers. When the transfer is completed, a DMASR.IOC_Irq asserts for the associated channel and if enabled generates an interrupt out.

3.3.2速度测试

FPGA硬件实战设计经验

TR_Con_ZD板卡设计经验总结 针对TR板卡的PCB布线一根线未动想到的TR板卡bank分配方法介绍 与原来在华为工作的师兄(他做的TR板卡的PCB)聊了一下,他说TR板卡的FPGA线序一根都没改。Bank分配是我来做的,原则是方便PCB走线。分配时候是参考下面的资料来分配的。 TR板卡结构图 XC6VSX315T-FF1759的bank管脚分布图

的上方,因此将FPGA逆时针转90°,如下图所示,这样PCB布线就比较方便了。

分配bank的时候没有考虑Bank在FPGA内部的分布图,如下图所示:

想到的硬件设计流程的东西 师兄说:“动一根线的话,都需要FPGA程序重新跑一遍,这需要浪费很多时间。”FPGA 程序?TR板卡的程序还没有呢!的确值得思考了,到底这个设计应该是按照怎样的一个流程。 在华为,是按照这样的流程进行的。 1.硬件设计人员将IO需求,板卡供电等情况反馈给逻辑设计人员 2.逻辑人员对所需的FPGA资源做评估,最终确定FPGA型号(硬件设计人员也可以参与 一起选型) 3.逻辑设计人员对FPGA进行bank分配,需要以下资源: a)硬件设计人员提供硬件设计框图 b)最好对所用的IO先画一个自己根据原理图框图分配的bank的原理图草图,导入 PCB后进行一下预布局,这样信号流程就清晰了。 逻辑人员根据上述资源进行bank的分配,因为他们对FPGA内部的资源最清楚。逻辑人员要兼顾PCB布局布线的方便,有时候不可能照顾都到布局布线的方便。这时候,就需要在硬件设计人员和FPGA设计人员之间来回折腾,最终兼顾双方,得到一个bank 分配方案。 4.FPGA人员根据bank分配,写一个测试评估的程序,如果能够跑通,时序满足设计需求, 说明现在的bank分配可以使用,如果出现严重的时序错误,那么就需要考虑重新分配bank,通过不断地调整,最终确定板卡的bank分配。 5.根据最终的bank分配方案设计原理图。

FPGACPLD数字电路设计经验

FPGA/CPLD数字电路设计经验分享 摘要:在数字电路的设计中,时序设计是一个系统性能的主要标志,在高层次设计方法中,对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解RTL电路时序模型的基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证明采用这种方式可以使电路的后仿真通过率大大提高,并且系统的工作频率可以达到一个较高水平。 关键词:FPGA数字电路时序时延路径建立时间保持时间 1 数字电路设计中的几个基本概念: 1.1 建立时间和保持时间: 建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间 注:在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考虑时钟树向前偏斜的情况。在进行后仿真时,最大延迟用来检查建立时间,最小延时用来检查保持时间。 建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就可以使系统完成工作。保持时间是一个和时钟周期无关的参数,如果设计不合理,使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。因此合理的设计系统的时序是提高设计质量的关键。在可编程器件中,时钟树的偏斜几乎可以不考虑,因此保持时间通常都是满足的。

PCIE基础知识

PCIe总线概述 随着现代处理器技术的发展,在互连领域中,使用离速差分总线替代并行总线是大势所趋。与单端并行信号相比,高速差分信号可以使用更高的时钟频率,从而使用更少的信号线, 完成之前需要许多单端并行数据信号才能达到的总线带宽。 PCI总线使用并行总线结构,在同一条总线上的所有外部设备共享总线带宽,而PCIe 总线使用了鬲速差分总线,并釆用端到端的连接方式,因此在每一条PCIe链路中只能连接两个设备。这使得PCIe与PCI总线釆用的拓扑结构有所不同。PCIe总线除了在连接方式上与PCI总线不同之外,还使用了一些在网络通信中使用的技术,如支持多种数据路由方式,基于多通路的数据传递方式,和基于报丈的数据传送方式,并充分考虑了在数据传送中出现服务质量QoS (Qual ity of Service)问题。 PCIe总线的基础知识 与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端。PCIe总线除了总线链路外,还具有多个层次,发送端发送数据时将通过这些层次,而接收端接收数据时也使用这些层次。PCIe 总线使用的层次结构与网络协议栈较为类似。 端到端的数据传递 PCIe链路使用“端到端的数据传送方式”.发送端和接收端中都含有TX(发送逻辑)和RX(接收逻辑),其结构如图4-1所示。

Da" Linker layer “ Ph 、sical layer ■ Data Linker la^^r 图41PCIe 总线的物理链蒋 由上图所示,在PCIe 总线的物理链路的一个数扌居通路(Lane)中,由两组差分信号,共4根 信号线组成。其中发送端的TX 部件与接收端的RX 部件使用一组差分信号连接,该链路也被 称为发送端的发送链路,也是接收端的接收链路:而发送端的RX 部件与接收端的TX 部件使 用另一组差分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。一个 PCIe 链路可以由多个Lane 组成。 离速差分信号电气规范要求其发送端串接一个电容,以进行AC 耦合。该电容也被称为AC 耦合电容。PCIe 链路使用差分信号进行数据传送,一个差分信号由D+和D-两根信号组成, 信号接收端通过比较这两个信号的差值,判斯发送端发送的是逻辑“1”还是逻辑“0”。 与单端信号相比,差分信号抗千扰的能力更强,因为差分信号在布线时要求“等长”、“等宽”、 “贴近”,而且在同层。因此外部干扰噪声将被“同值”而且“同吋”加载到D+和D-两根信 号上,其差值在理想情况下为0,对信号的逻辑值产生的影响较小。因此差分信号可以使用 更商的总线频率。 此外使用差分信号能有效抑制电磁干扰EMI (Electro Magnetic Interference) o 由于差分 信号D+与D-距离很近而且信号幅值相等.极性相反。这两根线与地线间耦合电磁场的幅值 相等,将相互抵消,因此差分信号对外界的电触千扰较小。当然差分信号的缺点也是显而易 见的,一是差分信号使用两根信号传送一位数据;二是差分信号的布线相对严格一些。 PCIe 链路可以由多条Lane 组成,目前PCIe 链路可以支持1、2. 4. 8、12、16和32个Lane, 即X1、X2、X4、X8、X12. X16和X32宽皮的PCIe 链路。每一个Lane 上使用的总线 频率与PCIe 总线使用的版本相关。 第1个PCIe 总线规范为,之后依次为… 和。目前PCIe 总线的置新规范为,而正在开发过 程中,预计在2010年发布。不同的PCIe 总线规范所定义的总线频率和链路编码方式并不相 同,如表4T 所示。

典型的FPGA设计开发流程

典型的FPGA 设计开发流程 (2011-10-02 16:08:17) 标签: 杂谈 分类: 专业总结 FPGA 的设计流程就是利用EDA 开发软件和编程工具对FPGA 芯片进行开发的过程。FPGA 的开发流程一般如图1所示,包括电路设计、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程与调试等主要步骤。 图1 FPGA 开发的一般流程 1. 电路功能设计 在系统设计之前,首先要进行的是方案论证、系统设计和FPGA 芯片选择等准备工作。系统工程师根

据任务要求,如系统的指标和复杂度,对工作速度和芯片本身的各种资源、成本等方面进行权衡,选择合理的设计方案和合适的器件类型。一般都采用自顶向下的设计方法,把系统分成若干个基本单元,然后再把每个基本单元划分为下一层次的基本单元,一直这样做下去,直到可以直接使用EDA元件库为止。 2.设计输入 设计输入是将所设计的系统或电路以开发软件要求的某种形式表示出来,并输入给EDA工具的过程。常用的方法有硬件描述语言(HDL)和原理图输入方法等。原理图输入方式是一种最直接的描述方式,在可编程芯片发展的早期应用比较广泛,它将所需的器件从元件库中调出来,画出原理图。这种方法虽然直观并易于仿真,但效率很低,且不易维护,不利于模块构造和重用。更主要的缺点是可移植性差,当芯片升级后,所有的原理图都需要作一定的改动。目前,在实际开发中应用最广的就是HDL语言输入法,利用文本描述设计,可以分为普通HDL和行为HDL。普通HDL有ABEL、CUR 等,支持逻辑方程、真值表和状态机等表达方式,主要用于简单的小型设计。而在中大型工程中,主要使用行为HDL,其主流语言是Verilog HDL和VHDL。这两种语言都是美国电气与电子工程师协会(IEEE)的标准,其共同的突出特点有:语言与芯片工艺无关,利于自顶向下设计,便于模块的划分与移植,可移植性好,具有很强的逻辑描述和仿真功能,而且输入效率很高。 3.功能仿真 功能仿真,也称为前仿真,是在编译之前对用户所设计的电路进行逻辑功能验证,此时的仿真没有延迟信息,仅对初步的功能进行检测。仿真前,要先利用波形编辑器和HDL等建立波形文件和测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形,从中便可以观察各个节点信号的变化。如果发现错误,则返回设计修改逻辑设计。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等软件。虽然功能仿真不是FPGA开发过程中的必需步骤,但却是系统设计中最关键的一步。

汽车CAN总线基础知识培训资料

汽车C A N总线基础知 识

CAN总线协议 控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。 CAN总线发展 控制器局域网CAN( Controller Area Network)属于现场总线的范畴,是一种有效支持分布式控制系统的串行通信网络。是由德国博世公司在20世纪80年代专门为汽车行业开发的一种串行通信总线。而且能够检测出产生的任何错误。当信号传输距离达到10km时,CAN仍可提供高达50kbit/s的数据传输速率。CAN总线的工作原理 CAN总线使用串行数据传输方式,可以1Mb/s的速率在40m的双绞线上运行,也可以使用光缆连接,而且在这种总线上总线协议支持多主控制器。[1]CAN与I2C总线的许多细节很类似,但也有一些明显的区别。当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总线读取时,这种配置十分重要。

当一个站要向其它站发送数据时,该站的CPU将要发送的数据和自己的标识符传送给本站的CAN芯片,并处于准备状态;当它收到总线分配时,转为发送报文状态。CAN芯片将数据根据协议组织成一定的报文格式发出,这时网上的其它站处于接收状态。每个处于接收状态的站对接收到的报文进行检测,判断这些报文是否是发给自己的,以确定是否接收它。由于CAN总线是一种面向内容的编址方案,因此很容易建立高水准的控制系统并灵活地进行配置。我们可以很容易地在CAN总线中加进一些新站而无需在硬件或软件上进行修改。当所提供的新站是纯数据接收设备时,数据传输协议不要求独立的部分有物理目的地址。它允许分布过程同步化,即总线上控制器需要测量数据时,可由网上获得,而无须每个控制器都有自己独立的传感器。 CAN总线在空闲(没有节点传输报文)时是一直处于隐性状态。当有节点传输报文时显性覆盖隐性,由于CAN总线是一种串行总线,也就是说报文是一位一位的传输的,而且是数字信号(0和1),1代表隐性,0代表显性。在传送报文的过程中是显隐交替的,就像二进制数字0101001等,这样就能把信息发送出去,而总线空闲的时候是一直处于隐性的。 CAN总线特征 (1)报文(Message)总线上的数据以不同报文格式发送,但长度受到限制。当总线空闲时,任何一个网络上的节点都可以发送报文。 (2)信息路由(Information Routing)在CAN中,节点不使用任何关于系统配置的报文,比如站地址,由接收节点根据报文本身特征判断是否接收这帧信息。因此系统扩展时,不用对应用层以及任何节点的软件和硬件作改变,可以直接在CAN中增加节点。

FPGA学习心得

回想起自己学FPGA,已经有一段时间了,从开始的茫然,到后来的疯狂看书,设计开发板,调电路,练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。 废话不说了,下面进入正题,学习FPGA我主要经历了这么几个阶段: ①、Verilog语言的学习,熟悉Verilog语言的各种语法。 ②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA 板子。 ③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII 的基本结构,设计NiosII开发板,编写NiosII C语言程序,调试板子各模块功能。先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,在本科时老师一般教VHDL,不过现在 Verilog用的人越来越多,其更容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。像systemC,systemVerilog之类的应该还在萌芽阶段,以后可能会有较大发展。鉴于以上原因我选择了Verilog作为我学习的硬件描述语言。 其实有C语言的基础,学起Verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。这里推荐几本评价比较好的学习Verilog的书籍: ①、《verilog 数字系统设计教程》,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。但本书对于资源优化方面的编程没有多少涉及到。 ②、《设计与验证Verilog HDL》,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。 学习Verilog其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。 Verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。 刚开始我拿了实验室一块CPLD的开发板做练习,熟悉QuartusII的各种功能,比如IP的调用,各种约束设置,时序分析,Logiclock设计方法等,不过做到后面发现CPLD 的资源不太够(没有内嵌的RAM、不能用SignalTapII,LE太少等),而实验室没有FPGA开发板,所以就萌生了自己做FPGA开发板的意图,刚好Cadence我也学的差不多了,就花了几天时间主要研究了FPGA配置电路的设计,在板子上做了Jtag和AS下载口,在做了几个用户按键和LED,其他的口全部引出作为IO口,电路比较简单,板子焊好后一调就通了(心里那个爽啊...)。我选的FPGA是cycloneII系列的EP2C5,资源比以前的FPGA多了好几倍,还有PLL,内嵌的RAM,可以试试SignalTapII,用内嵌的逻辑分析仪测试引脚波形,对于FPGA的调试,逻辑分析仪是至关重要的。利用这块板子我完成了项目中的几个主要功能:RS232通信,指令译码,配置DDS,AD数据高速缓存,电子开关状态设置等,在实践中学习起来真的比平时快很多,用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好: ①、《Altera FPGA/CPLD 设计(基础篇)》:讲解一些基本的FPGA设计技术,以及QuartusII中各个工具的用法(IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),对于入门非常好。 ②、《Altera FPGA/CPLD 设计(高级篇)》:讲解了一些高级工具的应用,LogicLock,时序约束很分析,设计优化,也讲述了一些硬件编程的思想,作为提高用。

一个合格的FPGA工程师需要掌握哪些知识

一个合格的FPGA工程师需要掌握哪些知识?这里根据自己的一些心得总结一下,其他朋友可以补充啊。 1.Verilog语言及其于硬件电路之间的关系。 2.器件结构(最好熟练掌握Spartan3,Vertix4系列的器件结构,及其资源于Verilog行为描述方法的关系。)。 3.开发工具(熟练掌握Synplify,Quartus,ISE,Modelsim)。 4.数字电路(组合电路,触发器,特别是D触发器构成分频器,奇数倍分频占空比为50%,时序电路,并且能用Verilog语言描叙。)。 5.熟悉FPGA设计流程(仿真,综合,布局布线,时序分析)。 6.熟练掌握资源估算(特别是slice,lut,ram等资源的估算)。 7.同步设计原理。 8.熟练掌握基本概念(如建立时间,保持时间,流量(即所做FPGA设计的波特率)计算,延迟时间计算(所做FPGA设计),竞争冒险,消除毛刺的方法等等)。 9.具备具体设计经验(对应届生而言如毕业设计)。 10.良好的设计思路(流水线设计即熟称打拍子,在速率资源功耗之间的折中考虑)。 一个合格的FPGA工程师至少在以下三个方面的一个非常熟悉: 1.嵌入式应用 2.DSP应用 3.高速收发器应用 将自己的走过的弯路和总结的经验与大家分享一下,希望对您有一点点

的参考价值。 首先从先从如何成为一个合格的设计者说起吧!初学者觉得一切都是挑战,一切都新鲜,不知从何处下手。我总结了学习EDA逻辑设计的4个步骤,请拍砖! 1。首先,应该好好学习一下FPGA/CPLD的设计设计流程。 不要简单的以为就是设计输入-》仿真-》综合-》实现那么一回事,要抠细,要学精,要多问每个步骤的注意事项,区分相关步骤的联系和区别。比如要搞清楚功能仿真、综合后仿真、Translate后仿真、Map 后的仿真、布局布线后仿真的作用都是什么,什么时候应该做,什么时候可以不做这些仿真!学习清楚了设计流程最大的好处就是有利于培养良好的EDA设计习惯,日后会受益非浅! 2。关于设计输入和Coding Style。 设计输入最好学习HDL语言,Verilog、VHDL都可以,可以把状态机输入和原理图输入作为补充内容,但不是重点。我在前面的帖子已经反复强调了Coding Style的重要性。因为它是逻辑设计人员的一个基本业务素质。而且Coding Style不是看几篇文章,学几条原则就能够成为高手的,他需要您在工作中不断的体会和积累,在学习的最初,有Coding Style的意识,设计者就会有意的积累,对日后发展很有好处。反之则后患无穷。 3。培养硬件的意识,培养系统的观念。 我也在交流和授课的时候很强调硬件意识,如果从形式上看,逻辑设计随着智能化和优化手段的不断发展最后会越来越灵活,越来越简单。比

xilinxfpga设计基础

第一章开发软件ISE与开发流程 LUT主要适合SRAM工艺生产,因此FPGA都是基于SRAM工艺的,掉电就会丢失。 设计输入 除了常见的文本输入,还可以采用图形输入方式: 单击Design Utilities->Creat Schematic Symbol,则会在工程文件夹下生成一个文件,同时这个生成的符号被加入到符号库中。这样可以添加元件。 用户约束文件UCF的编写: 管脚约束:如NET “” LOC = ; --将信号锁定到fpga的管脚。 时钟约束:如NET “” PERIOD = period {HIGH/LOW}[high or low time]。 采用图形化方法输入约束文件: 创建ucf文件,选择ucf文件,然后点击Processes->User Constrains->Create Timing Constraints添加时序约束;点击Processes->User Constrains->I/O Pin Planning添加管脚约束。 设计综合(Synthesize) 综合将概念性硬件描述语言HDL的设计定义转换成针对目标器件的逻辑或者物理表示。 XST(Xilinx Synthesis Tools)就是综合工具,其输出为Xilinx特有的NGC网表文件,NGC包含转化后的逻辑数据和约束信息。 综合是设计流程中的基本步骤,它将概念性硬件描述语言的设计定义转换为针对器件的逻辑或物理表示。在综合过程中,状态机是单独处理、独立分析的,根据综合的选项,综合器选择状态机在综合过程中选用的实现算法。 综合完成后,综合器会根据综合选项和XCF(XST Constraint File, 综合约束文件),对综合结果做一些基础的优化。 HDL文件 语法分析 检查语法错误 HDL综合 宏识别、优先状态机展开资源共享技术 底层优化 宏实现、时序优化映射、复制寄存器 NGR文件NGC文件LOG文件 功能仿真(Simulation->behavioral) 功能仿真可以对工程设计文件进行初步的功能验证。仿真软件将HDL语言转换为抽象的逻辑电路,忽略信号在逻辑器件和传输线上的延时,并对应各种可能的输入信号仿真得到设计工程的输出信号,检验输出信号是否满足预期的要求。

计算机基础知识及答案(二)

计算机基础知识及答案( 二) 1 微型计算机采用的是冯? 诺依曼体系结构,其硬件系统由运算器、控制器、存储器、输入设备和 ___C___ 五部分组成。 A 键盘、鼠标器。 B 显示器、打印机。 C 输出设备。 D 系统总线。 2、在微型计算机中,其核心部件中央处理器CPU 被称之为—D—。 A关键部件。B主要部件。C必备部件。D微处理器MPU(Micro ProcessingUnit) 。 3、微处理器把运算器和__A ___ 集成在一块很小的硅片上,是一个独立的部件。 A 控制器。 B 内存储器。 C 输入设备。 D 输出设备。 4、微型计算机的基本构成有两个特点:一是采用微处理器,二是采用___D___ 。 A 键盘和鼠标器作为输入设备。 B 显示器和打印机作为输出设备。CROM 和RAM 乍为主存储器。D 总线系统。 5、根据微型计算机硬件构成的特点,可以将其硬件系统具体化为由微处理器、内存储器、接口电路、I/O 设备和__D ___ 组成。 A 键盘、鼠标器。 B 显示器、打印机。 C 外围设备。 D 总线系统。 6、在微型计算机系统组成中,我们把微处理器CPU 只读存储器ROM 和随机存储器RAME 部分统称为___D___ 。 A 硬件系统。 B 硬件核心模块。 C 微机系统。 D 主机。 7、微型计算机使用的主要逻辑部件是___D___ 。 A 电子管。 B 晶体管。 C 固体组件。 D 大规模和超大规模集成电路。 8、在微型计算机中,通常把输入/输出设备,统称为__D _____ 。

ACPU B 存储器。C 操作系统。D 外部设备。 9、下面是关于微型计算机总线的描述,正确的有___C___ 。 A 总线系统由系统总线、地址总线、数据总线和控制总线组成。 B 总线系统由接口总线、地 址总线、数据总线和控制总线组成。C系统总线由地址总线、数据总线和控制总线组成。D 地址总线、数据总线和控制总线的英文缩写分别为DB AB CBo 10、微型计算机的系统总线是CPU与其它部件之间传送D信息的公共通道。 A输入、输出、运算。B输入、输出、控制。C程序、数据、运算。D数据、地址、控制。 11、CPU与其它部件之间传送数据是通过A实现的。 A数据总线。B地址总线。C控制总线。D数据、地址和控制总线三者。 12、下面是关于数据总线(Data Bus )的描述,不正确的是_D ____________ 。 A数据总线用来传送数据信息。B数据总线的位数,决定了CPU 一次能够处理的数据的位数。CMPU H次能够处理的数据的位数称为字长。D字长越长的CPU处理信息所需的时间越长。 13、CPU与其它部件之间传送地址是通过B实现的。 A数据总线。B地址总线。C控制总线。D数据、地址和控制总线三者。 14、下面是关于地址总线(Address Bus )的描述,不正确的是_D _____________ 。 A地址总线用来传送地址信息。B地址总线的根数,决定了CPU可访问的内存最大范围。C若地址总线为n根,则该微处理器可访问内存的最大范围是2的n次方。D拥有32根地址总线的微处理 器,其可访问内存的最大范围是4000M 15、CPU与其它部件之间传送控制信号是通过_________ C_实现的。 A数据总线。B地址总线。C控制总线。D数据、地址和控制总线三者。

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、抢答器、密码锁等实验时那个兴奋劲。当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。 后来读研究生,工作陆陆续续也用过Quartus II、FoundaTIon、ISE、Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。 在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL语言大有裨益,往往会起到事半功倍的效果。当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。下面就以我的切身体会,谈谈FPGA设计的经验技巧。 我们先谈一下FPGA基本知识: 1.硬件设计基本原则 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。速度与面积平衡和互换原则: 一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约; 反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进

FPGA笔试题及答案总结

第 1 章 FPGA基础知识 1.1 FPGA设计工程师努力的方向 SOPC,高速串行I/O,低功耗,可靠性,可测试性和设计验证流程的优化等方面。随着芯片工艺的提高,芯片容量、集成度都在增加,FPGA 设计也朝着高速、高度集成、低功耗、高可靠性、高可测、可验证性发展。芯片可测、可验证,正在成为复杂设计所必备的条件,尽量在上板之前查出bug,将发现bug的时间提前,这也是一些公司花大力气设计仿真平台的原因。另外随着单板功能的提高、成本的压力,低功耗也逐渐进入FPGA设计者的考虑范围,完成相同的功能下,考虑如何能够使芯片的功耗最低。高速串行IO的应用,也丰富了FPGA 的应用范围,象xilinx的v2pro中的高速链路也逐渐被应用。总之,学无止境,当掌握一定概念、方法之后,就要开始考虑FPGA其它方面的问题了。 1.2 简述FPGA等可编程逻辑器件设计流程 系统设计电路构思,设计说明与设计划分,电路设计与输入(HDL代码、原理图),功能仿真与测试,逻辑综合,门级综合,逻辑验证与测试(综合后仿真),布局布线,时序仿真,板级验证与仿真,加载配置,在线调试。常用开发工具(Altera FPGA) HDL语言输入:Text Editor(HDL语言输入),还可以使用Ultra Edit 原理图输入:Schematic Editor IP Core输入:MegaWinzad 综合工具:Synplify/Synplify Pro,Qaustus II内嵌综合工具仿真工具:

ModelSim 实现与优化工具:Quartus II集成的实现工具有Assignment Editor(约束编辑器)、LogicLock(逻辑锁定工具)、PowerFit Fitter(布局布线器)、Timing Analyzer(时序分析器,STA分析工具)、Floorplan Editor(布局规划器)、Chip Editor(底层编辑器)、Design Space Explorer(设计空间管理器)、Design Assistant(检查设计可靠性)等。后端辅助工具:Assembler(编程文件生成工具),Programmer(下载编程工具),PowerGauge(功耗仿真器) 调试工具:SignalTap II(在线逻辑分析仪),SignalProbe(信号探针)。系统级设计环境:SOPC Builder,DSP Builder,Software Builder。 1.3 Quartus文件管理 1. 编译必需的文件:设计文件(.gdf、.bdf、EDIF输入文件、.tdf、verilog 设计文件、.vqm、.vt、VHDL设计文件、. vht)、存储器初始化文件(.mif、.rif、.hex)、配置文件(.qsf、.tcl)、工程文件(.qpf)。 2. 编译过程中生成的中间文件(.eqn文件和db目录下的所有文件.tdf,.hdb,.xml等) 3. 编译结束后生成的报告文件(.rpt、.qsmg 等) 4. 根据个人使用习惯生成的界面配置文件(.qws等) 5. 编程文件(.sof、.pof、.ttf等) 1.4 IC设计流程

计算机基础知识及答案二

----- 计算机基础知识及答案(二) 1、微型计算机采用的是冯·诺依曼体系结构,其硬件系统由运 算器、控制器、存储器、输 入设备和___C___五部分组成。 A 键盘、鼠标器。 B 显示器、打印机。 C 输出设备。 D 系统 总线。 2、在微型计算机中,其核心部件中央处理器CPU,被称之为 ___D___。 A 关键部件。 B 主要部件。C必备部件。D 微处理器 MPU(Micro Processing Unit)。 、微处理器把运算器和3集成在一块很小的硅片上,是一个独立的 部件。__A____ A 控制器。 B 内存储器。 C 输入设备。D输出设备。 4、微型计算机的基本构成有两个特点:一是采用微处理器,二

是采用___D___。 显示器和打印机作为输出设备。键盘和鼠标器作为输入设备。B A CROM和RAM作为主存储器。 总线系统。D 、根据微型计算机硬件构成的特点,可以将其硬件系统具体化为由微处理器、内存储器、5 组成。I/O 设备和__D____接口电路、 显示器、打印机。B A 键盘、鼠标器。总线系统。 D C 外围设备。 CPU、在微型计算机系统组成中,我们把微处理器6、只读存储器ROM和随机存储器RAM三 。部分统称为___D___ 主机。微机系统。 B 硬件系统。硬件核心模块。C D A 、微型计算机使用的主要逻辑部件是7。___D___ A 电子管。 B 晶体管。 C 固体组件。 D 大规模和超大规模集成电路。

8、在微型计算机中,通常把输入/ 输出设备,统称为__D____。ACPU。B 存储器。C操作系统。 D 外部设备。 9、下面是关于微型计算机总线的描述,正确的有___C___。 ----- ----- A 总线系统由系统总线、地址总线、数据总线和控制总线组成。 B 总线系统由接口总线、地 D系统总线由地址总线、数据总线和控制总线组成。C 址总线、数据总线和控制总线组成。 地址总线、数据总线和控制总线的英文缩写分别为DB、AB,CB。 10、微型计算机的系统总线是CPU与其它部件之间传___D___信息的公共通道。 送 A 输入、输出、运算。 B 输入、输出、控制。 C 程序、数据、运算。 D 数据、地址、控制。

(完整版)FPGA资深FAE的经验独白

骏龙科技Andrew —— FPGA资深FAE的经验独白 时间:2014-08-25 来源:elecfans 作者: 关键字:FPGA FAE骏龙科技 看似简单的几个问题,Andrew却回答的井井有条,小编已经没有办法有什么其他词语去形容了。本文Andrew不仅仅对FPGA入门学习流程做了详细的分享,更是对FPGA开发工作的要求分成大公司和小公司两个层面来分析。你能想象曾经从一个疏忽学业的人成为一名资深FAE的嘛? 1. 您认为想学FPGA的话,先学好什么才最重要? Andrew:我们玩FPGA的通常就是跟数字电路打交道,要想玩得转,必须先学习并掌握最最基础的数字电路和HDL硬件描述语言,当然这只是入门必备,实际上远远不够。个人拙见,要入行除了至少掌握一种FPGA的仿真及开发调试流程之外;起码还要了解一些模拟电路知识,掌握诸如电源纹波、时钟抖动、信号质量等经常需要测量的硬件参数的测试方法;起码还要掌握一种原理图和Layout设计软件,能够查看分析调试电路板上的电路模块,如电源、时钟、存储器、配置、I/O和高速收发器等模块;起码还要掌握一种单片机的开发流程,项目中难免有一些需要配置控制的需求,使用外置单片机或者内置ARM硬核或者其他软CPU来实现,简单又方便;由于本人水平有限,其他方面这里就不再赘述。 那么,针对FPGA入门学习的一般流程,简单总结一下,供朋友们参考,有经验的大牛可以绕道: 1.首先要有开发平台,把该准备的都准备好,磨刀不误砍柴工: 比如ALTERA的Quartus II软件、开发板和配置调试工具USB Blaster,以及仿真软件Modelsim SE。软件可以从网上下载,入门功能的许可的和谐方法一大堆;开发板和USB Blaster可以借,可以买,动手能力强的朋友,自己画一块也行。对于初学者,建议找一块有详细配套教程的开发板。 2. 对于新手来讲,按部就班地学习往往就是最快的学习方法: 照猫画虎尽管囫囵吞枣一知半解,但起码能把开发流程摸熟,能跑起来。刚拿到开发板,肯定是丈二和尚摸不着头脑。这个时候,建议先根据开发板的配套教程,把原理图上的各项模块功能厘清,把FPGA周围的电源、时钟、复位、配置、GPIO和连接器等的电路原理理一理分析分析。再按照配套教程中介绍的流程,把配套的测试工程跑通,在这个阶段,

个人总结FPGA设计中Verilog编程的27条经验

个人总结Verilog编程27条经验 1.强烈建议用同步设计; 2.在设计时总是记住时序问题; 3.在一个设计开始就要考虑到地电平或高电平复位、同步或异步复位、上升沿 或下降沿触发等问题,在所有模块中都要遵守它; 4.在不同的情况下用if和case,最好少用if的多层嵌套(1层或2层比较合 适,当在3层以上时,最好修改写法,因为这样不仅可以reduce area,而且可以获得好的timing); 5.在锁存一个信号或总线时要小心,对于整个design,尽量避免使用latch, 因为在DFT时很难test; 6.确信所有的信号被复位,在DFT时,所有的FlipFlop都是controllable; 7.永远不要再写入之前读取任何内部存储器(如SRAM); 8.从一个时钟到另一个不同的时钟传输数据时用数据缓冲,他工作像一个双时 钟FIFO(是异步的),可以用Async SRAM搭建Async FIFO; 9.在VHDL中二维数组可以使用,它是非常有用的。在VERILOG中他仅仅可以使 用在测试模块中,不能被综合; 10.遵守register-in register-out规则; 11.像synopsys的DC的综合工具是非常稳定的,任何bugs都不会从综合工具中 产生 12.确保FPGA版本与ASIC的版本尽可能的相似,特别是SRAM类型,若版本一致 是最理想的,但是在工作中FPGA版本一般用FPGA自带的SRAM,ASIC版本一般用厂商提供的SRAM; 13.在嵌入式存储器中使用BIST; 14.虚单元和一些修正电路是必需的; 15.一些简单的测试电路也是需要的,经常在一个芯片中有许多测试模块; 16.除非低功耗不要用门控时钟,强烈建议不要在design中使用gate clock; 17.不要依靠脚本来保证设计。但是在脚本中的一些好的约束能够起到更好的性 能(例如前向加法器); 18.如果时间充裕,通过时钟做一个多锁存器来取代用MUX; 19.不要用内部tri-state, ASIC需要总线保持器来处理内部tri-state,如IO cell; 20.在top level中作pad insertion; 21.选择pad时要小心(如上拉能力,施密特触发器,5伏耐压等),选择合适的 IO cell; 22.小心由时钟偏差引起的问题; 23.不要试着产生半周期信号; 24.如果有很多函数要修正,请一个一个地作,修正一个函数检查一个函数; 25.在一个计算等式中排列每个信号的位数是一个好习惯,即使综合工具能做; 26.不要使用HDL提供的除法器; 27.削减不必要的时钟。它会在设计和布局中引起很多麻烦,大多数FPGA有1- 4个专门的时钟通道;

PCI-Express总线基础知识

PCIe总线的基础知识 与PCI总线不同,PCIe总线使用端到端的连接方式,在一条PCIe链路的两端只能各连接一个设备,这两个设备互为是数据发送端和数据接收端。PCIe总线除了总线链路外,还具有多个层次,发送端发送数据时将通过这些层次,而接收端接收数据时也使用这些层次。PCIe 总线使用的层次结构与网络协议栈较为类似。 4.1.1 端到端的数据传递 PCIe链路使用“端到端的数据传送方式”,发送端和接收端中都含有TX(发送逻辑)和RX(接收逻辑),其结构如图4?1所示。 由上图所示,在PCIe总线的物理链路的一个数据通路(Lane)中,由两组差分信号,共4根信号线组成。其中发送端的TX部件与接收端的RX部件使用一组差分信号连接,该链路也被称为发送端的发送链路,也是接收端的接收链路;而发送端的RX部件与接收端的TX部件使用另一组差分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。一个PCIe链路可以由多个Lane组成。 高速差分信号电气规范要求其发送端串接一个电容,以进行AC耦合。该电容也被称为AC 耦合电容。PCIe链路使用差分信号进行数据传送,一个差分信号由D+和D-两根信号组成,信号接收端通过比较这两个信号的差值,判断发送端发送的是逻辑“1”还是逻辑“0”。 与单端信号相比,差分信号抗干扰的能力更强,因为差分信号在布线时要求“等长”、“等宽”、“贴近”,而且在同层。因此外部干扰噪声将被“同值”而且“同时”加载到D+和D-两根信号上,其差值在理想情况下为0,对信号的逻辑值产生的影响较小。因此差分信号可以使用更高的总线频率。 此外使用差分信号能有效抑制电磁干扰EMI(Electro Magnetic Interference)。由于差分信号D+与D-距离很近而且信号幅值相等、极性相反。这两根线与地线间耦合电磁场的幅值相等,将相互抵消,因此差分信号对外界的电磁干扰较小。当然差分信号的缺点也是显而易见的,一是差分信号使用两根信号传送一位数据;二是差分信号的布线相对严格一些。

FPGA笔试题汇总

=====================第1章FPGA基础知识=================== FPGA设计工程师努力的方向 SOPC,高速串行I/O,低功耗,可靠性,可测试性和设计验证流程的优化等方面。随着芯片工艺的提高,芯片容量、集成度都在增加,FPGA 设计也朝着高速、高度集成、低功耗、高可靠性、高可测、可验证性发展。芯片可测、可验证,正在成为复杂设计所必备的条件,尽量在上板之前查出bug,将发现bug的时间提前,这也是一些公司花大力气设计仿真平台的原因。另外随着单板功能的提高、成本的压力,低功耗也逐渐进入FPGA设计者的考虑范围,完成相同的功能下,考虑如何能够使芯片的功耗最低。高速串行IO的应用,也丰富了FPGA 的应用范围,象xilinx的v2pro中的高速链路也逐渐被应用。总之,学无止境,当掌握一定概念、方法之后,就要开始考虑FPGA其它方面的问题了。 简述FPGA等可编程逻辑器件设计流程 系统设计电路构思,设计说明与设计划分,电路设计与输入(HDL代码、原理图),功能仿真与测试,逻辑综合,门级综合,逻辑验证与测试(综合后仿真),布局布线,时序仿真,板级验证与仿真,加载配置,在线调试。常用开发工具(AlteraFPGA) HDL语言输入:TextEditor(HDL语言输入),还可以使用UltraEdit原理图输入:SchematicEditorIPCore输入:MegaWinzad 综合工具:Synplify/SynplifyPro,QaustusII内嵌综合工具仿真工具:ModelSim

实现与优化工具:QuartusII集成的实现工具有AssignmentEditor(约束编辑器)、LogicLock(逻辑锁定工具)、PowerFitFitter(布局布线器)、TimingAnalyzer(时序分析器,STA分析工具)、FloorplanEditor(布局规划器)、ChipEditor(底层编辑器)、DesignSpaceExplorer(设计空间管理器)、DesignAssistant(检查设计可靠性)等。后端辅助工具:Assembler(编程文件生成工具),Programmer(下载编程工具),PowerGauge(功耗仿真器) 调试工具:SignalTapII(在线逻辑分析仪),SignalProbe(信号探针)。系统级设计环境:SOPCBuilder,DSPBuilder,SoftwareBuilder。Quartus文件管理 1.编译必需的文件:设计文件(.gdf、.bdf、EDIF输入文件、.tdf、verilog 设计文件、.vqm、.vt、VHDL设计文件、.vht)、存储器初始化文件(.mif、.rif、.hex)、配置文件(.qsf、.tcl)、工程文件(.qpf)。 2.编译过程中生成的中间文件(.eqn文件和db目录下的所有文件.tdf,.hdb,.xml等) 3.编译结束后生成的报告文件(.rpt、.qsmg 等) 4.根据个人使用习惯生成的界面配置文件(.qws等) 5.编程文件(.sof、.pof、.ttf等) IC设计流程 写出一份设计规范,设计规范评估,选择芯片和工具,设计,(仿真,设计评估,综合,布局和布线,仿真和整体检验)检验,最终评估,系统集成与测试,产品运输。设计规则:使用自上而下的设计方法(行

相关主题
文本预览
相关文档 最新文档