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

📄 gpsnavidatagen_4ch.v

📁 基于verilog语言的GPS模拟源代码
💻 V
📖 第 1 页 / 共 5 页
字号:
//       000                     000         011                                                                                                  //       001                     010         010                                                                                                  //       010                     011         000                                                                                                  //       011                     010         110                                                                                                  //       100                     000         111                                                                                                  //       101                     110         110                                                                                                  //       110                     111         000                                                                                                  //       111                     110         010                                                                                                                                                                                                                                                    always @(carr_dco_acc                                                                                                                                      )                                                                                                                                          case(carr_dco_acc[28:25])                                                                                                                            0 :begin cos= 3'b011;sin= 3'b001;end                                                                                                              1 :begin cos= 3'b010;sin= 3'b010;end                                                                                                              2 :begin cos= 3'b001;sin= 3'b011;end                                                                                                              3 :begin cos= 3'b000;sin= 3'b011;end                                                                                                              4 :begin cos= 3'b101;sin= 3'b011;end                                                                                                              5 :begin cos= 3'b110;sin= 3'b010;end                                                                                                              6 :begin cos= 3'b111;sin= 3'b001;end                                                                                                              7 :begin cos= 3'b111;sin= 3'b000;end                                                                                                              8 :begin cos= 3'b111;sin= 3'b101;end                                                                                                              9 :begin cos= 3'b110;sin= 3'b110;end                                                                                                              10:begin cos= 3'b101;sin= 3'b111;end                                                                                                              11:begin cos= 3'b000;sin= 3'b111;end                                                                                                              12:begin cos= 3'b001;sin= 3'b111;end                                                                                                              13:begin cos= 3'b010;sin= 3'b110;end                                                                                                              14:begin cos= 3'b011;sin= 3'b101;end                                                                                                              15:begin cos= 3'b011;sin= 3'b000;end                                                                                                           endcase                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               //GPSData after C/A code modulation                                                                                                               assign out_GPSData = ca_code?({(!cos[2]),cos[1:0]}):(cos) ;                                                                                                                                                                                                                                                                                                                                                                                           endmodule                                                                                                                                                                                                                                                                                                                                                                                                                                             module GPSDataGen_4ch(in_clk, in_Resetn, out_GPSData, a, d, csn, wrn, oen);input in_clk;                                       input in_Resetn;                                    output [2:0] out_GPSData;                                                                               input [15:0]a;                                      input csn;                                          input wrn;                                          input oen;                                          inout [31:0]d;  `ifdef DEBUG_NAVIinteger i;integer j;`endif                                                                                                                                            //the following parameters are SNR, now is not used //Now I suggest four sattellite is equal strong     parameter SNR1=-20  ;                               parameter SNR2=-30  ;                               parameter SNR3=-40  ;                               parameter SNR4=-50  ;                               `define   K1 = 1E((-SNR1)/20)                       `define   K2 = 1E((-SNR2)/20)                       `define   K3 = 1E((-SNR3)/20)                       `define   K4 = 1E((-SNR4)/20) reg [2:0]	Sat1_Subframe_Cnt, Sat2_Subframe_Cnt, Sat3_Subframe_Cnt, Sat4_Subframe_Cnt;reg [3:0]	Sat1_Word_Cnt, Sat2_Word_Cnt, Sat3_Word_Cnt, Sat4_Word_Cnt;reg [4:0]	Sat1_NavBit_Cnt, Sat2_NavBit_Cnt, Sat3_NavBit_Cnt, Sat4_NavBit_Cnt;   reg			NaviData1, NaviData2, NaviData3, NaviData4;reg [7:0]	Sat1_status, Sat2_status, Sat3_status, Sat4_status;reg [7:0]	Sat1_nextstatus, Sat2_nextstatus, Sat3_nextstatus, Sat4_nextstatus;reg 		Sat1_LastWordD29, Sat1_LastWordD30;reg 		Sat2_LastWordD29, Sat2_LastWordD30;reg 		Sat3_LastWordD29, Sat3_LastWordD30;reg 		Sat4_LastWordD29, Sat4_LastWordD30;reg [23:0]	Sat1_ParityReg, Sat2_ParityReg, Sat3_ParityReg, Sat4_ParityReg;parameter	IDLE = 8'd0;parameter	TLMWORD = 8'd1;parameter	HOWWORD = 8'd2;parameter	NAVIDATAWORD = 8'd3;parameter	PARITY = 8'd4;wire [5:0]	Sat1_PrtW, Sat2_PrtW, Sat3_PrtW, Sat4_PrtW;wire 		NB1, NB2, NB3, NB4;wire 		Sat1Prtemp1, Sat1Prtemp2, Sat1Prtemp3;wire		Sat2Prtemp1, Sat2Prtemp2, Sat2Prtemp3; wire 		Sat3Prtemp1, Sat3Prtemp2, Sat3Prtemp3;wire 		Sat4Prtemp1, Sat4Prtemp2, Sat4Prtemp3;wire signed [4:0] GPSDataNavi1,GPSDataNavi2,GPSDataNavi3,GPSDataNavi4;                             wire signed [4:0] out_GPSDataSign;                                                                 wire [2:0] out_GPSData;                                                                            wire [2:0] GPSData1;                                                                               wire [2:0] GPSData2;                                                                               wire [2:0] GPSData3;                                                                               wire [2:0] GPSData4;wire sel1;                                                                                         wire sel2;                                                                                         wire sel3;                                                                                         wire sel4;                                                                                         assign sel1 = (a == 16'hE100);assign sel2 = (a == 16'hE200);assign sel3 = (a == 16'hE300);assign sel4 = (a == 16'hE400);//sattilite 1                                                                                      GPSDataGenSAT_4ch u_1(in_clk, in_Resetn, GPSData1,NB1, sel1, a[7:0], d, csn, wrn, oen);                                                                                                                   //sattilite 2                                                                                      GPSDataGenSAT_4ch u_2(in_clk, in_Resetn, GPSData2,NB2, sel2, a[7:0], d, csn, wrn, oen);                                                                                                                   //sattilite 3                                                                                      GPSDataGenSAT_4ch u_3(in_clk, in_Resetn, GPSData3,NB3, sel3, a[7:0], d, csn, wrn, oen);                                                                                                                   //sattilite 4                                                                                      GPSDataGenSAT_4ch u_4(in_clk, in_Resetn, GPSData4,NB4, sel4, a[7:0], d, csn, wrn, oen);                assign GPSDataNavi1 = (GPSData1[2]^NaviData1)?(-GPSData1[1:0]):GPSData1[1:0];assign GPSDataNavi2 = (GPSData2[2]^NaviData2)?(-GPSData2[1:0]):GPSData2[1:0];assign GPSDataNavi3 = (GPSData3[2]^NaviData3)?(-GPSData3[1:0]):GPSData3[1:0];assign GPSDataNavi4 = (GPSData4[2]^NaviData4)?(-GPSData4[1:0]):GPSData4[1:0];assign out_GPSDataSign = GPSDataNavi1 + GPSDataNavi2 + GPSDataNavi3 + GPSDataNavi4;wire [3:0] temp = (~out_GPSDataSign[3:0]+1'b1);                                                                                                   assign out_GPSData = out_GPSDataSign[4]? {1'b1,temp[1:0]}:{1'b0,out_GPSDataSign[1:0]};always @ (posedge in_clk or negedge in_Resetn )	if (!in_Resetn)		begin		 Sat1_NavBit_Cnt <= 5'b0;		 Sat2_NavBit_Cnt <= 5'b0;		 Sat3_NavBit_Cnt <= 5'b0;		 Sat4_NavBit_Cnt <= 5'b0;		end	else		begin		// satellite 1		 if ((Sat1_NavBit_Cnt == 29)&& NB1)		 	Sat1_NavBit_Cnt <= 5'b0;		 else if (NB1)		 	Sat1_NavBit_Cnt <= Sat1_NavBit_Cnt + 1;		// satellite 2 			 if ((Sat2_NavBit_Cnt == 29)&& NB2)		 	Sat2_NavBit_Cnt <= 5'b0;		 else if (NB2)		 	Sat2_NavBit_Cnt <= Sat2_NavBit_Cnt + 1;		// satellite 3 			 if ((Sat3_NavBit_Cnt == 29)&& NB3)		 	Sat3_NavBit_Cnt <= 5'b0;		 else if (NB3)		 	Sat3_NavBit_Cnt <= Sat3_NavBit_Cnt + 1;		// satellite 4 			 if ((Sat4_NavBit_Cnt == 29)&& NB4)		 	Sat4_NavBit_Cnt <= 5'b0;		 else if (NB4)		 	Sat4_NavBit_Cnt <= Sat4_NavBit_Cnt + 1;		 			end   always @ (posedge in_clk or negedge in_Resetn)	if (!in_Resetn)		begin		 Sat1_Word_Cnt <= 4'b0;		 Sat2_Word_Cnt <= 4'b0;		 Sat3_Word_Cnt <= 4'b0;		 Sat4_Word_Cnt <= 4'b0;		end	else		begin		 // satellite 1		 if ((Sat1_Word_Cnt == 9)&&(Sat1_NavBit_Cnt == 29)&& NB1)		 	Sat1_Word_Cnt <= 4'b0;		 else if ((Sat1_NavBit_Cnt == 29)&& NB1)		 	Sat1_Word_Cnt <= Sat1_Word_Cnt + 1;		 // satellite 2			 if ((Sat2_Word_Cnt == 9)&&(Sat2_NavBit_Cnt == 29)&& NB2)		 	Sat2_Word_Cnt <= 4'b0;		 else if ((Sat2_NavBit_Cnt == 29)&& NB2)		 	Sat2_Word_Cnt <= Sat2_Word_Cnt + 1;		 // satellite 3			 if ((Sat3_Word_Cnt == 9)&&(Sat3_NavBit_Cnt == 29)&& NB3)		 	Sat3_Word_Cnt <= 4'b0;		 else if ((Sat3_NavBit_Cnt == 29)&& NB3)		 	Sat3_Word_Cnt <= Sat3_Word_Cnt +1 ;		 // satellite 4 		 if ((Sat4_Word_Cnt==9)&&(Sat4_NavBit_Cnt == 29)&& NB4)		 	Sat4_Word_Cnt <= 4'b0;		 else if ((Sat4_NavBit_Cnt == 29)&& NB4)			 	Sat4_Word_Cnt <= Sat4_Word_Cnt + 1;		 		end		always @ (posedge in_clk or negedge in_Resetn)	if (!in_Resetn)		begin		 Sat1_Subframe_Cnt <= 3'b0;		 Sat2_Subframe_Cnt <= 3'b0;		 Sat3_Subframe_Cnt <= 3'b0;		 Sat4_Subframe_Cnt <= 3'b0;		end	else		begin		 // satellite 1		 if ((Sat1_Subframe_Cnt == 4)&&(Sat1_Word_Cnt == 9)&&(Sat1_NavBit_Cnt == 29)&& NB1)		 	Sat1_Subframe_Cnt <= 3'b0;		 else if ((Sat1_Word_Cnt == 9)&&(Sat1_NavBit_Cnt == 29)&& NB1)		 	Sat1_Subframe_Cnt <= Sat1_Subframe_Cnt + 1;		 // satellite 2		 if ((Sat2_Subframe_Cnt == 4)&&(Sat2_Word_Cnt == 9)&&(Sat2_NavBit_Cnt == 29)&& NB2)		 	Sat2_Subframe_Cnt <= 3'b0;		 else if((Sat2_Word_Cnt == 9)&&(Sat2_NavBit_Cnt == 29)&& NB2)		 	Sat2_Subframe_Cnt <= Sat2_Subframe_Cnt + 1;		 // satellite 3			 if ((Sat3_Subframe_Cnt == 4)&&(Sat3_Word_Cnt == 9)&&(Sat3_NavBit_Cnt == 29)&& NB3)		 	Sat3_Subframe_Cnt <= 3'b0;		 else if ((Sat3_Word_Cnt == 9)&&(Sat3_NavBit_Cnt == 29)&& NB3)		 	Sat3_Subframe_Cnt <= Sat3_Subframe_Cnt + 1;		 // satellite 4		 if ((Sat4_Subframe_Cnt == 4)&&(Sat4_Word_Cnt==9)&&(Sat4_NavBit_Cnt == 29)&& NB4)		 	Sat4_Subframe_Cnt <= 3'b0;		 else if ((Sat4_Word_Cnt==9)&&(Sat4_NavBit_Cnt == 29)&& NB4)		 	Sat4_Subframe_Cnt <= Sat4_Subframe_Cnt + 1;		 			endalways @ (posedge in_clk or negedge in_Resetn)	 if (!in_Resetn)	   begin	 	Sat1_status <= IDLE;	 	Sat2_status <= IDLE;	 	Sat3_status <= IDLE;	 	Sat4_status <= IDLE;	   end	 else

⌨️ 快捷键说明

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