⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pngen.v

📁 直接频率合成
💻 V
字号:
/*******************************************************************************
  ****************************************************************************
 **                                                                             
 **                                                                             
 ** Project Name         : DDS                                            
 **                                                                             
 ** Author               : Daniel J. Morelli
 ** Creation Date        : 04/10/96 20:32:05                                              
 ** Version Number       : 1.0                                                 
 **                                                                             
 ** Revision History     :                                                      
 **                                                                             
 ** Date          Initials         Modification                                 
 **                                                                             
 **                                                                             
 ** Description          :                                                      
 **                                                                             
 ** This module is a pair of GOLD code PN generators of length n=31.
 ** These PN generators can be used to output random I and Q data to
 ** BPSK or QPSK mmodulate the NCO.  ref Peterson and Weldon (1972).
 ** 
 **                                                                             
 *******************************************************************************/

 module pngen(
	RESETN,				// global reset
	PNCLK,				// PN generator clock
	IDATA,				// I axis data
	QDATA);				// Q axis data

// Port types

input PNCLK, RESETN;

output IDATA, QDATA;

reg[4:0] pnig1;		// I pn code generator 1 g1(p) = p^5 + p^2 + 1
reg[4:0] pnig2;		// I pn code generator 2 
reg[4:0] pnqg1;		// Q pn code generator 1 g2(p) = p^5 + p^4 + P^2 + p + 1
reg[4:0] pnqg2;		// Q pn code generator 2
reg[4:0] pnig1_next;		// I pn code generator 1 g1(p) = p^5 + p^2 + 1
reg[4:0] pnig2_next;		// I pn code generator 2 
reg[4:0] pnqg1_next;		// Q pn code generator 1 g2(p) = p^5 + p^4 + P^2 + p + 1
reg[4:0] pnqg2_next;		// Q pn code generator 2

integer lp;				// loop variable

// design architecture
	assign IDATA = pnig1[4] ^ pnig2[4];
	assign QDATA = pnqg1[4] ^ pnqg2[4];

	// sift register for PN code generators
	always@(posedge PNCLK or negedge RESETN)
	if (!RESETN)
		begin
			pnig1 <= 5'b10101;
			pnqg1 <= 5'b10101;
			pnig2 <= 5'b01101;
			pnqg2 <= 5'b01000;
		end
	else
		begin
			pnig1 <= pnig1_next;
			pnqg1 <= pnqg1_next;
			pnig2 <= pnig2_next;
			pnqg2 <= pnqg2_next;
		end


	always@(pnig1 or pnig2 or pnqg1 or pnqg2)
		begin
			pnig1_next[0] <= pnig1[4];
			pnig2_next[0] <= pnig2[4];
			pnqg1_next[0] <= pnqg1[4];
			pnqg2_next[0] <= pnqg2[4];
			for (lp = 1; lp < 5; lp = lp + 1)
				begin
					if (lp == 2)
						begin
							pnig1_next[lp] <= pnig1[lp-1] ^ pnig1[4];
							pnig2_next[lp] <= pnig2[lp-1] ^ pnig2[4];
							pnqg1_next[lp] <= pnqg1[lp-1] ^ pnqg1[4];
							pnqg2_next[lp] <= pnqg2[lp-1] ^ pnqg2[4];
						end
					else
						begin
							pnig1_next[lp] <= pnig1[lp-1];
							pnig2_next[lp] <= pnig2[lp-1];
							pnqg1_next[lp] <= pnqg1[lp-1];
							pnqg2_next[lp] <= pnqg2[lp-1];
						end
					if ((lp == 1) | (lp == 4))
						begin
							pnig2_next[lp] <= pnig2[lp-1] ^ pnig2[4];
							pnqg2_next[lp] <= pnqg2[lp-1] ^ pnqg2[4];
						end
				end
		end

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -