
FPGA
文章平均质量分 68
yundanfengqing_nuc
打铁还需自身强!
展开
-
看门狗计时器
看门狗计时器看门狗(看门狗,又叫watchdogtimer,是一个定时器电路,一般有一个输入,叫喂狗(kickingthedogorservicethedog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT定时超过,就会给出一个复位信 号到MCU,使MCU复位.防止MCU死机.看门狗的作用就是防止程序发生死循环,或者说程序跑飞。原创 2024-01-16 16:39:00 · 1032 阅读 · 0 评论 -
Vivado时序约束中Tcl命令的对象及属性
Tcl命令转载 2022-08-02 10:03:00 · 2588 阅读 · 0 评论 -
FPGA的虚拟时钟如何使用?
虚拟时钟转载 2022-08-02 09:41:02 · 396 阅读 · 0 评论 -
FPGA中BEL Site Tile FSR SLR分别指什么?
FPGA中BEL Site Tile FSR SLR分别指什么?转载 2022-08-01 18:01:47 · 954 阅读 · 0 评论 -
FPGA时钟篇(三) MRCC和SRCC的区别
MRCC和SRCC的区别转载 2022-08-01 16:52:15 · 7693 阅读 · 0 评论 -
FPGA时钟篇(一) 7系列的时钟结构
7系列的时钟结构转载 2022-08-01 16:36:58 · 1657 阅读 · 0 评论 -
CRC16常见几个标准的算法及C语言实现
CRC16常见的标准有以下几种,被用在各个规范中,其算法原理基本一致,就是在数据的输入和输出有所差异,下边把这些标准的差异列出,并给出C语言的算法实现。CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结果与0x0000异或CRC16_CCITT_FALSE:多项式x16+x12+x5+1(0x1021),初始值0xFFFF,低位在后,高位在前,结果与0x0000异或CRC16_XMODEM:多项式x16+x12+x5+1(0x102转载 2021-10-29 14:39:04 · 3225 阅读 · 0 评论 -
CRC16的verilog生成
(1)首先打开网址:CRC Generation Tool - easics(2)然后敲入对应的crc多项式,这里是X^16+X^15+X^2+X+1,如上图所示。(3)选择数据位宽,这里设置为64(4)生成代码的语言,这里选择Verilog(5)下载生成的verilog代码。(6)生成的Verilog代码module CRC16_D64; // polynomial: x^16 + x^15 + x^2 + x^1 + 1 // data wi...原创 2021-10-28 15:29:29 · 4571 阅读 · 5 评论 -
Verilog随机数生成$random
每次调用系统函数$random(seed),都可以产生一个新的32位随机数。如果不设置seed,每次取得的随机数是相同的。也就是说,$random所产生的随机数,其实对于系统而言,不过是提前预设好的32位数据数组而已。我们使用$random产生的随机数,在seed一致的情况下(如果不设置seed就是一致),都是调用了系统中预设的同一套数据数组,因此它们的值总是一致的。...转载 2021-10-27 18:00:48 · 2058 阅读 · 0 评论 -
notepad++打开一个某个工程目录
VS工程文件首先Notepad++是打开解析不了的,但是我们可以将整个工程目录加载进来,加载的步骤主要是以下的过程: 1、点击菜单:视图–>工程–>工程面板1/工程面板2/工程面板3,有三个工程面板可用,如下图: 2、打开一个工程面板后出现工作区如下:3、右击“工作区”,选择“增加新工程”输入新的工程名,比如“ofbiz”,接着右击新的工程名,选择“从目录添加文件”...转载 2021-10-27 17:54:22 · 1042 阅读 · 0 评论 -
介绍SLICEM里的LUT如何形成RAM资源
LUT的原理,实现逻辑函数时,相当于一个ROM将结果预存,然后把通过输入信号当作地址对预存的结果进行寻址。因此同样借助LUT加几个端口,就可以实现RAM。SLICEM里面的LUT就可以用来实现RAM资源。二. 原理介绍SLICEM里面的LUT跟SLICEL里面的LUT相比多了DI2,WA[6:1],CLK,WE这几个端口。做RAM用的时候,其中DI1,DI2是写数据输入端口,O5,O6同样是数据输出端口,支持一次性两bit或者单bit读写。A[6:1]为读地址,WA[6:1]为写地址,WE为写使用,转载 2021-10-27 17:47:12 · 1202 阅读 · 1 评论 -
Vivado中两种RTL原理图的查看方法和区别
当你完成了一个设计之后,查看原理图,可以了解工具如何将你的代码转换成了电路。方便你铆足了劲死磕一个小小的加法器来优化 200ps 的关键路径。当你要查看一个开源设计,查看原理图,可以快速掌握项目设计的架构图。方便你用轮子或者,恩,造个更好的。那么如何在 Vivado 中查看原理图?答案是通过 Vivado 左侧的 Flow 栏。在 Flow 栏中可以查看综合或者布局布线后的原理图。也可以在完成 RTL 编码后查看 RTL 分析(RTL ANALYSIS)的原理图。在综合后..转载 2021-10-27 17:45:45 · 12847 阅读 · 1 评论 -
Xilinx FPGA普通IO能不能直接接入PLL作为时钟输入
普通IO不能直接作PLL的时钟输入,专用时钟管脚可以;普通IO可以通过BUFG再连到PLL的时钟输入上,但要修改PLL的设置 input clk的选项中要选择"No Buffer";具体内部布局分配可以通过 Xilinx的FPGA Editor来查看,ZYNQ的时钟管理也和之前的片子略有不同,相关文档 <ug472_7Series_Clocking.pdf>[Demo1]// demo1 two bufg connectmodule iobuf( input c转载 2021-09-07 18:06:55 · 2087 阅读 · 0 评论 -
(转)xilinx 高速收发器Serdes深入研究-Comma码
一、为什么要用Serdes传统的源同步传输,时钟和数据分离。在速率比较低时(<1000M),没有问题。在速率越来越高时,这样会有问题由于传输线的时延不一致和抖动存在,接收端不能正确的采样数据,对不准眼图中点。然后就想到了从数据里面恢复出时钟去采样数据,即CDR这样就不存在延迟不一致的情况,有轻微的抖动也不会影响采样(恢复的时钟会随着数据一起抖动)。二 、为什么要用8b10b,64b66b?1 提供足够的跳变来恢复时钟这样还有问题,收发两端必须共地,但往往很难实现。...转载 2021-07-08 13:57:16 · 1616 阅读 · 0 评论 -
xpm_cdc_async_rst
xpm_cdc_async_rst #( //Common module parameters .DEST_SYNC_FF (4), // integer; range: 2-10 .INIT_SYNC_FF (0), // integer; 0=disable simulation init values, 1=enable simulation init values .RST_ACTIVE_HIGH (1)...原创 2020-12-03 10:26:07 · 1406 阅读 · 0 评论 -
Vivado中备份设计好的block design
前言为了不每次都重新生成block design,避免重复劳动。可以使用直接复制原始工程的design bd块或者使用tcl脚本生成bd。流程复制原始工程的bd文件夹。(1)对于原工程生成好的bd文件夹位于如下,复制design_1文件夹。(2)把design_1文件夹放置在新工程的工程文件夹的上一层(或者其他位置),不可放在同一层级(有尾缀为xpr的文件夹),否则导入报错。如上图所示,放在了bd_backup文件夹中,dev为新工程所在文件夹。(3)像添加源文件一..原创 2020-12-02 17:41:21 · 4780 阅读 · 0 评论 -
Big Endian 和 Little Endian 详解
一、Endian的起源在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双方交流的信息单元(比特、字节、字、双字等等)应该以什么样的顺序进行传送。如果不达成一致的规则,通信双方将无法进行正确的编/译码从而导致通信失败。1980年,Danny Cohen在其著名的论文”On Holy Wars and a Plea for Peace”中为了平息一场关于在消息中字节该以什么样的顺序进行传送的争论而引用了该词。该文中,Cohen非常形象贴切地把支转载 2020-12-02 11:08:10 · 195 阅读 · 0 评论 -
Xilinx差分信号管脚约束示例
转载 2020-11-19 17:51:35 · 4005 阅读 · 0 评论 -
BD文件validata design时候报错:Bus Interface property FREQ_HZ does not match
进行BD文件validata design时候,报错:[BD 41-237] Bus Interface property FREQ_HZ does not match between /DMA_AXIS_MM2S(100000000) and /axi_dma_0/M_AXIS_MM2S(200000000)如图所示,自己定义了一个扩展接口DMA_AXIS_MM2S,该扩展接口默认的频率是100M,但是从PS端的FCLK_CLK0出来的时钟是200M的,所以两个频率不匹配导致的。解决:右键扩展接转载 2020-11-11 17:56:02 · 1659 阅读 · 0 评论 -
PG164-Processor System Reset Module v5.0 IP核学习
一、IP核端口说明输入端口:1、slowest_sync_clk:连接到系统中最慢的时钟2、ext_reset_in:FPGA外部输入的复位信号3、aux_reset_in:辅助复位信号,配置如ext_reset_in4、mb_debug_sys_rst:microblaze核debug的reset输入信号5、dcm_locked:PLL的locked信号,如果系统有PLL则连接其locked信号到这个端口,如果无,此端口置1或者悬空。输出端口:1、mb_reset:输出转载 2020-11-11 15:23:56 · 3814 阅读 · 2 评论 -
VIO你用对了吗
VIO(Virtual Input/Output)有两个主要功能监测设计中的内部信号;驱动设计中的内部信号。既然是Virtual(虚拟的),就表明这个输入或输出并不是真实存在于FPGA设计中。下图显示了VIO的输入、输出管脚。其中,输入、输出管脚最大可支持到256位。如果需要监测设计中的某个信号,则需要将该信号连接到VIO的输入端;如果需要驱动设计中的某个信号,则需要将该信号与VIO的输出端相连。例如,需要监测模块m1的输出信号done,则将done信号连接到VIO的输入端p..转载 2020-11-06 11:37:36 · 3180 阅读 · 0 评论 -
Xilinx中oserdes的原语及IP的使用
转自:https://blog.csdn.net/zhangningning1996/article/details/104458186vivado中oserdes的原语及IP的使用应用场景 serdes原语的应用 serdes原语的使用示例 serdes原语的测试代码 serdes原语的仿真结果 select_io的使用 select_io的测试代码 测试结果 总结应用场景在高速应用中,我们经常性的听说serdes的应用,确实serdes是一项重要的应用。serdes又.原创 2020-11-05 15:06:47 · 2654 阅读 · 0 评论 -
Vivado AXI Datamover IP核
AXI Datamover 核包含两个子模块:MM2S和S2MM。原创 2020-11-04 16:35:21 · 3413 阅读 · 0 评论 -
科普CFA(Color Filter Array,色彩滤波阵列)
1 科普CFA(Color Filter Array,色彩滤波阵列)借用知乎上的文章(https://zhuanlan.zhihu.com/p/21298545)科普一下CFA。CFA(Color Filter Array,色彩滤波阵列)也就是我们常说的CMOS色彩滤镜,应该说是一个挺重要,厂商在宣传的时候也会偶尔提及一下的东西。但是对于这个东西如何起作用,不同的排列又有什么样的优缺点,可能很多人就不太清楚了。今天我们就来讨论一下这个问题。本次讨论基于相机中用到的几种传感器CFA排列方式,电影机当中转载 2020-11-03 14:08:29 · 10174 阅读 · 3 评论 -
Xilinx_ISE 14.7在Win10下选择“open project”崩溃闪退的问题
ISE 14.7 套件在 Win10 上的所有不兼容问题,都是基于 13 年 10 月发布的版本,当时甚至还没有 Win10.现在可以在 xilinx 的官网上下载“面向 Win10 的 ISE 14.7”最新版本发布于今年 2 月。但请注意该版本仅支持 Spartan®-6之后 而不支持 Spartan-6、 Virtex-6之前的版本 和 Coolrunner 。解决办法一:别用原来的快捷方式。转用xilinx安装路径\14.4\ISE_DS\ISE\bin\nt\ise.exe比如D:\转载 2020-10-28 17:42:24 · 997 阅读 · 0 评论 -
ISE中将Verilog封装为IP核的方法
第一步:新建一个工程A 添加需要封装成IP核的代码到工程A中第二步:属性设置 Synthesis——》Properties——》Xilinx Specific Options 把-iobuf默认打勾,现在去掉默认值第三步:点击综合 synthesis,生成.ngc文件。第四步:生成一个只含端口信号的顶层文件。为了验证IP核的正确性,进行第五步,调用IP核。第五步:工程B中例化第四步生成的顶层文件同时把.ngc文件拷贝到工程B的目录下。...转载 2020-10-28 17:40:25 · 1509 阅读 · 0 评论 -
Xilinx FPGA 芯片命名规则与查询方法
Xilinx 公司的芯片有一整套命名规则,可以通过相关文档查阅。Xilinx 提供了很多关于 Device 的用户手册,很多会在文档的开始部分对命名规则及其含义进行讲解,如UG-112:Device Package User GuideUG-116:Device Reliability Report外,针对某指定芯片,可查找所属系列的 DataSheet例如,针对 Xilinx Artix-7 系列的XC7A100T-2FGG484l 芯片,可以查看概括性讲解 7-系列 FPGA .转载 2020-10-28 17:32:53 · 2770 阅读 · 0 评论 -
Xilinx 7系列时钟结构
xilinx 的 FPGA 时钟结构,7 系列 FPGA 的时钟结构和前面几个系列的时钟结构有了很大的区别,7系列的时钟结构如下图所示。 Clock Region:FPGA 内部分成了很多个时钟区域。 Horizontal Center:FPGA被 Horizontal Center 分成上下两个部分,每个部分包含16个 BUFG 。 Clock Backbone:全局时钟线的主干道,将 FPGA 分成了左右两部分,所有的全局时钟布线均要从此经过。 HROW:水平时钟转载 2020-10-22 11:46:21 · 1099 阅读 · 0 评论 -
FPGA的IO到底是怎么命名的?
虽然很多FPGA工程师都是写代码,但是作为硬件编程工程师,如果不熟悉FPGA的底层资源和架构,是很难写出高质量的代码——至少很难写出复杂逻辑的高质量代码,也很难站在系统的层面去考虑芯片的选型等问题。那熟悉FPGA架构,首先最主要的一点,我们先来了解FPGA的IO。FPGA的IO命名。FPGA芯片IO命名方式太多,管脚也多,让人感觉很乱。这是我当年的感觉,诸如会经常听到:A13,B14···BANK34,BANK12····MIO0,EMIO···。但这确实是FPGA的特点,FPGA可以兼容多种不同.转载 2020-10-14 13:50:37 · 3301 阅读 · 1 评论 -
时序裕量
(1)时序裕量 裕量(Slack)是实际所用时间和设计所需时间的差值,表示设计是否满足时序的一个称谓:正的Slack表示满足时序(时序的裕量),负的Slack表示不满足时序(时序的欠缺量)。Slack分为建立时间裕量和保持时间裕量。 图1.1 时序的基本概念图(1) ...原创 2020-09-30 14:54:50 · 4990 阅读 · 0 评论 -
Verilog 最全经验总结
1、不使用初始化语句;2、不使用延时语句;3、不使用循环次数不确定的语句,如:forever,while等;4、尽量采用同步方式设计电路;5、尽量采用行为语句完成设计;6、always过程块描述组合逻辑,应在敏感信号表中列出所有的输入信号;7、所有的内部寄存器都应该可以被复位;8、用户自定义原件(UDP元件)是不能被综合的。一:基本Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器,还有可能被优化掉。二:veril...转载 2020-09-29 13:52:49 · 12999 阅读 · 0 评论 -
如何快速找到组合逻辑生成的时钟
组合逻辑生成的时钟,在FPGA设计中应该避免,尤其是该时钟扇出很大或者时钟频率较高,即便是该时钟通过BUFG进入全局时钟网络。 组合逻辑生成时钟的典型特征是在网表中我们能够看到LUT(查找表)的输出直接连接或通过BUFG连接到时序逻辑单元比如触发器的时钟端口。最直接的危害是组合逻辑可能会产生毛刺(Glitch),从而导致电路功能错误。看个案例,如下图所示。由于毛刺的存在,计数器多计数了一次,导致错误。 从时序角度而言,组合逻辑生成的时钟会增加时钟线上的延迟,...转载 2020-09-29 13:28:54 · 600 阅读 · 0 评论 -
FPGA内部资源介绍
逻辑资源块是FPGA中最重要的资源,它在FPGA芯片中占到比重最大。Xilinx公司称它为CLB,即Configurable Logic Blocks;而Altera公司称它为ALM,即Adapive Logic Module。Xilinx把一个CLB划分为若干个slice,每个slice中一般又包含若干个LUT、寄存器、异或门和复用器等。Altera把一个ALM划分为若干个ALUT和寄存器等,二而 每个ALUT中一般又可包含若干个LUT、全加器和复用器等。因此虽然逻辑资源快在不同的器件中叫法不一样(当然结原创 2020-09-24 17:06:14 · 9678 阅读 · 0 评论 -
万物基于状态机——状态机大法好
万物基于状态机我们知道所有的数字电路都可以抽象为组合逻辑+时序逻辑,任何时序逻辑都可以通过有限状态机描述,即使是组合逻辑也可以描述成单个状态的状态机。上图:是不是看着很眼熟,变换一下任何算法计算或逻辑过程都可以简化为一坨组合逻辑云,然后再加一个D触发器打拍输出。常见的三段式状态机,第二段组合逻辑状态转移,再加时序逻辑保存当前状态,所以任何的数字逻辑在理论上都可以描述为状态机,万物基于状态机。当然,要是写一个计数器都准备写成状态机那就,,就是徒增功耗而已。三段式状态机转载 2020-09-24 14:39:15 · 1127 阅读 · 0 评论 -
Verilog编程技巧之(括号)、[中括号]、{大括号}用法(对比matlab)
简述在初步接触到Verilog的括号时经常会将其和matlab矩阵的各种(括号)、[中括号]、{大括号}搞混。Verilog中括号的应用Verilog语言中,除去这些括号在计算优先级中的作用(一般也只会用到小括号加优先级)。(括号)主要用于函数模块传参,例如自定义函数 fuc_name后面括号内定义的input、output,或者一些if、always语句后面括号内添加判定信息(其实也就是函数传参)。[中括号]用于位数声明,例如定义reg信号的位数,或者调用某信号的位数:reg转载 2020-09-23 17:59:17 · 10894 阅读 · 0 评论 -
FPGA基础知识1(FPGA芯片结构)
目前主流的FPGA仍是基于查找表技术的,已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理 和DSP)的硬核(ASIC型)模块。如图1-1所示(注:图1-1只是一个示意图,实际上每一个系列的FPGA都有其相应的内部结构),FPGA芯片主 要由6部分完成,分别为:可编程输入输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件 模块。每个模块的功能如下: 1. 可编程输入输出单元(IOB) 可编...转载 2020-09-17 16:51:13 · 935 阅读 · 0 评论 -
Vivado工程经验与时序收敛技巧
FPGA毕竟不是ASIC,对时序收敛的要求更加严格,本文主要介绍本人在工程中学习到的各种时序约束技巧。首先强烈推荐阅读官方文档UG903和UG949,这是最重要的参考资料,没有之一。它提倡要在设计的早期阶段就要排除问题,越到后期时序的改善就越困难。其中HLS层次对性能的影响是最大的。本文将从代码风格,时序修正,工程设置等几个方面介绍本人的实践经验,希望让各位初学者快速提高,也希望FPGAer能给出宝贵建议。1. 代码风格推荐使用Xilinx language templates的代码块,这里转载 2020-09-16 17:26:24 · 1854 阅读 · 0 评论 -
Vivado时序收敛技术(二) 时序违例的根本原因及解决方法
本文整理自Xilinx公开课:Vivado时序收敛技术。 有些知识在公开课中讲的并不是很细,因此我又对齐进行了整理,分为了几篇文章。 有很多内容也在我的时序约束课程中讲到过,都是免费课程,大家可以在我的知乎专栏上找到。 FPGA Times 如果出现了时序违例,我们会关注两点: 为什么会出现时序违例?如何解决? 首先我们要搞...转载 2020-09-16 17:13:30 · 8100 阅读 · 0 评论 -
Vivado时序收敛技术(一) Baseline基础理论
本文整理自Xilinx公开课:Vivado时序收敛技术。 有些知识在公开课中讲的并不是很细,因此我又对齐进行了整理,分为了几篇文章。 有很多内容也在我的时序约束课程中讲到过,都是免费课程,大家可以在我的知乎专栏上找到。 FPGA Times 如何知道该约束哪些时钟? 使...转载 2020-09-16 16:39:09 · 1942 阅读 · 0 评论 -
Hold Time违例,该如何解决
首先,我们要知道的是,Hold Time违例,是因为时钟绕的太远,到达时间太晚。而且综合之后给出的时序报告都是估计值,因此综合之后可以不考虑Hold Time,只考虑Setup Time;即便此时Hold Time违例,我们也不需要去理会。在Place Design之后再去看Hold Time,如果此时Hold Time的违例比较小(比如-0.05ns),还是不需要理会的,因为工具在布线时会修复Hold,但如果Slack太大了,无法修复了,就会牺牲setup来弥补hold。这里补充一下综合实现的步骤:转载 2020-09-16 16:30:13 · 4249 阅读 · 0 评论