吉林省住房城乡建设网站,自然搜索优化,北京华夏工程建设监理公司网站,2022新闻热点事件简短30条帧同步
检测数据流#xff0c;来代表检测数据是否开始发送了#xff0c;他的头在哪里#xff08;几次失锁自己设计#xff09;在数字通信中#xff0c;同步码用于指示数据帧的起始位置。由于信道噪声#xff0c;接收到的同步码可能会出现比特错误。###第一步#xff1a;…帧同步检测数据流来代表检测数据是否开始发送了他的头在哪里几次失锁自己设计在数字通信中同步码用于指示数据帧的起始位置。由于信道噪声接收到的同步码可能会出现比特错误。###第一步 计算汉明距离dis-distance代码如下module distance #(parameter LENCODE7, parameter FRAMECODE7b1011000) ( input rst, //复位信号高电平有效 input clk_bitsync, //位同步时钟 input data_din, //输入比特流 output reg [9:0] dis); //汉明距离 wire [LENCODE-1:0] data; //将输入数据送入移位寄存器regdin中 reg [LENCODE-1:0] regdin; integer i0; always (posedge clk_bitsync or posedge rst) if (rst) regdin 0; else begin regdin{data_din,regdin[LENCODE-1:1]}; end assign data regdin^FRAMECODE; integer j0; always (posedge rst or posedge clk_bitsync) if (rst) disLENCODE; else //这里要根据LENCODE的值修改代码完成寄存器数据相加运算 dis data[0]data[1]data[2]data[3]data[4]data[5]data[6];说明汉明距离将一列字符串和帧序列异或剩下几个1,就代表他的汉明距离是多少也就是有多少个不同与0异或得他本身。1101100 ^ 0000000 11011001(1111 4) //汉明距离为4位同步时钟来一个码字则计入一次位同步由gardner算法可得。###第二步帧同步的搜索Search代码如下module search #(parameter LENCODE7, parameter ERRORNUM0, parameter FRAMECODE7b1011000) ( input rst, //复位信号高电平有效 input clk_bitsync, //位同步时钟 input data_din, //输入比特流 input [9:0] dis, //汉明距离 input research_check, //校核状态送来的信号校核未通过时为高电平脉冲 input research_sync, //同步状态送来的信号未同步时为高电平脉冲 output reg search_over); //搜索同步脉冲输出搜索到同步码时为高电平脉冲 reg start 0; //驱动搜索过程的信号有复位信号rst校核状态送来的信号research_check //以及同步状态送来的信号research_sync。搜索到帧同步码时输出一个高 //电平脉冲search_over并终止搜索过程等待下一个驱动信号。 always (posedge clk_bitsync or posedge rst or posedge research_check or posedge research_sync) if (rst| research_check | research_sync ) begin start 1;search_over0;end else if (start (!search_over)) begin if (disERRORNUM) begin search_over 1b1; start 0; end end else search_over 1b0;参数 (配置常量)LENCODE7: 帧同步码的长度7比特。ERRORNUM0: 最大允许的汉明距离即允许的比特错误数。0 表示需要完美匹配。FRAMECODE7’b1011000: 预期的 7 比特帧同步码图案。核心模块start变量为1,代表重启动搜索。并清除 search_over 为 0。工作逻辑:当系统复位或丢失同步时处于此模块控制的状态。它时刻监视dis信号。一旦发现dis 0即找到一个疑似帧头它会拉高search_over信号通知系统进入“校核”阶段。输入控制:research_check和research_sync是来自后级模块的反馈如果后级发现之前的判决是错的会通知search模块重新开始全网搜索。###第三步帧同步的安检Check作用防止数据载荷中偶然出现与帧头相同的数据假同步代码如下always (posedge clk_bitsync or posedge rst) if (rst) begin cn_code 0; cn_frame 0; end else begin if ((cn_code0) search_over | continue) begin cn_code 1; checkce1;end else if ((cn_code0) (cn_codeLENFRAME-1)) cn_code cn_code 1; else if (cn_codeLENFRAME-1) begin cn_code 0; if (cn_frameCHECKNUM-1) begin continue1;cn_framecn_frame1; end else begin continue0;cn_frame0;checkce0;end end end reg recheck0; always (posedge clk_bitsync or posedge rst) if (rst) recheck0; else if (checkce) begin if ((cn_code(LENFRAME-1)) (disERRORNUM)) recheck1; end else if (recheck) recheck0; reg ced0; always (posedge clk_bitsync or posedge rst) if (rst) begin research_check0; check_over0; end else begin ced checkce; if (ced !checkce recheck) research_check1; else research_check0; if (ced !checkce !recheck) check_over1; else check_over0; end*工作逻辑:收到 search_over 后启动。根据 LENFRAME (16) 建立计数器。它会在第 16 个时钟周期再次检查 dis汉明距离 是否为 0。Parameter CHECKNUM(2): 它需要连续 2次 在预定位置检测到帧头。如果通过校核拉高 check_over进入“同步态”。如果中途失败拉高 research_check把状态踢回给 search 模块重新搜索###第四步同步态功能: 在系统稳定同步后输出对齐的数据并持续监视连接质量。代码如下//---------------------------------------------------------------- // 1. 计数器控制逻辑 // 用于产生校核过程中的时序控制信号 checkce (校核使能) // 以及两个计数器cn_code (帧内比特计数) 和 cn_frame (连续帧计数) //---------------------------------------------------------------- reg continue; // 内部信号用于维持连续多帧的校核状态 reg [9:0] cn_code; // 帧内计数器从0计数到 LENFRAME-1 reg [3:0] cn_frame; // 帧数计数器记录已经成功校核了多少帧 reg checkce; // 校核使能信号高电平表示正在进行校核过程 always (posedge clk_bitsync or posedge rst) if (rst) begin cn_code 0; cn_frame 0; continue 0; // 复位时清除连续标志 checkce 0; // 复位时清除使能 end else begin // 启动条件 // 1. search_over: 搜索模块通知找到了第一个疑似帧头 // 2. continue: 或者当前处于连续校核的过程中 // 并且 cn_code 为0 (确保从头开始计数) if ((cn_code0) (search_over | continue)) begin cn_code 1; checkce 1; // 启动校核过程 end // 帧内计数如果没有数到一帧的末尾继续累加 else if ((cn_code0) (cn_codeLENFRAME-1)) cn_code cn_code 1; // 帧尾处理当数满一帧 (达到 LENFRAME-1) else if (cn_codeLENFRAME-1) begin cn_code 0; // 帧内计数器清零准备下一帧 // 判断是否达到了需要的校核次数 (CHECKNUM) if (cn_frame CHECKNUM-1) begin continue 1; // 继续保持校核状态 cn_frame cn_frame1; // 已校核帧数 1 end else begin // 已完成所有帧的校核 continue 0; // 停止连续校核 cn_frame 0; // 帧数计数器清零 checkce 0; // 拉低使能表示校核阶段结束 end end end //---------------------------------------------------------------- // 2. 错误检测逻辑 // 在每一帧的特定位置帧头位置检查误码情况 //---------------------------------------------------------------- reg recheck; // 失败标志位如果在校核期间发现不匹配拉高此信号 always (posedge clk_bitsync or posedge rst) if (rst) recheck 0; else if (checkce) begin // 仅在校核使能期间工作 // 在每一帧的最后一个时钟周期 (cn_code LENFRAME-1) // 此时应该是下一个帧头出现的位置。 // 检查 dis (当前输入与巴克码的距离/误码数) 是否大于容限 (ERRORNUM) if ((cn_code(LENFRAME-1)) (disERRORNUM)) recheck 1; // 如果误码过大标记为“需要重新检查/校核失败” end else if (recheck) recheck 0; // 如果 checkce 已经拉低自动清除标志位准备下一次 //---------------------------------------------------------------- // 3. 结果输出逻辑 // 在校核过程结束的下降沿根据 recheck 标志输出最终结果 //---------------------------------------------------------------- reg ced; // checkce delay用于检测 checkce 的下降沿 always (posedge clk_bitsync or posedge rst) if (rst) begin research_check 0; check_over 0; ced 0; end else begin ced checkce; // 打一拍用于边沿检测 // 检测 checkce 的下降沿 (ced为1checkce为0)意味着校核过程刚好结束 // 情况A校核结束且 recheck 标志为 1 (中间发现了错误) if (ced !checkce recheck) research_check 1; // 输出校核失败通知 Search 模块重新搜索 else research_check 0; // 情况B校核结束且 recheck 标志为 0 (全程无误) if (ced !checkce !recheck) check_over 1; // 输出校核成功通知 Sync 模块进入锁定状态 else check_over 0; end输入输出变量input rst, //复位信号高电平有效 input clk_bitsync, //位同步时钟 input data_din, //输入比特流 input [9:0] dis, //汉明距离 input search_over, //搜索模块送来的信号高电平启动校核过程 output reg research_check, //校核未通过送出高电平脉冲 output reg check_over); //校核同步脉冲输出搜索到同步码时为高电平脉冲工作逻辑:收到 check_over 后拉高 state_sync表示系统已锁定。输出:data_out: 经过延时调整的数据流确保与 frame_start 逻辑对齐frame_start: 每隔 16 个周期产生一个脉冲指示一帧的开始。保护机制:它继续每隔 16 个周期检查 dis。Parameter SYNCNUM(2): 只有连续 2次 没检测到帧头可能是信道干扰导致的误码不判定轻易失步它才会认为连接断开拉高 research_sync让系统回到 search 状态。状态机的流向如下Search (搜索): 逐位滑动发现匹配 - 转入 Check。Check (校核):等待 16 周期。匹配成功且次数 2 继续 Check。匹配失败 - 回到 Search。匹配成功且次数 2 - 转入 Sync。Sync (锁定):输出 state_sync 1。等待 16 周期。匹配成功 - 保持 Sync清零错误计数。匹配失败 - 错误计数1。如果错误计数 2 - 回到 Search。自己学习记录一下如果有错欢迎指出参考杜勇老师的数字通信与同步技术