5、BDS B1I信号码NCO的Verilog 源码

\qquad 下面是BDS B1I信号码NCO的Verilog代码(下载完整的HD-GR基带模块代码):

//                              -*- Mode: Verilog -*-
// Original filename : code_nco.v
// Filename          : bds_code_nco.v 
// Description       : Generate the half-chip enable signal 
 
// Author            : Peter Mumford, UNSW, 2005 
// Author            : Cheng Huaide, turing321.com, 2015 (BDS & 1PPS - processing upgrade)
 
/* 
                 The Code_NCO creates the half-chip enable signal. 
                 This drives the C/A code generator at the required frequency 
                 (nominally 1.023MHz). The frequency must be adjusted by the 
                 application code to align the incomming signal with the 
                 generated C/A code replica and to account for clock error 
                 (TCXO frequency error) and doppler. 
 
                 The code_NCO provides the fine code phase (10 bit) value on 
                 the TIC signal.  
                 Note 1) The full-chip enable (fc_enable) is generated in the code_gen 
                 module and is not aligned with the hc_enable. 
                 The C/A code chip boundaries align to the fc_enable 
                 not the hc_enable. This implies that the fine code phase obtained 
                 from the code_nco that generates the hc_enable will be early by 
                 one clock cycle. To account for this, the pre_tic_enable is used to 
                 latch the code NCO phase.  
 
                 The NCO frequency is: 
 
                    f = fControl * clk/2^N 
                 where: 
                 f = the required frequency 
                 N = 29 (bit width of the phase accumulator) 
                 clk = the system clock (= 40MHz) 
                 fControl = the 28 bit (unsigned) control word 
  
                 To generate the C/A code at f, the NCO must be set to run 
                 at 2f, therefore: 
                      code_frequency = 0.5 * fControl * clk/2^N 
 
                 For a system clock running @ clk = 40 MHz: 
                     fControl = code_frequency * 2^29 / 20[Mhz] 
 
                 For code_frequency = 1.023MHz 
                     fControl = 0x1A30552 
 */ 
/* 
	Copyright (C) 2007  Peter Mumford 
 
    This library is free software; you can redistribute it and/or 
    modify it under the terms of the GNU Lesser General Public 
    License as published by the Free Software Foundation; either 
    version 2.1 of the License, or (at your option) any later version. 
 
    This library is distributed in the hope that it will be useful, 
    but WITHOUT ANY WARRANTY; without even the implied warranty of 
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
    Lesser General Public License for more details. 
 
    You should have received a copy of the GNU Lesser General Public 
    License along with this library; if not, write to the Free Software 
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA 
*/ 
 
module bds_code_nco (clk, rstn, tic_enable, f_control, hc_enable, code_nco_phase); 
    
	input clk, rstn, tic_enable; 
	input [27:0] f_control; 
	output reg hc_enable; 
	output reg [10:0] code_nco_phase; 
 
	reg [28:0] accum_reg; 
	wire [29:0] accum_sum; 
	wire accum_carry; 
 
	// 29 bit phase accumulator 
	always @ (posedge clk) 
	begin 
		if (!rstn) accum_reg <= 0; 
		else accum_reg <= accum_sum[28:0]; 
	end 
 
	assign accum_sum = accum_reg + f_control; 
	assign accum_carry = accum_sum[29]; 
 
	// latch the top 10 bits on the tic_enable 
	always @ (posedge clk) 
	begin 
		if (!rstn) code_nco_phase <= 0; 
		else if (tic_enable) code_nco_phase <= accum_reg[28:18]; // see note 1 above 
	end 
 
	// generate the half-chip enable 
	always @ (posedge clk) 
	begin 
		if (!rstn) hc_enable <= 0; 
		else if (accum_carry) hc_enable <= 1; 
		else hc_enable <= 0; 
	end 
 
endmodule // bds_code_nco 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值