- 博客(64)
- 资源 (8)
- 收藏
- 关注

原创 数字IC设计学习篇
文章目录tcl语法参考资料某些问题数字逻辑综合工具实践-DCDC多线程tcl语法tcl学习参考资料DC综合简单总结DC综合过程和指令DC/PT 常用到的脚本某些问题DC使用时读入多个verilog文件的问题这里说一下,set list [1 2 3] 不是大括号!if语句报错:Cannot test variable ‘xxx’ because it was not in the event express。这是因为边沿触发信号最多只能有两个(clk,rst)(这是基于触发器特性:
2020-07-30 13:01:34
2550
2

原创 FPGA学习日记-逻辑设计(BRAM、FIFO、DDR、I2C)
文章目录简介FPGA逻辑设计1.BRAM资源使用1.BRAMBRAM IP核使用2.FIFOFIFO IP核使用手撸FIFO代码2.常见接口协议1.DDRDDR3 IP核使用。2.I2C简介FPGA主要的几种功能:逻辑设计(接口),协议(总线、通信协议),处理器架构,算法加速实现,从ASIC到FPGA的原型验证。FPGA逻辑设计1.BRAM资源使用1.BRAMBRAM IP核使用这个比较简单,配置好单双口,用地址+wr_en写/rd_en读即可。读的时候会延迟1-2clk送出数据,这可以通过i
2020-07-04 11:21:34
6602
1
原创 在cshell使用history的问题
history是build-in-shell的命令,无法通过which来找到。所以,在脚本里(py\perl\shell)都无法调用history获取结果。但是cshell怎么解决呢?
2023-07-26 10:13:56
323
原创 uvm callback和factory重载的区别
重载,最开始的来源是c++ , sv面向对象的特性:集成,多态,重载。sv除了支持对方法的重载,还支持对约束constraint的重载。重载(sv)最大的优势是:子类句柄在用父类类型进行传递时,其行为仍然是子类的行为。举例,trans很多时候,都是用uvm_sequence_item的形式在sqr,drv之间传递,然后$cast(tr, uvm_sequence_item) 获取的。
2023-01-05 17:50:02
724
原创 verilog仿真技巧与bug集合
文章目录想1.初学者不建议在设计文件中加入仿真语句;2.初学者也不会在tb里使用类似always一样的设计。对于1.因为把仿真通过的HDL修改为可以综合下板的HDL是很难的一件事,但是适当的使用预编译ifdef来控制何时使用仿真语句,这样可以在设计文件需要综合时忽略仿真语句。在设计文件中使用仿真语句虽有风险,但是可以提现一个人的HDL能力(设计文件里加上initial真的很爽,很方便)对于2.,使用的always设计通常是为了模拟某种时序而进行的描述,一般初学者只是使用initial,task来产生
2022-12-29 18:02:47
1572
原创 关于fork +@(posedge xxx)触发的问题
此处做一些记录罢了。在fork中不能break,但是可以用disable fork来关掉fork。 从而在fork外做break。函数1:函数2:打印结果结论,即使是自己写的极小的delay延时(脉冲信号/毛刺),只要在timescale的精度能识别,就能被另一个线程的@采样到。过程中的问题:1.while(1)中如果没有阻塞,那么会永远循环,不会仿真结束;如果因为wait/@而阻塞,会在另外的线程完成后仿真结束(默认有个跳出?现象是这样,但是不清楚原理)2.while里可以有fork
2022-12-29 18:01:20
332
原创 版本管理工具:github+wiki
这里commit是更新到本地库,然后pull是从服务器更新到本地,push是从本地更新到服务器。创建ssh 密钥,这里不输入密码,后续在pull和push时可以省点心。github wiki需要pro版本才能使用(48/年)本次使用的是ssh,在terminal操作如下。
2022-12-29 17:59:44
344
原创 RTL例化时的奇怪现象
抓端口PSEL和连线的PSEL。结果不一致,即连线PSEL是正常的,端口却为z态。这个信号为input信号。原因是这个模块的IO处没有声明PSEL,但是上层的模块例化这个模块时,有output PSEL的端口,并且连到上层模块的IO上了。这可真的是。...
2022-05-21 21:19:02
307
1
原创 万物皆有频率
文章目录傅里叶级数傅里叶级数的意义信号与系统吉布斯现象声音频率图像频率光电信号光的波粒二象性0和1傅里叶级数傅里叶级数的意义第一次知道傅里叶是高中的课本里,傅里叶级数是指任何一个函数都可以表示为常数+正/余弦函数的形式。那么再具体一点:一个函数分解为若干个谐波(不同频率的分量),对应的频谱。时域周期,则频域离散(下图中sine wave);时域不周期,则频率连续(下图damped transient)时域离散,则频域周期。信号与系统吉布斯现象吉布斯效应:将具有不连续点的周期函数(如
2022-05-04 14:50:05
980
原创 makefile使用心得
cd命令在Makefile中只在当前行生效!shell命令在target内,每行是一个作用域,if-else也必须写到一行内(用\跨行,实际还是一行);不在target内,多行都是一个作用域;.PHONY = run ,goto.DEFAULT_GOAL :=run PROJ_PATH = $(shell pwd)goto: @echo $(PROJ_PATH) @if [ -e $(PROJ_PATH)/base_run ]; then echo "exist base_run";\
2022-05-04 14:48:54
942
原创 tcl学习心得
传参puts "$argv0" puts "$argv" set fsdb_name [lindex $argv 0] set case_name [lindex $argv 1] puts ${fsdb_name}puts ${case_name}结果:
2022-01-02 18:39:29
256
原创 关于RTL、TB的filelist吃不到的问题
文件树:proj/simproj/dut/dut.fproj/tb/tb.fproj/makefile(或者在sim目录下)执行make的时候,vcs是在sim目录下跑起来的,所以-f 去吃平级目录下的tb.f是吃不到的,需要用-F。makefile:tb.f
2022-01-01 16:54:51
1091
原创 virtex6 DDR3使用
文章目录简介其实还行,做的比较熟了之后用啥都差不多,毕竟产品是给客户用的,因此必然有ug用户手册,即便是英文的也能读懂。以前做的课设实验或者自己做的比赛,虽然有物资(模块)但是没有对应的说明书或者使用案例,因此做起来非常头疼。一个是看怎么实例化ip核,一个是看ip核的使用(UI,user interface).虽然手里有demo代码,但是代码根本就读不下去,要弄明白原委还得看ug。(有图有真香)简介MIG 7 系列和 Virtex-6 FPGA DDR2/DDR3 - 如何驱动用户接口SoDI
2021-12-26 21:26:01
904
原创 centos7修改网卡后无法上网问题
ping www.baidu.com未知的域名修改主机ip地址右键属性选属性这个选项原来是自动获取的,可能会在后续发生改变,因此选固定的ip。这个ip在win10主机的cmd窗口输入ipconfig获取:网上说虚拟机内的ip要和物理主机一致的,我这里确实没有一致。虚拟机网络配置打开虚拟网络编辑器。第一处填的ip 地址,要和上面win10主机配置的一致。第四个字段填0,否则和掩码冲突。 子网网关(DNS)的第四个字段填1,2都行。选择DHCP。最后确定。配置ifcfg-ens
2021-12-26 21:24:12
1061
2
原创 关于拉普拉斯金字塔算法硬件实现的一些想法
文章目录从算法的角度,拉普拉斯的计算需要两张相邻分辨率的高斯图像(3840x2160,1920x1080),拉普拉斯对低分辨率的图像做上采样、填充之后卷积,然后和高分辨率的图像相减,得到残差(边缘纹理)。上采样的过程,是行列偶数倍插值“0”的过程,因为低分辨率的图像中灰度值为高分辨率图像的1/4,因此对上采样后的值要x4。(很重要)填充的圈数和卷积核有关,卷积核3x3,填充1圈0。5x5就填充2圈0。卷积核是高斯核,权重为1,4,…36,…4,1。高斯的权重本来是0.01左右的小数,将其放大256倍
2021-08-21 11:01:01
499
10
原创 maltab批量对图像反色
为啥要批量,因为仿真波形图都是黑底的。打印出来啥也看不到。另外一个教训就是,截图的时候如果要加文字,一定要加浅色的,这样反色之后是深色,能看清。先将word中图片批量导出,(word另存为htm格式)然后matlab处理即可。%matlab 从一个文件夹中批量读取、处理并保存图片文件到另外一个文件夹clear;clc;srcFace = './files'; %源文件夹fileSavePath='./file_out';%保存的文件夹src=srcFace;srcsuffix='.jpg'
2021-06-03 18:42:02
496
原创 使用python快速实例化verilog模块信号
在verilog设计过程中,调用实例化模块时是非常头疼的一件事,因为位置绑定不安全,必须使用名称绑定,手动一个个码就很烦于是用python写了一段代码。缺点是没有用正则表达式来除去[],也没有用特定的方式来终止键入。out=''for i in range(1,50): temp=input() temp = temp.replace("input", '') temp = temp.replace("output", '') len_temp = len(temp)
2021-05-24 22:25:20
1762
原创 ML605:virtex6 DDR3调试 phy_init_done无法拉高问题
文章目录其他一些问题关于选错了器件型号如何看仿真图直接说结论吧。vivado不支持6系列FPGA,以及ise生成IP的RTL文件。仿真也不行!在使用IP生成MIG后,我将MIG对应的RTL、sim文件放到vivado里仿真了。我以为都是仿真器没啥区别,ise和vivado都是用的Isim仿真器(如果可以我或许会用modelsim)。而且我用ise跑demo代码的仿真泡一会儿就不停弹窗卡死,实在没法用,无奈才用的vivado。个人估计是原语的问题,vivado代表的是7系的FPGA,自然原语和前代不同,
2021-05-18 17:47:21
1207
原创 verilog两个变量取反相乘出现bug
文章目录起因做简单验证试验解决与小结起因最开始我希望做一个16位小数乘16位小数的运算,考虑到整数部分(16位)为零,于是我直接取低16位作为变量来进行计算(以节约电路面积)。这相当于我把一个小数左移了16bit然后取高16位。a,b为16bit的小数<<<16得到的值,例如a=0.1<<<16=16’b0001100110011001我需要做如下的计算:a x b,(1-a) x b,a x (1-b),(1-a) x (1-b)对应的rtl如下:te
2021-04-23 21:18:44
812
2
原创 matlab 的一个bug:for循环给矩阵赋值失败
文章目录现象1(单个例子)现象2(整体)代码进一步探究(简化代码,4*4矩阵作为图像)希望各位大佬能给予解释!谢谢版本:matlab 2019a现象:嵌套两层for循环,对图像的行列依次点对点赋值给另一个矩阵,只有w个数据成功赋值,其余全为0。这里并不是无聊而是确实有场景需要用到点对点的赋值+运算。现象1(单个例子)我是严重怀疑我用了一个假的matlab.出现了很多根本不该打印的东西。(打印的时候不要用G(i:j)而是temp)用for循环跑出来的结果:(赋值失败,很多0)在for循环外面
2021-04-17 18:39:48
5297
5
原创 关于毕业设计(1):matlab处理jpg转coe并载入BRAM
文章目录jpg转coe载入BRAMjpg转coematlab代码如下:%24bit图转16bit coe%rgb,r5bit,g6bit,b5bit;clc;clear all ;RGB = imread('1.jpg') ;sz = size(RGB);h = sz(1);w = sz(2);R =RGB ( : ,: ,1) ;% h,w故i=h,j=w(先行再列)G =RGB ( : ,: ,2) ;B =RGB ( : ,: ,3) ;outdata = zeros(1
2021-04-17 12:52:28
2022
原创 关于毕业设计(3):matlab处理verilog仿真数据
文章目录尝试matlab 的一个bug继续尝试一些尝试过的函数str2numhex2decabsstrsplit查看变量属性关于cell尝试verilog仿真的数据如下(部分):每个数都是16进制的,一个数24bit代表rgb888.用matlab把txt读为矩阵数据:im_list = importdata('fpga_gen_picture.txt',',',375);读到的是cell类型的数据,即375个字符串,绝了。尝试了很多种博客的方法都不行,关键还是数组里有字符,字符里还需要分割,
2021-04-17 11:58:32
1719
1
原创 谈谈FPGA/IC工程师的方向
原型验证,需要ic底层知识,相当于芯片公司生产芯片之前,对芯片功能进行验证。芯片应用(验证)工程师,这个不是指ic验证工程师(使用uvm进行验证一类的),是芯片生产出来之后,对芯片进行验证,这时候基本上是和ic设计、产品测试两个部门打交道了,个人感觉挺累的(开会,沟通,对齐)FPGA逻辑开发,这就分很多方向了,做通信协议的,做高速接口的,做基站的,做AI的,做dsp(ip算法),做系统方案的。...
2021-04-11 21:46:54
2322
1
原创 vivado秒退问题:[filemgmt 20-2001] Source scanning failed
xilinx vivado2018.1出的bug。重装之前是打开工程就秒退(无法解析模块之间的层次),重装之后是这样,把正常的模块当做non-module。报错:[filemgmt 20-2001] Source scanning failed (launch error) while processing fileset “sources_1” due to unrecoverable syntax error or design hierarchy issues. Recovering last .
2021-03-09 21:16:05
2833
原创 安路TD使用sdc约束出现:TMR-5009 warning/PHY-5031
先上报错的截图:错误原因是:生成了一个7bit的时钟信号,但是实际上只使用了4bit,而时序约束里直接把这个时钟信号所有都做了约束。这样就会让软件生成了一个信号n18,但是因为没有使用,软件又不约束这些高bit信号,最后出现这样的情况。谨记,谨记!...
2021-02-24 19:39:31
1425
原创 关于高频信号/LVDS/示波器使用心得
文章目录Lvds:对于高频信号:其他Lvds:Lvds和lvcmos的区别就是,lvds是用电流来传输信号的,能传输地更远(20M)且信号失真小,功耗低。对于高频信号:1. 频率200M之后,方波变得更像正弦波2. 占空比实际上没有那么明显,精确;设置75%和50%实际上只有10%左右的差别。3. Lvcmos在传输200M以上的时钟时信号不稳定。需要用lvds。4. 单端走线可以做差分输出(lvds),但是信号不佳;因此要用差分输出。5. 高频不要使用杜邦线来连接6. 选择更好的时钟信号
2021-02-22 20:14:11
6670
原创 阻止广告弹窗
老是自动装垃圾游戏和广告,以后再也不去什么太平洋、xxx之类的下载东西了,免费的东西真坑,下一本pdf能让人怀疑人生。如何设置阻止电脑自动安装软件但是我发现gpedit.mcs都不能用了。解决方案:windows找不到文件gpedit.msc怎么办快压是真的垃圾,反正广告是真的多。弹窗无数。正中央的弹窗其实大概率和下载的软件是有关系的,卸载对应的软件(快压),弹窗就没有了。(用控制面板卸载更干净)阻止 游戏弹窗(屏幕正中央),这个或许有用吧,主要是用来阻止一些并不是本地的exe弹窗,而是网页弹
2021-02-18 09:27:22
632
3
原创 时序约束相关想法
文章目录抛出问题跨时钟域约束关于时钟约束抛出问题如果约束频率比较低,比如20M,软件会过于乐观,从而在布局布线的时候约束不到位,从而最后只能实现19M。这种情况下不能通过约束到30M(实际软件实现29M)来完成目的,因为时序始终是不过的,可能因为某些原因导致跑飞。从fifo的clkw写到 clkr读出的do,led=&do,我也不明白为啥clkw到led就时序不过了(八竿子打不着啊)改了约束之后(从get_nets改为get_clocks)slack更少了,负的更多逻辑logic
2021-02-07 17:55:05
431
原创 关于时钟相位差仿真和下板现象不同的一些想法
文章目录环境问题描述解决追溯问题源头总结环境AB口都是8bit数据位宽,2k深度。Mif文件是255-0的周期数据,A口写入0-255的周期数据,B口写入255-0的周期数据。问题描述这两天遇到了一个问题,在使用双口RAM ip核的时候(读后写模式),仿真现象是过了的,但是下板现象却不过。仿真在addra=2042应该读出doa=5,但是下板的时候发现doa读出了250。(手动狗头)找了很久也没有找到bug,因为从cea写入等角度来看,都是ok的,读后写,应该先读出5再写入250,这很是让
2021-02-05 10:35:57
675
2
原创 实例化模块时,端口数据被截断的问题
环境:TD(RAM IP核)+modelsim仿真如果实例化RAM ip核时端口被截断,(如下图,实际输入dia为20bit,而使用dia[7:0]时截断)ram.v仿真使用ram.v仿真文件时(TD在生成ip核时,会对应有ram.v,ram_sim.v,后者才是正确的仿真文件,尤其是ram带mif文件时),dia[19:8]都是高阻态。并且这只在wea=0(图中cea即wea,笔误)读的时候发生。ram_sim.v使用ram_sim.v仿真文件时,dia[19:8]都是白色虚线,我还是第
2021-02-04 09:29:48
299
2
原创 modelsim error (suppressible): (vsim-SDF-3250)、(vsim-SDF-3445)
使用do脚本的时候报错,说找不到instance 的文件。先放上能用的do脚本:要点
2021-01-28 15:04:58
3319
原创 安路TD使用sdc约束出现:TMR-6524 WARNING/TMR-6513 WARNING
原本是想做一个sdc,约束跨时钟域的两个信号。但是TD报bug:此时的sdc如下:修改sdc后仍然有bug:此时的sdc如下:这两者在时序报告中都找不到max_delay:但是使用get_nets -hier {gray_rdaddress*}或者get_regs -hier {gray_rdaddress*}均能找到对应的信号,说明没有被优化掉。使用write_verilog打印生成的gate电路。查看gate.v:(为什么要查看,因为source code风格不好的话,综合
2021-01-26 15:50:24
925
1
原创 modelsim error(vsim-3601) Iteration limit 10000000 reached at time 0 fs.
排除迭代大小不够,也不是精度问题。但是类似always@(*)//永恒触发 a=~a;或者always # dly a=b;//parameter dly=0时会无限循环都会触发这个bug
2021-01-25 17:05:27
2523
原创 modelsim error:vlog-13060(generate if的问题)
问题显示:原因:在generate for里面再加generate if会报错!generate if里可以加assign,wire,reg,always等写法。
2021-01-22 11:47:35
494
原创 二进制转格雷码的问题
只有连续的二进制转格雷码,在跨时钟域的时候才能减少亚稳态发生的概率,而两级DFF是为了消除亚稳态。那么一个二进制数a x 2,4,8之后,转格雷码没有用。但是一个二进制数a / 2,4,8之后,转格雷码是可以的!(仅针对某些情况)除相当于右移。而我们的二进制数为4,8,12,16,20,右移2位之后即1,2,3,4,5,所以格雷码是可以的。在fifo不同位宽的时候,上述可能有用。比如写入8bit,读出2bit,那么rp到同步到写时钟域,转格雷码之前可以先 / 4 !!!二进制转格雷码:a = (
2021-01-20 17:57:23
248
原创 verilog赋值语句
需要延时的情况说明:不可综合(综合时会忽略掉延时)wire a;//此处并不明确指定位宽,只是说a为wire类型assign a = #1 b+c;//目前仿真未通过,意义是先计算,在1ns后赋值给aassign #1 a = b+c;//1ns后a=b+creg a;//此处并不明确指定位宽,只是说a为reg类型always@(*)begina= #1 b+c;#1 a= b+c;endalways@(边沿触发)begina<= #1 b+c;#1 a<= b+c;
2021-01-19 14:10:09
1273
原创 verilog变量动态位宽遇到的一些问题
但是使用这种动态位宽的时候有些问题。写入mem时check_mem[(check_wrpointer * DATA_WIDTH_W)+:(DATA_WIDTH_W)] <= fifo_din;!check_mem[(check_wrpointer * DATA_WIDTH_W)+:(DATA_WIDTH_W-1)] <= fifo_din;结果居然一样。读出mem时wire[DATA_WIDTH_R-1:0]check_data_dout = check_mem[((che.
2021-01-18 17:59:23
3428
PIC16F54微处理器+matlab+mplab程序
2020-12-20
序列检测器.zip
2019-06-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人