jessie9940509 发表于 2011-12-21 10:26:02

fpga 与DSP 并口 通信的问题

大家好,想请教下,我现在做DSP和FPGA 的XINTF通信就是FPGA像SRAM那样, dsp就想读写SRAM那样。但是发现在读的时候,FPGA判断的地址不对 ,比方说,dsp就往0X2001那个地址写数,再读出来。在读的时候,FPGA发现地址不是0x2001.读出来的数就不对。但是并不是每次都不对,偶尔不对。是不是时需配合的有问题呢?我是严格按照 TI给的时序做的啊。

jessie9940509 发表于 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;
inoutDSP_DATA;
input         DSP_ADDR;
output                LED1;//LED2;
/////////////////////////////////////////
reg         Reg_LED1;//Reg_LED2;
reg         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 == 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 == 5'b11000)&&(cs_fpga == 0))
                                 Reg_LED1<= DSP_DATA;

                end
assign LED1=1'b1;//Reg_LED1;                              
endmodule

jessie9940509 发表于 2011-12-21 20:28:38

./emotion/em101.gif./emotion/em103.gif./emotion/em148.gif./emotion/em147.gif

ou513 发表于 2011-12-21 20:54:11

如果就这样像MCU操作读写好像不行吧,FPGA有些RAM但是地址是不定,应该需要你去做一些控制器后才能正确用,比如说FIFO之类的,还有些如DPRAM的IP,这样后你才可以去读写和管理的。不知道你外面有没有挂什么存储器。

jessie9940509 发表于 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                        DSP_DATA;
input                        DSP_ADDR;
input                        CS0AND1n;
/////////////////////////////////////////
output                        LD;
////////////////////////////////////////////////////////
regLED;
///////////////////////
reg rd_data;
///////////////////////////////////////////////////
always @(posedge RDn or posedge DSP_RSTn )
                begin
                        if (DSP_RSTn) begin
                                rd_data <= 16'bzzzzzzzzzzzzzzzz;
       
                        end
                        else if (( DSP_ADDR == 13'b0000000000001)&& (CS0AND1n == 0 ))
                               rd_data<=LED;
            else rd_data <= 16'bzzzzzzzzzzzzzzzz;

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

assign LD=LED;                                                                                               
endmodule
下面是仿真波形
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_706546RZEW68.GIF
(原文件名:fpga.GIF)

jessie9940509 发表于 2011-12-21 22:09:21

LD 是我要的数据,我把它先写到01地址,再度01地址,第二次就不对了。data那根线出问题了,结果LD就错了,变成了0b000000000000X,怎么会这样呢?这仿真就不过啊。我都弄了两天了,就这几句话。

jessie9940509 发表于 2011-12-21 22:24:17

兄弟姐妹们啊,我还在加班啊,救救我吧。

g47603690 发表于 2011-12-21 23:01:00

很想帮你,但是看了半天还是没弄清楚到底你描述的是什么问题。
你是用的FPGA内部的LE来构建的一个SRAM吗?
那你贴的代码又是什么东西?

zkf0100007 发表于 2011-12-21 23:54:55

DSP没输出时钟么 ,有的话 ,搞成同步的

zkf0100007 发表于 2011-12-21 23:57:44

或者到 Altera官搜设计参考啊 , Xilinx是有的

jessie9940509 发表于 2011-12-22 08:08:53

我是FPGA想做sram让DSP去读写它。

caplsc 发表于 2011-12-22 08:18:52

应该对读写信号RDn WEn的下降沿敏感吧……

redroof 发表于 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 iodata;
reg outbuf;

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

nuaatao 发表于 2011-12-22 14:41:15

回复【9楼】zkf0100007
或者到 altera官搜设计参考啊 , xilinx是有的
-----------------------------------------------------------------------

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

jessie9940509 发表于 2011-12-22 21:38:35

回复【11楼】caplsc
-----------------------------------------------------------------------

对的,谢谢
页: [1]
查看完整版本: fpga 与DSP 并口 通信的问题