本帖最后由 huawuque 于 2014-10-22 20:04 编辑
问题:我现在想要FSX1_NB信号的第一个下降沿开始时才对发送过来的每一位数据DX1_NB进行左移操作(依次填充一个32位的buf数组中),该如何操作呢???
目前的情况是DX1_NB的默认初始值全是高电平,因为发送时钟一直存在,所以在FSX1_NB信号的第一个下降沿开始之前就已经把这些默认值1进行了移位,即buf数组里面最开始是FFFFFFFF,而不是把发送来的第一个数据进行移位,所以求助大家帮忙解决一下!
最初实现移位操作代码:
if(CLKX_rr ='1' and CLKR_r = '0')then
rcv_buf(0) <= DX;
rcv_buf(31 downto 1) <= rcv_buf(30 downto 0);这个是最初的移位代码,因为发送时钟始终存在,所以就把DX1_NB的默认初始值1在FSX1_NB第一个下降沿之前就进行了32次移位,但这并不是我想要的结果。
补充:说说我现在做的东西,目前是想要从DSP通过Mcbsp接口发送32位数据给FPGA接收,每个数据32位,先将DSP发来的每一位DX通过移位操作打包给32位的buf数组,然后一个帧同步FSX1_NB下降沿来一次就将一个32位数据buf给总线Mcbsp_Data,然后我要根据帧同步下降沿作为总线外面RAM的写请求,把对应的每一个32位数据写进RAM中。
现在问题是第一个帧同步下降沿对应总线上接收的数据的总是FFFFFFFF,第二个下降沿对应的才是DSP发送的第一个数据,所以我想把FFFFFFFF去掉,如果去不掉就想着把帧同步往右移一个帧同步周期,让新的帧同步FSX_1第一个下降沿对应总线接收来自DSP发来的第一个数据,最终目的都是不要把FFFFFFFF写进RAM中,只写DSP发来的数据。
主要实现代码如下:
------FPGA接收来自DSP发送的每一位数据,并进行32位移位打包成32位数据包rcv_buf-----------
rcv :process(clk)
begin
if(clk'event and clk = '1')then
if(CLKR_rr ='1' and CLKR_r = '0')then
rcv_buf(0) <= DR;
rcv_buf(31 downto 1) <= rcv_buf(30 downto 0);
end if;
end if;
end process;
-----根据每个帧同步下降沿来把 rcv_buf的值给总线端口------------
Data_latch :process(clk)
begin
if(clk'event and clk = '1')then
if(FSR_rr='1' and FSR_r = '0')then --帧同步下降沿检测
Mcbsp_Data <= rcv_buf; --移位后的32位数据送给端口
end if;
end if;
end process;
写了这么多,就是想让大家集思广益一下,项目急,只能来这寻求帮助了,写的啰嗦,不清楚的可以提一下,我再做解释,谢谢大家!!! |