求救:关于串行接收器解码的问题!急!
时间:10-02
整理:3721RD
点击:
求救:关于串行接收器解码的问题!急!串行接收器需要循环接收一组11XX1XX1XX1XX0000000,(每位接受频率为25MHz,但接收数据无伴随时钟)并将四组X提出来输出,每相邻的两个X数据时相同的。程序如下:(程序软件仿真没有问题,但是下载到板子上就出问题了,当out[3]本应为低电平的时候,会出现不时出现连续10us的高电平,其他的也有这种情况,请问各位大虾这是什么问题啊,该怎么解决阿?)
module receive(clk,rx,out); //clk =25m
input clk;
input rx;
output[3:0] out;
reg[3:0] out;
reg[15:0] temp;
reg[4:0] i;
always@ (posedge clk)
begin
temp[0] <= rx;
for(i=1;i<16;i=i+1)
begin
temp[i ] <= temp[i-1];
end
end
always@ (negedge clk)
begin
if(temp[15:11] == 5'b00011)
begin
out[3] <= temp[0];
out[2] <= !temp[3];
out[1] <= temp[6];
out[0] <= !temp[9];
end
end
endmodule
module receive(clk,rx,out); //clk =25m
input clk;
input rx;
output[3:0] out;
reg[3:0] out;
reg[15:0] temp;
reg[4:0] i;
always@ (posedge clk)
begin
temp[0] <= rx;
for(i=1;i<16;i=i+1)
begin
temp[i ] <= temp[i-1];
end
end
always@ (negedge clk)
begin
if(temp[15:11] == 5'b00011)
begin
out[3] <= temp[0];
out[2] <= !temp[3];
out[1] <= temp[6];
out[0] <= !temp[9];
end
end
endmodule
大家都来帮帮忙啊,我现在可是很着急的阿!
2# zmslf
我做了一个串并转换的程序,也总是出现小编说的情况,现在也不知道什么原因造成的,还请达人解答
是不是用自己的时钟采样的啊?可能时钟相位对不起来,按道理串行通信需要CDR就是 clock data recovery的,可能要硬件来实现
楼上说的对。你这个时钟不同源。你把发送模块和接收模块合起来,不过IO,在内部直接对接。看是不是解码正确。
如果对方是25MHz晶振发送的话,你随便用个100MHz的晶振就可以收了,关键是判断长0到11的跳变沿,然后重定位码流的大概相位,否则不同源时钟之间相位滑动是不可避免的,也就必然导致误码
这个需求最大的问题是时钟不同步,首先要解决时钟问题。建议你用一个25M×4=100M时钟原,然后通过检测0的个数来调整出一个25M的enable信号。然后再对相互入采样。
