数据分离---verilog
/****************************************************************/ /*模块名称:数据分流模块 ******///// /*模块功能:1,缓存来自分组检测完成后的数据 包括了: ******///// /* a)1个不完整的短训练序列(<16) ******///// /* b)9个完整的短训练序列(9*16) ******///// /* c)2个长训练序列(32+2*64) ******///// /* d)数据序列 ******///// /* 2,对输入数据用DataIndex进行计数 ******///// /* a)1<=DataIndex<=160短训练序列 直接输出 ******///// /* b)1<=DataIndex<=5*16用做粗频率偏差估计的短训练序列 ******///// /* 送入估计缓存器 ******///// /* c)160<DataIndex待检测的长训练序列和数据序列 ******///// /* 送入待检测的数据缓存器 ******///// /* /*模块端口:1,输入端口 ******///// /* Clk: 全局时钟 ******///// /* Rst_n: 全局复位 异步 ******///// /* DataInEnable: 输入分组检测完成有效 ******///// /* DataInRe, DataInIm: 输入分组检测完成后的数据 ******///// /* 补码格式 ******///// /* 8位位宽 1位符号位 1位整数位 6位小数位 ******///// /* 2,输出端口 ******///// /* ShortTrainingOutEnable: 短训练序列数据输出有效 ******///// /* ShortTrainingOutRe ******///// /* ShortTrainingOutIm: 短训练序列数据输出 ******///// /* 补码格式 ******///// /* 8位位宽 1位符号位 1位整数位 6位小数位 ******///// /* EstimationOutEnable: 粗频偏估计数据输出有效 ******///// /* EstimationOutRe ******///// /* EstimationOutIm: 粗频偏估计数据输出 ******///// /* 补码格式 ******///// /* 8位位宽 1位符号位 1位整数位 6位小数位 ******///// /* OtherDataOutEnable: 长训练序列和数据序列输出有效 ******///// /* OtherDataOutRe ******///// /* OtherDataOutIm: 长训练序列和数据序列输出 ******///// /* 补码格式 ******///// /* 8位位宽 1位符号位 1位整数位 6位小数位 ******///// /**///// /****************************************************************/ module Data_Separating( /*全局时钟*****////// input wire Clk, /*异步复位*****////// input wire Rst_n, /*输入分组检测完成有效*****////// input wire DataInEnable, /*输入分组检测完成后的数据*****////// /*补码格式 8位位位宽 1位符号位 1位整数位 6位小数位*****////// input wire [7:0] DataInRe, input wire [7:0] DataInIm, /*短训练序列数据输出有效*****////// output reg ShortTrainingOutEnable, /*短训练序列数据输出 //补码格式 //8位位宽 1位符号位 1位整数位 6位小数位*****////// output reg [7:0] ShortTrainingOutRe, output reg [7:0] ShortTrainingOutIm, /*粗频偏估计数据输出有效*****////// output reg EstimationOutEnable, /*粗频偏估计数据输出 //补码格式 //8位位宽 1位符号位 1位整数位 6位小数位*****////// output reg [7:0] EstimationOutRe, output reg [7:0] EstimationOutIm, /*长训练序列和数据序列输出有效*****////// output reg OtherDataOutEnable, /*长训练序列和数据序列输出 //补码格式 //8位位宽 1位符号位 1位整数位 6位小数位*****////// output reg [7:0] OtherDataOutRe, output reg [7:0] OtherDataOutIm); //-------------------------------------------------------------------------------- //输入级数据缓存 /*输入数据有效缓存*****////// reg TempDataInEnable; /*输入数据缓存*****////// reg [7:0] TempDataInRe; reg [7:0] TempDataInIm; /*数据计数器*****////// reg [15:0] DataIndex; always@(posedge Clk or negedge Rst_n) begin if (!Rst_n) begin /*全局复位*****////// /*输入数据有效缓存*****////// TempDataInEnable <= 0; /*输入数据缓存*****////// TempDataInRe <= 8'b00000000; TempDataInIm <= 8'b00000000; /*数据计数器*****////// DataIndex <= 16'b00000000_00000000; end else begin if (DataInEnable) begin /*输入数据有效下*****////// /*输入数据有效缓存*****////// TempDataInEnable <= 1; /*输入数据缓存*****////// TempDataInRe <= DataInRe; TempDataInIm <= DataInIm; /*数据计数器计数*****////// DataIndex <= DataIndex + 16'b00000000_00000001; end else begin /*输入数据无效下*****////// /*输入数据有效缓存*****////// TempDataInEnable <= 0; /*输入数据缓存*****////// TempDataInRe <= 8'b00000000; TempDataInIm <= 8'b00000000; /*输入数据连续输入*****////// /*在输入数据停止后 1个数据帧结束*****////// DataIndex <= 16'b00000000_00000000; end end end //-------------------------------------------------------------------------------- // 根据DataIndex输出数据 /*短训练序列数据输出*****////// always@(posedge Clk or negedge Rst_n) begin if (!Rst_n) begin /*全局复位下*****////// /*短训练序列数据输出有效*****////// ShortTrainingOutEnable <= 0; /*短训练序列数据输出*****////// ShortTrainingOutRe <= 8'b00000000; ShortTrainingOutIm <= 8'b00000000; end else begin if (TempDataInEnable) begin /*输入数据有效缓存下*****////// if ((1<=DataIndex)&&(DataIndex<=160)) begin /*1<=DataIndex<=160 //短训练序列 //可能已经超出短训练序列部分 //但为能够全部进入长训练序列,故输出160个*****////// /*短训练序列数据输出有效*****////// ShortTrainingOutEnable <= 1; /*短训练序列数据输出*****////// ShortTrainingOutRe <= TempDataInRe; ShortTrainingOutIm <= TempDataInIm; end else begin /*DataIndex>160个后 //超出短训练序列部分*****////// /*短训练序列数据输出无效*****////// ShortTrainingOutEnable <= 0; /*短训练序列数据输出*****////// ShortTrainingOutRe <= 8'b00000000; ShortTrainingOutIm <= 8'b00000000; end end else begin /*没有数据缓存有效*****////// /*短训练序列数据输出有效*****////// ShortTrainingOutEnable <= 0; /*短训练序列数据输出*****////// ShortTrainingOutRe <= 8'b00000000; ShortTrainingOutIm <= 8'b00000000; end end end //-------------------------------------------------------------------------------- /*粗频偏估计数据输出*****////// always@(posedge Clk or negedge Rst_n) begin if (!Rst_n) begin /*全局复位下*******/////// /*粗频偏估计数据输出有效*****////// EstimationOutEnable <= 0; /*粗频偏估计数据输出*****////// EstimationOutRe <= 8'b00000000; EstimationOutIm <= 8'b00000000; end else begin if (TempDataInEnable) begin /*输入数据有效缓存下*****////// if ((1<=DataIndex)&&(DataIndex<=80)) begin /* //1<=DataIndex<=5*16 //用5个短训练序列做4次粗频偏校正*****////// /*粗频偏估计数据输出有效*****////// EstimationOutEnable <= 1; /*粗频偏估计数据输出*****////// EstimationOutRe <= TempDataInRe; EstimationOutIm <= TempDataInIm; end else begin /*DataIndex>=5*16 //超出5个短训练序列*****////// /*粗频偏估计数据输出有效*****////// EstimationOutEnable <= 0; /*粗频偏估计数据输出*****////// EstimationOutRe <= 8'b00000000; EstimationOutIm <= 8'b00000000; end end else begin /*没有数据缓存有效*****////// /*粗频偏估计数据输出有效*****////// EstimationOutEnable <= 0; /*粗频偏估计数据输出*****////// EstimationOutRe <= 8'b00000000; EstimationOutIm <= 8'b00000000; end end end //-------------------------------------------------------------------------------- /*长训练序列和数据序列输出*****////// always@(posedge Clk or negedge Rst_n) begin if (!Rst_n) begin /*全局复位*****////// /*长训练序列和数据序列输出有效*****////// OtherDataOutEnable <= 0; /*长训练序列和数据序列输出*****////// OtherDataOutRe <= 8'b00000000; OtherDataOutIm <= 8'b00000000; end else begin if (TempDataInEnable) begin /*输入数据有效缓存下*****////// if (DataIndex>160) begin /* //DataIndex>160 //超出短训练序列*****////// /*长训练序列和数据序列输出有效*****////// OtherDataOutEnable <= 1; /*长训练序列和数据序列输出*****////// OtherDataOutRe <= TempDataInRe; OtherDataOutIm <= TempDataInIm; end else begin /*//DataIndex //还没有到长训练序列和数据序列*****////// /*长训练序列和数据序列输出有效*****////// OtherDataOutEnable <= 0; /*长训练序列和数据序列输出*****////// OtherDataOutRe <= 8'b00000000; OtherDataOutIm <= 8'b00000000; end end else begin /*没有数据缓存有效*****////// /*长训练蛄泻数据序列输出有效*****////// OtherDataOutEnable <= 0; /*长训练序列和数据序列输出*****////// OtherDataOutRe <= 8'b00000000; OtherDataOutIm <= 8'b00000000; end end end endmodule
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-06-29 阅读 Device Driver Programmer Guide 笔记
2017-06-29 Xilinx AXI总线学习(1)