技术

作者: 潘伟涛 ,来源:网络交换FPGA “要养成良好的Verilog代码风格,要先有硬件电路框图之后再写代码的习惯,设计出良好的时序,这样才能在FPGA开发或者ASIC设计中起到事半功倍的效果,否则会事倍功半。” 01、代码规范 一、概述 1、always\assign\reg\wire 2、文件名与module名要一致,一个文件一个module 3、...
本文想针对测试中一种很常见的测试场景,即参数化测试,继续聊聊关于测试的话题,并尝试将这几个测试框架串联起来,做一个横向的比对,加深理解。 1、什么是参数化测试? 对于普通测试来说,一个测试方法只需要运行一遍,而参数化测试对于一个测试方法,可能需要传入一系列参数,然后进行多次测试。 比如,我们要测试某个系统的登录功能,就可能要分别传入不同的用户名与密码,进行测试:...
注意:本文所有内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件至cncrc@xilinx.com,未经Xilinx及著作权人许可,禁止用作商业用途。 BY Hemang Divyakant Parikh 有多种类型的时序违例可归类为脉冲宽度违例。   -  最大偏差违例(本文详解之重点)   - ...
本篇文章参考Xilinx White Paper:Get Smart About Reset: Think Local, Not Global 在没看这篇文章前,回想一下平时我们常用的复位方式: ① 首先,上电后肯定是要复位一下,不然仿真时会出现没有初值的情况; ② 最好有个复位的按键,在调试时按一下复位键就可以全局复位了; ③ 也许是同步复位,也许是异步复位,...
作者:默宸 1、什么是同步逻辑和异步逻辑? 同步时序逻辑电路的特点:电路中所有的触发器都是与同一个时钟或者该时钟的衍生时钟驱动,而且当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下 一个时钟脉冲的到来,此时无论外部输入有无变化,寄存器状态都是稳定的。 异步时序逻辑电路的特点:电路中除了触发器外,还可以有其延迟元器件,电路中没有统一的时钟,...
标题:Python Tips: Dynamic function definition 作者:Philip Trauner 译者:豌豆花下猫” 来源:Python猫(微信号:python_cat)” 在 Python 中,没有可以在运行时简化函数定义的语法糖。然而,这并不意味着它就不可能,或者是难以实现。 from types import FunctionType...
作者: 邙嘉璐 ,来源:网络交换FPGA 10G以太网光口与高速串行接口的使用越来越普遍,本文拟通过一个简单的回环实验,来说明在常见的接口调试中需要注意的事项。各种Xilinx FPGA接口学习的秘诀:Example Design。欢迎探讨。 一、实验目的 为实现大容量交换机与高速率通信设备之间的高效数据传输,高速接口的理解与使用愈发显现出其重要地位。...
作者:默宸 ,来源:FPGA开源工作室 XDC介绍 XDC 是 Xilinx Design Constraints 的简写,但其基础语法来源于业界统一的约束规范SDC。XDC 在本质上就是 Tcl 语言,但其仅支持基本的 Tcl 语法如变量、列表和运算符等等,对其它复杂的循环以及文件 I/O 等语法可以通过在 Vivado 中 source 一个 Tcl 文件的方式来补充。...
概述 此项目解释了如何在FPGA上使用resizer IP来调整图像的大小。其中对比了两种图像大小调整的解决方案的运算速度,其中之一为使用Python Image Library通过软件算法实现图像大小调整,另一种使用Xilinx xfopencv library实现了在FPGA上硬件加速的图像大小调整。 初始化 1. 首先在SD卡内配置Pynq-Z2最新镜像PYNQ...
注意:本文所有内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件至cncrc@xilinx.com,未经Xilinx及著作权人许可,禁止用作商业用途。 BY Alan Schuler 基本联合 在 SystemVerilog 中,联合只是信号,可通过不同名称和纵横比来加以引用。 其工作方式为通过 typedef 来声明联合,...
对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值和非阻塞赋值。对于初学者,往往非常迷惑这两种赋值方式的用法,本章节主要介绍这两种文章的用法。其实,有时候概念稍微不清楚,Bug就会找到我们,下面一文扫清阻塞赋值和非阻塞赋值所有的障碍。 基本概念 阻塞赋值(Blocking Assignment) 阻塞赋值的基本描述格式为: [变量...
在数字电路中,出于应用的需要,我们可以使用无符号数,即包括0及整数的集合;也可以使用有符号数,即包括0和正负数的集合。在更加复杂的系统中,也许这两种类型的数,我们都会用到。 有符号数通常以2的补码形式来表示。图1列出了4位二进制表示法所对应正负数。进一步观察,我们发现两种类型数的加减法是一样的,做加法和减法就是 在数轮上按正时钟转转或按反时钟转。比方说,1001+0100,...
上一篇博文介绍了GTX的发送端,这一篇将介绍GTX的RX接收端,GTX RX接收端的结构和TX发送端类似,数据流方向相反,不过和发送端也有一些区别,GTX的RX接收端结构图如图1所示: 图1 下面将根据数据流方向介绍一下RX接收端各个电路部分的功能。 RX Equalizer (DFE and LPM):RX信号从AFE(模拟前端)进来之后,首先经过RX均衡器,...
在使用Xilinx FPGA芯片中SGMII IP核进行千兆以太网调试时,经常会遇到以太网接口收到的前导码长度不足7个字节55的情况,但这种情况确实正常现象。这就要求在设计代码处理前导码时不能将55的个数作为判据,而是只要有55转换为D5,就应该认为前导码接收成功了。不了解前导码的同学可以参看文章《你见过物理层的以太网帧长什么样子吗?》。 SGMII接口基本功能测试 SGMII接口(...
作者:OpenSLee 在《基于FPGA的多级CIC滤波器实现四倍抽取一》和《基于FPGA的多级CIC滤波器实现四倍抽取二》中我们先来了解滑动平均滤波器、微分器、积分器以及梳状滤波器原理以及它们的幅频响应。此篇我们将用verilog实现基于FPGA的多级CIC滤波器实现四倍插值。 1 CIC滤波器的基本概述 CIC(积分梳状)滤波器是无线通信中的常用模块,一般用于数字下变频(...
注意:本文所有内容皆来源于Xilinx工程师,如需转载,请写明出处作者及赛灵思论坛链接并发邮件至cncrc@xilinx.com,未经Xilinx及著作权人许可,禁止用作商业用途。 简介与视频示例设计概览 许多视频 IP 核都附带有示例设计。这些设计用于 IP 演示,并提供示例以供您在自己的设计中使用 IP 核时作为参考。 这些 IP 示例设计的介绍请参阅 IP《产品指南》第...
作者:romme 1、图像直方图概念 图像直方图用来反映一副图像的像素分布。其中,横坐标表示图像像素的灰度级,纵坐标表示每个灰度级对应的像素总数或占所有像素个数的百分比。 例如:灰度级为[0~255]的数字图像直方图,定义: h(rk)= nk 其中,rk是第k个灰度级(k = 0~255),nk是该灰度级的个数。...
在FPGA调试过程中,除了逻辑代码本身的质量之外,FPGA板子上PCB走线、接插件质量等因素的影响也非常重要。在刚上板调试不顺利的时候,不妨拿示波器看一下信号的质量,比如时钟信号的质量、差分信号的质量、高速串行信号的质量等等,这是上板调试之前首先要做的一步。没有高质量的FPGA外围管脚信号的输入,再好的代码风格和规范都无济于事。所以,调试FPGA之前一定要上示波器看一下关键信号的质量。...
每一个收发器拥有一个独立的发送端,发送端有PMA(Physical Media Attachment,物理媒介适配层)和PCS(PhysicalCoding Sublayer,物理编码子层)组成,其中PMA子层包含高速串并转换(Serdes)、预/后加重、接收均衡、时钟发生器及时钟恢复等电路。PCS子层包含8B/10B编解码、缓冲区、通道绑定和时钟修正等电路。对于GTX的发送端来说,...
作者:OpenSLee 在《基于FPGA的多级CIC滤波器实现四倍抽取一》和《基于FPGA的多级CIC滤波器实现四倍抽取二》中我们先来了解滑动平均滤波器、微分器、积分器以及梳状滤波器原理以及它们的幅频响应。在三中我们将用verilog实现基于FPGA的多级CIC滤波器实现四倍抽取。 1 CIC滤波器的基本概述 CIC(积分梳状)滤波器是无线通信中的常用模块,一般用于数字下变频...
xilinx的7系列FPGA根据不同的器件类型,集成了GTP、GTX、GTH以及GTZ四种串行高速收发器,四种收发器主要区别是支持的线速率不同,图一可以说明在7系列里面器件类型和支持的收发器类型以及最大的收发器数量。 图1 Xilinx的7系列FPGA随着集成度的提高,其高速串行收发器不再独占一个单独的参考时钟,而是以Quad来对串行高速收发器进行分组,...
忠告一 如果时序差的不多,在1NS以内,可以通过修改综合,布局布线选项来搞定,如果差的多,就得动代码。 忠告二 看下时序报告,挑一个时序最紧的路径,仔细看看是什么原因导致,先看逻辑级数是多少?是哪种电路有问题,乘法器 或者还是RAM接口数据 先弄清楚哪儿的问题 忠告三 搞时序优化的话 插入寄存器是王道 但也要看具体情况 不一定都得插寄存器,...
作者:lee 在实现多级CIC滤波器前我们先来了解滑动平均滤波器、微分器、积分器以及梳状滤波器原理。CIC滤波器在通信信号处理中有着重要的应用。 上一篇在《基于FPGA的多级CIC滤波器实现四倍抽取一》中介绍了滑动平均滤波器、微分器、积分器的原理,这篇文章来介绍梳状滤波器以及积分梳状滤波器,为up sample rate convert 和 down sample rate...
作者:romme 1 基本概念 滤波,即强调图像中的某些特征,或者去除图像中某些不需要的信息。例如:图像去燥、图像增强、边缘检测等。 滤波是一个邻域操作算子。通常,邻域选择3x3,5x5等,这些3x3或者5x5的邻域,被称作滤波器,掩模或核。利用给定像素邻域内的像素值与掩模做卷积,从而决定该像素的最终输出值。 介绍高斯滤波之前,先从均值滤波说起。 均值滤波,...
.coe格式的数据文件简介 在Vivado中,对rom进行初始化的文件是.coe文件.它的格式如下: memory_initialization_radix=10; memory_initialization_vector = 65534, 65533, ..., 60211; 其中,memory_initialization_radix=10;...
或许你是一个初入门Python的小白,完全不知道PEP是什么。又或许你是个学会了Python的熟手,见过几个PEP,却不知道这玩意背后是什么。那正好,本文将系统性地介绍一下PEP,与大家一起加深对PEP的了解。 目前,国内各类教程不可胜数,虽然或多或少会提及PEP,但笼统者多、局限于某个PEP者多,能够详细而全面地介绍PEP的文章并不多。 本文的目的是:尽量全面地介绍PEP是什么,...
约束流程 说到FPGA时序约束的流程,不同的公司可能有些不一样。反正条条大路通罗马,找到一种适合自己的就行了。从系统上来看,同步时序约束可以分为系统同步与源同步两大类。简单点来说,系统同步是指FPGA与外部器件共用外部时钟;源同步(SDR,DDR)即时钟与数据一起从上游器件发送过来的情况。在设计当中,我们遇到的绝大部分都是针对源同步的时序约束问题。所以下文讲述的主要是针对源同步的时序约束...
作者:默宸 ,来源:FPGA开源工作室 VGA全称是Video Graphics Array,即视频图形阵列,是一个使用模拟信号进行视频传输的标准。分辨率高,显示速度快。 一、传输协议 VGA接口15个引脚,除去地线,我们一般会用到5个引脚:1(RED)、2(GREEN)、3(BLUE)、13(HSYNC)、14(VSYNC)。 如图1: 图1 VGA接口引脚定义...
背景与问题   •   CPU+FPGA架构,CPU做RC、FPGA做EP;   •   FPGA逻辑(Vivado ->BD -> Address Editor)中如何设置PCIe to AXI Translation;   •   FPGA逻辑中如何设置AXI to PCIe Address...
前言 相信大家对于Python的列表和元组两种数据结构并不陌生了,如果我问大家这两种数据结构有什么区别呢?列表和元组都是数组,列表是动态的数组可以修改,元组是静态的数组不可修改。除此之外,大家还能想到其他的区别吗?接下来就让我来详细给大家介绍一下吧。 列表中高效搜索算法 存储结构 为了更好的了解列表,先来看看列表存储结构,列表其实也就是数组。当我们创建列表时,...
1、PL和PS的接口类型总共有两种: ① 功能接口:AXI、EMIO、中断、DMA流控制、时钟调试接口。 ② 配置接口:PCAP、SEU、配置状态信号和Program/Done/Init信号。这些信号连接到PL内配置模块的固定逻辑上,给PS提供对PL的控制能力。 2、AXI总线 AXI(Advanced eXtensible Interface)...
PCIe总线概述 随着现代处理器技术的发展,在互连领域中,使用高速差分总线替代并行总线是大势所趋。与单端并行信号相比,高速差分信号可以使用更高的时钟频率,从而使用更少的信号线,完成之前需要许多单端并行数据信号才能达到的总线带宽。 PCI总线使用并行总线结构,在同一条总线上的所有外部设备共享总线带宽,而PCIe总线使用了高速差分总线,并采用端到端的连接方式,...
原创: AI加速 引言 很久没有看基于FPGA的神经网络实现的文章了,因为神经网络加速设计做的久了就会发现,其实架构都差不多。大家都主要集中于去提高以下几种性能:FPGA算力,网络精度,网络模型大小。FPGA架构也差不多这几个模块:片上缓存,卷积加速模块,pool模块,load,save,指令控制模块。硬件架构上并不是太难,难的反而是软件编译这块。因为其要去适应不同的网络模型,...
在命令行中使用 Python 时,它可以接收大约 20 个选项(option),语法格式如下: python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args] 本文想要聊聊比较特殊的“-m”选项:关于它的典型用法、原理解析与发展演变的过程。 首先,让我们用“--help”来看看它的解释...
作者:默宸,来源: FPGA技术联盟 所谓普通时序系统(共同时钟系统)就是指驱动端和接收端的同步时钟信号都是由一个系统时钟发生器提供。 No.1:数据传输过程 下图是一个典型的普通时钟系统的示意图,是计算机系统的前端总线的时序结构,即处理器(CPU)和芯片组(Chipset)之间的连接。 驱动端(处理器)向接收端(芯片组)传送数据,...
背景 RAM和ROM也是类似的,由于这也是常用的IP核,所有完全有必要在这里记录一下,以后用到了实际后,再补充到实际工程中。随机存储器(RAM),它可以随时从任一指定地址读出数据,也可以随时把数据写入任何指定的存储单元,且读写的速度与存储单元在存储芯片的位置无关。RAM主要用来存放程序及程序执行过程中产生的中间数据、运算结果等。RAM按照存储单元的工作原理可以分为静态RAM和动态RAM,...
原创: AI加速 引言 硬件描述语言(verilog,systemVerilog,VHDL等)不同于软件语言(C,C++等)的一点就是,代码对应于硬件实现,不同的代码风格影响硬件的实现效果。好的代码风格能让硬件“跑得更快”,而一个坏的代码风格则给后续时序收敛造成很大负担。你可能要花费很长时间去优化时序,保证时序收敛。拆解你的代码,添加寄存器,修改走线,最后让你原来的代码“遍体鳞伤...
作者:默宸 ,来源:FPGA开源工作室 FPGA是一种多电源需求的芯片,主要有3种电源需求: 1、VCCINT: 核心工作电压,PCI Express (PCIe) 硬核IP 模块和收发器物理编码子层(PCS) 电源。一般电压都很低,目前常用的FPGA都在1.2V左右。为FPGA的内部各种逻辑供电,电流从几百毫安到几安不等,具体取决于内部逻辑的工作时钟速率以及所占用的逻辑资源。...
硬件说明 时钟信号的处理是FPGA的特色之一,因此分频器也是FPGA设计中使用频率非常高的基本设计之一。一般在FPGA中都有集成的锁相环可以实现各种时钟的分频和倍频设计,但是通过语言设计进行时钟分频是最基本的训练,在对时钟要求不高的设计时也能节省锁相环资源。在本实验中我们将实现任意整数的分频器,分频的时钟保持50%占空比。  1,偶数分频:偶数倍分频相对简单,比较容易理解。...
原创: AI加速 引言 像IIC、LED、KEY等都属于字符设备,这些设备的驱动是所有驱动类型中最为简单的。块设备是另外一种不同于字符设备的类型,这两类设备在linux的驱动结构中有很大差异。总体来说,块设备驱动比字符设备驱动复杂的多,在IO操作上也表现出很大的不同。缓冲、IO的调度、请求队列等都是和块设备驱动相关的概念。 本章从驱动小白(指本人)的切身实际出发,...
1. 应用背景 1.1 亚稳态发生原因 在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(...
原创: AI加速 引言 随着深度学习和5G的应用,对FPGA的功能要求越来越多。因此近几年FPGA大厂纷纷将自己的器件集成了更多的内核,比如赛灵思的zynq系列就集成了arm,GPU,PCIE,射频处理模块等等,用于满足各种各样的需求。出身FPGA的工程师们也必须拥抱这些变化,不仅仅要精通FPGA开发,还需要了解其他方面的知识。比如基于zynq的开发者,就需要了解arm,...
作者:豌豆花下猫” 来源:Python猫(微信号:python_cat)” 在 Python 的项目中,如何管理所用的全部依赖库呢?最主流的做法是维护一份“requirements.txt”,记录下依赖库的名字及其版本号。 那么,如何来生成这份文件呢?在上篇文章《由浅入深:Python 中如何实现自动导入缺失的库?》中,我提到了一种常规的方法: pip freeze...
基础知识 ARM体系架构的处理器中通常将低地址32字节作为中断向量表,当中断产生时会执行以下操作: ① 保存处理器当前状态,设置中断屏蔽位和各条件标志位 ② 设置当前程序状态寄存器CPSR中相应位 ③ 将lr_mode寄存器设置成返回地址 ④ 跳转到中断向量地址执行,从而跳转到相应的中断程序中执行 ⑤ 执行中断处理函数内容 ⑥ 恢复被屏蔽的中断屏蔽位 ⑦...
时钟使能电路是同步设计的基本电路。在很多设计中,虽然内部不同模块的处理速度不同,但由于这些时钟是同源的,可以将它们转化为单一时钟处理。在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、原理 首先我们来看神经网络中的卷积运算的形式,...