インターンシップの課題で32bit LFSRを書かないといけなくなったので、書いてみました。
たったこの程度のソースコードで作れるなんて良くできた疑似乱数生成器だなぁーまぁ周期が短いし相関が大きいけど。
module lfsr(clk,seed,reseed,out); input reseed,clk; input[31:0] seed; output[31:0] out; reg[32:0] r; //タップシーケンスとやらは[32,3,2,0] always @(posedge clk)begin if(reseed) r=seed; else begin r=(r>>1)|(r[31]^r[2]^r[1]^1'b1)<<15; end end assign out=r; endmodule
ちなみにタップシーケンスとやらはWikipedia先生から引っ張ってきました。
線形帰還シフトレジスタ - Wikipedia