188 lines
5.2 KiB
Verilog
188 lines
5.2 KiB
Verilog
`timescale 1ns / 1ns
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
// Company:
|
|
// Engineer:
|
|
//
|
|
// Create Date: 2019/12/20 15:37:19
|
|
// Design Name:
|
|
// Module Name: Noise_Estimate
|
|
// Project Name:
|
|
// Target Devices:
|
|
// Tool Versions:
|
|
// Description:
|
|
//
|
|
// Dependencies:
|
|
//
|
|
// Revision:
|
|
// Revision 0.01 - File Created
|
|
// Additional Comments:
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
module Noise_Estimate(
|
|
input clk,
|
|
input rst,
|
|
|
|
input nd_pilot2,
|
|
input [9:0] pilot_noisei,
|
|
input [9:0] pilot_noiseq,
|
|
|
|
output reg nd_EstNoise = 1'd0,
|
|
output reg [27:0] EstNoise_i = 28'd0,
|
|
output reg [27:0] EstNoise_q = 28'd0 //应当为0
|
|
|
|
);
|
|
|
|
//----------------------------------------共轭相乘,延时为6clk-----------------------------------//
|
|
reg [9:0] noisei = 10'd0;
|
|
reg [9:0] noiseq = 10'd0;
|
|
reg [9:0] noiseqh = 10'd0;
|
|
reg nd_noise_d0 = 1'd0;
|
|
reg nd_noise_d1 = 1'd0;
|
|
reg nd_noise_d2 = 1'd0;
|
|
reg nd_noise_d3 = 1'd0;
|
|
reg nd_noise_d4 = 1'd0;
|
|
reg nd_noise_d5 = 1'd0;
|
|
reg nd_noise_d6 = 1'd0;
|
|
always @(posedge clk)begin
|
|
if(rst)begin
|
|
noisei <= 10'd0;
|
|
noiseq <= 10'd0;
|
|
noiseqh <= 10'd0;
|
|
nd_noise_d0 <= 1'd0;
|
|
nd_noise_d1 <= 1'd0;
|
|
nd_noise_d2 <= 1'd0;
|
|
nd_noise_d3 <= 1'd0;
|
|
nd_noise_d4 <= 1'd0;
|
|
nd_noise_d5 <= 1'd0;
|
|
nd_noise_d6 <= 1'd0;
|
|
end
|
|
else begin
|
|
noisei <= pilot_noisei;
|
|
noiseq <= pilot_noiseq;
|
|
if(pilot_noiseq==10'd512) noiseqh <= 10'd511;
|
|
else noiseqh <= -pilot_noiseq;
|
|
nd_noise_d0 <= nd_pilot2;
|
|
nd_noise_d1 <= nd_noise_d0;
|
|
nd_noise_d2 <= nd_noise_d1;
|
|
nd_noise_d3 <= nd_noise_d2;
|
|
nd_noise_d4 <= nd_noise_d3;
|
|
nd_noise_d5 <= nd_noise_d4;
|
|
nd_noise_d6 <= nd_noise_d5;
|
|
end
|
|
end
|
|
|
|
|
|
wire m_axis_dout_tvalid;
|
|
wire [47:0] m_axis_dout_tdata;
|
|
ComMul_EstNoise ComMul_EstNoise (
|
|
.aclk (clk), // input wire aclk
|
|
.s_axis_a_tvalid (1'd1), // input wire s_axis_a_tvalid
|
|
.s_axis_a_tdata ({6'd0,noiseq,6'd0,noisei}), // input wire [31 : 0] s_axis_a_tdata
|
|
.s_axis_b_tvalid (1'd1), // input wire s_axis_b_tvalid
|
|
.s_axis_b_tdata ({6'd0,noiseqh,6'd0,noisei}), // input wire [31 : 0] s_axis_b_tdata
|
|
.m_axis_dout_tvalid (m_axis_dout_tvalid), // output wire m_axis_dout_tvalid
|
|
.m_axis_dout_tdata (m_axis_dout_tdata) // output wire [47 : 0] m_axis_dout_tdata
|
|
);
|
|
|
|
wire [19:0] ComMul_Noisei;
|
|
wire [19:0] ComMul_Noiseq;
|
|
|
|
assign ComMul_Noiseq = m_axis_dout_tdata[43:24];
|
|
assign ComMul_Noisei = m_axis_dout_tdata[19:0];
|
|
|
|
|
|
//--------------------------------------------累加求和,状态机控制----------------------------------------//
|
|
reg state_noise = 1'd0;
|
|
reg [27:0] add_Noisei = 28'd0;
|
|
reg [27:0] add_Noiseq = 28'd0;
|
|
|
|
always @(posedge clk)begin
|
|
if(rst)begin
|
|
add_Noisei <= 28'd0;
|
|
add_Noiseq <= 28'd0;
|
|
nd_EstNoise <= 1'd0;
|
|
EstNoise_i <= 28'd0;
|
|
EstNoise_q <= 28'd0;
|
|
state_noise <= 1'd0;
|
|
end
|
|
else begin
|
|
case(state_noise)
|
|
//帧间复位结束后,等待nd_noise_d6拉高,拉高持续256clk,期间数据全部累加
|
|
//nd_noise_d6拉低说明256clk的累加结束,给一次噪声估计结果,伴随nd
|
|
1'd0:begin
|
|
if(nd_noise_d6) begin
|
|
add_Noisei <= {{8{ComMul_Noisei[19]}},ComMul_Noisei};
|
|
add_Noiseq <= {{8{ComMul_Noiseq[19]}},ComMul_Noiseq};
|
|
nd_EstNoise <= 1'd0;
|
|
EstNoise_i <= EstNoise_i;
|
|
EstNoise_q <= EstNoise_q;
|
|
state_noise <= state_noise + 1'd1;
|
|
end
|
|
else begin
|
|
add_Noisei <= 28'd0;
|
|
add_Noiseq <= 28'd0;
|
|
nd_EstNoise <= 1'd0;
|
|
EstNoise_i <= EstNoise_i;
|
|
EstNoise_q <= EstNoise_q;
|
|
state_noise <= state_noise;
|
|
end
|
|
end
|
|
1'd1:begin
|
|
if(nd_noise_d6==1'd0) begin
|
|
add_Noisei <= add_Noisei;
|
|
add_Noiseq <= add_Noiseq;
|
|
nd_EstNoise <= 1'd1;
|
|
EstNoise_i <= add_Noisei;
|
|
EstNoise_q <= add_Noiseq;
|
|
state_noise <= 1'd0;
|
|
end
|
|
else begin
|
|
add_Noisei <= add_Noisei + {{8{ComMul_Noisei[19]}},ComMul_Noisei};
|
|
add_Noiseq <= add_Noiseq + {{8{ComMul_Noiseq[19]}},ComMul_Noiseq};
|
|
nd_EstNoise <= 1'd0;
|
|
EstNoise_i <= EstNoise_i;
|
|
EstNoise_q <= EstNoise_q;
|
|
state_noise <= state_noise;
|
|
end
|
|
|
|
end
|
|
endcase
|
|
end
|
|
end
|
|
|
|
|
|
//----------------------------------------除data_length=256,再乘2-----------------------------------//
|
|
//----------------------------------------除49,再除2-----------------------------------//
|
|
//根据量化方案,此处不再做除法,相当于噪声估计结果放大了256*49倍
|
|
//FullSystem_v5.m
|
|
|
|
// integer handle01;
|
|
// integer handle02;
|
|
// integer handle03;
|
|
// integer handle04;
|
|
|
|
// reg enable1 = 0;
|
|
// initial begin
|
|
// handle01=$fopen("ComMul_Noisei.txt","w"); $fclose(handle01);
|
|
// handle02=$fopen("ComMul_Noiseq.txt","w"); $fclose(handle02);
|
|
|
|
|
|
|
|
// #10;
|
|
// enable1 = 1;
|
|
// end
|
|
|
|
// always@(posedge clk)begin
|
|
// if(enable1)begin
|
|
// if(nd_noise_d6)begin
|
|
// handle01=$fopen("ComMul_Noisei.txt","a+");$fwrite(handle01,"%d\n",$signed(ComMul_Noisei));$fclose(handle01);
|
|
// handle02=$fopen("ComMul_Noiseq.txt","a+");$fwrite(handle02,"%d\n",$signed(ComMul_Noiseq));$fclose(handle02);
|
|
// end
|
|
// end
|
|
// end
|
|
|
|
|
|
endmodule
|