ThreeYear_s 2023-07-03 21:02 采纳率: 66.7%
浏览 29
已结题

Verilog 曼彻斯特译码 如何实现同步?

实际下载到开发板之后,译码时钟的下降沿随着时间的变化与接受数据的位置随机,一段时间后造成误差,导致译码错误,然后一段时间后误差归零。




//该代码主要负责接受曼彻斯特编码 并进行解码 解码后的数据在28pin 展示 

module top_fpga(
    //global signal                           
    input  clk,
    input  rst_n,
    
    //STM32 port

    input rxd,    
    output txd,
    output data_dis,
    output data_clk,
    output reg flag2,
    output reg data_code


    
);

//编码数据定义
reg [1:0] temp; //存储1-01 0-10
reg flag1=0;
//reg flag2=0;
reg fail=0;
wire clk_bps_en;//编码时钟




//编码时钟配置clk_bps_en
precise_divider//分频模块
#(
    //DEVIDE_CNT = 85.89934592 * fo  @50M
    //DEVIDE_CNT = 42.94967296 * fo  @100M
    .DEVIDE_CNT(32'd1649267)    //9600Hz * 2
)u_precise_divider_0
(
    //global clock
    .clk(clk),
    .rst_n(rst_n),
    
    //user interface
    //.divide_clk()
    .divide_clken(clk_bps_en)
);

//解码

always @ (posedge clk_bps_en)
begin
    temp <= {rxd,temp[1]};
    if(temp == 2'b00 || temp == 2'b11)
    begin
        flag1 <= 1;//开始译码标志
    end
end

always @ (negedge clk_bps_en)
begin
    if(flag1 == 1)
    begin
        flag2 <= ~flag2;
    end
end

always @ (posedge flag2)
begin
    if(temp == 2'b10)
    begin
        data_code <= 0;
        fail <= 0;
    end
    else if(temp == 2'b01)
    begin
        data_code <= 1;
        fail <= 0;
    end
    else if(temp == 2'b00 || temp ==2'b11)
    begin
        data_code <= 0;
        fail <= 1;
    end
end

 


endmodule



  • 写回答

2条回答 默认 最新

  • David1055259499 2023-07-03 23:09
    关注

    来自GPT的回答:

    在 Verilog 中实现曼彻斯特译码的同步,需要考虑时钟的稳定性和数据的准确性。下面是一些建议来改进你的代码以实现同步:

    时钟同步:确保接收到的时钟信号是稳定的,并且与数据的采样时机保持同步。你可以使用时钟锁相环(PLL)来稳定时钟信号,并与数据的边沿对齐。

    时序控制:使用时序控制确保在特定时钟边沿进行数据采样和处理。你可以使用时序控制逻辑来保证译码操作在稳定的时钟边沿进行。

    译码逻辑优化:确保译码逻辑的实现是正确的,并且能够正确解码曼彻斯特编码。你可以仔细检查译码逻辑的实现,确认其与曼彻斯特编码规则相符。

    错误检测和纠正:考虑在译码过程中进行错误检测和纠正。你可以使用校验和或纠错码等技术来验证和修复接收到的数据。

    时钟和数据的随机性:如果在实际下载到开发板后,译码时钟的下降沿与接收数据的位置存在随机性,导致误差和译码错误,你可以考虑以下措施:

    确保时钟信号和数据信号的传输线路稳定,避免干扰和信号损失。
    使用适当的电平转换电路来匹配开发板和外部设备之间的电平差异。
    在数据传输之前,对数据进行预处理和滤波,以减少噪声和干扰对数据的影响。
    请注意,以上建议是一般性的指导,具体实现可能需要根据你的系统和应用需求进行调整和优化。同时,也建议参考开发板和外部设备的规格和文档,了解其特定的时序要求和接口配置。

    希望这些建议对你有帮助!如有更多问题,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月12日
  • 已采纳回答 7月4日
  • 创建了问题 7月3日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表