gold序列的verilog实现

gold序列产生程序:

 

module gold_sque_gen(
rst,
clk,
delay,
gold_out
);

input rst;
input clk;
input [11:0] delay;
output reg gold_out;

reg [11:0] counter;
reg [11:0] m1_sequence;
reg [11:0] m2_sequence;
reg [1:0] state;

parameter ready = 2'b00;
parameter calcu = 2'b01;

always @(posedge clk)
begin
if(!rst)
begin
m1_sequence <= 12'b1111_1111_1111;
m2_sequence <= 12'b1111_1111_1111;
gold_out <= 1'b0;
state <= ready;
end
else
begin
case(state)
ready:
begin
counter <= delay;
state <= calcu;
end
calcu:
begin
if(counter == 0)
begin
m1_sequence[11:1] <= m1_sequence[10:0];
m1_sequence[0] <= m1_sequence[0]^m1_sequence[3]^m1_sequence[5]^m1_sequence[11];
m2_sequence[11:1] <= m2_sequence[10:0];
m2_sequence[0] <= m2_sequence[2]^m2_sequence[3]^m2_sequence[6]^m2_sequence[11];
gold_out <= m1_sequence[11] ^ m2_sequence[11];
end
else
begin
counter <= counter - 12'd1;
m1_sequence[11:1] <= m1_sequence[10:0];
m1_sequence[0] <= m1_sequence[0]^m1_sequence[3]^m1_sequence[5]^m1_sequence[11];

end
end
endcase
end
end

endmodule

程序中m序列优选对分别为:f(x)=x^12+x^6+x^4+x+1            g(x)=x^12+x^7+x^4+x^3+1
程序中rst为同步复位信号,clk为时钟信号,delay为m2序列的延时信号,用于相位调整,延时器取不同值时产生的gold序列不同该发生器最多可以产生2^12=4096种不同序列,其中一半是平衡的。

其测试程序为:

`timescale 1 ns/100 ps
module gold_sque_gen_test;

reg clk;
reg rst;
reg [11:0] delay;
wire gold_out;

initial
begin
rst = 0;
clk = 0;
delay = 12'b0000_0000_1111;
#40
rst = 1;

end

always #10 clk = ~clk;

gold_sque_gen gold1(
.clk(clk),
.rst(rst),
.delay(delay),
.gold_out(gold_out)
);

endmodule

 

posted on 2012-04-07 14:28  chenfengfei  阅读(1714)  评论(1)    收藏  举报

导航