| 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 |