张海军2013
码龄10年
  • 235,402
    被访问
  • 112
    原创
  • 19,266
    排名
  • 776
    粉丝
关注
提问 私信
  • 目前就职: 蔚来汽车
  • 加入CSDN时间: 2012-04-28
博客简介:

zhanghaijun2013的博客

查看详细资料
  • 5
    领奖
    总分 1,163 当月 55
个人成就
  • 获得269次点赞
  • 内容获得63次评论
  • 获得2,139次收藏
创作历程
  • 4篇
    2022年
  • 23篇
    2021年
  • 52篇
    2020年
  • 33篇
    2019年
成就勋章
TA的专栏
  • git
    2篇
  • 语音识别
    2篇
  • 自动驾驶
    2篇
  • GPU
    3篇
  • 笔记
  • markdown
    1篇
  • python
    20篇
  • Julia
    14篇
  • Quant
    1篇
  • MachineLearning
    1篇
  • C++
    5篇
  • matlab
    5篇
  • FPGA
    45篇
  • 信号处理
    11篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

FPGA中BEL Site Tile FSR SLR分别指什么?

在Xilinx FPGA中,从底层到整个设备可以划分为6个层次:BELSiteTileFSRSLRDevice下面我们从下到上依次来看一下各个定义。BEL(Basic Element of Logic)  BEL是最底层的基本元素,也可以叫atomic unit(原子单位),BEL是FPGA中最小、不可分割的组件。BEL有两种:Logic BEL和Routing BEL。像我们常说的LUT、FF、CARRY都属于Logic BEL,Routing BEL我们平时不常说,很多工程师可
原创
发布博客 2022.02.17 ·
317 阅读 ·
0 点赞 ·
0 评论

vivado如何快速找到schematic中的object

  在Vivado中,可能由于某些逻辑输入悬空而导致Implementation的opt_design时会错,比如:报的错误是dac_spi_i0/bit_cnt[4]_i_4的这个LUT有个输入悬空了,这个工程的逻辑比较简单,例化的嵌套也比较少,因此在schematic一层层找也很容易可以找到,但如果工程比较复杂,在很内部的一个LUT的输入悬空了,找起来就很费劲了。  笔者碰到的问题是在vivado的axi-interconnect ip中报了这个错误,而且是ip内部套了好几层的地方,如果再一层层往
原创
发布博客 2022.02.13 ·
337 阅读 ·
1 点赞 ·
2 评论

Xilinx FPGA中HP HR HD bank分别是什么用途

在开发FPGA绑定管脚时,经常会看到HP Bank、HR Bank和HD Bank,它们分别是什么意思?分别可以适用于哪些应用个?  首先我们要明确一点,这几个概念都是在7系列之后才有的,其中7系列的FPGA中有HP Bank和HR Bank,UltraScale FPGA有HP Bank、HR Bank和HD Bank,但并不是一个FPGA中会同时包含HP/HR/HD Bank。HP:High PerformanceHR:High RangeHD:High Density  HP
原创
发布博客 2022.02.08 ·
396 阅读 ·
1 点赞 ·
0 评论

Linux Matlab快捷键设置

  在Windows下,Matlab的快捷键就是常规的,复制就是Ctrl+C,粘贴就是Ctrl+V。但到了Linux版的Matlab中,复制粘贴的快捷键都变了,复制变成了Alt+W,粘贴变成了Ctrl+Y,剪切变成了Ctrl+W。用起来是相当不顺手,所以就经常通过鼠标右键来操作,但好在Matlab支持自定义快捷键。将常用的复制、粘贴、剪切、保存、查找都改成Windows中常用的快捷键。欢迎关注微信公众号:Quant_Times...
原创
发布博客 2022.01.27 ·
1169 阅读 ·
1 点赞 ·
0 评论

false path和asynchronous的区别

  在FPGA的开发中,对于两个异步时钟,如果我们可以在RTL的设计中保证这两个时钟域之间的处理都是正确的,那就可以让工具不分析这两个时钟域之间的交互。如果不设置的话,Vivado默认都会分析的,这样会大大增加Implementation的时间。  常用的不让工具分析两个时钟域交互的方式有两种,一种是设置为伪路径(False Path),一种是设置为异步(Asynchronous)。那这两种设置方式有什么区别呢?(假设工程中有两个异步时钟clka和clkb)伪路径的设置是单向的,而异步时钟的约束是双向
原创
发布博客 2021.11.12 ·
328 阅读 ·
2 点赞 ·
1 评论

Xilinx FPGA的DNA是什么?

  对于Xilinx的FPGA,每一片都有一个专门的ID,就像我们的身份证号一样,每个都不一样,Xilinx也形象的把这个ID叫做DNA。7系列以及之前FPGA的DNA有57bit,Ultrascale FPGA的DNA有96bit,Zynq Ultrascale+的FPGA有两个DNA,PL端一个,PS端也有一个。DNA都是只读的,我们不可以修改。  有两种方法可以读到这个DNA的值,一种是连上JTAG后,可以直接看到FPGA的DNA信息,以K7为例:  第二种方法就是通过例化DNA_PORT模
原创
发布博客 2021.11.10 ·
373 阅读 ·
0 点赞 ·
0 评论

Xilinx Ethernet MAC IP调试的小坑

  本篇文章要写的是调试Xilinx网络IP时踩到的一个坑,也是控制PHY芯片时的一个坑,板卡上的PHY芯片是非常经典的88E1111,使用MDIO接口控制。  本身MDIO接口的时序也不是很难,非常类似I2C接口,内部寄存器的读写控制都是通过MDIO接口来实现。在MDIO的协议中,有一个PHY ADDR,这个是由PHY芯片的硬件决定的。Xilinx的IP也提供了mdio接口,我们可以直接通过配置IP内部寄存器来实现MDIO接口的配置。在IP Core的内部设置中,有一个MDIO PHY ADDR
原创
发布博客 2021.11.01 ·
486 阅读 ·
0 点赞 ·
0 评论

管脚约束问题导致生成bit时报错 如何在不重新Implentation情况下生成bit?

在FPGA开发中,我们经常遇到因为管脚忘记约束,导致最后生成bit的时候报错1.管脚电平未约束  像上面这个图中,由于在约束中忘记指定mdc和mdio的电平,再经过了长时间的综合和实现后,最后的Generate Bitstream报错了。  这种情况下,如何才能不重新Implementation的情况下生成bit呢?打开实现后的routed.dcp文件:如果不知道routed.dcp为何物,请参考之前的文章:Vivado的Implementation都包含哪些步骤?open_checkpo
原创
发布博客 2021.10.18 ·
112 阅读 ·
1 点赞 ·
0 评论

vscode启动Python调试 找不到指定模块

vscode在启动python调试时,要导入numpy模块,而且非常确定numpy已经安装了,但还是提示找到numpy模块Exception has occurred: ImportErrorIMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!Importing the numpy C-extensions failed. This error can happen formany reasons, often d
原创
发布博客 2021.09.30 ·
1434 阅读 ·
2 点赞 ·
1 评论

Vivado ECO实例教程一 增加LUT(GUI操作)

  什么是ECO?ECO 指的是Engineering Change Order,即工程变更指令。目的是为了在设计的后期,快速灵活地做小范围修改,从而尽可能的保持已经验证的功能和时序。ECO 的叫法算是从IC 设计领域继承而来,其应用在FPGA设计上尚属首次,但这种做法其实在以往的FPGA 设计上已被广泛采用。  ECO在一些大的工程中是比较实用的,比如工程编好后,想将一个已有的信号连接到FPGA端口上观察,或者想增加Debug信号、修改寄存器初始值等,都可以直接对route之后的dcp进行修改,而不需要
原创
发布博客 2021.09.30 ·
240 阅读 ·
0 点赞 ·
0 评论

如何在阿里云部署GitLab?

  本教程默认阿里云的ECS已经创建好,并在此基础上部署GitLab环境。  GitLab官网上有个手动部署的教程,而且不同操作系统的指令也多多少少有些区别,官网教程链接如下:https://about.gitlab.com/install/#centos-8但官网的教程有点过于理想,完全按照这个教程来,经常会部署失败,因此我们就整理了一下部署方法,笔者用的系统是centos-8,如果是其他系统,请参考官网的部署指令进行修改。安装依赖包sudo dnf install -y curl pol
原创
发布博客 2021.09.21 ·
160 阅读 ·
0 点赞 ·
0 评论

Vivado的Implementation都包含哪些步骤?

Vivado的Implementation主要有三大步:opt_design,会生成opt_desgin.dcpplace_design,会生成place_design.dcproute_design,会生成route_design.dcp如果再详细一点:opt_design在这一步,Vivado会对综合后的网表文件做一些优化,删除一些无用的或者Vivado认为可以冗余的逻辑,但如果代码中使用了DONT_TOUCH 和MARK_DEBUG,在此步骤就不会被优化掉。power_opt
原创
发布博客 2021.09.08 ·
889 阅读 ·
0 点赞 ·
0 评论

Vivado IP中的Shared Logic到底是干嘛的?

  在很多Vivado的高速接口的IP中,比如Ethernet、PCIe、SRIO的设置中,都会有个Shared Logic的页面:可能很多同学并没有很关注这个页面,直接默认设置就完事了。  但其实这个页面的内容也是非常有用的,我们可以看到页面中有两个选择:Include Shared Logic in coreInclude Shared logic in example design首先,什么是Shared Logic?字面意思很好理解,就是共享逻辑,主要包括时钟、复位等逻辑。当选择Sh
原创
发布博客 2021.09.08 ·
122 阅读 ·
0 点赞 ·
0 评论

GTX/GTH/GTY/GTP/GTZ/GTM有什么区别?

  首先需要明确的一点是,他们都是高速收发器,只是传输速率同,速率大小为:GTP < GPX < GTH < GTZ < GTY < GTM  不同芯片上使用的高速收发器也不同,而且同样是GTX,不同系列芯片上的速率也可能不同。  比如7系列的FPGA,GTP最高可以达到6.6Gb/s,GTX最高12.5Gb/s,GTH最高13.1Gb/s,GTZ最高28.05Gb/s下面几个表展示了7系列FPGA中高速收发器的使用情况:在A7上面使用的高速收发器是GTP:在K
原创
发布博客 2021.09.08 ·
2652 阅读 ·
1 点赞 ·
0 评论

Python高性能计算之推导和生成器

  在Python中,推导和生成器都是非常常用的,而且它们都是经过极度优化的操作,速度非常快,另外一点是它们的代码可读性也比较强,非常适合用来替代显式的for循环。  当然,有些可能对推导器和生成器不太熟悉,这里我们先介绍一下。推导器在生成列表时经常会用到,采用方括号来表示,并且里面用一个for循环来生成所需数据。data = [x for x in range(10)]data2 = [x for x in range(10) if x % 2 == 0]这种写法就等效于:data = []
原创
发布博客 2021.08.24 ·
20 阅读 ·
0 点赞 ·
0 评论

导出ILA数据到Python

导出ILA数据在空白处右键,选择Export ILA Data导出csv格式的文件,并选择文件路径和文件名:上面两步也可以使用tcl脚本代替:write_hw_ila_data -csv_file {C:\usr\zhj\ila\iladata.csv} hw_ila_data_1导出后的文件如下图所示,第一行是标题,有Sample in Buffer、Sample in Window、TRIGGER,后面就是我们采的信号的名称,但这个信号名称是包含例化的层级结构名字的。处理十进制.
原创
发布博客 2021.08.20 ·
186 阅读 ·
0 点赞 ·
0 评论

D触发器都有哪几种类型?对应什么样的代码?

  今天我们来研究一下D触发器都有哪几种类型?又对应什么样的代码?  在Xilinx的FPGA中,D触发器是下面这个样子:其中,D是数据输入端口,CE是使能端口,CLK是时钟输入,SR是Set/Reset的意思,可用作置位或者复位,置位和复位又分同步和异步,因此D触发器有如下四种应用类型:异步复位(FDCE)异步置位(FDPE)同步复位(FDRE)同步置位(FDSE)  在Vivado的Language Templates中我们也可以看到,D触发器有下面四种类型:那这四种触发器都对应
原创
发布博客 2021.08.19 ·
1184 阅读 ·
1 点赞 ·
0 评论

DDR突然初始化失败 Debug记录

背景:板卡用的一直好好的,硬件没有什么问题,DDR跑在2400M,也一直正常工作。但最近有个工程中,需要增加SRIO接口,SRIO接收的数据需要先过DDR,工程编完下载bit后,偶尔会提示DDR初始化失败:分析如下:板卡用了很久,DDR一直没出现过初始化失败的问题,说明硬件应该没有问题;DDR IP中提示时序有问题,本工程中带有PCIe模块,PCIe的IP中也提示时序问题,其它地方没有时序问题;首先想到的是在保证DDR吞吐速率满足系统要求下,降低DDR的主频,由2400M降到1600M,虽然
原创
发布博客 2021.08.10 ·
909 阅读 ·
0 点赞 ·
1 评论

Python函数参数传递机制

Python3中有6中标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)其中Number、String、Tuple和Sets是不可变类型,List和Dictionary是可变类型。什么是可变类型?什么是不可变类型?1. 可变类型  对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收
原创
发布博客 2021.07.27 ·
125 阅读 ·
1 点赞 ·
0 评论

如何用Python复现吉布斯现象?

1. 什么是吉布斯(Gibbs)现象?  在信号处理中,有很多很有意思的现象,比如由于栅栏效应引起的频谱泄露,和我们这一讲要讲到的吉布斯现象。  吉布斯现象和频谱泄露多少有些相像,频谱泄露是因为进行DFT时对时域信号进行了截断;而吉布斯现象则是对频域信号进行了截断。  先来看下维基百科上的解释,吉布斯现象是由Henry Wilbraham于1848年最先提出,并由约西亚·吉布斯于1899年证明。在工程应用时常用有限正弦项正弦波叠加逼近原周期信号。所用的谐波次数N的大小决定逼近原波形的程度,N增加,逼
原创
发布博客 2021.07.12 ·
328 阅读 ·
4 点赞 ·
6 评论
加载更多