发 帖  
原厂入驻New
[问答] 如何在块存储器中写入和读取矩阵?
110 xilinx FPGA 存储器 内存
分享
你好,
继续这条消息:
http://forums.xilinx.com/t5/Digi ... or/m-p/383681#M3607
我要将数据矩阵存储FPGA而不是LUT的块存储器中作为内存!
因为基于我编写的代码中的上述链接,它使用LUT作为内存而不是fpga的块内存。
所以它的容量很低.....我需要更多的空间来存储像素数据。
能否指导我如何在块存储器中写入和读取矩阵?
谢谢
0
2019-11-7 07:30:54   评论 分享淘帖 邀请回答
12个回答
这是适用于128 * 128图像的正确BRAM:
pumpkin_BRAM your_instance_name(.clka(CLK_OUT2),//输入clka .wea(wea),//输入[0:0] wea .addra({2'b0,ram_trd,addr_test}),//输入[15:0]
addra .dina(color_reg),//输入[23:0] dina .clkb(CLK_OUT2),//输入clkb .addrb({2'b0,bgnd_vcount [6:0],bgnd_hcount [6:0]}),
// input [15:0] addrb .doutb(r1_test_dout)// output [23:0] doutb);
在原帖中查看解决方案
2019-11-7 07:41:46 评论

举报

嗨,
你的图像/视频分辨率是多少?
你需要多少记忆?
如果空间不够,你的意思是所有的Luts都被占用了吗?
你使用的是哪种设备?
如果你通过corgen生成内存,你可以选择块内存,你尝试过但仍然不够吗?
问候,
Vanitha。
--------------------------------------------------
-------------------------------------------请在发布前进行谷歌搜索,
您可能会找到相关信息。请留下帖子 - “接受为解决方案”,如果提供的信息有用且回复,请给予赞誉
2019-11-7 07:47:45 评论

举报

感谢您的回复。
你的图像/视频分辨率是多少?
当我使用此命令在LUT中写入内存时:memory [adim-1:0] [bdim-1:0]
我要显示640 * 480分辨率的图像和LUT内存,我可以显示标准图像,大小不超过74 * 74。
这是基于LUT的内存代码,可以在屏幕上显示正确的图像:
总是@(posedge CLK_OUT2)开始记忆[addr_test] [ram_trd] = color_reg; // Led] end always @(posedge CLK_OUT2)// pclk begin r1_test_dout = memory [bgnd_hcount] [bgnd_vcount];
结束
你需要多少记忆?
你使用的是哪种设备?
640 * 480 * 3 = 921600
我的设备是spartan-6 XC6SLX45,最大2,088 Kb块内存。
如果空间不够,你的意思是所有的Luts都被占用了吗?
图像128 * 128是的!
将使用超过128%的LUT。
另外,我没有使用chipcope IP core o reelase占用LUT的数量。
如果你通过corgen生成内存,你可以选择块内存,你尝试过但仍然不够吗?
是的,我做到了。
但它没有在屏幕上显示正确的图像。
这意味着它不算作矩阵。
在屏幕上,只有行增量和列的数量是常量,而它是不正确的。
我不知道应该如何处理块内存?
这是我写的块内存。
BRAM(.clka(CLK_OUT2),//输入clka 
.wea(wea),//输入[0:0] wea .addra({ram_trd,addr_test}),//输入[13:0] addra .dina(color_reg),//输入[23:0] dina。
clkb(CLK_OUT2),//输入clkb .addrb({bgnd_hcount,bgnd_vcount}),//输入[13:0] addrb .doutb(r1_test_dout)//输出[23:0] doutb);
2019-11-7 08:06:54 评论

举报

嗨,
如果您的屏幕分辨率为640X40,并且您有3种颜色,每种颜色需要8位
650X480 * 24 = 7200kb,但您的设备(Spartan-6 LX45T)只有401Kb(分布式RAM)+ 2088Kb(BRAM),所以我认为这还不够。
要么选择2088Kb的帧大小,要么选择DDR等外部存储器。
问候,
Vanitha。
--------------------------------------------------
-------------------------------------------请在发布前进行谷歌搜索,
您可能会找到相关信息。请留下帖子 - “接受为解决方案”,如果提供的信息有用且回复,请给予赞誉
2019-11-7 08:16:27 评论

举报

是的,对不起,我弄错了。
对于640 * 480,我必须使用DDR2,这是项目的下一步。
但现在我应该在fpga的块内存中保存大小为128 * 128的图像。
事实上,在第一步我应该将图像数据保存在块内存中,然后在下一步中将数据保存在DDR2中。
现在我的问题是关于块存储器中的写矩阵并且像矩阵一样读取它们。
2019-11-7 08:21:52 评论

举报

嗨,
这可以通过地址映射来实现,例如你有128像素和128行BRAM配置了24位写入/读取数据。
内存将有14个地址线,你可以映射(7 downto 0)用于pxel寻址和(13 downto 8)用于行寻址
如果你必须访问(32,32)像素,那么你需要发出的地址是“0011111”&
“0011111”。
希望这可以帮助
问候,
Vanitha。
--------------------------------------------------
-------------------------------------------请在发布前进行谷歌搜索,
您可能会找到相关信息。请留下帖子 - “接受为解决方案”,如果提供的信息有用且回复,请给予赞誉
2019-11-7 08:37:29 评论

举报

我已经完成了,你可以在我的第二篇文章中看到BRAM代码。
adr_test和ram_trd是水平和垂直线的计数器。
在屏幕上,我看到的图像就像你从左右两侧推动图像,图像从正方形变为线条,但颜色正确!
2019-11-7 08:54:56 评论

举报

好,我觉得你很清楚。
另外我认为已确认640X480无法存储在BRAM / Dist RAM中。
那么请您在这篇文章中详细说明您需要的其他信息,以便我们能够为您提供帮助。
问候,
Vanitha。
--------------------------------------------------
-------------------------------------------请在发布前进行谷歌搜索,
您可能会找到相关信息。请留下帖子 - “接受为解决方案”,如果提供的信息有用且回复,请给予赞誉
2019-11-7 09:10:14 评论

举报

是你的指导。
我需要在FPGA的块存储器中存储128 * 128的图像。
我用coregenerator来生成BlockRam,你可以在我的第二篇文章中看到BRAM。
这篇文章的目标:为什么它没有在屏幕上显示正确的图像?
它只显示垂直线。我认为问题是关于我对BRAM的处理方式,但我写的就是你写的东西。
真的我对这个问题感到困惑!
2019-11-7 09:24:04 评论

举报

问题已解决。
非常感谢您的指导。
这是BRAM的正确端口映射。
问题在于读取内存部分。
也是图像32 * 32。
BRAM(.clka(CLK_OUT2),//输入clka .wea(wea),//输入[0:0] wea .addra({4'b0,ram_trd,addr_test}),//输入[13:0] addra
.dina(color_reg),//输入[23:0] dina .clkb(CLK_OUT2),//输入clkb .addrb({4'b0,bgnd_vcount [4:0],bgnd_hcount [4:0]}),/
/ input [13:0] addrb .doutb(r1_test_dout)// output [23:0] doutb);
2019-11-7 09:34:33 评论

举报

嗨,
如果您在屏幕上看不到正确的图像,则可能是您的计时/时间或其他问题。
您可以在BRAM读取路径中插入一个chipcope并检查写入的数据是否正确读取。
在BRAM,Hsync和Vsyn生成后,您有哪些后续模块?
问候,
Vanitha。
--------------------------------------------------
-------------------------------------------请在发布前进行谷歌搜索,
您可能会找到相关信息。请留下帖子 - “接受为解决方案”,如果提供的信息有用且回复,请给予赞誉
2019-11-7 09:46:11 评论

举报

这是适用于128 * 128图像的正确BRAM:
pumpkin_BRAM your_instance_name(.clka(CLK_OUT2),//输入clka .wea(wea),//输入[0:0] wea .addra({2'b0,ram_trd,addr_test}),//输入[15:0]
addra .dina(color_reg),//输入[23:0] dina .clkb(CLK_OUT2),//输入clkb .addrb({2'b0,bgnd_vcount [6:0],bgnd_hcount [6:0]}),
// input [15:0] addrb .doutb(r1_test_dout)// output [23:0] doutb);
2019-11-7 09:55:30 评论

举报

只有小组成员才能发言,加入小组>>

53个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表