FPGA与单片机SPI通信问题

2019-07-16 02:07发布

tica, SimSun, sans-serif">小弟,用单片机做主机给FPGA发一个字节数据,然后FPGA发送回来。但是发现在FPGA里MISO延迟一个周期导致单片机接受的数据少了一位。想请教大神们怎么解决啊?下图为仿真图FPGA,上升沿接受数据,下降沿发送数据,程序也如下
LIBRARY ieee;
USE                ieee.std_logic_1164.all;
USE                ieee.std_logic_unsigned.all;

ENTITY spi_fpga is
PORT (SCK:        IN        std_logic;
          MOSI:        IN        std_logic;
          CS  :        IN  std_logic;
          MISO:        OUT        std_logic);
END        spi_fpga;

ARCHITECTURE        one of spi_fpga is
SIGNAL MOSI_IN:        std_logic;
BEGIN
        PROCESS        (CS,SCK)
                BEGIN
                IF (CS='1')        THEN
                        NULL;
                ELSIF rising_edge(SCK)        THEN
                        MOSI_IN <= MOSI;
                END IF;
        END PROCESS;
        
        PROCESS (SCK)
                BEGIN
                IF        falling_edge (SCK)        THEN
                        MISO <= MOSI_IN;
                END IF;
        END PROCESS;
END one;
QQ截图20120902145935.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
youzizhile
2019-07-16 02:18
PROCESS        (CS,SCK)
                BEGIN
                IF (CS='1')        THEN
                        NULL;
                ELSIF rising_edge(SCK)        THEN
                        MOSI_IN <= MOSI;
                END IF;
        END PROCESS;
        
        PROCESS (SCK)
                BEGIN
                IF        falling_edge (SCK)        THEN
                        MISO <= MOSI_IN;
                END IF;
        END PROCESS;
END one;
使用同一个时钟的上升沿和下降沿操作数据是不能满足数据的建立时间和保持时间的,建议采用更快的时钟来处理这两个操作。
你说的附图有没有看到?

一周热门 更多>