module MersenneTwister_TT400( input clk, output reg [15:0] rnd); parameter N = 25; parameter M = 11; reg [15:0] MT [0:(N-1)]; reg [15:0] y; reg [15:0] y_next; integer index; integer indexM; initial begin index <= 0; indexM <= 0; rnd <= 0; y <= 0; y_next <= 0; `include "./MT_TT400_initialization.v" end always @(posedge clk) begin rnd <= y_next; y = MT[index]; y = y ^ ((y << 2) & 16'h6A68); y = y ^ ((y << 7) & 16'h7500); // $display("%d",y); y_next <= y; if (index + M >= N) indexM = index + M - N; else indexM = index + M; if (MT[index][0] == 1) begin MT[index] = MT[indexM] ^ (MT[index]>>1) ^ 16'hA875; end else begin MT[index] = MT[indexM] ^ (MT[index]>>1); end if (index == (N-1)) index <= 0; else index <= index + 1'b1; end endmodule