FPGA
文章平均质量分 86
FPGADesigner
目标成为FPGA开发设计/仿真验证的预备军~
展开
-
Vivado使用技巧(9):COE文件使用方法
COE文件在某些IP核的配置中,需要使用COE(Coefficient)文件来传递参数,正如《FPGA数字信号处理系列》中我多次使用MATLAB自动生成FIR滤波器所需的滤波系数文件。COE文件是一种ASCII文本文件,文件头部定义数据基数(Radix),可以时2、10或16。数据以向量的形式给出,每个向量以分号结尾。Vivado会解析COE文件格式,并在生成IP核时导出相关的MIF格式文...原创 2018-08-17 18:00:58 · 44150 阅读 · 1 评论 -
Vivado使用技巧(13):CSV文件定义IO Ports
定义I/O Ports信息每个完整的FPGA设计必然包含I/O Ports定义与配置环节。I/O Ports包含了FPGA内部信号、管脚、PCB之间的连接关系。常用的设计方法有两种:RTL工程:完成了RTL设计后,打开一个设计(如综合后设计)并换到I/O Planning View Layout,Vivado会自动从设计中读取I/O端口导入到I/O Ports窗口中,进行后续设置。I/...原创 2018-08-20 11:32:14 · 14226 阅读 · 0 评论 -
Vivado使用技巧(26):HDL编写技巧
在Vivado中进行HDL代码设计,不仅需要描述数字逻辑电路中的常用功能,还要考虑如何发挥Xilinx器件的架构优势。目前常用的HDL语言有三种。VHDL语言的优势有:语法规则更加严格;在HDL源代码中初始化RAM组件更容易;支持package;自定义类型;枚举类型;没有reg和wire之间的混淆。Verilog语言的优势有:与C语言类似的语法;代码结构更紧凑;支持...原创 2018-08-27 16:53:45 · 11480 阅读 · 3 评论 -
Vivado使用技巧(14):IO规划方法详解
本系列第13篇简单介绍了使用RTL工程IO布局工程两种方法定义IO Ports。在I/O Planning View Layout中(IO布局工程中是Default Layout),显示了FPGA器件资源、封装管脚、I/O Ports等详细信息。设计者借助这些信息来完成I/O规划。创建单端/差分I/O PortsRTL工程会直接从RTL设计中获取I/O端口信息;IO布局工程可以从C...原创 2018-08-20 16:57:19 · 40262 阅读 · 4 评论 -
Vivado使用技巧(27):RAM编写技巧
Vivado综合可以理解多种多样的RAM编写方式,将其映射到分布式RAM或块RAM中。两种实现方法在向RAM写入数据时都是采取同步方式,区别在于从RAM读取数据时,分布式RAM采用异步方式,块RAM采用同步方式。使用RAM_STYLE属性可以强制规定使用哪种方法实现RAM。Xilinx FPGA的内存接口具有如下特性:支持任意大小的深度和数据宽度(综合时会使用一个或多个RAM原语实现);...原创 2018-08-27 19:00:31 · 19013 阅读 · 3 评论 -
Vivado使用技巧(15):DRC设计规则检查
在I/O和时钟规划之后,需要验证设计以确保其满足设计需求。Vivado提供了两种验证途径:DRCs用来检查设计违反规则情况;SSN分析用来估计转换噪声等级。本文将介绍DRCs,本系列第16篇介绍了SSN分析。运行DRCsDRCs可以说是管脚规划中最严苛的一个步骤,DRCs会使用一套设计检查项(通常称作rule deck),来检查当前设计是否违反这套规则。本文将以运行DRCs检查I/...原创 2018-08-21 00:04:53 · 20168 阅读 · 1 评论 -
Vivado使用技巧(16):SSN转换噪声分析
SSN概述SSN(Simultaneously Switching Noise)分析可以估计I/O Bank中管脚在同时转换输出状态时对其它输出端口造成的干扰。这是一个常见的问题,许多总线有大量的位宽,当总线数据有多位同时变化时,很容易在其它I/O上产生噪声。比如数字电路设计中倾向于使用格雷码编码,正是因为两个相邻的数字用格雷码表示时只有1bit的差异,使得同时转换噪声最小。SSN分析会将...原创 2018-08-21 12:32:53 · 5167 阅读 · 0 评论 -
Vivado使用技巧(17):创建IBIS模型
IBIS模型概述IBIS是一种器件模型标准,允许使用行为模型进行开发,这些行为模型描述了器件内部互联的信号。IBIS模型保留专用的电路信息,不像SPICE这种结构化模型,IBIS模型是基于测量或电路仿真得到的 V/I曲线数据。每个IOB标准都有IBIS模型,器件的所有I/O标准的IBIS模型组合在一起便是IBIS文件。IBIS文件还包含器件中所使用的管脚列表,这些管脚连接到配置为支持特定I...原创 2018-08-21 14:11:38 · 6904 阅读 · 0 评论 -
Vivado使用技巧(21):仿真中的Debug特性
源代码级别调试Vivado Simulator提供了在仿真过程中debug设计的特性,通过为源代码添加一些可控制的执行条件来检查出问题的地方。总的来说有三种调试方法:1.使用Step逐行调试Step命令一次只执行HDL代码中的一行,从而验证和调试设计。运行仿真后,点击Run->Step或工具栏中的Step可执行该命令。Restart可以将时间复位到TestBench的开始。当...原创 2018-08-24 15:17:31 · 10706 阅读 · 0 评论 -
Testbench编写指南(1)基本组成与示例
对于小型设计来说,最好的测试方式便是使用TestBench和HDL仿真器来验证其正确性。一般TestBench需要包含这些部分:实例化待测试设计、使用测试向量激励设计、将结果输出到终端或波形窗口便于可视化观察、比较实际结果和预期结果。下面是一个标准的HDL验证流程: TestBench可以用VHDL或Verilog、SystemVerilog编写,本文以Verilog HDL为例。FPGA...原创 2018-08-24 17:06:43 · 23746 阅读 · 2 评论 -
Vivado使用技巧(18):仿真功能概述
仿真功能概述仿真FPGA开发中常用的功能,通过给设计注入激励和观察输出结果,验证设计的功能性。Vivado设计套件支持如下仿真工具:Vivado Simulator、Questa、ModelSim、IES、VCS、Rivera-PRO和Active-HDl。Vivado的仿真流程如下图所示: 仿真可以在设计阶段的不同时间点进行,主要包括如下三个阶段:RTL级行为仿真:在综合和...原创 2018-08-21 19:34:22 · 14627 阅读 · 2 评论 -
Testbench编写指南(4)自动化验证方法
自动化验证testbench结果可以减少人工检查的时间和可能犯的失误,尤其对于比较大的设计。目前普遍使用三种自动化testbench验证方法:数据库比较:首先创建一个包含预期输出的数据库文件(称作golden vector文件),然后捕获仿真输出与该文件中的参考向量作比较。但是由于没有提供从输出到输入文件的指针,该方法的缺点是难以追踪导致不正确输出的错误源。波形比较:将testbench输...原创 2018-08-24 18:04:08 · 5361 阅读 · 4 评论 -
Vivado使用技巧(19):使用Vivado Simulator
Vivado Simulator基本操作Vivado Simulator是一款硬件描述语言事件驱动的仿真器,支持功能仿真和时序仿真,支持VHDL、Verilog、SystemVerilog和混合语言仿真。点击运行仿真后,工具栏中显示了控制仿真过程的常用功能按钮: 这些控制功能依次是:Restart:从0时刻开始重新运行仿真;Run All:运行仿真一直到处理完所有event或遇...原创 2018-08-21 23:57:46 · 20294 阅读 · 3 评论 -
Vivado使用技巧(22):综合策略与设置的选择
综合(Synthesis)是指将RTL设计转换为门级描述。Vivado开发套件中的综合工具是一款时序驱动型、专为内存使用率和性能优化的综合工具,支持System Verilog 2012、Verilog 2005、VHDL 2008、混合语言中的可综合子集,以及XDC设计约束文件(基于工业标准的SDC文件),此外还支持RTL属性来控制综合细节。综合设置选项在Flow Navigat...原创 2018-08-25 16:13:48 · 33488 阅读 · 0 评论 -
Vivado使用技巧(23):综合运行与OOC
创建综合运行一个“运行(run)”是指定义和配置设计在综合过程中的各方面,包括:使用 的Xilinx器件、应用的约束集、启动单个或多个综合的选项、控制综合引擎结果的选项。点击Flow菜单中的Create Funs,或在Design Runs窗口中: 点击工具栏中的+,即可打开新建运行窗口: 选择Synthesis,点击Next,打开配置综合运行的窗口: 设置名称、约束集...原创 2018-08-25 19:52:39 · 14307 阅读 · 0 评论 -
Vivado使用技巧(28):支持的Verilog语法
复杂的电路设计通常使用自顶向下的设计方法,设计过程中的不同阶段需要不同的设计规格。比如架构设计阶段,需要模块框图或算法状态机(ASM)图表这方面的设计说明。一个框图或算法的实现与寄存器(reg)和连线(wire)息息相关。Verilog便具有将ASM图表和电路框图用计算机语言表达的能力,本文将讲述Vivado综合支持的Verilog硬件描述语言。Verilog提供了行为化和结构化两方面的语言结...原创 2018-09-05 16:06:53 · 31812 阅读 · 3 评论 -
FPGA数字信号处理(26)加扰器与解扰器设计
加扰与解扰设计数字通信系统时,必须考虑发送信息的信号特征,这些特征会影响到设计性能。总的来说,发送的信息应注意:(1).避免出现长串的0或1,否则对于从0、1交换点处提取位同步信息的系统,容易错判导致失去同步;(2).避免传输信号具有周期性,否则在多路传输的通信系统中容易造成串扰。信道编码中的加扰器和解扰器便是完成上述功能,将发送信号处理成没有长传的0或1,并且数字信号最小周期足够长。对信...原创 2018-09-17 14:44:40 · 12468 阅读 · 8 评论 -
FPGA数字信号处理(27)卷积编码器与Viterbi译码器设计
卷积编码与译码信号在信道间传输主要会受到三个方面的影响:信道本身对信号产生衰落,这是由于信道本身的频率响应特性就不理想,对信号造成破坏;信道中的各种噪声,叠加在信号上改变了信号的幅度、相位、频率,造成解调错误;多径效应,信号在传输过程中的反射、折射、沿不同路径传播造成的叠加效应。通常会采用信道编码,在发送端插入一些冗余码元,接收端利用这些冗余码元检测并纠正信号在传输过程中产生的错误。...原创 2018-09-18 12:38:46 · 10706 阅读 · 26 评论 -
Vivado使用技巧(29):约束功能概述
设计约束概述设计约束就是定义编译过程中必须满足的需求,只有这样才能保证在板子上工作时功能正确。但不是全部约束在所有过程中都会使用,比如物理约束只用在布局和布线过程中。Vivado工具的综合和实现算法时时序驱动型的,因此必须创建合适的时序约束。我们必须根据应用需求选择合理的约束,过度约束或约束不足都会造成问题。老版的ISE开发工具使用UCF(User Constraints File)文件进行约...原创 2018-09-20 19:44:04 · 24226 阅读 · 0 评论 -
Vivado使用技巧(30):使用时序约束向导
时序约束向导打开综合设计或实现设计后,在Flow Navigator中点击Open Synthesized/Implemented Design目录下的Constraints Wizard可以打开时序约束向导(会要求选择一个target约束文件)。弹出如下窗口:利用该向导可以快速地完成时序约束。时序约束向导会分析网表、时钟网络的连接和已存在的时序约束,给出一些缺少的时序约束的建议。时序约束向...原创 2018-09-21 23:22:39 · 13435 阅读 · 0 评论 -
Vivado使用技巧(31):时钟的约束方法
时钟的基础知识数字设计中,“时钟”表示在寄存器间可靠地传输数据所需的参考时间。Vivado的时序引擎通过时钟特征来计算时序路径需求,通过计算裕量(Slack)的方法报告设计时序空余。时钟必须有合适的定义,包含如下特性:定义时钟树的驱动管脚或端口,通常称作根或源点。通过周期和波形属性来描述时钟边沿。周期(period)以ns为单位进行设定,与波形重复率相关。波形(waveform)以列表...原创 2018-09-27 18:50:58 · 51372 阅读 · 2 评论 -
Vivado使用技巧(32):IO延迟的约束方法
上一篇讲述了对时钟的约束方法,时钟不仅对设计很重要,约束情况也很多、很复杂,需要一定的经验。本文将讲述另一种重要的约束:I/O延迟,但与时钟约束相比就简单的多,本文篇幅也相对较少。为了对设计外部的时序情况进行精确建模,设计者必须设定输入和输出端口的时序信息。Vivado只能识别出FPGA器件范围内的时序,因此必须使用set_input_delay和set_output_delay命令来设置FPG...原创 2018-09-27 21:41:14 · 10263 阅读 · 0 评论 -
Vivado使用技巧(33):时序异常
时序异常英文名为Timing Exception,可以认为是时序例外或时序异常(本系列文章 的称法),“例外”或“异常”是指这部分时序的分析与大多数常规时序分析不同。下表给出了Vivado支持的时序异常命令及功能:命令功能set_multicycle_path设置路径上从起点到终点传递数据需要的时钟周期数set_false_path指示设计中的某条逻辑路径不进行时...原创 2018-09-29 15:21:03 · 13798 阅读 · 0 评论 -
Vivado使用技巧(34):路径分割现象
上文提到,进行最小/最大延迟约束时,set_max_delay和set_min_delay命令要设置-from和-to选项。但是如果起点和终点设置的不合理(具体见第33篇),便会导致出现路径分割(Path Segmentation)。非法的起点下面举一个例子说明,如果-from设置了一个非法的起点,时序引擎会阻止经过该节点的时序的传递,从而这个“非法的”起点变得“合法”。如下图:FD1单...原创 2018-09-29 17:04:19 · 3614 阅读 · 0 评论 -
FPGA基础设计(6)使用DAC的Interleaved模式
本文介绍DAC芯片的Interleaved模式的使用,或者叫交错模式。硬件设计与接口协议Interleaved模式即用一组数字接口控制两个模拟信号输出,比如ADI公司的AD9763/AD9765/AD9767系列,具有双路10/12/14比特输出,最高时钟125M,可以采用dual-port模式或Interleaved模式。双口模式的用法和本系列第5篇中的介绍基本相同,本文着重讲述一下交错模...原创 2018-10-25 23:41:56 · 3963 阅读 · 4 评论 -
FPGA基础设计(7)双口RAM乒乓操作
双口RAM经常用于跨时钟域处理,且比FIFO灵活性更大。本文给出一个具体的设计实例,让大家理解双口RAM在跨时钟域处理中乒乓操作的用法。输入数据速率20MHz,输出数据速率100Mhz,使用双口RAM完成跨时钟域处理。一次传输的数据为1024个,假设数据位宽为8bit,使用两片宽度为8、深度为1024的双口RAM完成数据传输。使用乒乓操作提高读写效率,写RAM1时,读取RAM2中的数据;写RA...原创 2018-11-03 19:16:47 · 15691 阅读 · 13 评论 -
学会Zynq(1)搭建Zynq-7000 AP SoC处理器
有三四个月没有记录blog了,这段时间也参加了一些比赛,以及上课。Vivado的资料还没有记录完,不过还是先记录下这段日子用的比较多的Zynq, 也为接下来的项目做做准备。学习主要还是看官方资料,还有黑金米联的一些教程(虽然一些细节、概念有错误,但能让入门更快也是好事)。FPGA嵌入式开发概述使用Xilinx FPGA进行嵌入式设计有两种解决方案:(1).使用MicroBlaze软核处理器进...原创 2019-03-10 15:41:02 · 10189 阅读 · 3 评论 -
学会Zynq(2)Zynq-7000处理器的配置详解
上篇中介绍了Xilinx FPGA嵌入式开发的基本概念和软件特性,并以Hello World为例给出了一个操作流程,熟悉该流程相当重要。上一篇中只是简单说明了每一步应该执行哪些操作,本文将详细介绍每一步的具体含义和涉及到的相关概念。Zynq-7000配置添加好ZYNQ7 Processing System IP核后,需要对其进行配置,双击弹出如下窗口。绿色部分表示ZYNQ PS部分中可配置的...原创 2019-03-10 16:10:42 · 19999 阅读 · 0 评论 -
学会Zynq(3)Zynq的软件开发基础知识
上一篇简单解释了Zynq配置的相关概念,本文将对Zynq-7000的软件开发进行简单介绍。如果设计者已经对ARM的开发方法很熟悉,上手Zynq的软件开发也会更快,相关概念理解起来也更快。平台架构选择Zynq-7000内部有双核ARM Cortex-A9处理器,设计者在开始嵌入式开发前,要先考虑使用非对称多处理(AMP)还是对称多处理(SMP)。还要考虑是否使用操作系统、或使用哪个操作系统。...原创 2019-03-10 16:52:03 · 7234 阅读 · 0 评论 -
学会Zynq(4)GPIO中MIO的使用方法
本文将介绍PS部分GPIO中MIO的使用。本文先通过一个控制LED闪烁的实例体会MIO的用法,学习GPIO相关结构体与API函数的使用;然后再系统讲解GPIO的相关概念。Zynq设计与代码详解与第1篇相似,建立一个工程,配置好Zynq的时钟和DDR后,需要在MIO Configuration->I/O Peripherals->GPIO中选中GPIO MIO。一般设计中配置的UA...原创 2019-03-10 17:26:01 · 8801 阅读 · 5 评论 -
学会Zynq(9)定时器使用示例(PPI)
定时器资源每个Cortex-A9处理器都有私有的32位定时器和32位看门狗定时器。这两种定时器都是32位的计数器,计数到0时产生中断;带有8位的预分频器,能够更好地控制中断周期;可配置为单次重载或自动重载模式;可配置初始值。它们的工作时钟固定为CPU频率的1/2(CPU_3x2x)。两个CPU同时共享一个64位的全局定时器GT,这是一个递增的计数器,带有自动递增功能。全局定时器与私有定时器在内...原创 2019-03-19 22:30:09 · 6998 阅读 · 2 评论 -
学会Zynq(5)GPIO中EMIO的使用方法
之前的Hello World和MIO使用都算是纯PS部分,也就是把Zynq单纯地当作ARM使用。很多人都是因为FPGA+ARM架构才使用的Zynq,有两个关键问题容易引起初学者的兴趣:(1).如何用PS控制PL;(2).如何完成PS与PL之间的数据通信。本系列会介绍解决这两个问题的各种方法。EMIO就是PS控制PL资源的简单例子。EMIO就是可扩展的MIO,当与PS直接相连的MIO不够用时,可以...原创 2019-03-11 16:20:40 · 16201 阅读 · 1 评论 -
学会Zynq(6)固化程序到SD卡或QSPI Flash
SDK调试程序时都是通过JTAG,将PL的bit流文件和应用程序的ELF文件下载到Zynq中,运行查看效果。调试验证功能后需要将程序固化到板子上,使板子上电后可以从存储单元中加载程序,而无需SDK的调试环境。Zynq支持多种存储设备,本文将介绍如何将程序固化到常用的SD卡和QSPI Flash中。配置SD卡首先要查看开发板原理图中SD卡与MIO的连接关系。以火龙果Red Pitaya开发板为...原创 2019-03-11 16:54:47 · 11551 阅读 · 1 评论 -
学会Zynq(10)lwIP简介
从本篇开始,将花大量篇幅介绍Zynq在裸机环境下以太网的使用。裸机时最方便的就是使用SDK已经集成了的lwIP 1.4.1库,我们将先了解lwIP的相关知识,然后再以实例的方式学习TCP、UDP的程序设计方法。研究背景在过去几年里,将计算机和计算机支持的设备连接到无线网络的需求逐渐增长。计算机与日常设备之间的集成度越来越高,价格也在下降。同时,蓝牙、IEEE 802.11b/g(俗称“wif...原创 2019-03-20 14:30:50 · 11314 阅读 · 0 评论 -
学会Zynq(11)RAW API的TCP和UDP编程
RAW APIRAW API(有时称作native API)是一种事件驱动型的API,在没有操作系统的情况下使用。核心栈通过这个API完成不同协议间的交互。使用lwIP栈的应用程序通过一组回调函数实现。当某些“事件”发生时,会lwIP核会调用这些回调函数,比如传入数据、传出数据、错误通知、连接关闭等。应用程序中的回调函数执行对这些事件的处理操作。RAW API支持多种协议,下面介绍如何对TC...原创 2019-03-20 14:57:38 · 11521 阅读 · 5 评论 -
学会Zynq(12)lwIP 1.4.1库的配置与使用
lwIP概述lwIP是一个用于嵌入式系统的开源TCP/IP协议集,是一套可以独立运行的栈,无需依赖操作系统,但也可以与操作系统同时使用。lwIP提供了两套API(术语为A05PI),供用户选择:RAW API:直接访问核心的lwIP栈;Socket API:通过BSD socket风格的接口访问lwIP栈。基于lwIP 1.4.1库版本,SDK提供了相应适配的库,称作lwip 141_...原创 2019-03-20 15:17:25 · 24928 阅读 · 10 评论 -
学会Zynq(13)lwIP官方应用程序示例
XAPP1026中记录一些lwIP的应用程序示例和性能测试情况,不过提供的示例工程都是在几个Xilinx的官方板子中跑的。可能很多学生没有机会碰到这些板子。。。另外这份应用笔记使用的SDK 2014.3版本也比较老,那个版本lwip还没有直接集成到SDK中。本文将这份笔记其中比较有用的代码编写思路和性能测试结果部分摘取出来。1. 硬件系统这个表是几个开发板上搭建的硬件系统。纯FPGA使用的...原创 2019-03-20 15:30:40 · 16461 阅读 · 2 评论 -
学会Zynq(22)XADC测量片内温度与电源电压
本文将介绍如何在PS中调用Zynq内部的XADC模块进行片内温度和电源电压测量。先了解XADC的相关知识,再通过实例体会XADC的用法,学习XADC API函数的使用。XADC介绍XADC中文全称应该是“Xilinx模拟混合信号模块”,是FPGA中的一个硬核。在7系列FPGA中,XADC提供了DRP和JTAG接口,用于访问XADC的状态和控制寄存器。Zynq中添加了第三个接口,称作PS-XA...原创 2019-03-25 15:22:42 · 13700 阅读 · 1 评论 -
学会Zynq(7)中断系统简介
本文简单介绍Zynq的中断系统和中断控制器。Zynq的PS部分基于ARM架构,使用了两个Cortex-A9处理器(CPU)以及GIC pl390中断控制器(单核Zynq则只有一个GIC)。GIC是通用中断控制器(Generic Interrupt Controller)的简称。双核的中断系统框图如下:Zynq的中断结构与CPU密切相关,可以接受来自I/O外设和PL部分的中断。从上图我们可以看到...原创 2019-03-18 17:52:24 · 5648 阅读 · 2 评论 -
学会Zynq(24)UART控制器简介
本文简单介绍Zynq中的UART控制器,重点放在编程所需了解的知识。很多功能使用库函数可以快速配置,因此没必要仔细了解每个寄存器是干什么的这种问题,应把精力放在UART的特性、工作原理和可实现功能方面。UART控制器Zynq中的UART控制器是一个全双工异步收发器,支持各种可编程的波特率和I/O信号格式,能够自动生成奇偶校验,支持多主检测模式。UART操作由配置和模式寄存器控制。采用独立的...原创 2019-03-25 20:55:19 · 5308 阅读 · 1 评论