mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			35 lines
		
	
	
	
		
			790 B
		
	
	
	
		
			Verilog
		
	
	
	
	
	
			
		
		
	
	
			35 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
 |