-
是通过增加寄存器解决的.
-
没有解决。
现在正在用 systolic arry 平行化。
-
我上面说了,我把平行化的16个RAM都删了,还是同样的错误,这时我只用RAM的百分之30.
-
再说详细一点,我的算法是,
2个矩阵是输入,
3个矩阵是运算的中间过程,被反复的读取,
再4个矩阵是输出。
我之前是把以上9个矩阵写在6个RAM相同里,每个矩阵里都有相同的9个矩阵,用的6个RAM进行平行化运算。
完全没问题。
可是后来按要求9个矩阵都增大了,如果放9个在一个RAM里,就只够1个RAM了。
我现有的RAM只够把中间过程平行化,3个矩阵放在18个RAM里(3个一组,6组),同时取12个数。
可是这种方法就出错了。
memory conflict是内存冲突的意思。
我是从RAM1里取6个数从,从RAM2取6个数,运算玩写入ram3.
是不是我以上的做法引起了内存冲突呢。
有人知道吗
[ 本帖最后由 timdong 于 2013-3-15 21:39 编辑 ]
-
ERROR:Portability:3 - This Xilinx application has run out of memory or has encountered a memory conflict. Current memory usage is 2067352 kb. You can try increasing your system's physical or virtual memory. If you are using a Win32 system, you can increase your application memory from 2GB to 3GB using the /3G switch in your boot.ini file. For more information on this, please refer to Xilinx Answer Record #14932. For technical support on this issue, you can open a WebCase with this project atta
ched at http://www.xilinx.com/support.
-
如果是我做的话,也是读,算,存,读,算,存。把中间过程存进RAM里。
可是速度慢呀,就算是平行化,由于硬件的限制也快不了多少。
我这个朋友的做法提供了一种新的思路,就是不知道是不是可以实现。
-
这是我一个朋友遇到的问题,具体情况我也没有看到。
他要完成一个矩阵运算,他首先把这个 50x50的矩阵都读入2500个寄存器,然后再加减乘除。所以写了3万行。
有没有人碰到过这种情况呀?
[ 本帖最后由 timdong 于 2013-3-11 22:25 编辑 ]
-
问题解决了,是RAM的问题.
我用了coding Examples 的一个Block RAM,但综合以后显示是Distributed RAM.警告会有大量的LUTs.
我把程序里enble的去掉了,综合以后没问题了。
begin
if (clk'event and clk = '1') then
-- if (en_1 = '1') then
if (w_en_1 = '1') then
RAM_1(conv_integer(addressA)) := inputA;
end if;
outputA
-
zynq xc7z020, RAM 是140 X 36KBits
我的数据是12Bits,这样一来我的RAM一共是420M.
我用了占320M,百分之76.
综合慢了点,但没问题。仿真也ok.
-
原帖由 eeleader 于 2013-2-19 12:38 发表 [url=https://bbs.eeworld.com.cn/redirect.php?goto=findpost&pid=1444738&ptid=366088][/url]
这不用问了,肯定综合不过的,厂家FAE
推荐,资源不能超过60%!
资源不能超过60%!
是一定不能超过,还是最好不能超过呢。
出处是在哪呢?
-
楼住再请教一下,我用的是 zynq xc7z020, RAM 是140 X 36KBits .
RAM 中是14BitS数据,所以我有360K的地址.
我一共是2个RAMs,一个是256M,一个是64M,只剩了40M没有用。
现在已经综合了快一个小时了,显示:
Started : "Launching ISE Text Editor to edit RAM_2.vhd".
Started : "Launching ISE Text Editor to edit RAM_1.vhd".
按你说的只能百分之60,那我是综合不出来了吧?
-
只能从文件的第一行开始读,一行一行的读。
我只有2个参数,就放在第一行第二行了。
file_process:process (clk)
file filein: text;
variable fstatus1:FILE_OPEN_STATUS;
variable buf1,buf2,buf3:LINE;
variable data1,data2,data3:std_logic_vector(7 downto 0);
begin
if (clk'event and clk = '1') then
file_open(fstatus1,filein ,"C:\Documents and Settings\sixd0742\Desktop\ram_5_6.txt",read_mode);
readline(filein,buf1);
read(buf1,data1);
readline(filein,buf2);
read(buf2,data2);
file_close(filein);
n_1
-
用计数器没问题,但是在仿真的时候怎么显示呢?
-
:Cry: :Cry: :Cry:
-
问题解决了,每次运算都需要一个编号,当从0开始编就会出现上述的问题,从1开始编就一切正常。
有高人可以解释吗?:titter:
-
代码很长,我发给你好吗?把邮箱给我。:congratulate:
-
我是要在fpga里构造一个RAM,这个RAM只是我这个项目中的一个组件,还有其他组件完成对它的读取,计算和重新写入。
谢谢你的指导,我把初始化的过程写进第一个process里,经过仿真符合要求。再次感谢了。