























加扰有利于数据传输的可靠性和保密性。
加扰器的工作原理通常基于以下几种方法:
对于1bit的信号如图所示,在传输过程中使用scrambled_data进行传输,可以有效避免未授权的访问

对于多bit的信号
线性反馈移位寄存器 (LFSR):LFSR 是一种常见且有效的多位加扰方法。它利用移位寄存器和反馈逻辑生成伪随机序列,然后将输入数据与此伪随机序列进行逐位异或操作
加法混合:加法混合方法通过对输入数据进行加法操作(通常是模2加法,即异或操作),使用不同的加扰密钥或者伪随机序列来扰乱数据。
复杂的非线性算法:一些高级加扰方法可能采用复杂的非线性算法,如分组密码或者块加密算法。对于非线性加扰,一个例子如下,该例子使用多项式$x ^ { 4 } + x + 1$来对32bit的传输信号加扰
module scrambler_x4_x1_32bit(
input wire clk,
input wire rst,
input wire [31:0] data_in,
output reg [31:0] data_out
);
reg [31:0] state;
always @(posedge clk or posedge rst) begin
if (rst) begin
state <= 32'b0000_0000_0000_0000_0000_0000_0000_0001; // 初始化状态,任意非零初始状态均可
end else begin
state <= {state[30:0], state[31] ^ state[0] ^ data_in};
end
end
assign data_out = data_in ^ state[0];
endmodule
对加扰仿真,输出结果符合预期


仿真代码如下
module scrambler_64bit(
input wire clk,
input wire rst,
input wire [63:0] data_in,
output reg [63:0] data_out
);
reg [63:0] state;
always @(posedge clk or posedge rst) begin
if (rst) begin
state <= 64'hFFFFFFFFFFFFFFFF;
end else begin
state <= state + 64'hAAAAAAAAAAAAAAAA; // 64位加法扰乱器
end
end
assign data_out = data_in ^ state; // 异或
endmodule
module descrambler_64bit(
input wire clk,
input wire rst,
input wire [63:0] data_in,
output reg [63:0] data_out
);
reg [63:0] state;
always @(posedge clk or posedge rst) begin
if (rst) begin
state <= 64'hFFFFFFFFFFFFFFFF; // 初始化,需与加扰器一致
end else begin
state <= state + 64'hAAAAAAAAAAAAAAAA; // 解扰器状态更新,需与加扰器保持同步
end
end
assign data_out = data_in ^ state; // 异或恢复原始数据
endmodule
module tb_scrambler_descrambler_64bit();
reg clk;
reg rst;
reg [63:0] data_in;
wire [63:0] scrambled_data;
wire [63:0] descrambled_data;
scrambler_64bit scrambler_inst (
.clk(clk),
.rst(rst),
.data_in(data_in),
.data_out(scrambled_data)
);
descrambler_64bit descrambler_inst (
.clk(clk),
.rst(rst),
.data_in(scrambled_data),
.data_out(descrambled_data)
);
// Clock generation
always #5 clk = ~clk;
initial begin
clk = 0;
rst = 1;
data_in = 64'h12340000ABCD0000;
#10 rst = 0;
#100;
$display("Input Data: %h", data_in);
$display("Scrambled Data: %h", scrambled_data);
$display("Descrambled Data: %h", descrambled_data);
// $finish;
end
endmodule
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。