Merge pull request #1073 from whitequark/ecp5-diamond-iob
[yosys.git] / tests / asicworld / code_hdl_models_lfsr_updown.v
1 `define WIDTH 8
2 module lfsr_updown (
3 clk , // Clock input
4 reset , // Reset input
5 enable , // Enable input
6 up_down , // Up Down input
7 count , // Count output
8 overflow // Overflow output
9 );
10
11 input clk;
12 input reset;
13 input enable;
14 input up_down;
15
16 output [`WIDTH-1 : 0] count;
17 output overflow;
18
19 reg [`WIDTH-1 : 0] count;
20
21 assign overflow = (up_down) ? (count == {{`WIDTH-1{1'b0}}, 1'b1}) :
22 (count == {1'b1, {`WIDTH-1{1'b0}}}) ;
23
24 always @(posedge clk)
25 if (reset)
26 count <= {`WIDTH{1'b0}};
27 else if (enable) begin
28 if (up_down) begin
29 count <= {~(^(count & `WIDTH'b01100011)),count[`WIDTH-1:1]};
30 end else begin
31 count <= {count[`WIDTH-2:0],~(^(count & `WIDTH'b10110001))};
32 end
33 end
34
35 endmodule