打印

ARM读写FPGA时,运行一会儿ARM程序就死掉了,什么原因?

[复制链接]
2935|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlgcumt|  楼主 | 2013-2-28 16:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
module RDC_AD_V20(clk,rst_n,ARM9200_WR,ARM9200_RD,ARM9200_nCS2,ARM9200_nCS6,ARM9200_DATA,ARM9200_ADDR,
                  sw,mcu_sclk,mcu_miso,mcu_mosi,mcu_npcs1,ad_rst,ad_sclk,ad_miso_a,ad_busy,ad_cs_n,
                                                ad_convsta,da_rst,da_mosi,da_sclk,da_cs_n);

// 信号说明
input clk;
input rst_n;

input ARM9200_WR;
input ARM9200_RD;
input ARM9200_nCS2;
input ARM9200_nCS6;
inout [15:0] ARM9200_DATA;
input [15:0] ARM9200_ADDR;
input [1:0] sw;       

input  mcu_sclk;
output mcu_miso;
input  mcu_mosi;
input  mcu_npcs1;

output ad_rst;
output ad_sclk;
input  ad_miso_a;
//input  ad_miso_b;
input  ad_busy;
output ad_cs_n;
output ad_convsta;

output da_rst;
//input  da_miso;
output da_mosi;
output da_sclk;
output da_cs_n;

parameter DEVID = 4'h3;

/////////////////////////////////////////////////////////////////
reg  ad_convsta_r;
reg  ad_rst_r;
reg  ad_cs_n_r;
reg  da_cs_n_r;
reg  da_rst_r;
reg  ad_en_r;
reg  da_en_r;

wire WR_CPLD,RD_CPLD,RD_DEVID;
reg  [15:0] RD_DATA;

assign ad_sclk = mcu_sclk;
assign da_sclk = mcu_sclk;

assign mcu_miso = ad_miso_a;
assign da_mosi = mcu_mosi;

//assign WR_CPLD = ((ARM9200_WR | ARM9200_nCS2)) && (ARM9200_ADDR[11:10] == sw[1:0]);
//assign RD_CPLD = (~(ARM9200_RD | ARM9200_nCS2)) && (ARM9200_ADDR[11:10] == sw[1:0]);
//
//assign RD_DEVID = (~(ARM9200_RD | ARM9200_nCS6)) && (ARM9200_ADDR[11:10] == sw[1:0]);

assign WR_CPLD = ((ARM9200_WR | ARM9200_nCS2)) ;
assign RD_CPLD = (~(ARM9200_RD | ARM9200_nCS2)) ;
assign RD_DEVID = (~(ARM9200_RD | ARM9200_nCS6)) ;

assign ARM9200_DATA[15:0] = RD_CPLD ?  RD_DATA[15:0] : 16'hzzzz;



assign ad_rst = ad_rst_r;
assign ad_convsta = ad_convsta_r;
//assign ad_cs_n = ad_en_r ? ad_cs_n_r : 1'b1;
assign ad_cs_n = mcu_npcs1;

assign da_cs_n = da_en_r ? da_cs_n_r : 1'b1;
assign da_rst =  da_rst_r;


// MCU读取数据
always @(posedge clk or negedge rst_n)
begin
        if(!rst_n)
                RD_DATA[15:0] <= 16'hzzzz;
        else
                begin
                        if(RD_CPLD)
                                begin
                                        if({ARM9200_ADDR[15:12],ARM9200_ADDR[7:0]} == 12'b101000000000)
                                                RD_DATA[15:0] <= {15'h0,ad_busy};                               
                                end
                        else if(RD_DEVID)
                                begin
                                        if({ARM9200_ADDR[15:12],ARM9200_ADDR[7:0]} == 12'b111100000000)
                                                begin
                                                        RD_DATA[15:0] <= {12'h000,DEVID};
                                                end
                                        else
                                                RD_DATA[15:0] <= 16'hzzzz;       
                                end
                        else
                                RD_DATA[15:0] <= 16'hzzzz;               
                end
end


//MCU写数据
always@( posedge WR_CPLD or negedge rst_n)
begin
        if(!rst_n)
                begin
                        ad_rst_r <= 0;
                        ad_convsta_r <= 1;

                        ad_rst_r <= 0;
                        ad_cs_n_r <= 0;
                        da_cs_n_r <= 0;
                        da_rst_r <= 1;
                       
                        ad_en_r <= 0;
                        da_en_r <= 0;
                end       
        else
                begin                                       
                        case({ARM9200_ADDR[15:12],ARM9200_ADDR[7:0]})
//AD部分                                  
                                   //转换输出                          
                                        12'b101100010000:        ad_convsta_r <= ARM9200_DATA[0];
//                                   //片选
//                                   12'b101100100000: ad_cs_n_r <= ARM9200_DATA[0];       
                                        //复位
                                        12'h101100110000: ad_rst_r <= ARM9200_DATA[0];       
//DA部分
                                        // 片选
                                        12'b101101000000: da_cs_n_r <= ARM9200_DATA[0];
                                        //复位
                                        12'b101101010000: da_rst_r <= ARM9200_DATA[0];
                                       
//                                        // AD使能
//                                        12'b101101100000: ad_en_r <= ARM9200_DATA[0];
                                        // DA使能
                                        12'b101101110000: da_en_r <= ARM9200_DATA[0];
                                       
//                                        default:                ;                       
                                        endcase                       
                                                       
                end
end
                                                  
                                                  
endmodule

相关帖子

沙发
jlgcumt|  楼主 | 2013-2-28 16:48 | 只看该作者
上面是FPGA代码,ARM是AT91RM9200,大伙谁碰到过这样的情况!,在读写FPGA的时候,ARM程序老是死掉(ARM的程序运行在外部的SDRAM里面)。

使用特权

评论回复
板凳
jlgcumt|  楼主 | 2013-2-28 21:24 | 只看该作者
问题的原因貌似已经找到,结贴了!

使用特权

评论回复
地板
1003704680| | 2013-2-28 22:14 | 只看该作者
什么原因?是应该是arm的吧?

使用特权

评论回复
5
jlgcumt|  楼主 | 2013-2-28 22:41 | 只看该作者
FPGA的原因,ARM自己怎么可能把程序跑死掉呢,除非是跑飞了!

使用特权

评论回复
6
jlass| | 2013-3-1 10:00 | 只看该作者
FPGA把ARM搞死了

我来接点分

使用特权

评论回复
7
jlgcumt|  楼主 | 2013-3-1 11:57 | 只看该作者
本帖最后由 jlgcumt 于 2013-3-1 14:38 编辑

今天测试发现还是有问题,就是连续操作FPGA的时候就会死掉,如果操作一次,延时一段时间,再进行操作的时候暂时还没发现问题,(可能还有死的情况!),哎,快疯了!

使用特权

评论回复
8
jlass| | 2013-3-1 15:44 | 只看该作者
写的太快把FPGA的数据写坏了?

可以试试写完成后读一下标志位,确认操作成功了。

使用特权

评论回复
9
蓝色风暴@FPGA| | 2013-3-1 15:56 | 只看该作者
只要外部坏境正常,FPGA怎么可能死掉?

使用特权

评论回复
10
jlgcumt|  楼主 | 2013-3-1 17:59 | 只看该作者
貌似是ARM自己的问题,今天换了一块核心板,还没发现死机的问题,初步估计是ARM片子本身的问题或者是外挂Flash影响的,结贴散分了,可惜不能给自己分数:'(!

使用特权

评论回复
11
GoldSunMonkey| | 2013-3-4 16:16 | 只看该作者
jlgcumt 发表于 2013-3-1 17:59
貌似是ARM自己的问题,今天换了一块核心板,还没发现死机的问题,初步估计是ARM片子本身的问题或者是外挂Fl ...

我没赶上啊

使用特权

评论回复
12
GoldSunMonkey| | 2013-3-4 16:16 | 只看该作者
:'(

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
shang651 + 3
13
shang651| | 2013-3-4 17:08 | 只看该作者
GoldSunMonkey 发表于 2013-3-4 16:16

猴哥,别哭啊

使用特权

评论回复
14
qin552011373| | 2013-3-4 23:22 | 只看该作者
解决了么

使用特权

评论回复
15
GoldSunMonkey| | 2013-3-5 22:46 | 只看该作者
qin552011373 发表于 2013-3-4 23:22
解决了么

看看便知

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!
16
FangTT| | 2013-3-6 22:58 | 只看该作者
GoldSunMonkey 发表于 2013-3-5 22:46
看看便知

哦,mark

使用特权

评论回复
17
GoldSunMonkey| | 2013-3-6 23:14 | 只看该作者
FangTT 发表于 2013-3-6 22:58
哦,mark

欢迎常来

使用特权

评论回复
18
jlgcumt|  楼主 | 2013-3-10 10:36 | 只看该作者
qin552011373 发表于 2013-3-4 23:22
解决了么

呵呵,解决了,有几块核心板上的电源的10uF的电容没焊,焊上就好了,哎,刚开始压根就没考虑到这,以为没啥事,结果找了一个礼拜才想试试焊上!

使用特权

评论回复
19
steven0419| | 2013-5-17 11:46 | 只看该作者
一般情况下能折腾超过3天以上的问题都是都是小错误,

使用特权

评论回复
20
steven0419| | 2013-5-17 11:46 | 只看该作者
一般情况折腾超过3天以上的问题都是都是小错误!哈哈!

使用特权

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

本版积分规则

个人签名:善攻者,动于九天之上,善守者,藏于九地之下!

183

主题

733

帖子

4

粉丝