数字costas环verilog设计代码

更新时间:2023-05-23 01:08:16 阅读: 评论:0

//数字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根据需求可以适当向右移位

本文发布于:2023-05-23 01:08:16,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/738810.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:输出   信号   频率   环路
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图