scrambler同步问题
理论上应该是一样的,不然做加扰的,别人怎么解扰。代码发上来看看。楼下高手解答
Ok 我把代码发上去
module scrambler(
clk,
En,
prescr_data,//prescramble data
scr_data//scrambeled data
);
input clk;
input En;
input [31:16] prescr_data;//D3116
output reg [31:16] scr_data;//S31:S16
reg [15:1] tmp_scr;//S15:S1
//for tmp_scr register
always@(posedge clk)begin
if(En == 0)
tmp_scr <= 15'b000_0000_1111_1111;
else begin
tmp_scr[15:1] <= scr_data[31:17];
end
end
always@(posedge clk)begin
scr_data[29:16] <= prescr_data[29:16] ^ ((tmp_scr[15:2] ^ tmp_scr[14:1]) & {14{En}});
scr_data[31] <= prescr_data[31] ^ ((scr_data[17] ^ scr_data[16] )& En);
scr_data[30] <= prescr_data[30] ^ ((scr_data[16] ^ tmp_scr[15]) & En );
end
endmodule
module descrambler(
clk,
En,
predescr_data,
descr_data
);
input clk;
input En;
input [31:16] predescr_data;
output reg [31:16] descr_data;
reg [15:1] tmp_descr;
//for tmp_descr register
always@(posedge clk) begin
tmp_descr <= predescr_data[31:17];
end
//for descr_data register
always@(posedge clk )begin
descr_data[31] <= predescr_data[31] ^ ((predescr_data[17] ^ predescr_data[16]) & En);
descr_data[30] <= predescr_data[30] ^ ((predescr_data[16] ^ tmp_descr[15]) & En);
descr_data[29:16] <= predescr_data[29:16] ^ ((tmp_descr[15:2] ^ tmp_descr[14:1]) & {14{En}});
end
endmodule
4l、5l是scrambler 和descrambler的代码
没人么?
参考一下,GB 20600—2006,这个是dtmb调制的标准,里面讲了加扰。加扰的表达式和你一样,G( x )= 1+x^14 +x^15,不过是初始相位和你不一样,且标准中规定单bit输入,进行加扰,加扰之后,单bit输出的情况。
看你加扰的代码,第一个always块的寄存器tmp_scr,应该是你的存储加扰初始值经过加扰表达式之后的值,一旦en为高,相位改成输入了。不知道理解的对不。
