![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FPGA
文章平均质量分 62
fpga学习
木兮梓淅伏所伊
这个作者很懒,什么都没留下…
展开
-
virtex6 DDR3使用
文章目录简介其实还行,做的比较熟了之后用啥都差不多,毕竟产品是给客户用的,因此必然有ug用户手册,即便是英文的也能读懂。以前做的课设实验或者自己做的比赛,虽然有物资(模块)但是没有对应的说明书或者使用案例,因此做起来非常头疼。一个是看怎么实例化ip核,一个是看ip核的使用(UI,user interface).虽然手里有demo代码,但是代码根本就读不下去,要弄明白原委还得看ug。(有图有真香)简介MIG 7 系列和 Virtex-6 FPGA DDR2/DDR3 - 如何驱动用户接口SoDI原创 2021-12-26 21:26:01 · 667 阅读 · 0 评论 -
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 · 989 阅读 · 0 评论 -
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 · 656 阅读 · 2 评论 -
谈谈FPGA/IC工程师的方向
原型验证,需要ic底层知识,相当于芯片公司生产芯片之前,对芯片功能进行验证。芯片应用(验证)工程师,这个不是指ic验证工程师(使用uvm进行验证一类的),是芯片生产出来之后,对芯片进行验证,这时候基本上是和ic设计、产品测试两个部门打交道了,个人感觉挺累的(开会,沟通,对齐)FPGA逻辑开发,这就分很多方向了,做通信协议的,做高速接口的,做基站的,做AI的,做dsp(ip算法),做系统方案的。...原创 2021-04-11 21:46:54 · 2064 阅读 · 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 · 2511 阅读 · 0 评论 -
安路TD使用sdc约束出现:TMR-5009 warning/PHY-5031
先上报错的截图:错误原因是:生成了一个7bit的时钟信号,但是实际上只使用了4bit,而时序约束里直接把这个时钟信号所有都做了约束。这样就会让软件生成了一个信号n18,但是因为没有使用,软件又不约束这些高bit信号,最后出现这样的情况。谨记,谨记!...原创 2021-02-24 19:39:31 · 1144 阅读 · 0 评论 -
关于高频信号/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 · 5836 阅读 · 0 评论 -
时序约束相关想法
文章目录抛出问题跨时钟域约束关于时钟约束抛出问题如果约束频率比较低,比如20M,软件会过于乐观,从而在布局布线的时候约束不到位,从而最后只能实现19M。这种情况下不能通过约束到30M(实际软件实现29M)来完成目的,因为时序始终是不过的,可能因为某些原因导致跑飞。从fifo的clkw写到 clkr读出的do,led=&do,我也不明白为啥clkw到led就时序不过了(八竿子打不着啊)改了约束之后(从get_nets改为get_clocks)slack更少了,负的更多逻辑logic原创 2021-02-07 17:55:05 · 371 阅读 · 0 评论 -
关于时钟相位差仿真和下板现象不同的一些想法
文章目录环境问题描述解决追溯问题源头总结环境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 · 500 阅读 · 2 评论 -
安路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 · 727 阅读 · 1 评论 -
二进制转格雷码的问题
只有连续的二进制转格雷码,在跨时钟域的时候才能减少亚稳态发生的概率,而两级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 · 216 阅读 · 0 评论 -
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 · 1130 阅读 · 0 评论 -
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 · 3218 阅读 · 0 评论 -
FPGA学习日记-学习资源篇
文章目录网站类课程类资源类(工具、硬件资料)PYNQ 安装HLS开发流程(上手)文档类引脚网站类Xilinx官微(微信公众号)Xilinx githubxilinx中国官网课程类Vivado 公开课-01基础篇:Vivado Vivado 公开课-02进阶篇:精准高效的时序约束资源类(工具、硬件资料)xilinx大学PYNQ 安装如何在Vivado上安装Digilent的board filesHLS开发流程(上手)hls开发流程文档类如果想查某个Xilinx文档的中文版(如ug原创 2020-12-19 22:11:26 · 457 阅读 · 0 评论 -
FPGA学习日记-log2函数
function integer clogb2 (input integer size); begin size = size - 1; for (clogb2=1; size>1; clogb2=clogb2+1) size = size >> 1; end endfunction localparam CMD_WDT_WIDTH = clogb2(CMD_WDT);原创 2020-08-15 00:25:56 · 1447 阅读 · 0 评论 -
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 · 5602 阅读 · 1 评论 -
FPGA学习日记-时序约束
文章目录简介问题-方法某次运算的组合逻辑多:if-else组合逻辑多导致的延时长:多次运算组合逻辑导致延时长位宽大(进位链很长):fanout大reset信号多多周期路径异步路径亚稳态两级寄存器布局走线很长最后的方法多使用IP、DSP简介时序约束对于FPGA来说太重要啦。时序优化手段主要是几种:改代码,位置约束,优化策略。问题-方法某次运算的组合逻辑多:改代码!拆分为最简单的逻辑门。(优化组合逻辑)if-else组合逻辑多导致的延时长:将最长延时(经过逻辑门多)的条件项优先判断。if -原创 2020-06-23 13:01:04 · 483 阅读 · 0 评论 -
关于学习FPGA的一些想法
自我思想记录之前学习了一段时间的强化学习,并且将其从python改写为verilog代码,实现加速。但是,这种自己做的东西,和别人正常的硬件加速,区别还是很大的。我想,当下的潮流几乎无异于软硬件结合,arm+fpga的zynq就是很好的例子。也有很多人用HLs,这部分人是做算法做软件的工程师直接用硬件加速。还有用matlab的simulink图形化实现的。前段时间参加的2019FPGA设计...原创 2020-03-08 17:38:03 · 714 阅读 · 1 评论