微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求救:关于串行接收器解码的问题!急!

求救:关于串行接收器解码的问题!急!

时间: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

大家都来帮帮忙啊,我现在可是很着急的阿!

2# zmslf
我做了一个串并转换的程序,也总是出现小编说的情况,现在也不知道什么原因造成的,还请达人解答

是不是用自己的时钟采样的啊?可能时钟相位对不起来,按道理串行通信需要CDR就是 clock data recovery的,可能要硬件来实现

楼上说的对。你这个时钟不同源。你把发送模块和接收模块合起来,不过IO,在内部直接对接。看是不是解码正确。

如果对方是25MHz晶振发送的话,你随便用个100MHz的晶振就可以收了,关键是判断长0到11的跳变沿,然后重定位码流的大概相位,否则不同源时钟之间相位滑动是不可避免的,也就必然导致误码

这个需求最大的问题是时钟不同步,首先要解决时钟问题。建议你用一个25M×4=100M时钟原,然后通过检测0的个数来调整出一个25M的enable信号。然后再对相互入采样。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top