26 lines
451 B
Verilog

`timescale 1ns / 1ps
module mseq #(
parameter W = 4'd4,
parameter POLY = 5'b10011
) (
input clk,
input rst_n,
output mseq_out
);
reg [W-1:0] sreg = 8'b11111111;
assign mseq_out = sreg[0];
always@(posedge clk or posedge rst_n) begin
if(~rst_n)
sreg <= 1'b1;
else begin
if(mseq_out)
sreg <= (sreg >> 1) ^ (POLY >> 1);
else
sreg <= sreg >> 1;
end
end
endmodule