自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (10)
  • 问答 (1)
  • 收藏
  • 关注

原创 如何方便地使用TCL恢复带BD设计的Vivado工程

介绍了如何通过Vivado生成tcl脚本,并在稍加修改后用于恢复工程。

2023-08-02 19:45:29 988

转载 关于non-project模式的点滴记录1——别忘了创建工程

在non-project模式下,未指定器件时,Vivado将使用默认器件。这可能导致IP的器件和synth_design所指定的器件不一致。

2023-01-30 12:24:17 290

原创 IC设计中glitch free时钟选择器的设计过程

IC设计中glitch free时钟选择器的设计过程

2022-07-20 18:30:38 1180 2

原创 SystemVerilog中使用string所遇到的问题

刚开始使用systemverilog进行字符串操作时犯过的错误,在此记录一下。

2022-07-14 11:49:35 1408

原创 Block Design内部BRAM控制器与外部BRAM的连接

在最近的一个设计中遇到了这样一个问题。我在Block Design中例化了XDMA,并通过interconnect连接了3个BRAM控制器,3个BRAM控制器的端口引出到Block Design外部。XDMA通过C2H接口对前两个RAM只进行读操作,通过C2H和H2C接口对第三个RAM进行读写操作。三个RAM都在Block Design外部(即HDL代码部分)例化。 验证时,前两个RAM的读数据正常,第三个RAM的读数据比对错误。由于个人疏忽,解决该问题花了四五个小时。首...

2022-05-13 17:18:21 940

原创 TCL练习7:switch

TCL中switch有两种结构。 switch ?options? string pattern body ?pattern body ...? switch ?options? string {pattern body ?pattern body ...?}第一种和第二种之间的差别仅仅是一对大括号。正是由于这个区别,应用是要特别注意,否则程序无法输出正确结果。第一次使用switch时我写了下面这段程序。 switch $cmd { $::CMD_REPEAT..

2021-04-22 00:31:09 1495

原创 TCL练习6:通过递归方法搜索文件夹并返回指定后缀文件(包含子目录)

写这个TCL脚本的主要目的是搜索目标文件夹及其子文件夹下的所有文件,然后记录在指定的文件中。可以指定目标文件夹名称、信息记录位置和文件后缀等3种参数。该脚本将用于Vivado的non-project编译过程,被综合和布线脚本调用。define.tcl中定义了目标文件夹名称、信息记录位置、文件后缀类型、器件part等信息。findAllFiles.tcl脚本根据define.tcl中的参数搜索目标文件夹,当文件后缀类型参数(ext)为.hdl时,会搜索.v、.vh、.vhd、.sv等文件的路径和名称,

2021-04-13 14:41:42 3134 1

原创 TCL练习5:string、变量$的使用以及转义符何时发挥作用

目录练习string用法说明string compare ?-nocase? ?-length n? string1 string2string equal ?-nocase? ?-length n? string1 string2string first string1 string2 ?startindex?string index string charIndexstring last string1 string2 ?startinde...

2021-04-08 22:14:16 2737

原创 TCL练习4:递归和return

练习递归实现阶乘计算以及return的使用方法。proc recurrence { n } { if { ![string is integer $n] } { return -code error "This is not an integer!" } if { $n<=2 } { return $n } else { set val [expr $n*[recurrence [expr $n-1]]]

2021-04-07 10:51:43 1517

原创 TCL练习2:文件I/O

练习进行文件操作,包括打开文件、创建文件、读写文件等。set path [pwd]/Desktop/FileIO/set name "dont_touch.xdc"set newName "dont_touch_new.xdc"set optr "r"set optw "w+"set rdFile ""set retval [eval catch {{set fdr [eval open [append rdFile $path $name] $optr]}} msg]if { $re

2021-04-06 16:05:39 479

原创 TCL练习3:append、lappend

append将多个变元按顺序组合起来,并形成一个新的字符串。lappend将多个变元按顺序组合起来,形成一个新的List。set myCurrentLogVar1 ""set myCurrentLogVar2 ""set script1 { puts "logging now" lappend myCurrentLogVar1 "Say: "}set script2 { puts "logging out" append myCurrentLogVar2

2021-04-06 09:56:39 4957

原创 TCL练习1:open、eval和proc

简单使用open、eval和proc。open可用于打开、创建文件。eval带一个或多个变元,可以由一个或多个命令组成,eval采用concat命令的风格连接所有变元,执行命令并且返回执行结果。proc可以创建一个过程,以便在程序其他地方重复调用。proc create_report { reportName command } { set status "." append status $reportName ".fail" if { ![file exists $stat

2021-04-06 09:54:55 2996

原创 JESD204B SUBCLASS1确定性延时参数的计算

目录1. 时序参数1.1 ADC1.2 FPGA2. 延时计算2.1 计算延时所需的LMFC周期数前几天又重新复习了以下通过JESD204B SUBCLASS1实现确定性延时的过程。以前对部分参数的计算过程不甚理解,这次算是搞清楚了。学习JESD204B的时候阅读的是“Serial Interface for Data Converters” JESD204B的JULY 2011版本。该文档毕竟是一个标准文件,实现过程写的比较粗略,而且是指导性的,在实际工程实现过程中作用有限。当

2021-01-26 15:25:25 3987

原创 SystemVerilog/Verilog的testbench中文件的写入和读取操作

在Testbench中很可能需要文件的读写操作,在可综合的设计中也可能会用到文件写入。SystemVerilog/Verilog提供的文件写入读取方法并不多,主要有两类。第一类是writememb/writememh/readmemb/readmemh,第二类是$fscanf/$fwrite。第一类用法简单,但是功能弱,文件读取也不支持多维数组;第二类用法复杂一点,功能相对强大,配合循环语句可以处理多维数组。1. writemem[b|h]/readmem[b|h]writemem[b|h]主要

2021-01-11 23:34:24 18919

原创 同样的FIFO,不同的Data Order

在使用Xilinx FPGA时常用的两种FIFO例化方法包括使用IP Catalog和使用XPM。两种方法各有优缺点,个人更倾向于使用XPM的方式。使用这种方式可以非常方便的传递参数,修改设计时不像IP Catalog生成的FIFO那样繁琐。当FIFO的WRITE_WIDTH和READ_WIDTH相同时,两者使用时没有任何不同。但是当FIFO的输入输出端口位宽为非对称时,两者具有非常显著的区别,使用时要格外注意。以WRITE_WIDTH : READ_WIDTH = 1 : 4为例,向IP Cata

2021-01-09 21:43:44 424 1

原创 Spinal HDL学习资源

最近开始接触SpinalHDL,所以收集了一些不错的学习资源,可供大家参考。SpinalHDL是基于Scala语言开发的设计语言,使用SpinalHDL需要对Scala有一定了解。下面的两篇博文非常全面而又简洁的介绍了Scala,对上手非常有帮助。https://vvviy.github.io/2018/12/01/Learning-Chisel-and-Scala-Part-I/https://vvviy.github.io/2018/12/12/Learning-Chisel-and-Sca

2020-12-24 16:02:19 2634 1

原创 Systemverilog中的iff事件控制

使用systemverilog已经有一段时间了,主要是其中的部分新特性能够简化代码的编写,比如interface、支持多维端口等。为了进一步深入学习systemverilog,最近抽空更广泛的学习了一些systemverilog的内容。本文记录一下Systemverilog中的事件控制和sequence控制相关内容的学习情况。1. 事件控制1.1 iffSystemverilog在@事件控制中添加了iff修饰词,只有当iff后的条件为真时,@事件才会触发。注意,iff可以在always和alwa

2020-12-14 10:59:09 12793 3

原创 48bits进位选择补码加法器的两种实现方法的性能对比

本文使用进位选择的结构实现补码加法器,并且对比了使用内部逻辑实现和使用专用DSP单元实现时的性能差别。当然Xilinx FPGA中的DSP单元可以直接实现48位的运算,本文主要目的是验证进位选择结构加法器的实现和性能对比,这种结构可以运用到更大位宽的加法中。...

2020-06-14 22:28:14 683

原创 在Verilog/SystemVerilog中使用fork/join的注意事项

fork/join是Verilog中常用的语句。该语法在SystemVerilog中添加了join_any和join_none两个关键字,使fork的行为发生了变化。本文将比较全面的介绍fork的用法,其中不使用join_any和join_none关键字的时候,其用法和Verilog中一致。1. fork块中的begin/end块 在fork块中,begin和end之间的语句会顺序执行,如果没有begin和end,则各条语句会并发执行。看下面的例子。在fork块中有A、B两个任务,由于...

2020-06-08 18:25:44 10629

原创 正则表达式在Vivado约束文件(xdc)中的应用

使用xdc文件进行管脚、位置、时序和属性等约束的时候,经常会使用各种get命令。Vivado提供了很丰富的匹配表达式,比如等于==、不等于!=、匹配=~、不匹配!~、<、>、<=、>=等等,这些表达式可以通过&&和||进行组合;同时还有大量的状态、属性和单元名称可用,比如DIRECTION、IN、IS_LOC_FIXED、IS_PRIMITIVE、NAME等等。 我在xdc文件中匹配目标的时候,在可行的情况下更倾向于使用正则表达式。本文就介绍一下我常...

2020-05-29 23:00:25 2249

原创 如何读FPGA工程的编译报告?

1. 一定要逐条阅读编译报告 规模稍微大一点的FPGA工程的警告和critical warning动辄两三千条,虽然其中包含大量的“无威胁”警告和重复警告,但是我觉得至少95%的程序隐患和设计问题都可以从这些报告中找到蛛丝马迹。 工作中有不少人问过我这些问题:这么多警告怎么看的过来呀?这个警告、还有那个到底是什么意思啊?这个警告我该怎么去掉?........我能够理解问出这些问题的人的心情,因为我当初也被这些警告吓懵了,也退缩了一段时间。但是我不能够理解的是,为什么春天问过我,到了秋天还...

2020-05-24 21:15:20 3237

原创 第四章(2):通过SYSREF实现确定性延时(subclass 1)

2.通过SYSREF实现确定性延时(subclass 1) subclass 1主要通过SYSREF信号实现TX和RX设备之间LMFC的对齐,SYSREF信号必须被分配到所有的转换设备和逻辑设备。 通过使用高准确度的device clock和SYSREF信号,可以最小化延时的不确定度。规范强烈建议所有TX和RX设备的SYSREF信号都来自于同一个芯片。关于SYSREF和本地时钟的性能要求和调整能力在前面的文章中已经描述过了。 由于SYSREF有多种格式,比如周期的、单脉冲和多...

2020-05-19 11:48:33 5617

原创 第四章(1):确定性延时介绍

1. 简介 在JESD204系统中可能存在多个数据处理单元,这些单元分布在不同的时钟域,没有明确的延时关系。从而导致每次上电后、或重新建立连接后,各link之间的延时都可能不同。为了解决上述问题,JESD204B提供了两种途径,即SUBCLASS1和SUBCLASS2。 确定性延时是指:从TX端的基于帧的数据输入开始,到RX端接收并输出帧数据为止的延时,在每次上电后、或重新建立连接后都是一致的。该延时都是以frame clock为单位进行衡量的。规范要求该确定性延时是可编程的,其调整分辨...

2020-05-18 00:29:09 3647 1

原创 Verilog应用浅见之一——关于代码风格

我应该算是一个硬件工程师,涉及比较底层的技术。从原理图上放电阻,到设计PCB和写PCB设计任务书,到焊接调试电路板,再到写设备驱动,写FPGA程序,写各类文档,写项目申请书,所有的事情都干过。使用Verilog也有一些年头了,虽然只占整个工作的一部分,但是相对于其他事情,写Verilog程序、仿真和在FPGA中跑起来应该是我更喜欢做的事情。在这个过程中也积累了不少经验,有了一些个人的见解。...

2020-05-02 21:44:14 1373

原创 第三章(1):数据流

1. 传输层 传输层将采样数据转换为不加扰得octet,JESD204提供以下几种转换方式。

2020-04-30 00:09:58 1085

原创 第二章(2):时钟与同步接口

4. SYSREF信号 在使用subclass1,且需要确定性延时的系统中,SYSREF信号应该接入到每个设备。每个设备都使用SYSREF信号来识别一个device clock的边沿,所有LMFC和frame clock都和该边沿对齐。由于LMFC和frame clock通常和character clock对齐,所以在调整LMFC和frame clock相位的同时,也应该调整charac...

2020-04-27 22:09:53 3800

原创 第二章(1):时钟与同步接口

1. Device Clock Device clock是JESD204系统中每个单元的时间参考。每个设备需要通过该时钟产生frame clock和multiframe clock。2. Frame clock和Local Multiframe Clock Frame clock时钟域作用于应用层和JESD204的链路层。 对于需要实现确定性延时的应用,或者使用多...

2020-04-25 21:01:34 3134

原创 第一章:JESD204概述

第一章:JESD204概述1. JESD204版本 JESD204接口是一种新的,用于连接逻辑器件和AD/DA转换器的串行接口,他有多个版本。 原始版本中,每个CONVERTER设备支持1个link,每个link一个lane。 版本A中,每个CONVERTER设备的串行接口可以包含一个或者多个lane,所有并行运行的,且使用相同数据格式的设备可以同步运行。 ...

2020-04-25 10:39:54 2474

原创 慎用systemverilog的语法新特性——“++”、“--”等操作符

SystemVerilog相对于Verilog添加了很多新特性,比如使用起来非常方便的累加++或递减--操作符。有这么好的变化,再也不用傻傻的写cnt <= cnt + 1了。在一个新项目中毫不犹豫的用了起来。always_ff @ (posedge clk) begin if( rst ) cnt <= 4'h0; else if( wr_tran...

2020-04-20 11:10:32 1493

原创 阻塞/非阻塞——纸上得来终觉浅,绝知此事要躬行

阻塞赋值和非阻塞赋值在可综合的代码中不需要严格的区分,但是在仿真文件中就尤为重要。阻塞赋值是指,只有当前赋值操作完成之后,后面的赋值操作才会发生;非阻塞赋值是指,当前块中的所有赋值操作完成后再计算各个变量的值,后续的赋值操作会覆盖之前的值。举个例子。 a、b和c的值分别为a=1, b=2, c=3。 a=b; a=c; b=a; 以上操作后...

2020-04-18 22:09:02 253 1

原创 变量拼接中遇到的奇怪问题——使用运算符导致实际位宽与期望位宽不符

以下方式是仿真中常常用到的数据拼接定义方式。 data = {`TC'h01,`FIX'h0, `FINE'h0, `COARSE'h01}; 其中TC/FIX/FINE/COARSE是通过`define定义的。在我最近的项目中,有一个变量需要拆分,我使用了下面的定义方式。 data = {`TC'h01, `CMP_MODE/2'h0, `FIX'h0, `...

2020-04-18 17:31:57 425

原创 ISERDESE3新变化——对小众应用不再友好的FPGA

现在FPGA在人工智能、机器学习、大数据、异构计算等方面应用广、发展势头猛,当然也更赚钱,毕竟是未来的发展方向,也能卖的上量。相比当下红红火火的应用,传统领域就显得可怜巴巴了。一些以前在小众应用中很有用的设计,随着器件的升级逐渐被舍弃掉了。在我以前的应用中常使用IDELAY、ISERDES、OSERDES等,主要用于源同步数据传输和高速采样。在7系列器件中,ISERDESE2有一个O端口,被称...

2020-03-13 21:54:37 3198 2

原创 JESD204接口应用笔记——时钟

近期有个新项目接触了JESD204B接口。总体来说,这东西非常好用,也挺简单。使用过程中在时钟配置方面遇到一点小问题,顺便记录一下。

2020-03-02 23:47:00 4812 3

原创 Xilinx文档编号及其内容索引

Xilinx文档的数量非常多。即使全职从事FPGA相关工作,没有几年时间不可能对器件特性、应用、注意事项等等有较为全面的了解。本文记录了我自使用Xilinx系列FPGA以来或精读、或翻阅、或查询过的文档,及其主要内容。如果有新的会随时补录进来。以下按照个人理解对文档进行了分类,不一定恰当,也会有重叠的情况,欢迎提出意见。器件概述7系列器件ds180:7系列器件概述,介绍不同器件的资源、...

2020-02-29 21:18:53 5081 4

原创 RAM的多种例化和初始化方法

目录RAM的例化RAM的初始化IP Catalog例化的RAM的初始化自定义数组和XPM RAM的初始化初始化数据的可读性本文所述的内容均以使用Xilinx器件为前提,不需要进行修改,或者做出少量修改就可以在Altera器件上应用。RAM的例化我常使用的例化方法主要有三种。使用IP Catalog例化 通过代码让编译器推断出RAM 调用原语上述方法各...

2020-02-28 14:39:41 5931

原创 使用BRAM实现数据延迟

目录为何使用BRAM实现延时实现与仿真为何使用BRAM实现延时在一些设计中需要对数据进行多个周期的延时。延时方法有多种,比如使用SLICEM生成移位寄存器,或者使用FF。但是对于大位宽、深延时的数据,使用上述方法会消耗过多资源,功耗也较大。此时使用BRAM进行延时将是更优的选择。实现与仿真...

2020-02-26 23:58:55 2146

在FPGA上使用SystemVerilog实现12小时制时钟(可实现24小时制)

实现了一个时钟计数器。h、min、sec和pm的输出为12小时制,AM时,pm输出为0,PM时,pm输出为1。load和init_*等信号用于加载时钟状态。12小时制显式时,小时的范围为1~12。

2020-06-16

CarrySelAdder.rar

实现了基于进位选择结构的48bits二进制补码加法器,该方法和结构可以应用到更大位宽的加法中。资源包括使用通用逻辑和专用DSP实现的工程。使用通用逻辑时,速度可达到400MHz以上;使用DSP时,400MHz速度下仍有1ns以上的时序裕量,所以可以轻松的达到500MHz以上速度。

2020-06-14

General.rar

自己常用的verilog同步、异步、脉冲信号处理电路。 AsyncPulse:异步脉冲发生。可通过参数控制检测边沿、延时和输出脉冲宽度。 AsyncPipe:异步流水线处理。可设置信号位宽和流水线深度。 SyncPulse:检测同步时钟域中输入信号的变化沿,输出一个脉冲。检测边沿、流水线级数、输出脉冲宽度可设置。 SyncPipe:同步时钟域流水线处理。输入信号位宽、流水线级数可设置。 Replicate:复制指定的输入信号。扇出数量可设置。

2020-05-19

UG912 Vivado Design Suite Properties Reference Guide笔记

本文档是我阅读UG912所做的整理。该文档详细描述了Xilinx FPGA的Objects(BEL/CELL/NET/PIN/PORT/SITE)、Property的涵义和使用。

2020-04-22

UG905 Notes.docx

UG905介绍了Hierarchical Design的方法。本文档是我阅读Design Consideration、Checkpoints、Out-Of-Context Commands and Constraints、Top-Level Reuse 等章节的笔记。

2020-04-22

UG903 Notes(有关于DDR约束和位置约束).docx

关于如何对DDR输入输出进行约束,之前一直理解的不透彻。这里结合Vivado中templates中的约束分析DDR的约束。文档还包括我阅读UG903后所做的笔记,如物理约束和位置约束等。

2020-04-22

Xilinx片内存储器的例化和初始化.docx

介绍了xilinx FPGA片内存储器的例化和初始化的方法,同时介绍了不同初始化方法的语法,以及需要注意的事项。

2020-04-22

FPGA封装及内部电路时序参数分析.docx

通过实例详细分析了Xilinx FPGA时序分析报告的组成和涵义,分析了FPGA端口和内部电路的延时组成,说明了正确时序约束的重要性。

2020-04-22

SERDES、MMCM及时钟资源使用笔记.docx

学习和使用serdes的过程中遇到一些问题,阅读了一些文档和论坛的帖子,做了点记录,希望对需要的人有所帮助。

2016-01-05

Xilinx FPGA设计学习笔记

刚开始学习xilinx FPGA设计所看的部分文档的笔记,可能有些用处,需要的人可以看看。

2016-01-05

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除