打印
[FPGA]

ise10.1综合问题:run out of memory...

[复制链接]
2662|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
machairodus|  楼主 | 2013-7-30 20:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 machairodus 于 2013-7-30 20:03 编辑

            我设计了一个将20x20的图片放大为39x39的程序,思路是这样的,先将图片的信息存入rom中,然后随着addra的增加依次读出并放入存储器reg[23:0]datreg1[399:0]中,而后通过计算得到放大后图片的信息,并放入 存储器reg[23:0]datreg2[1520:0]中,最后随着addr的增加,依次从送给输出端口q。(会不会是存储器用的太多的原因?但是我想不到其它的算法。)
            程序综合了4、5个小时,最后还错了:This Xilinx application has run out of memory or has encountered a memory conflict.  Current memory usage is 2xxxxxx kb.  You can try increasing your system's physical or virtual memory。。。。令我费解的是,这错误是在4g内存(3.2g可用)的32位xp实验机上出现的,而在我64位win8的xp虚拟机(2g)上反而综合成功了!内存小的反而成功了,这与报错信息不符合啊!那么问题究竟出在哪儿呢?
            从综合时间来看,我知道即使不报错,这个设计也是不合格的,所以大家别笑话我了。一般这种图像缩放的情况是怎么设计的呢? 希望大家多多指点!如果大家有关于图像放大的程序(最好是基于 ise10.1, verilog的),希望能发给我,邮箱:1024049029@qq.com
           下面是部分设计程序,问题就是应该出在这部分!
//数据&地址
reg [8:0] addra;
wire [23:0] douta;
reg [23:0] datreg1[399:0];
reg [23:0] datreg2[1520:0];
reg [5:0] m,n;
reg [2:0] s,n_s;
       rom ROM        (
                        .clka(clk),
                        .addra(addra),
                        .douta(douta)
                        );//引用一个深度400,位宽24bit的rom,导入了20x20的图片信息
        parameter IDLE = 3'b001;
        parameter READ = 3'b010;
        parameter WRITE = 3'b100;
        //state machine
        always@(posedge clk)
        begin
                if(rst)
                        s<=IDLE;
                else
                        s<=n_s;
        end
        //===============
        always@(s or addra)
        begin
                n_s = IDLE;
                case(s)
                        IDLE : n_s = READ;
                        READ : if(addra==399)
                                                n_s = WRITE;
                                         else
                                                n_s = READ;
                        WRITE: n_s = WRITE;
                        default:n_s = IDLE;        
                endcase
        end
        //================
        
        always@(posedge clk)
        begin
                case(n_s)
                        IDLE : begin
                                                addra<=0;
                                                m<=0;
                                                n<=0;
                                         end
                        READ : begin
                                                datreg1[addra]<=douta;
                                                addra<=addra+1;
                                         end
                        WRITE: begin
                                                if((h_count>=h_front+h_syn+h_back)&(h_count<h_front+h_syn+h_back+39)
                                                        &(v_count>=v_front+v_syn+v_back)&(v_count<v_front+v_syn+v_back+39))
                                                        begin
                                                                m<=h_count-(h_front+h_syn+h_back);
                                                                n<=v_count-(v_front+v_syn+v_back);
                                                                addr <= n*39+m;
                                                                q<=datreg2[addr];


                                                end                        //将地址与有效区域结合,以显示图片
                                                else begin
                                                                        m<=0;
                                                                        n<=0;
                                                                        q<=0;
                                                                        addr <= 0;
                                                          end

                                           case({(m%2==0),(n%2==0)})                   //计算放大后图片的对应的信息
                                                        2'b11 : datreg2[addr]<=datreg1[(20*n+m)/2];
                                                        2'b01 : datreg2[addr]<=(datreg1[(20*n+m-1)/2]+datreg1[(20*n+m+1)/2])/2;
                                                        2'b10 : datreg2[addr]<=(datreg1[(20*n+m-20)/2]+datreg1[(20*n+m+20)/2])/2;
                                                        default:datreg2[addr]<=(datreg1[(20*n+m-21)/2]+datreg1[(20*n+m+21)/2]+datreg1[(20*n+m-19)/2]+datreg1[(20*n+m+19)/2])/4;
                                                endcase
                                         end
                        default:begin
                                                        addra<=0;
                                                        m<=0;
                                                        n<=0;
                                          end
                endcase
        end

endmodule
deal.rar (1.16 KB)

相关帖子

沙发
GoldSunMonkey| | 2013-7-30 23:47 | 只看该作者
你内存不够

使用特权

评论回复
板凳
GoldSunMonkey| | 2013-7-30 23:47 | 只看该作者
增加内存,换到64位的系统

使用特权

评论回复
地板
machairodus|  楼主 | 2013-7-31 12:27 | 只看该作者
GoldSunMonkey 发表于 2013-7-30 23:47
增加内存,换到64位的系统

     但是我2g的32位xp虚拟机却能综合成功,4g(3.2g可用)的实体机却不行,这是什么情况呢?:dizzy:难道虚拟机还能用到我没有分入虚拟机的那部分内存,这不大可能啊!而且报错时说用了2xxxxxxkb内存,超过了2g,但是绝对不超过3g,3.2g的内存在原理上是可以实现的;但是不成功,说明在综合时,我的机子很有可能只有2g内存是可用的,另外1.2g被和谐掉了:L。这是我根据实际情况推测的,但是不知道造成这种情况的原因是什么!:L
     不过还是谢谢你的回答!

使用特权

评论回复
5
GoldSunMonkey| | 2013-7-31 20:01 | 只看该作者
machairodus 发表于 2013-7-31 12:27
但是我2g的32位xp虚拟机却能综合成功,4g(3.2g可用)的实体机却不行,这是什么情况呢?难道 ...

这个我就不懂了。这个需要操作系统的兄弟帮忙啦

使用特权

评论回复
6
GoldSunMonkey| | 2013-7-31 20:02 | 只看该作者
:lol

使用特权

评论回复
7
GoldSunMonkey| | 2013-7-31 20:02 | 只看该作者
结帖给分啊。

使用特权

评论回复
8
GoldSunMonkey| | 2013-7-31 20:26 | 只看该作者
结帖啊

使用特权

评论回复
9
machairodus|  楼主 | 2013-8-6 12:44 | 只看该作者
GoldSunMonkey 发表于 2013-7-31 20:26
结帖啊

    不好意思啊,前几天出去玩了,没时间上网,现在结贴!:L
    暂时不纠结内存方面的问题了,不过猴哥你知道一般做图像缩放是怎么设计的么?给小弟点经验吧,我这种设计动不动就综合5、6个小时,太折腾人了!

使用特权

评论回复
10
GoldSunMonkey| | 2013-8-6 14:32 | 只看该作者
machairodus 发表于 2013-8-6 12:44
不好意思啊,前几天出去玩了,没时间上网,现在结贴!
    暂时不纠结内存方面的问题了,不过猴哥 ...

我的大设计都是10几个小时。
5~6小时正常啊

使用特权

评论回复
11
machairodus|  楼主 | 2013-8-6 22:30 | 只看该作者
GoldSunMonkey 发表于 2013-8-6 14:32
我的大设计都是10几个小时。
5~6小时正常啊

    可能是以前的设计都比较小,10分钟都搞定的缘故把!
    其实我开始的设想是放大个300x300的图片的,但是综合了一天一夜也没半点结束的意思,所以换了个小的图片20x20,还是用了5、6个小时,那么弄个300x300的岂不是要综合个4、5天?就想着是不是有什么方法可以节省时间!猴哥能不能给点做图像缩放的建议呢?最好用什么方法做?

使用特权

评论回复
12
GoldSunMonkey| | 2013-8-6 22:37 | 只看该作者
这个要学的东西太多了。

使用特权

评论回复
13
GoldSunMonkey| | 2013-8-6 22:37 | 只看该作者
估计讲一个月都不带重样的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

43

帖子

0

粉丝