//数字costas环,设计使用在GPS信号的跟踪部分
//环路噪声带宽Bl=160Hz
//修改时间:2016/6/6
//modelsim仿真通过
//diff_data有正有负,修正pre_uct为有符号数
module costas
(
input clk, rst,
input track_block, //阻塞环路变化,避免初始uct过大
input sink_valid,
input signed [7:0] sink_data,
input [21:0] phi_inc, //捕获输入的精细频率
output reg costas_lock, //costas环的锁定信号
output reg signed [7:0] sine_value, //输出同步正弦载波
output [9:0] mt //输出解调后的信息
);
//-------------------------------------------
中国大学排行榜wire out_valid;
wire [15:0] fsin_o, fcos_o;
reg signed [17:0] uct;
//-------------------------------------------NCO部分
//-------------------------------------------8位数据宽度,16位频率调制宽度
costas_nco costas_nco0
(
.phi_inc_i(phi_inc), //f0=1557kHz
.clk(clk),
.ret_n(rst),
.clken(1'b1),
.freq_mod_i(uct), //频率控制字
.fsin_o(fsin_o),
.fcos_o(fcos_o),
.out_valid(out_valid)
);
//-------------------------------------------NCO的输出仅在out_valid有效时有效
//-------------------------------------------做一级缓存,将不平滑的数据平滑
reg signed [7:0] cosine_value;
//-------------------------------------------将16位的数据截断为8位
always @(podge clk or negedge rst)
if(!rst)
begin
sine_value <= 0;
cosine_value <= 0;
end
el if(out_valid)
begin
cosine_value <= fcos_o[15:8];
sine_value <= fsin_o[15:8];
end
//-------------------------------------------
wire signed [15:0] mul_if, mul_qf;
//-------------------------------------------计算两个乘法
assign mul_if = sink_data * sine_value;
assign mul_qf = sink_data * cosine_value;
//-------------------------------------------
reg mul_valid;
reg signed [7:0] mul_i, mul_q;
//-------------------------------------------
always @(podge clk or negedge rst)
if(!rst)
begin
mul_valid <= 0;
mul_i <= 0;
mul_q <= 0;
end
el if(sink_valid)
begin
mul_valid <= 1;
mul_i <= mul_if[14:7];
mul_q <= mul_qf[14:7];
end
el
mul_valid <= 0;
//-------------------------------------------
wire lpf_valid;
wire signed [7:0] lpf_i, lpf_q;
//-------------------------------------------低通滤波器滤除2倍频分量
costas_lpf costas_lpf_i //I路
(
.clk(clk),
.ret_n(rst),
.ast_sink_data(mul_i),
.ast_sink_valid(mul_valid),
巴黎淘气帮
.ast_source_ready(1'b1),
.ast_sink_error(2'b00),
.ast_source_data(lpf_i),
.ast_sink_ready(), //NC
.ast_source_valid(lpf_valid),
.ast_source_error() //NC
);
//-------------------------------------------
costas_lpf costas_lpf_q //Q路
(
.clk(clk),
.ret_n(rst),
.ast_sink_data(mul_q),
.ast_sink_valid(mul_valid),
.ast_source_ready(1'b1),
.ast_sink_error(2'b00),
.ast_source_data(lpf_q),
.ast_sink_ready(), //NC
.ast_source_valid(), //NC
渐渐的近义词 .ast_source_error() //NC
);
//-------------------------------------------定义积分清洗器
//-------------------------------------------起到滤波和降低采样率的作用
//-------------------------------------------Dr=200
home音标
reg [7:0] yt_cnt;
reg signed [15:0] yit_full, yqt_full;
//-------------------------------------------
always @(podge clk or negedge rst)
if(!rst)
begin
yt_cnt <= 0;
yit_full <= 0;
yqt_full <= 0;
end
el if(lpf_valid)
begin
if(yt_cnt == 200 - 1) //积分清零
begin
yt_cnt <= 0;
yit_full <= 0;
yqt_full <= 0;
end
el
begin
yt_cnt <= yt_cnt + 1'b1;
yit_full <= yit_full + lpf_i;
yqt_full <= yqt_full + lpf_q;
奶奶过生日 end
end
//-------------------------------------------
reg yt_valid;
reg signed [9:0] yit, yqt;
//-------------------------------------------产生积分清洗器的输出有效信号
always @(podge clk or negedge rst)
if(!rst)
begin
yt_valid <= 0;
yit <= 0;
yqt <= 0;
end
el if((lpf_valid) &&(yt_cnt == 200 - 2))
begin
yt_valid <= 1;
yit <= yit_full[15:6]; //截断积分清洗器得到10位的输出
yqt <= yqt_full[15:6];
end
el
关于草的成语 yt_valid <= 0;
//-------------------------------------------输出的数据即为同向支路输出
assign mt = yit;
//-------------------------------------------
wire signed [19:0] udt_full;
//-------------------------------------------使用标准乘法器作为鉴相器
assign udt_full = yit * yqt;
回忆青春的唯美句子
//-------------------------------------------
reg udt_valid;
reg [17:0] udt;
//-------------------------------------------
always @(podge clk or negedge rst)
除夕高速免费吗if(!rst)
begin
udt_valid <= 0;
udt <= 0;
end
el if(yt_valid)
begin
udt_valid <= 1;
udt <= udt_full[18:1];
end
el
udt_valid <= 0;
//---------------------------------------------------------定义环路滤波器
//-------------------------------------------K=0.3068
//-------------------------------------------C1=2^-4 - 2^-7
//-------------------------------------------C2=2^-11
//-------------------------------------------C1,C2根据需求可以适当向右移位