📄 gpsnavidatagen_4ch.v
字号:
// 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 + -