- 博客(21)
- 收藏
- 关注
原创 verilog模块自动例化perl脚本
利用perl写了个自动生成verilog例化脚本,原理就是利用正则表达式疯狂匹配就可以🌝,O(∩_∩)O。对两种端口定义都能自带生成例化模板。切记一定要在代码没有语法错误的情况下使用!切记一定要在代码没有语法错误的情况下使用!切记一定要在代码没有语法错误的情况下使用!其他可以使用,需要perl安装环境,去官网安装,perl官网。测试模块module TestModuleOne#( parameter PARA1 = 123,parameter PARA2 = 123)( in
2021-06-29 15:23:19
4444
5
原创 正则表达式速览
在脚本中使用正则表达式可以很方便的对于字符串进行处理,利用不同的组合可以完成很强大的工作,然而一大堆符号看起来很复杂,实际上却很简单。看下面负责完成匹配的多行重复^\(.*\)\(\n\1\)\+$在考虑到正则表达式时,要想到三个问题匹配啥字符?匹配数量?匹配位置?匹配啥字符?正则表达式提供了一种称作元字符的东西,这个就是要匹配的模式。字符描述等价[]匹配[]内的任意字符,-表示范围无\d匹配0-9[0-9]\x匹配16进制[0-9a-f
2021-06-13 09:16:36
279
原创 set_multicycle_path
多周期路径利用这一约束可以修改STA时序分析的建立和保持关系。单周期路径默认情况下Vivado执行单周期的检查。setup 一个周期hold零个周期如下图所示:建立建立关系是发送沿和捕获沿的关系。建立要求 = 捕获沿 - 发送沿STA实际会找到所有的建立要求,在图中仅画出最严苛的情况,因为STA时序只计算最严苛的情况,也就是建立要求的最小值,我们知道正常情况下,setup是正数才对,而正得越多建立的松弛(建立后的余量,越容易达到建立条件)越多,对应数值越大,所以这里要选择小的,
2021-06-13 08:36:49
688
原创 Xilinx RTL编码指南(一)
Xilinx RTL编码指南(一控制信号与控制集Reset使用复位的时间和位置同步复位与异步复位复位编码实例 1:乘法器与异步复位异步复位RTLsynthesis同步复位RTLsynthesis尝试消除HDL代码复位时出现问题时钟使能创建时钟使能复位和时钟使能的先后使用综合属性控制使能/重置提取DIRECT_ENABLEDIRECT_RESET将逻辑从控制引脚推到数据引脚信号控制技巧该一系列为学习ug949-vivado-design-methodology.pdf的记录,该文档包含了对Xilinx器件最
2021-04-03 23:45:26
2600
1
原创 图像腐蚀和膨胀的原理
腐蚀和膨胀是图像应用中比较广泛的操作,笔者尽量让从未接触过腐蚀和膨胀的读者看完这篇博客就能明白。概念结构元首先需要熟悉几个概念,结构元它就是用来操作图像的一种空间上的模板,它通常有以下几种形状,其中的小黑点代表原点,原点不一定位于几何尺寸对齐的位置,它可以在结构元内的任意位置。下图第一行是结构元的原始的形状,第二行是计算机在操作图像时要求将结构元填充成矩形(要尽可能的少填充元素)。集合A被结构元操作的一系列元素,这些元素在图像中可以理解为图像中每个像素点的二维位置。下图中A就是一个集合,B就是结
2021-04-03 11:20:46
14981
1
原创 双边沿D触发器
问题遇到一个特别有意思的问题,链接: hdlbits.,其中模块描述如下:module top_module ( input clk, input d, output q);要求根据d信号的输入,输出q,但是d信号是在clk信号的双边沿变化,而q需要偏移d的半个周期,并跟随d的值变化。解决1?难道always语句同时在上升沿和下降沿捕捉信号d?verilogmodule top_module ( input clk, input d, ou
2021-04-02 14:50:21
3255
2
原创 7系列FPGA逻辑资源解析
前言 之前使用过7系列相关的FPGA,但一直没有了解过7系列FPGA的逻辑结构,所以感觉有些遗憾,7系列FPGA的逻辑结构参考资料:wp 405-7 series FPGAS The Logical Advantageug 474-7 Series FPGAs Configurable Logic Block本文翻译自wp 405-7series FPGAS The Logical Advantage,就是7系列逻辑优势的白皮书,自然先看白皮书了,不过翻译过程中,难免有疏漏,希望读者指正批评
2021-03-31 14:25:51
3423
原创 verilog code 编写技巧
适合协议操作通过某些协议而对某些寄存器操作,例如通过AMBA协议对寄存器操作。只要instruction_set和instruction_clear能够条件互斥,即满足instruction_setinstruction_clear01清除10设置00保持11无效原来有点像锁存器的概念了。 assign instruction_set = //写某些寄存器 A的指令 assign instruction_clear = //写
2021-03-30 21:54:31
524
原创 同步和异步fifo设计
同步fifo设计信号列表clk:fifo操作时钟wr_en:fifo写使能,在wr_en有效的情况下,上升沿采集wdata数据。wdata:fifo写数据。full:fifo满有效。高电平时,代表当前wdata并未写入fifo。rd_en:fifo读使能。在rd_en有效,empty无效时,数据同步送出fifo。empty:fifo空有效。高电平时,代表当前rdata无效。要点使用两个地址寄存器,分别为raddr和waddr,假设fifo深度为8,则地址位置从0
2021-03-30 21:32:40
654
原创 BCD加法
16bitBCD加法BCD编码就是用4的位二进制来代表一个10进制的位 即BCD10010000BCD_{10010000}BCD10010000码代表98,而二进制代表152。充分利用模块思想,16bit的BCD加法可以由4个4bitBCD加法组成。module top_module( input [15:0] a, b, input cin, output cout, output [15:0] sum ); wire [2:0] cout_temp;
2021-03-21 13:33:19
1476
原创 跨时钟同步电路
亚稳态当信号跨时钟域传输时,很容易出现亚稳态状态,亚稳态是一种既不是0也不是1的中间态,如果亚稳态在电路中一级一级传输下去,将导致整个电路工作不正常。亚稳态无法完全消除,一般都用故障间隔时间来描述。只要间隔时间足够大则可以认为亚稳态不会发生。这里唯一能调整的就是tMETt_{MET}tMET。如下图,要使得tMETt_{MET}tMET越大,只能使图中得TdataT_{data}Tdata最够小,因此在跨时钟域处理时,中间不能串任何组合电路。双锁存器法相当于将信号打2拍,第一个时钟,即使当
2021-03-20 23:38:25
252
原创 补码溢出判断
补码可以将减法转化为加法,但有些电路需要判断加法是否溢出。判断方法判断加法是否溢出的条件是最高有效位和符号有效位。判断情况对于Nbit的二进制数,符号位为最高位,最高有效位为符号位的低1位。加法有四种情况[正]+[负][负]+[正][正]+[正][负]+[负]其中[负]+[正] 和[正]+[负]是一定不会溢出的,但是它们的符号位进位和有效位进位有可能有变化。所以也需要考虑进来。判断枚举以4bit的二进制为例,正大Pmax_4 = 0111 (7)正小Pmin_4 = 0001 (7
2021-03-20 22:37:20
3370
原创 verilog奇偶分频详解
文章目录偶分频2分频2N分频奇分频3分频高电平3分频低电平一般结果推导奇偶分频是一个很常见的问题,这里探讨的分频都是对于占空比为50%的信号分频,分频后的信号也是50%占空比。分频原信号NNN倍,意味分频后的信号的高低电平持续时间是原来信号的高低电平持续时间的NNN倍。偶分频原信号是一个50ns为周期的信号在verilog里面要分频首先想到的就是用到计数器来对高低电平计数从而产生符合要求分频信号,我们目标要产生50%的占空比的信号,所以我们可以先不管分频信号的低电平的计数,先来看看高电平的计数。
2021-03-18 12:53:38
2228
原创 Vivado时序分析
时序分析的基本方法策略基于路径的分析策略,在时序图中找到从起点和终点的所有路径并进行计算。基于模块的分析策略,在时序图中中只侧重分析该路径下延迟最严重的节点进行计算延时计算方法组合逻辑任意时刻的输出只取决于输入,与电路的原来状态无关,但是实际在电路中延时计算需要指导输入上拉和下拉的延时。时序逻辑任意时刻的输出取决于输入和原来的电路状态,但是时序逻辑仅在时钟有效沿工作,分别需要计算数据和时钟的路径延时时序路径分析方法触发器到触发器setupclklaunch+FF
2021-03-17 21:02:50
4100
3
原创 C语言一步一步实现sha256
文章目录sha256 算法一步一步实现简介hash运算流程Step1exampleStep2C语言实现变量名hash的初始值hash加密过程的常量hash运算hash结构体hash_inithash_updatehash_caculatorhash_finalmainresultSrcsha256在线计算参考博客sha256 算法一步一步实现简介sha256能够对任意长度的消息生成64个十六进制字符串。hash运算流程Step1报文长度以bit计算,在报文末尾进行填充,使得报文长度对512取模以
2020-10-15 13:53:47
5791
5
原创 PCIe Leagcy,MSI/MSI-X中断详解
PCIe Leagcy,MSI/MSI-X中断详解前言7 Series FPGA SupportLeagcy InteruptFPGA CodeWinDriver :待完前言PCIe有三种中断,分别为Leagcy Interupt,MSI Interupt,MSI-X Interupt,无论是什么应用,基本都需要中断,因此很有必要了解这几种中断的处理方式,这里会结合Windriver代码来说明,PCIE参考资料为Mindshare PCIe ,这本资料真心不错。7 Series FPGA Suppo
2020-06-08 23:20:07
4997
1
原创 CRC多项式注意事项和Verilog代码生成
CRC多项式注意事项和Verilog代码生成前言CRC如何计算CRC 在线生成Verilog前言CRC多项式广泛用在通信测试过程中,主要能够快速并且有效的检测数据是否出错,但我在PCIe通信的实际测试中,接近2TB的伪随机数(M序列),在无任何数据保护的措施,也无丢失和错误,说明PCIe通信还是比较可靠。但是为了更好的说明传输的数据的完整性,故想增加CRC校验的方式,出错的TLP包并不重传,仅记录。CRC如何计算在网上有许多CRC计算的内容,这一块就不赘述了,但是在看明白计算后还是会发现和实际应用依
2020-06-08 23:00:24
1698
1
原创 PCIe System Reset
PCIe System Reset前言复位类型IP Core Support Reset前言复位类型Cold ResetWarm RestHot ResetFunction Level Reset7-series-Xilinx PCIe IP Core Support Reset前言复位类型IP Core Support Reset前言为了以后方便回顾,故记录学习MindShare_PCIExpress Technology 相关的内容复位类型复位的整体结构如下:Two Categories
2020-05-29 17:11:04
1190
原创 WinDriver Kernel Plugin开发
前言在Windows下开发驱动通常会用到winDriver这种第三方工具,对于实时要求高的应用就得利用winDriver Kernel Plugin,实测在这种方式的PCIE MSI中断处理在Windows下可以保证2ms(和硬件平台有关系)以内的实时响应,如果是Leagcy 中断处理会慢一些。如果此时的响应速度依然达不到要求,就得自己开发内核驱动来优化。工具准备dseo13b.exeddk_make.bat (winDriver\util 文件夹下)Driver_Wizard 生成Kernel
2020-05-26 18:50:08
699
原创 Xilinx PCIE IP快速仿真
PCIE 快速仿真前言环境准备PIO例程仿真Step1:step2:step3:xapp1052例程仿真仿真缺陷前言对于大数据的传输必须搞定DMA的传输方式 ,而对于数据采集的应用,主要方向是从Device->Host的方向,也就不会出现网上所说从Host->Device会出现乱序的情况。利用仿真可以更好的学习IP核信号变化环境准备Vivado 2019.1PIO例程xapp 1052例程K7芯片的板卡PIO例程仿真Step1:创建好IP核,后右击IP核,选择打开Exa
2020-05-26 11:28:31
3288
5
原创 粒子群(PSO)寻优算法(matlab)
粒子群寻优算法网上已经有很多大差不大的代码,但是有可能运行不了,这里记录一个可以使用的,只需要修改适应度函数(要优化的函数)和粒子的维度(优化一个二元函数,则一个粒子的维度就是2维)即可。粒子群优化的方向是使得适应度越来越小的方向。clear all%粒子群算法中的两个参数c1 = 1.49445;%两个加速常数c2 = 1.49445;maxgen=100; % 进化次数 ...
2020-03-09 12:42:32
1585
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人