- 博客(45)
- 资源 (7)
- 收藏
- 关注
原创 FPGA实现对数log2和10*log10
找到的实现对数的方式有三种:LUTCordic无名LUT只能用在输入参数较少的情况中,Cordic看了下,感觉还挺复杂的,就没看了……这里主要讲第三种方式,无名是因为没有找到叫什么名字,它的基本思路是先求log2然后在用换底公式求log10。1. 求log2log_2log2观察下面的表格可以发现,只要找到了输入二进制从高位开始第一个为1的bit的位置,就能知道其log2的...
2019-08-16 16:32:35
13544
2
原创 自己常用的Python正则表达式
贪婪匹配与非贪婪匹配与修饰符re.sub的lambda用法search返回的group链接1. Python re模块2. 菜鸟教程正则表达式3. 博客Python re模块4. 网易云课堂:看文档学爬虫——Python正则表达式..........
2019-04-23 00:19:42
496
原创 关于FPGA设计中实现信号延时的资源消耗
在FPGA设计中我们经常会遇到对一个信号进行延时的情况,一般只延时一个或几个CLK时,通常是直接打拍,如果要延时的CLK较多时,我们会选择移位寄存器IP核,而有时为了方便,我们常常会使用下面的方式always @ (posedge clk) begin a <= {a[WIDTH-2: 0], en};end前段时间我临时对一个脉冲信号延时8192个CLK就使用了这种写法,当时有意...
2019-04-15 23:58:49
3227
原创 记一次FPGA工程艰难的debug经历(模块一定要寄存器输出)
最近调试一个项目,时序没有报错,仿真没有问题,但是上板始终差一个bit,因为更换过器件,所以怀疑IP,各种怀疑,最后没办法,只能在signaltap上一个模块一个模块抓,然后跟仿真结果对比,最终定位到一个计数器。计数器的代码如下always @(posedge clk or posedge reset) begin // 模块3 if (reset) dinCnter ...
2019-04-15 21:58:51
3131
3
原创 关于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
2271
1
原创 自己常用的Python查找表
1. 进制转换(Python负数二进制补码)# 转10进制int('010', 2) # 2进制int('0x02', 16) # 16进制# 转2进制bin(10) # 10进制转二进制,输出'1010''{:08b}'.format(10) # 8bit的二进制,高位补零,输出'00001010'bin(pow(2,5)-10) # 求-...
2019-04-11 11:27:16
930
原创 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
3733
3
原创 如何减少FPGA工程编译时间
FPGA的调试过程是一个迭代过程,会不断的发现bug,然后编译,再调试。调试过程中最耗时间的可能往往是编译,即使是一个小的改动都需要对工程进行一次重编译,所以如何减少工程编译时间是提高工作效率的关键之一。主要可以通过以下几个方面减少编译时间,电脑配置、文件引用、增量编译和编译策略。1 电脑配置电脑配置越好,编译时间越短,这一点是毋庸置疑的。另外需要注意的是,在编译的时候尽量关闭其他占用...
2019-02-14 21:07:46
6248
原创 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
2884
2
原创 网络适配器突然消失的解决办法
想改下IP突然发现网络适配器不见了,后来想起来应该是前一天电脑连了网,Windows进行了自动更新。自己更新出问题也是挺叼的……也没有什么好办法,只好祭出大杀器,系统还原了。系统还原不会删除文档资料等,但是之前系统变量等设置会被还原,需要重新设置。打开控制面板,改成小图标显示,找到疑难解答点击右下角的恢复打开系统还原找到更新之前的还原点,点击下一步、完成就好了...
2019-01-20 16:51:02
27694
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
3042
1
原创 CRC32的FPGA并行实现原理及MATLAB仿真
crc已经反反复复看了好多遍了,每次总是看到一半就放弃了,这两天终于明白了它并行实现的原理,写个总结。
2018-11-12 18:44:44
11359
61
原创 推荐几个自己常用的Windows轻量小软件
1. Clover资源管理器让资源管理器像浏览器一样具有标签和书签功能2. Q-dir资源管理器可以多种分屏,方便浏览和移动文件,有了Clover和Q-dir,文件管理就方便多了3. Snipaste截图工具贴图功能太赞了,F1快捷截图,F3将截图贴在屏幕顶层,抄东西和对比数据的时候非常方便4. Everything搜索工具是不是受够了Windows资源管理器龟速的搜索,想找个文件,...
2018-11-08 11:20:31
2186
原创 OFDM中循环前缀CP的作用
记一点对OFDM中CP作用的理解先来看ISI一般在网上或者其他什么资料里都会看到类似于下面的这张两张图,由于多径的存在,不加保护间隔的话,上一个符号的尾部会落入本符号的采样区间,引起ISI,假如保护间隔后就不会了,很好理解。但是让我迷惑的是,在采样区间内,后边红色的信号对蓝色信号的干扰和ISI干扰看起来不是一样的么?既然后边可以通过信道均衡解决,为什么ISI不可以?图片来源于这里http...
2018-11-01 18:02:28
57634
6
原创 记一个Verilog一段式状态机的低级错误
问题是这样的:我想在某个状态state1下根据输入a改变输出b的值,但是在芯片里运行的时候发现只要状态维持在state1下,b的值始终是从上一个状态跳到state1时的值,只有在state1变化的边沿,b的值才会根据输入a更新。原代码如下:always @ (posedge clk) begin if (rst) begin b &amp;amp;amp;lt;= 'd0; ...
2018-10-30 10:00:03
2248
原创 建立时间和保持时间的理解、相关计算及在FPGA设计中的应用
学数字电路设计或者面试相关岗位的时候,都需要理解掌握建立时间和保持时间的概念,而这个东西我觉得还挺绕的,看的时候都明白,转过身就忘了,每次要用的时候又到处找资料,理解半天,非常的浪费时间,所以这里用我个人比较容易理解的思路写个总结,加深记忆,也方便以后回顾。1. 分析模型理解建立时间保持时间需要一个模型,如图所示。起点是源触发器D1的采样时刻,终点是目的触发器D2的采样时刻,假设起...
2018-09-05 14:41:42
13557
3
原创 Python udp简单实现及报错问题
先安装socket库import sockets = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 获得本机IPmyname = socket.getfqdn(socket.gethostname())myaddr = socket.gethostbyname(myname)# 绑定端口s.bind((myaddr, 9527...
2018-08-30 13:58:23
1039
原创 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
2782
原创 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
38223
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
93393
2
翻译 2---要多尝试学习新的设计方式
It is easy to become comfortable with a methodology and feel that it is unnecessary to learn the latest design methods. This is a dangerous attitude, as it will cause a designer to lose effectiveness a
2017-10-19 15:46:03
290
原创 1---Vivado HLS开发流程简单介绍
在传统的FPGA设计流程中,一般是自顶向下的模块化设计,这些模块包括用户自己编写的RTL或者是供应商提供的IP核。而在Xilinx新推出的高生产力设计流程中是以IP为核心的,把所有的模块都看做是IP,封装为IP,最主要的是IP的设计是基于C语言的,最后通过HLS将C语言代码转化为RTL,这能极大的加快设计进程。从这段时间的学习来看,HLS综合出来的电路比我自己写的RTL更省资源,在时序方面可能会差一
2017-10-13 11:20:39
17152
原创 1---学习一个新开发工具的流程
工作中会经常要学习一些新的工具,自己总结了一个简单的学习过程第一步:掌握开发的基本流程或步骤,每个步骤的意义第二步:掌握优化设计的方法和优化的coding styles第三步:针对自己的方向,了解一些常用的lib的使用,然后在工作中要用到的时候再去深入的了解,之前只做简单了解或者深入的了解小部分即可。尽量每个步骤完成后都能写一个总结的文档,一来加深印象,二来下次需要用到这个工具的时候可以快速回忆起来
2017-09-29 14:03:21
279
原创 2---MATLAB将十进制转换成二进制补码
MATLAB中提供了一个将十进制转换为二进制的函数dec2bin,但是该函数只能接受大于0的数,也就是不能直接将负数转换为二进制补码。那如何在MATLAB中生成补码呢?我们都知道负数的补码为其反码加1,然而MATLAB中的二进制是字符型,是不能直接运算的,所以如果用这种方式生成补码的话会比较困难,可能取反码还相对容易,反码加1可能就不是那么容易了。事实上我们有更好的办法。首先得了解补码的原理
2017-09-25 10:37:18
20210
3
原创 3---不严谨的分析下FPGA设计中的截位—Truncate和Rounding
目前搜集到的截位的方法有下面几种> 负数直接截位后+1> Truncate:直接截位> Rounding:舍入截位一般情况下我们对信号进行直接截位(Truncate)就行了,如果对截位精度要求较高,则采用舍入截位(Rounding)方式,如果还不够(不是特殊领域的话应该都够了吧??),那么可能就要研究一下Dither方法了。**不建议采用负数截位后+1的方式,**因为有可能该方式的精度与Truncate是
2017-09-23 08:52:28
5912
1
原创 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
10443
5
原创 2---理解正余弦、复数求模、反正切和乘除运算的CORDIC算法实现
CORDIC(Coordinate Rotation Digital Computer)算法是J.Volder在1956在航空控制系统设计中构思的,但其实相似的算法在更早的1624年就已经被Henry Briggs公布了。https://en.wikipedia.org/wiki/CORDIC CORDIC的基本思想:通过坐标旋转不断的迭代,去逼近一个设定的值,其核心是每次迭代旋转的角度是上一
2017-09-14 13:25:49
7500
原创 1---FIR滤波器简介
2. FIR滤波器是怎么滤波的信号通过一个FIR滤波器其实就是信号与FIR滤波器的系数进行卷积(即乘累加)的过程。 简单信号模型 低频信号:即在时域上变化慢的信号,如1 1 1 1 2 2 2 2,还有直流信号1 1 1 1 1 1 1 高频信号:即在时域上变化快的信号,如1 2 1 2 1 2 1 2
2017-09-08 14:56:47
33170
原创 3---Python初体验之简单TestBench自动生成+Verilog模块信号提取
学习了一些Python的基础语法之后,确实被Python优美的表达方式所吸引,所以想用Python来干点什么,之前一直想用MATLAB脚本来完成TestBench的自动生成,这里正好用Python来完成。 TestBench主要包含以下三个部分: 基本的时钟clk和复位rst的生成 读取一个文件中的数据 提取一个模块的接口信号并将其实例化 前两个部分使用
2017-08-31 14:53:21
9524
2
原创 初学C语言容易遗忘的小知识点归纳
知识点:1. C把所有的非零值都视为真; 2. C中有三种循环for,while,do while. 如何选择循环? 首先确定是入口条件循环还是出口条件循环,for、while或者do while;如果是入口,for和while皆可,但一般而言,当循环涉及初始化和更新变量时,用for比较合适,其他情况用while更好。 3. main() 通常只提供整个程序的框架,最好把main() 放在所有………………
2017-08-31 14:19:00
437
原创 1---Python初体验之生成随机数组并写入文件
初次接触Python完成一个生成随机数并写入文件的流程: 生成一个随机数组tmp[] 统计随机数组中每个数出现的次数 将随机数组以每行一个的形式写入文件.dat文件中 '''生成一个0和1的数组并将它写入.dat文件中'''import random # 导入随机函数print('请输入数组长度')len
2017-08-28 16:06:41
5327
原创 1---C语言|笔记【C语言中的变量总结】
外部变量 局部变量 全局变量 自动变量 寄存器变量 静态变量 以下内容是一个初学者的整理,仅供参考 参考资料《C程序设计语言(第二版)》1. 外部变量《C程序设计语言》中的定义:如果变量定义在任何函数外部,则是外部变量。 说明: 1)外部变量可以在全局范围内访问,因此函数间可以通过外部变量交换数据,而不必使用参数表; 2)外部变量在程序执行期间一直存在; 3)外部变量必
2017-08-22 18:08:20
344
原创 2---C语言|笔记【对C语言指针的初步理解】
指针是一种保存变量地址的变量。所以指针其实也是一种变量。指针的初始化:初始化时“=”右边只能是地址;int a = 0;int *p = &a;int *p = NULL;p = &a;指针的两个元素,记住两点: 1. p看成普通变量,存储变量a的地址,所有对p的操作都只能是改变p中存储的地址,即改变*p指向的变量; —–> 地址 2. *p代表a的值,所有对*p的操作都是对a的值
2017-08-22 16:34:06
235
原创 9---LeetCode【Maximum Subarray】|C语言|
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,1] ha
2017-08-15 11:39:41
1584
原创 7---LeetCode【tag: Array】【Stock I】|C语言|总结
Say you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), d
2017-08-10 17:01:38
400
原创 6---LeetCode【tag: Array】【Rotate Array】|C语言|总结
Rotate an array of n elements to the right by k steps.For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].Note:Try to come up as many solutions as
2017-08-09 16:01:43
380
log2and10.sv
2019-08-16
CRC32的FPGA并行实现原理及MATLAB仿真
2018-11-12
IEEE Std 1364TM-2005: IEEE Standard for Verilog Hardware Description Language.
2018-07-18
Verilog Coding Styles for Improved Simulation Efficiency.
2018-07-18
MATLAB_Simulink_for_Digital_Communication_program_for_student
2016-08-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人