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;
-
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2)从的FPGA代码看,单片机是边发送数据边回读数据,这样算来,单片机确实只能收到7bit。除非单片机的一字节操作中,有9个sclk。其中前8个用于发送,后8个用于接收。
3)正常的FPGA代码设计应该是先把接收的数据缓存一下,然后在逐个bit被回读回去。
4)用同一个时钟的上升沿采样数据,下降沿发送数据是可以的。只要时序关系满足,就是可以的。
一周热门 更多>