blob: e3b58aa48b2f7d15daa550b81afef79199aa87ac [file] [log] [blame] [edit]
module LFSR_TASK (clock, Reset, seed1, seed2, random1, random2);
input clock;
input [7:0] seed1;
output [7:0] random1, random2;
reg [7:0] random1, random2;
parameter [7:0] Chain1 = 8'b10001110;
parameter [7:0] Chain2 = 8'b10101110;
task LFSR_TAPS8_TASK;
input [7:0] A;
input [7:0] Chain;
output [7:0] Next_LFSR_Reg;
integer i;
reg XorNor;
reg [7:0] Next_LFSR_Reg;
begin
XorNor = A[7] ^ ~| A[6:0];
for (i=1; I<=7; i=I+1)
if (Chain[i-1] == 1)
Next_LFSR_Reg[i] = A[i-1] ^ XorNor;
else
Next_LFSR_Reg[i] = A[i-1];
Next_LFSR_Reg[0] = XorNor;
end
endtask /* LFSR_TAP8_TASK */
/* Build 2 LFSRs using the LFSR_TAPS8_TASK */
always@(posedge clock or negedge Reset)
if (!Reset)
random1 = seed1;
else
LFSR_TASK (random1, Chain1, random1);
always@(posedge clock or negedge Reset)
if (!Reset)
random2 = seed2;
else
LFSR_TASK (random2, Chain2, random2);
endmodule