微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > scrambler同步问题

scrambler同步问题

时间:10-02 整理:3721RD 点击:
最近做一个ADC的scrambler和descrambler,想问一下论坛里的哥哥姐姐,如何让这两个加扰解扰过程同步?电路的公式是1+x^14+x^15,电路按照protocol设计,但是行为级验证的时候会出现数据加扰解扰后跟着原来数据不一样。这个问题咋解?

理论上应该是一样的,不然做加扰的,别人怎么解扰。代码发上来看看。楼下高手解答


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为高,相位改成输入了。不知道理解的对不。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top