时钟使能电路是同步设计的基本电路。在很多设计中,虽然内部不同模块的处理速度不同,但由于这些时钟是同源的,可以将它们转化为单一时钟处理。在ASIC中可以通过STA约束让分频始终和源时钟同相,但FPGA由于器件本身和工具的限制,分频时钟和源时钟的Skew不容易控制(使用锁相环分频是个例外),难以保证分频时钟和源时钟同相,因此推荐的方法是使用时钟使能,通过使用时钟使能可以避免时钟“满天飞”的情况,...
技术
跨时钟域处理是FPGA设计中经常遇到的问题,而如何处理好跨时钟域间的数据,可以说是每个FPGA初学者的必修课。如果是还是在校的学生,跨时钟域处理也是面试中经常常被问到的一个问题。
在本篇文章中,主要介绍3种跨时钟域处理的方法,这3种方法可以说是FPGA界最常用也最实用的方法,这三种方法包含了单bit和多bit数据的跨时钟域处理,学会这3招之后,...
原创: AI加速
引言
这篇论文来自作者韩松,是一篇经典的网络压缩论文,获得了ICLR2016最佳论文。它主要结合了剪枝,量化和霍夫曼编码的方法,将卷积神经网络的权重大大的压缩了,而且用于FPGA的部署。国内深鉴科技就是采用这一技术,在FPGA上进行深度学习网络加速。这篇文章也帮助深鉴科技在国内外获得了一定知名度。深度压缩首先通过剪枝减少了网络的连接,然后通过比特量化来降低权重量,...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module named 'xxx'或者ModuleNotFoundError: No module named 'xxx'。
导入失败问题,通常分为两种:一种是导入自己写的模块(即以 .py 为后缀的文件...
一、逻辑设计
(1)组合逻辑设计
下面是一些用Verilog进行组合逻辑设计时的一些注意事项:
①组合逻辑可以得到两种常用的RTL 级描述方式。第一种是always 模块的触发事件为电平敏感信号列表;第二种就是用assign 关键字描述的数据流赋值语句。
②always 模块的敏感表为电平敏感信号的电路可几乎可以完成对所有组合逻辑电路的建模。...
来源:AI加速微信公众号
在上一篇介绍了如何将高维度卷积核拆分成低维度小卷积核,从而降低计算量的方法。本篇介绍的也是采用了降维的思想来加速网络推理,但是数学上采用了不同的方法。而且这篇文章提出的方法可以加速深度网络,其在vgg-16上进行了实验,获得了4倍的加速效果,而在imageNet分类中top-5错误率仅有0.3%升高。
1、原理
首先我们来看神经网络中的卷积运算的形式,...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在。在关于迭代器的系列文章中(链接见文末),我至少提到了 23 种生成迭代器的方法。有些方法是专门用于生成迭代器的,还有一些方法则是为了解决别的问题而“暗中”使用到迭代器。...
作者:刘欢
公众号网络交换FPGA 推出重磅干货,手把手教你动态编辑Xilinx FPGA内部LUT内容方法。在上一篇相关内容文章《介绍一篇可以动态编辑Xilinx FPGA内LUT内容的深度好文!》中也有介绍。正如本文作者团队博士研究生刘欢所说,该内容在网络上内容很少,希望对大家研究FPGA有所帮助。
研究背景及基础知识
FPGA是实现高性能计算与网络的重要工具,...
1. 概念
通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取其中一个数字,该数字称作伪随机数,由于所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。这里的“伪”的含义是,由于该随机数是按照一定算法模拟产生的,其结果是确定的,是可见的,因此并不是真正的随机数。伪随机数的选择是从随机种子开始的,...
作者:胡永怀 ,来源:FPGA开源工作室
01、如何决定FPGA中需要什么样的时钟速率
设计中最快的时钟将确定 FPGA 必须能处理的时钟速率。最快时钟速率由设计中两个触发器之间一个信号的传输时间 P 来决定,如果 P 大于时钟周期 T,则当信号在一个触发器上改变后,在下一个逻辑级上将不会改变,直到两个时钟周期以后才改变,如图所示。
图1
02、...
视频压缩名字解释:
1、有损和无损压缩:在视频压缩中有损(Lossy )和无损(Lossless)的概念与静态图像中基本类似。无损压缩也即压缩前和解压缩后的数据完全一致。有损压缩意味着解压缩后的数据与压缩前的数据不一致。在压缩的过程中要丢失一些人眼和人耳所不敏感的图像或音频信息,而且丢失的信息不可恢复。丢失的数据率与压缩比有关,压缩比越小,丢失的数据越多,解压缩后的效果一般越差。此外,...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
在软件开发领域中,人们经常会用到这一个概念——“设计模式”(design pattern),它是一种针对软件设计的共性问题而提出的解决方案。在一本圣经级的书籍《设计模式:可复用面向对象软件的基础》(1991年,Design Patterns - Elements of Reusable Object-...
作者:安平博,Xilinx高级工程师;来源:AI加速微信公众号
引言
在CNN网络中卷积运算占据了最大的计算量,压缩卷积参数可以获得显著的硬件加速器的性能提升。在即将介绍的这篇论文中,作者就是通过张量的降维来降低卷积计算量的。作者通过CP分解将一个4D张量分解成多个低维度的张量,并且最后通过微调参数来提升网络精度。
1、原理
CNN卷积参数可以看做一个4D的张量。...
注意:本文所有内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件至cncrc@xilinx.com,未经Xilinx及著作权人许可,禁止用作商业用途。
Zynq UltraScale+ MPSoC – IPI在异构多核中的应用
本篇将讨论MPSoC中IPI的应用。首先澄清这里的IPI不是小伙伴们熟知的Vivado IPI Design Flow的IPI(...
作者:安平博,Xilinx高级工程师;来源:AI加速微信公众号
引言
学过化学的都知道蒸馏这个概念,就是利用不同组分的沸点不同,将不同组分从混合液中分离出来。知识蒸馏用于网络压缩,也具有类似的性质。具体的讲,有一个大的神经网络充当了“老师”的角色,她将书本上的知识先经过自己的转化和吸收,然后再传授给“学生”网络。学生网络模型相对较小,但是经过老师将知识提取教授,也可以实现大网络的功能...
本文主要介绍zynq启动过程,主要包括BootROM和FSBL等的执行过程。
硬件启动过程
1. 重新上电或POR复位后进行硬件启动过程
2. 扫描“启动引脚”设置,并存入只读寄存器slcr.BOOT_MODE中
3. 若使能pll,则等到pll输出时钟;若旁路pll,则直接使用ps_clk时钟
更详细硬件启动过程可以参考下图
BootROM...
之前介绍了 SelectIO 逻辑资源,本篇咱们就聊一聊与SelectIO 逻辑资源水乳交融、相得益彰的另一个概念——IO_FIFO。
1个IO_FIFO包括1个IN_FIFO 和1个OUT_FIFO,它是7系列FPGA新设计的IO专用FIFO,主要用于IOLOGIC(例如ISERDES、IDDR、OSERDES或ODDR)逻辑功能的扩展。...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
导读:切片系列文章连续写了三篇,本文是对它们做的汇总。为什么要把序列文章合并呢?在此说明一下,本文绝不是简单地将它们做了合并,主要是修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动,如此一来,本文结构的完整性与内容的质量都得到了很好的保证。
众所周知,我们可以通过索引值(...
第一部分 生成IBERT IP及运行工程生成配置文件
1. 选择IP,选择FPGA版本,protocol数量 (所有通道用一个速率的话一般只选择1个 protocol),速率,参考时钟频率,通道数量和Quad PLL(大于6G的速率时必须选择)
2. 选择需要的Quad 通道114和115,及参考时钟源,这里选择合用QUAD114的参考时钟
3....
在使用Vivado 的SDK进行在线调试时,需要将FPGA的bit文件烧写到FPGA中,但是在使用SDK烧写程序之前必须将已经固化在FPGA的程序给擦除掉。下面就是擦除的方法。
先打开Vivado,将板卡用JTAG线连接到电脑并打开open target:
然后点击下一步:
接着点击下一步:
点击下一步:
点击完成:...
今天咱们聊聊xilinx7系列FPGA配置的相关内容。总所周知FPGA上电后,其工作的逻辑代码需要从外部写入FPGA,FPGA掉电后其逻辑代码就丢失,因此FPGA可以被无限次的配置不同的逻辑代码,但FPGA需要配备外部的非易失存储器来存储其逻辑代码或者通过单片机、DSP或者其它控制器来实现FPGA上电后的逻辑代码载入。
xilinx7系列FPGA设计有专门的逻辑代码配置管脚,...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
在前两篇关于 Python 切片的文章中,我们学习了切片的基础用法、高级用法、使用误区,以及自定义对象如何实现切片用法(相关链接见文末)。本文是切片系列的第三篇,主要内容是迭代器切片。
迭代器是 Python 中独特的一种高级特性,而切片也是一种高级特性,两者相结合,会产生什么样的结果呢?
1、...
关于 FinTech
Fintech 是一个合成词,是 Financial technology 的缩写,直译过来 Fintech 的中文就是“金融科技”。其本质是指用来提高金融服务效率的科技手段,比如大数据、云计算、智能投顾、区块链、移动支付等现代技术,它们的出现大大提高了传统金融服务的速度和效率。
现场可编程门阵列 (FPGA) 对于金融机构来说是一种理想的技术,...
作者:胡永怀 ,来源:FPGA开源工作室
1、命名规则
① 首先每个文件只包含一个module,而且module名要小写,并且与文件名保持一致;
② 除parameter外,信号名全部小写,名字中的两个词之间用下划线连接,如receive_clk_b;
③ 由parameter定义的常量要求全部字母大写,自己定义的参数、类型用大写标识,...
今天咱们来聊一聊FPGA里面的XADC功能。XADC即Xilinx公司的FPGA里集成的一个ADC模块、温度传感器、电压传感器的集合。在7系列FPGA里,除了少数spartan系列的低端FPGA没有XADC外,其它所有的7系列FPGA里都有XADC模块。
XADC包含2个通道的模拟差分输入、每个通道的采样率都为1MSPS,其功能模块如下图所示:
从上图可以看出,...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
切片是 Python 中最迷人最强大最 Amazing 的语言特性(几乎没有之一),在《Python进阶:切片的误区与高级用法》中,我介绍了切片的基础用法、高级用法以及一些使用误区。这些内容都是基于原生的序列类型(如字符串、列表、元组……),那么,我们是否可以定义自己的序列类型并让它支持切片语法呢?更进一步,...
上一篇咱们说了slice,提到了其与全局时钟在一起就可以实现任意的组合逻辑和时序逻辑功能,但很多时候咱们还需要将FPGA内部的数据暂时存储,用作它用。Slice作为FPGA最基本的单元,也是能够完成数据存储的功能,但显然有些大材小用,因此xilinx公司在其FPGA内部专门集成了很多存储器模块,称作Block RAM,其犹如slice海洋当中的一颗颗明珠,专门实现数据暂存功能,...
Xilinx 及其联盟成员提供嵌入式工具与运行时环境可帮助您高效快速地将概念转化为生产。我们可为您提供使用 Xilinx Zynq® SoC 和 Zync UltraScale+ MPSoC 器件、MicroBlaze™ 处理器内核和 Arm Cortex-M1/M3 微控制器创建嵌入式系统所需的所有组件,包括开源操作系统和裸机驱动程序、多运行时和多操作系统环境、高级集成型开发环境、编译器、...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串、列表、元组…)中的单个元素,那么,如果要获取一个索引区间的元素该怎么办呢?
切片(slice)就是一种截取索引片段的技术,借助切片技术,我们可以十分灵活地处理序列类型的对象。通常来说,切片的作用就是截取序列对象,然而,...
Vitis 加速库
Vitis™ 统一软件平台包括一组广泛的、性能优化的开源库,这些库提供了即开即用的加速功能,并且对现有应用实现最小化代码更改或零更改。
常见的 Vitis 加速库(用于数学、统计、线性代数和 DSP)为各种应用提供了一系列核心功能。
特定领域 Vitis 加速库为视觉及图像处理、定量金融、数据库及数据分析以及数据压缩等工作负载提供了开箱即用的加速功能...
Vitis™ AI 是 Xilinx 的开发平台,适用于在 Xilinx 硬件平台(包括边缘设备和 Alveo 卡)上进行人工智能推断。它由优化的 IP、工具、库、模型和示例设计组成。Vitis AI 以高效易用为设计理念,可在 Xilinx FPGA 和 ACAP 上充分发挥人工智能加速的潜力。
您的开发如何与人工智能协作:
支持主流框架和最新的模型,能够执行不同的深度学习任务...
作者: OpenSLee
来源:FPGA开源工作室
在 Flow Navigator 中点击设置, 然后选择Synthesis,或者 selectFlow > Settings > Synthesis Settings。
如图1所示:
1、综合约束
在“设置”对话框的“约束”部分下,选择“默认约束设置”作为活动约束设置;包含在Xilinx设计约束(...
Vitis 统一软件平台简介
Vitis 统一软件平台包括:
全面的内核开发套件,可无缝构建加速的应用
完整的硬件加速开源库,针对 Xilinx 硬件平台进行了优化
插入特定领域的开发环境,可直接在熟悉的更高层次框架中进行开发
不断发展的硬件加速合作伙伴库和预建应用生态系统
重要组件
Vitis AI 开发环境
一个专门的开发环境,用于在...
来源:FPGA难得一P(CSDN)
芯片型号:XC7Z010-1CLG400C
Vivado版本:2016.1
点亮流水灯,共使用了三种方式:
(1)PS通过MIO点亮PS端LED
(2)PS通过EMIO点亮PL端LED
(3)PS通过AXI点亮PL端LED。
1. MIO与EMIO
首先来理清楚MIO与EMIO的关系。MIO是PS的I/O引脚,一共有54个,...
FPGA是可编程芯片,因此FPGA的设计方法包括硬件设计和软件设计两部分。硬件包括FPGA芯片电路、 存储器、输入输出接口电路以及其他设备,软件即是相应的HDL程序以及最新才流行的嵌入式C程序。
FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。
典型FPGA开发流程与注意事项
典型FPGA的开发流程一般如图所示,包括功能定义/器件选型、设计输入、...
作者:romme
1、PCI Express总线架构
如果将计算机比作人的话,CPU就是人的大脑,而PCIe就是人的神经中枢,负责内部数据信息的传输。下图是PCIe总线结构。
处理器系统首先使用一个虚拟的PCI桥分离处理器系统的存储器域与PCI总线域。FSB总线下的所有外部设备都属于PCI总线域。
RC由两个FSB-to-PCIe桥和存储器控制器组成。...
作者:romme
PCI,英文全称:PeripheralComponent Interconnect,外围组件互联,由Intel于1991年提出。随着Intel Pentium处理器诞生而迅速发展,当时几乎所有的外围设备,从硬盘控制器、声卡、显卡和网卡,都使用PCI插槽来连接到计算机的主板上。
PCI总线是并行、同步、数据地址复用总线。32bit/33MHz峰值带宽为132MB/s,...
来源:铭云石(CSDN博主)
-flatten_hierarchy
full: 综合时将原始设计打平,只保留顶层层次,执行边界优化
none: 综合时完全保留原始设计层次,不执行边界优化
rebuilt: 综合时将原始设计打平,执行边界优化,综合后将网表文件按照原始层次显示,故与原始层次相似。
当-flatten_hierarchy为none时消耗的寄存器最多,...
Verilog中提供了四种循环语句,可用于控制语句的执行次数,分别为:for,while,repeat,forever。其中,for,while,repeat是可综合的,但循环的次数需要在编译之前就确定,动态改变循环次数的语句是不可综合的。forever语句是不可综合的,主要用于产生各种仿真激励。
一、repeat语句
repeat语句执行指定循环数,如果循环计数表达式的指不确定,...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
连续几篇文章都在写 Python 字符串,这出乎我的意料了。但是,有的问题,不写不行,特别是那种灵机一动想到的问题,最后你发现,很多人根本不懂却又误以为自己懂了。那就继续刨根问底,探究个明白吧。
在上一篇文章《你真的知道Python的字符串怎么用吗?》里,我突发奇想,将字符串跟列表做了比较,...
Fanout,即扇出,指模块直接调用的下级模块的个数,如果这个数值过大的话,在FPGA直接表现为net delay较大,不利于时序收敛。因此,在写代码时应尽量避免高扇出的情况。但是,在某些特殊情况下,受到整体结构设计的需要或者无法修改代码的限制,则需要通过其它优化手段解决高扇出带来的问题。
以下就介绍三个这样的方法:
首先来看下面这个实例,...
静态时序分析是检查IC系统时序是否满足要求的主要手段。以往时序的验证依赖于仿真,采用仿真的方法,覆盖率跟所施加的激励有关,有些时序违例会被忽略。此外,仿真方法效率非常的低,会大大延长产品的开发周期。静态时序分析工具很好地解决了这两个问题。它不需要激励向量,可以报出芯片中所有的时序违例,并且速度很快。
通过静态时序分析,可以检查设计中的关键路径分布;...
在fpga工程中加入时序约束的目的:
1、给quartusii 提出时序要求;
2、quartusii 在布局布线时会尽量优先去满足给出的时序要求;
3、STA静态时序分析工具根据你提出的约束去判断时序是否满足的标准。
举个形象的比喻:就好比我要让代工厂(类比quartus ii)给我加工一批零件,要求长宽高为10x10x10cm,误差不超过1mm(类比时序约束条件)。...
作者:Buyi_Shizi
来源:CSDN
在Xilinx ISE中不同的操作都有不同的文件类型对应,例如综合、布局、布线、生成比特流等都会产生特定格式的文件,在vivado中也是一样,只不过在vivado中,文件的格式相比于ISE中更加同一。
1、 .dcp文件,在ise中每个过程都会产生特定格式的文件,例如.ncd, .pcf, .ngd等等,但是在vivado中,...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
正如《你真的知道Python的字符串是什么吗?》所写,Python 中字符串是由 Uniocde 编码的字符组成的不可变序列,它具备与其它序列共有的一些操作,例如判断元素是否存在、拼接序列、切片操作、求长度、求最值、求元素的索引位置及出现次数等等。
除此之外,它还有很多特有的操作,值得我们时常温故学习,所以...
一、两者的关系
一个程序块可以有多个initial和always过程块。每个initial和always说明语句在仿真的一开始同时立即开始执行;initial语句只执行一次,而always语句则不断重复的活动着,直到仿真结束。但always块语句后面跟着的过程快是否运行,满足则运行一次,满足则运行一次,直到程序结束。一段程序中使用的initial和always语句的次数不受限制,...
IBUFDS、IBUFGDS和OBUFDS都是差分信号缓冲器,用于不同电平接口之间的缓冲和转换。
1. IBUFG 即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUFG单元,否则在布局布线时会报错。IBUFG支持AGP,CTT,GTL,GTLP,HSTL,LVCMOS,LVDCI,LVPECL,LVTTL,PCI,PCIX,,...
M-PCIe即Mobile PCIe,主要应用对象是智能手机等嵌入式设备。PCI-SIG在PCIe Spec V3.1中引入基于MIPI M-PHY V2.0的M-PCIe。相比于标准的PCIe总线,M-PCIe ECN主要的改动在物理层,通过引入M-PHY,旨在获得更低的功耗以适应嵌入式设备的低功耗要求。
M-PCIe的主要特性如下:
M-PCIe的上层协议层、...
作者:默宸 ,来源:FPGA开源工作室
在大部分的教科书中,都会提到如何分频,包括奇数分频,偶数分频,小数分频等。
1、DDS相位累加器
(1)DDS合成流程
首先讲述DSS(直接频率合成法)的原理。
DDS是重要的频率合成方法,在波形发生器中有极其重要的应用。DDS主要由以下几部分组成:
a) 相位累加器
b) RAM数据读取
c) D/A转换器
d)...
作者:豌豆花下猫”
来源:Python猫(微信号:python_cat)”
在《详解Python拼接字符串的七种方式》这篇推文里,我提到过,字符串是程序员离不开的事情。后来,我看到了一个英文版本的说法:
There are few guarantees in life: death, taxes, and programmers needing to deal with...