36 lines
790 B
Verilog
36 lines
790 B
Verilog
`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
|