Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

可以问一下怎么验证你的结果吗? #1

Open
gnlup opened this issue Dec 28, 2021 · 29 comments
Open

可以问一下怎么验证你的结果吗? #1

gnlup opened this issue Dec 28, 2021 · 29 comments

Comments

@gnlup
Copy link

gnlup commented Dec 28, 2021

看到你的LeNet输入中有一个map_in,这个端口是什么意思呢?如果验证的话应该给LeNet什么样的信号呢?非常感谢!

@mele-y
Copy link
Owner

mele-y commented Dec 28, 2021

map_in是CNN输入特征图的值,我是将MNIST的图片数据放在input_rom里的,上传的文件里没有添加LeNet模块的testbeach

@gnlup
Copy link
Author

gnlup commented Dec 28, 2021

那么如果要验证的话,是否可以直接加个顶层模块,在该模块里例化LeNet模块,每个时钟沿从input_rom里送一个16位数给LeNet模块,这样可以吗?
还想问一下,您使用的网络架构是lenet-5结构吗?您project里的各个模块我会仔细去看,不过如果能先知道大致的框架再去看会方便很多,非常感谢!☺️

@mele-y
Copy link
Owner

mele-y commented Dec 28, 2021 via email

@gnlup
Copy link
Author

gnlup commented Dec 28, 2021

非常感谢🙏不是毕设,是一个课程的期末大作业,要求用verilog完成lenet网络,有点头大🤣

@gnlup
Copy link
Author

gnlup commented Jan 2, 2022

抱歉又打扰到您,可是有个问题我一直没有想明白,在您代码中所有shift_ram的深度似乎都是输出特征图的尺寸,比如第一层卷积计算的输入特征图尺寸是32,输出尺寸是28,您在其中用到的shift_ram_28深度是28,可是如果要想将前五整行移入shift_ram的话,深度应该是32?或许是我没有理解您用的shift_ram的工作原理,是像下图一样工作的吗?
image

@mele-y
Copy link
Owner

mele-y commented Jan 2, 2022

我使用的数据集是28*28的mnist,所以第一层输入是28x28x1,输出是24x24x6,我的文档里有写

@gnlup
Copy link
Author

gnlup commented Jan 2, 2022

嗷嗷看到了,不好意思没注意😂

@gnlup
Copy link
Author

gnlup commented Jan 3, 2022

我还想问一下,您之前有遇到过仿真一直出不来结果的情况吗?我用您的tb进行仿真,总是显示在运行,可是之后电脑就卡死了,或者vivado就会闪退,这几天我一直在尝试找出原因,但是没有成功。另外,layer1_tb可以正常仿真,只是输出的数比预期要多一些,不过这应该不是仿真失败的原因。不知道您能否给一些建议,谢谢!

@mele-y
Copy link
Owner

mele-y commented Jan 3, 2022

你可以看看你那个项目的日志文件,有时候vivado软件里不会报出错原因,但在日志里会有

@gnlup
Copy link
Author

gnlup commented Jan 3, 2022

好的,我试一下,谢谢🙏

@gnlup
Copy link
Author

gnlup commented Jan 3, 2022

我尝试了您的方法,修改了一处警告,但仍然得到如下错误:
elaborate step failed with error (s) while executing '.../elaborate.bat' script. Please check that the file has the correct 'read/write/execute' permissions and the tcl console output for any other possible errors or warnings

在我的 tcl console上还有两个错误这样说 :

ERROR: [Vivado 12-4473] Detected error while running simulation. Please correct the issue and retry this operation.

ERROR: [Common 17-39] 'launch_simulation' failed due to earlier errors.

不过这两个错误信息并没有什么帮助,我又检查了"compile.log",里面没有warning 和 error。我又检查了"elaborate.log" ,里面写着:

`Vivado Simulator 2018.2

Copyright 1986-1999, 2001-2018 Xilinx, Inc. All Rights Reserved.

Running: D:/vivado/Vivado/2018.2/bin/unwrapped/win64.o/xelab.exe -wto 294f714be5cb463992363bd33e416d9c --incr --debug typical --relax --mt 2 -L blk_mem_gen_v8_4_1 -L xil_defaultlib -L xbip_utils_v3_0_9 -L c_reg_fd_v12_0_5 -L c_mux_bit_v12_0_5 -L c_shift_ram_v12_0_12 -L fifo_generator_v13_2_2 -L xbip_pipe_v3_0_5 -L xbip_bram18k_v3_0_5 -L mult_gen_v12_0_14 -L unisims_ver -L unimacro_ver -L secureip -L xpm --snapshot tb_behav xil_defaultlib.tb xil_defaultlib.glbl -log elaborate.log

Using 2 slave threads.

Starting static elaboration

Completed static elaboration

Starting simulation data flow analysis
`

似乎也没有太大用处,不过提示我仿真是在data flow analysis这一步卡住的,但是我谷歌了相关信息包括这整个错误都没有找到有用的帮助,不知道您之前有没有遇到过这种情况,不胜感激!

@mele-y
Copy link
Owner

mele-y commented Jan 3, 2022

应该是我生成的ip你不能直接导进去用吧,我使用的是vivado 2016.3和vc709,你可以尝试自己生成ip替代我的ip

@gnlup
Copy link
Author

gnlup commented Jan 3, 2022

好的,目前的ip是我自己生成的,我不知道ip还可以直接导进去🤣,不知道是不是生成ip的时候一些参数弄错了导致的,我再看一下

@gnlup
Copy link
Author

gnlup commented Jan 4, 2022

打扰一下,我想问一下layer2的输出layer2_out的宽度为什么是[286:0]呢,287不能被16或18整除,他有什么含义吗?

@mele-y
Copy link
Owner

mele-y commented Jan 4, 2022 via email

@gnlup
Copy link
Author

gnlup commented Jan 4, 2022

哦哦好的,多谢😁

@gnlup
Copy link
Author

gnlup commented Jan 4, 2022

不好意思再打扰一下,我想问下您ip核中的fifo_16设置的类型和深度分别是什么呢?通过代码似乎不太好推测这两个值。另外,在addr_6中,用count计数每六个数和bias的相加,为什么当count%9!=1时,add_out设为1呢,这个条件我不太理解。再次谢谢您不厌其烦的回复我☺️

@gnlup
Copy link
Author

gnlup commented Jan 4, 2022

从data_count看fifo_16的深度是16对吗?

@mele-y
Copy link
Owner

mele-y commented Jan 4, 2022

fifo位宽是16,深度应该也是16,模9这个我记不太清了,应该是8个是正确的卷积窗口算的值和一个额外的不需要的值

@gnlup
Copy link
Author

gnlup commented Jan 4, 2022

好的,谢谢您,我再看看

@gnlup
Copy link
Author

gnlup commented Jan 4, 2022

我想我找到了报错的原因,实际上应当不是错误,而是规模比较大导致仿真无法完成,vivado就直接报错终止了。在layer2层中,6个维度每一维都要generate16个conv_PE,超出了我电脑的承受能力🤣,我尝试只在一个维度中generate8个 PE,其余维度只是简单注释掉,没有改变代码逻辑,发现是可以出来仿真结果的,但是当我加回到16个之后就又会报错。
现在我尝试修改layer2的规模,但是这有点困难,因为您的模块已经分割的非常完好了,不知道您有没有对模块该如何拆分或合并或直接修改底层逻辑的建议,可以使得仿真时规模小一些,抱歉又打扰您🙏

@mele-y
Copy link
Owner

mele-y commented Jan 6, 2022

这只能通过生成少量卷积计算单元然后重复使用这些计算单元了,但控制的逻辑可能要改很多。
仿真无法完成应该是你的主机内存不足,添加内存可能是比较简单的解决方法。

@gnlup
Copy link
Author

gnlup commented Jan 6, 2022

好的,谢谢您,问题已经解决了。能再问一下您还记得您的input里用的原始图片是数字几吗?☺️

@mele-y
Copy link
Owner

mele-y commented Jan 7, 2022

不记得了,你可以把input.coe里的二进制数据还原成28*28的十进制小数,然后再转化为图片

@gnlup
Copy link
Author

gnlup commented Jan 7, 2022

好的,谢谢您

@6niversea
Copy link

作者您好,我在跑第一层layer的testbench时报错:文件代码里面似乎没有shift_ram_28和shift_ram_24。是不是没有发完全呀?

@6niversea
Copy link

我的邮箱是1399783460@qq.com

@mele-y
Copy link
Owner

mele-y commented Mar 3, 2022

@6niversea 那个是例化的ip,你可以自己新建ip或者把我ip文件夹例的ip导入试试

@6niversea
Copy link

好的谢谢啦。早点休息

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants