搜索
bottom↓
回复: 14

fpga 与DSP 并口 通信的问题

[复制链接]

出0入0汤圆

发表于 2011-12-21 10:26:02 | 显示全部楼层 |阅读模式
大家好,想请教下,我现在做DSP和FPGA 的XINTF通信  就是FPGA像SRAM那样, dsp就想读写SRAM那样  。但是发现在读的时候,FPGA判断的地址不对 ,比方说,dsp就往0X2001那个地址写数,再读出来。在读的时候,FPGA发现地址不是0x2001.读出来的数就不对。但是并不是每次都不对,偶尔不对。是不是时需配合的有问题呢?我是严格按照 TI给的时序做的啊。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-12-21 19:36:01 | 显示全部楼层
但是仿真不对,麻烦给看看代码,哪里的问题呢?


module CommandOperate(resetcommandmainprocess,
                                          DSP_DATA,DSP_ADDR,dsp_we,dsp_rd,cs_fpga,
                                          LED1);
input              resetcommandmainprocess;
input                 dsp_we,dsp_rd,cs_fpga;
inout[15:0]  DSP_DATA;
input[12:8]         DSP_ADDR;
output                LED1;//LED2;
/////////////////////////////////////////
reg[15:0]         Reg_LED1;//Reg_LED2;
reg[15:0]         rd_data;

        always @(posedge dsp_rd or posedge resetcommandmainprocess )
                begin
                        if (resetcommandmainprocess) begin
                                rd_data  <= 16'bzzzz_zzzz_zzzz_zzzz;
        
                        end
                        else if (( DSP_ADDR[12:8] == 5'b11000)&&(cs_fpga == 0))
                                 rd_data  <= Reg_LED1;
            else rd_data  <= 16'bzzzz_zzzz_zzzz_zzzz;

                end
assign DSP_DATA=rd_data ;               
///////////////////////////////////////////////
always @(posedge dsp_we or posedge resetcommandmainprocess)
                begin
                        if (resetcommandmainprocess)begin
                                 Reg_LED1<=16'h0000;
                                 end
                        else if(( DSP_ADDR[12:8] == 5'b11000)&&(cs_fpga == 0))
                                 Reg_LED1<= DSP_DATA;

                end
assign LED1=1'b1;//Reg_LED1[0];                                
endmodule

出0入0汤圆

 楼主| 发表于 2011-12-21 20:28:38 | 显示全部楼层
      

出0入0汤圆

发表于 2011-12-21 20:54:11 | 显示全部楼层
如果就这样像MCU操作读写好像不行吧,FPGA有些RAM但是地址是不定,应该需要你去做一些控制器后才能正确用,比如说FIFO之类的,还有些如DPRAM的IP,这样后你才可以去读写和管理的。不知道你外面有没有挂什么存储器。

出0入0汤圆

 楼主| 发表于 2011-12-21 22:03:18 | 显示全部楼层
fpga外面没有挂存储器,他当做SRAM一样被DSP读写
  大侠,我有写的程序,你看看,就这几句话都不对啊。
module CommandOperate(
                      DSP_RSTn,//Inputs from MAX811
                                RDn,
                                WEn, //from DSP2812
                                DSP_DATA,
                                DSP_ADDR,
                                CS0AND1n,
/////////////////////////////////////////
                                LD
                                );
////////////////////////////////////////////
input               DSP_RSTn;//Inputs from MAX811
input                        RDn;
input                        WEn; //from DSP2812
inout                        [15:0]DSP_DATA;
input                        [12:0]DSP_ADDR;
input                        CS0AND1n;
/////////////////////////////////////////
output[15:0]                        LD;
////////////////////////////////////////////////////////
reg[15:0]  LED;
///////////////////////
reg [15:0]rd_data;
///////////////////////////////////////////////////
always @(posedge RDn or posedge DSP_RSTn )
                begin
                        if (DSP_RSTn) begin
                                rd_data <= 16'bzzzzzzzzzzzzzzzz;
       
                        end
                        else if (( DSP_ADDR[12:0] == 13'b0000000000001)&& (CS0AND1n == 0 ))
                                 rd_data[15:0]<=LED[15:0];
            else rd_data <= 16'bzzzzzzzzzzzzzzzz;

                end
assign DSP_DATA=rd_data;
///////////////////////////////////////////////
always @(posedge WEn or posedge DSP_RSTn )
                begin
                        if (DSP_RSTn) begin
                                LED[15:0] <= 0;
                        end
                        else if (( DSP_ADDR[12:0] == 13'b0000000000001 )&& (CS0AND1n == 0 ))
                                 LED[15:0]<= DSP_DATA[15:0];
                end

assign LD=LED;                                                                                               
endmodule
下面是仿真波形

(原文件名:fpga.GIF)

出0入0汤圆

 楼主| 发表于 2011-12-21 22:09:21 | 显示全部楼层
LD 是我要的数据,我把它先写到01地址,再度01地址,第二次就不对了。data[0]那根线出问题了,结果LD就错了,变成了0b000000000000X,怎么会这样呢?这仿真就不过啊。我都弄了两天了,就这几句话。

出0入0汤圆

 楼主| 发表于 2011-12-21 22:24:17 | 显示全部楼层
兄弟姐妹们啊,我还在加班啊,救救我吧。

出0入0汤圆

发表于 2011-12-21 23:01:00 | 显示全部楼层
很想帮你,但是看了半天还是没弄清楚到底你描述的是什么问题。
你是用的FPGA内部的LE来构建的一个SRAM吗?
那你贴的代码又是什么东西?

出0入0汤圆

发表于 2011-12-21 23:54:55 | 显示全部楼层
DSP没输出时钟么 ,有的话 ,搞成同步的

出0入0汤圆

发表于 2011-12-21 23:57:44 | 显示全部楼层
或者到 Altera官搜设计参考啊 , Xilinx是有的

出0入0汤圆

 楼主| 发表于 2011-12-22 08:08:53 | 显示全部楼层
我是FPGA想做sram  让DSP去读写它。

出0入0汤圆

发表于 2011-12-22 08:18:52 | 显示全部楼层
应该对读写信号RDn WEn的下降沿敏感吧……

出350入477汤圆

发表于 2011-12-22 14:22:26 | 显示全部楼层
对微处理器与FPGA的总线接口,常规的方法是用同步逻辑,而不是异步。
你的DSP应该有一个外总线的参考时钟RefClk,用它当作FPGA的时钟就行了。
通常的接口逻辑写法是:
always @(posedge RefClk)
begin

        if(CS有效)
        begin
                case(地址)
                //对每个可以读或写的地址,分别处理               
                地址1:
                if(读信号有效)
                begin
                //返回该地址的寄存器数据到输出总线(该总线应当是双向的,由CS和读信号打开输出,其他时候都是输入)

                else if(写信号有效)
                begin
                //把数据总线上的数据写入内部寄存器,或者执行某个特定操作...
                ...
                end        ;
                //处理下一个地址
                地址2:
                ......
               
                endcase
        end
end;

常规的双向总线(假设为8位)接口的写法是
inout[7:0] iodata;
reg [7:0] outbuf;

assign iodata =(读信号有效 && CS有效)?outbuf:`bz;
//iodata用于读,outbuf用于写

出0入0汤圆

发表于 2011-12-22 14:41:15 | 显示全部楼层
回复【9楼】zkf0100007
或者到 altera官搜设计参考啊 , xilinx是有的
-----------------------------------------------------------------------

加我下QQ三三零79零零65,找你问点东西

出0入0汤圆

 楼主| 发表于 2011-12-22 21:38:35 | 显示全部楼层
回复【11楼】caplsc
-----------------------------------------------------------------------

对的,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 11:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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