`define WIDTH 8 module lfsr_updown ( clk , // Clock input reset , // Reset input enable , // Enable input up_down , // Up Down input count , // Count output overflow // Overflow output ); input clk; input reset; input enable; input up_down; output [`WIDTH-1 : 0] count; output overflow; reg [`WIDTH-1 : 0] count; assign overflow = (up_down) ? (count == {{`WIDTH-1{1'b0}}, 1'b1}) : (count == {1'b1, {`WIDTH-1{1'b0}}}) ; always @(posedge clk) if (reset) count <= {`WIDTH{1'b0}}; else if (enable) begin if (up_down) begin count <= {~(^(count & `WIDTH'b01100011)),count[`WIDTH-1:1]}; end else begin count <= {count[`WIDTH-2:0],~(^(count & `WIDTH'b10110001))}; end end endmodule