| module top(input count, count_sw, thresh_sw, |
| output gtu, gts, ltu, lts, geu, ges, leu, les, zero, max, |
| output gtu_n, gts_n, ltu_n, lts_n, geu_n, ges_n, leu_n, les_n, zero_n, max_n |
| ); |
| reg [31:0] threshold = 32'b0; |
| reg [31:0] threshold_down = 32'b0; |
| reg [31:0] counter = 32'b0; |
| reg [31:0] counter_down = 32'b0; |
| |
| wire clk; |
| BUFG bufg(.I(count), .O(clk)); |
| |
| always @(posedge clk) begin |
| if (count_sw) begin |
| counter <= counter + 1; |
| counter_down <= counter_down - 1; |
| end |
| |
| if (thresh_sw) begin |
| threshold <= counter - 32'd31; |
| threshold_down <= counter_down + 32'd31; |
| end else begin |
| threshold <= threshold + 1; |
| threshold_down <= threshold_down - 1; |
| end |
| end |
| |
| assign zero = counter == 32'b0; |
| assign max = counter == 32'hFFFFFFFF; |
| assign gtu = counter > threshold; |
| assign gts = $signed(counter) > $signed(threshold); |
| assign ltu = counter < threshold; |
| assign lts = $signed(counter) < $signed(threshold); |
| assign geu = counter >= threshold; |
| assign ges = $signed(counter) >= $signed(threshold); |
| assign leu = counter <= threshold; |
| assign les = $signed(counter) <= $signed(threshold); |
| |
| assign zero_n = counter_down == 32'b0; |
| assign max_n = counter_down == 32'hFFFFFFFF; |
| assign gtu_n = counter_down > threshold_down; |
| assign gts_n = $signed(counter_down) > $signed(threshold_down); |
| assign ltu_n = counter_down < threshold_down; |
| assign lts_n = $signed(counter_down) < $signed(threshold_down); |
| assign geu_n = counter_down >= threshold_down; |
| assign ges_n = $signed(counter_down) >= $signed(threshold_down); |
| assign leu_n = counter_down <= threshold_down; |
| assign les_n = $signed(counter_down) <= $signed(threshold_down); |
| endmodule |