
FPGA
qq_16923717
这个作者很懒,什么都没留下…
展开
-
关于FPGA设计中实现信号延时的资源消耗
在FPGA设计中我们经常会遇到对一个信号进行延时的情况,一般只延时一个或几个CLK时,通常是直接打拍,如果要延时的CLK较多时,我们会选择移位寄存器IP核,而有时为了方便,我们常常会使用下面的方式always @ (posedge clk) begin a <= {a[WIDTH-2: 0], en};end前段时间我临时对一个脉冲信号延时8192个CLK就使用了这种写法,当时有意...原创 2019-04-15 23:58:49 · 3277 阅读 · 0 评论 -
记一次FPGA工程艰难的debug经历(模块一定要寄存器输出)
最近调试一个项目,时序没有报错,仿真没有问题,但是上板始终差一个bit,因为更换过器件,所以怀疑IP,各种怀疑,最后没办法,只能在signaltap上一个模块一个模块抓,然后跟仿真结果对比,最终定位到一个计数器。计数器的代码如下always @(posedge clk or posedge reset) begin // 模块3 if (reset) dinCnter ...原创 2019-04-15 21:58:51 · 3170 阅读 · 2 评论 -
关于Altera stratix 4的PLL IP核生成的时钟频率不准
世界上没有PLL不能生成的时钟,如果一个PLL不够,那就两个 —— 尼古拉斯·赵四前两天调试一个项目的时候遇到一个pll的问题,感觉以后也会遇到类似的问题,记录一下。调试平台调试平台如下图所示,基带主时钟为56MHz,由外部输入125MHz的参考时钟给到PLL生成,DDC做一个14MHz的频谱搬移,DDC时钟也是56MHz,使用Cordic算法生成cos和sin信号(其实这里不需要用Co...原创 2019-04-15 21:52:33 · 2295 阅读 · 1 评论 -
quartus prime pro联合modelsim仿真
装了一个18.1 pro版的quartus,发现Tool里面的run simulation不见了,在网上找了半天才发现下面这个链接。Simulation Quick-Start for ModelSim - Intel FPGA Edition ( Intel Quartus Prime Pro Edition)跟着这个链接一步一步往下走就可以了仿真了。但不得不吐槽的是,这样还叫联合仿真吗?除...原创 2019-02-21 16:31:52 · 3789 阅读 · 3 评论 -
如何减少FPGA工程编译时间
FPGA的调试过程是一个迭代过程,会不断的发现bug,然后编译,再调试。调试过程中最耗时间的可能往往是编译,即使是一个小的改动都需要对工程进行一次重编译,所以如何减少工程编译时间是提高工作效率的关键之一。主要可以通过以下几个方面减少编译时间,电脑配置、文件引用、增量编译和编译策略。1 电脑配置电脑配置越好,编译时间越短,这一点是毋庸置疑的。另外需要注意的是,在编译的时候尽量关闭其他占用...原创 2019-02-14 21:07:46 · 6327 阅读 · 0 评论 -
Python做上位机通过JTAG控制FPGA(1):如何使用quartus的tcl
参考资料:quartus handbook, Tcl scripting小节quartus中有个In-System Sources &amp;amp; Probes的IP核,让我们可以使用spf通过jtag向FPGA写入数据和读取数据。但是如果我们要写入大量的数据,这种手动的方式是不行的,好在quartus提供了Tcl命令控制的方式。那么问题来了,这个命令在哪里执行呢? Quartus中有个Tcl...原创 2019-01-20 17:44:25 · 2917 阅读 · 2 评论 -
Quartus报错
quartus版本: Quartus Prime Standard Edition 18.1Error (15465): WYSIWYG primitive “XXXTop:XXXTop_inst|adc_dac_top:adc_dac_inst|ad_fifo:ad_fifo_ADC_I|ad_fifo_fifo_181_hbp6cpq:fifo_0|dcfifo:dcfifo_compon...原创 2019-01-09 14:21:39 · 3081 阅读 · 1 评论 -
建立时间和保持时间的理解、相关计算及在FPGA设计中的应用
学数字电路设计或者面试相关岗位的时候,都需要理解掌握建立时间和保持时间的概念,而这个东西我觉得还挺绕的,看的时候都明白,转过身就忘了,每次要用的时候又到处找资料,理解半天,非常的浪费时间,所以这里用我个人比较容易理解的思路写个总结,加深记忆,也方便以后回顾。1. 分析模型理解建立时间保持时间需要一个模型,如图所示。起点是源触发器D1的采样时刻,终点是目的触发器D2的采样时刻,假设起...原创 2018-09-05 14:41:42 · 13585 阅读 · 3 评论 -
Verilog Coding Styles
参考自:http://guqian110.github.io/pages/2015/04/21/verilog_hdl_coding_style_guide.html好的代码风格不仅便于理解和重用,也便于综合工具的优化,Good Coding Styles应当从设计之初就开始了,因为模块划分的好坏会直接影响到代码的可读性和重用性。所以一开始我们就要遵循一定的规则对模块进行划分,然后...原创 2018-07-24 22:33:08 · 2872 阅读 · 0 评论 -
Verilog中的`timescale及它对仿真时间的影响
1. `timescale`timescale是Verilog中的预编译指令,指定位于它后边的module的时间单位和时间精度,直到遇到新的`timescale指令或者`resetall指令。它的语法如下:`timescale time_unit / time_precision假如我们延时x个时间单位,那延时的总时间time = x*time_unit,但最后真正延时的时间是根据ti...原创 2018-07-18 17:50:23 · 38794 阅读 · 3 评论 -
Verilog中的parameter
1. 概述在Verilog中我们常常会遇到要将一个常量(算法中的某个参数)赋给很多个变量的情况,如:x = 10;y = 10;z = 10;如果此时10要改为9,就需要在代码中修改3个地方,非常的不方便,并且这个10是没有任何意义的,我们不知道它代表什么,所以为了代码的易重用、易读性,我们应常量参数化的形式,如:parameter MAX = 10;x = MAX;...原创 2018-07-16 16:29:20 · 94122 阅读 · 2 评论 -
2---MATLAB将十进制转换成二进制补码
MATLAB中提供了一个将十进制转换为二进制的函数dec2bin,但是该函数只能接受大于0的数,也就是不能直接将负数转换为二进制补码。那如何在MATLAB中生成补码呢?我们都知道负数的补码为其反码加1,然而MATLAB中的二进制是字符型,是不能直接运算的,所以如果用这种方式生成补码的话会比较困难,可能取反码还相对容易,反码加1可能就不是那么容易了。事实上我们有更好的办法。首先得了解补码的原理原创 2017-09-25 10:37:18 · 20288 阅读 · 3 评论 -
3---不严谨的分析下FPGA设计中的截位—Truncate和Rounding
目前搜集到的截位的方法有下面几种> 负数直接截位后+1> Truncate:直接截位> Rounding:舍入截位一般情况下我们对信号进行直接截位(Truncate)就行了,如果对截位精度要求较高,则采用舍入截位(Rounding)方式,如果还不够(不是特殊领域的话应该都够了吧??),那么可能就要研究一下Dither方法了。**不建议采用负数截位后+1的方式,**因为有可能该方式的精度与Truncate是原创 2017-09-23 08:52:28 · 6025 阅读 · 0 评论 -
1---不详细的讲一下Xilinx的BMG:单端口和双端口RAM的区别
Note: 以下内容可能会有错误的地方,仅供参考,详细请查阅Xilinx官方产品指南《pg058-blk-mem-gen》BMG即Block Memory Generator,是Xilinx配置BRAM的IP核,可将BRAM配置成如图所示的5种类型 - RAM分三种,单端口RAM、伪双端口RAM(Simple Dual)和双端口RAM(True Dual),它们之间的区别是什么呢?先看看它们的接原创 2017-09-21 16:14:51 · 10535 阅读 · 5 评论 -
3---Python初体验之简单TestBench自动生成+Verilog模块信号提取
学习了一些Python的基础语法之后,确实被Python优美的表达方式所吸引,所以想用Python来干点什么,之前一直想用MATLAB脚本来完成TestBench的自动生成,这里正好用Python来完成。 TestBench主要包含以下三个部分: 基本的时钟clk和复位rst的生成 读取一个文件中的数据 提取一个模块的接口信号并将其实例化 前两个部分使用原创 2017-08-31 14:53:21 · 9621 阅读 · 2 评论