This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于DSP的EMIFA的若干疑问



本人在做DSP的EMIFA的实验的时候遇到下面的问题,DSP6748的外部存储器接在CS2上面,默认的其实地址是0x60000000,但是本人在外部CPLD里面编写了一个译码电路,用EMIFA_ADDR13作为译码,即当EMIFA_ADDR13为1的时候,存储器片选使能,为0的时候不使能,这样就把存储器的地址译码倒了其实地址为0x60002000的地址处了。。。。。但是这只是我的想法,实验中发现,在dsp中往0x60002000的地址处的存储空间写入数据的时候却怎么也写不进去,没办法,只好在外面捕捉一下EMIFA的相关信号了,见图2,当图1中的地址为0x60002000的时候,发现EMIFA_ADDR13一直都是低电平,低电平当然外部存储没有片选了,所有写不进去也是正常的。后来我改了一下地址发现把地址线的EMIFA_ADDR15拉高的时候,即地址为0x60008000的时候,发现外部存储器却意外片选上了;

我所不解的是:1.地址0x60002000,明明就是把EMIFA_ADDR13拉高了,为什么外部捕捉到的EMIFA_ADDR13却一直是低电平

2. 地址0x60008000,明明就是把EMIFA_ADDR15拉高了,为什么外部捕捉到的EMIFA_ADDR13却一直是高电平,这究竟是为什么呢

 

另外,本人再次基础上还有一个地方不懂的,0x60008000才是外部存储的起始地址,但程序对0x60008000地址处写入数据的时候,用ccs的memory browner观察的时候,发现0x60000000地址处的数据居然也有变化!例如,我往0x60008000处写入0xAAAA,发现0x60000000处的数据也变成0xAAAA,向0x60008002处写入0xBBBB,发现0x60000002处的数据也相应的编程0xBBBB;同样,向0x60000000处写入数据的时候,0x60008000处的数据也发生变化(时基实验中发现数据确实写进去了),这个到底是怎么回事呢?

 

希望各位大牛不吝赐教!!

 

但是输出的时候,在外部捕捉到的结果却是这样的

  •  #1. 地址线的A0实际上是地址信号的A2,这就是你为什么看到偏了2位的原因.

    #2. 你在不同地址上看到同样的变化,那是因为你的译码电路的问题,因为你搞错了A13和A15,0x60008000实现上是硬件信号的A13在起作用,至于0x60008000为什么跟着0x60000000变化,应该是CPLD的逻辑对地址线的A13处理上有什么不完善的地方。

  • 您所说的地址线的A0实际上是地址信号的A2,是当外部存储器是8位的时候把?当外部存储器是16位的时候,A0应该接存储器的A1吧,您看一下手册P776页的那个连接图啊,因为我的外部存储接的是16位的存储器,按道理说应该值偏移一位啊,为什么会偏移两位呢

    顺便问一下,因为我的板子外部的EMIFA的地址线只有EMIFA_ADDR[13:0]这14根和CPLD相连这,因为工程需要,我用低13根用于寻址,最高位EMIFA_ADDR13用于地址译码,这里只用了一根地址线译码,会不会造成逻辑错误啊!

  • #1. 上面右边接的是16-bit的设备,其本身A0就是代表8位地址的A1。 在DSP这边不管外面接几位的设备,A0都是代表地址的A2,当接低于32 bit的设备时,低位地址A0, A2由BA0, BA1来充当。

    #2. 只用地址线A13来译码,那么物理上就只有两个地址了,其它地址都会跟着这两个地址一起变。

    0x60008000-0x6000FFFF.都是一样的。

    0x60000000-0x60007FFF都是一样的。

    其实不只上面这段空间是一样的,还有红色地址部分也是一样的,总之,所有A13=1的地址空间都只指向一个地址,A13=0的指向另一个。

    但是你上面说的0x60008000与0x60000000是一样的,应该不对吧,一个是A13=1, 一个是A13=0,建议检查一下CPLD的逻辑吧,对于EMIF来说无非就是送出地址信号而已。

  • 如果我接的是16位的FLASH,若EMA_A[13:0]分别接FLASH的A[14:1],EMA_BA1接FLASH的A[0],那么DSP的可寻址范围是多大啊,是2的14次方,还是2的(14+1)次方啊

  • 我所不明白的是BA1,和BA0参与寻址吗?如果我接的是16位的FLASH,若EMA_A[13:0]分别接FLASH的A[14:1],EMA_BA1接FLASH的A[0],那么DSP的可寻址范围是多大啊,是2的14次方,还是2的(14+1)次方啊,

    又如果我外接的是8位的FLASH呢,EMA_A[13:0]分别接FLASH的A[15:0],EMA_BA1接FLASH的A[1],EMA_BA0接FLASH的A[0],那么寻址范围又是多少呢?

  • PU HU 说:
    我所不明白的是BA1,和BA0参与寻址吗?如果我接的是16位的FLASH,若EMA_A[13:0]分别接FLASH的A[14:1],EMA_BA1接FLASH的A[0],那么DSP的可寻址范围是多大啊,是2的14次方,还是2的(14+1)次方啊,

    ----- 是2的14次方*16-bit = 2的(14+1) * 8-bit. 

    PU HU 说:
    又如果我外接的是8位的FLASH呢,EMA_A[13:0]分别接FLASH的A[15:0],EMA_BA1接FLASH的A[1],EMA_BA0接FLASH的A[0],那么寻址范围又是多少呢

    ---- 是EMA_A[13:0]接8bit flash的 A[15:A2], 是2的(15+1) * 8-bit. 

    定下了A0是32bit地址的最低位后,寻址空间跟接多少 bit的设备就没关系了。

     

  • 那个输出捕捉的波形图时怎么来的,好高级.

  • 那如果我外接的是32位的存储器,但是我的硬件连接是下面的两种情况 1.EMA_A[13:0]分别接FLASH的A[14:1],EMA_BA1接FLASH的A[0],即按照16位的方法连接 2.EMA_A[13:0]分别接FLASH的A[15:2],EMA_BA1接FLASH的A[1],EMA_BA0接FLASH的A[0],即按照8位的方法连接 以上两种方法,在DSP端,可以通过地址移位的方法正确的访问存储器吗? 我以前用的是DSP6713,我记得以前是可以通过地址移位的方法正确的访问外部存储的,因为6713不管是外接的是多少位的存储,硬件连接方法都是一样的,但是6748的连接方法却又8位和16位之分,我想知道如果通过地址因为的话,会出现数据丢失的问题吗,或者有的内存访问不到的问题?

  • 那如果我外接的是32位的存储器,但是我的硬件连接是下面的两种情况
    1.EMA_A[13:0]分别接FLASH的A[14:1],EMA_BA1接FLASH的A[0],即按照16位的方法连接
    2.EMA_A[13:0]分别接FLASH的A[15:2],EMA_BA1接FLASH的A[1],EMA_BA0接FLASH的A[0],即按照8位的方法连接
    以上两种方法,在DSP端,可以通过地址移位的方法正确的访问存储器吗?
    我以前用的是DSP6713,我记得以前是可以通过地址移位的方法正确的访问外部存储的,因为6713不管是外接的是多少位的存储,硬件连接方法都是一样的,但是6748的连接方法却又8位和16位之分,我想知道如果通过地址因为的话,会出现数据丢失的问题吗,或者有的内存访问不到的问题?

  • Songtao Cai 说:

    那个输出捕捉的波形图时怎么来的,好高级.

    这是FPGA 自带的。

  • 你外面接的是FPGA,我还是建议在FPGA端改一下配置吧。

    再说C6748 EMIFA只有16bit,不能接32bit,也没这个配置选项。

  • FPGA端的配置是可以修改的,只是我想知道,到底6748可不可以通过地址移位来访问外部的32位存储器呢,因为我见到6713是可以的!

  • 我只是突发奇想,因为见到6713可以,所以不知道6748是否可以啊