Expecting a statement Error in register control module

// Code your design here
module register_control #(parameter ADDR_WIDTH = 8,
                         parameter DATA_WIDTH = 8,
                         parameter WAIT = 0
                         )
  (pclk, presetn, psel, penable, pwrite, paddr, pwdata, prdata, pready, pslverr, tdr_reg, tcr_reg, tsr_reg, s_ovf, s_udf);
  input wire 					pclk;
  input wire 					presetn;
  input wire 					psel;
  input wire 					penable;
  input wire 					pwrite;
  input wire [ADDR_WIDTH-1:0] 	paddr;
  input wire [DATA_WIDTH-1:0]	pwdata;
  output reg [DATA_WIDTH-1:0]	prdata;
  output reg					pready;
  output reg					pslverr;
  
  input wire 					s_ovf;
  input wire					s_udf;
  output reg [DATA_WIDTH-1:0]	tdr_reg;
  output reg [DATA_WIDTH-1:0]	tcr_reg;
  output reg [DATA_WIDTH-1:0]	tsr_reg;

  localparam 	IDLE = 2'b00,
  				SETUP = 2'b01,
  				ACCESS = 2'b10;
  
  reg [WAIT-1:0] 				wait_signal;
  
  reg [1:0] current_state;
  reg [1:0] next_state;

  always @(*) begin
    case(current_state)
    	IDLE: begin
          wait_signal = WAIT + 1;
          pready = 1'b0;
          pslverr = 1'b0;
          
          if(psel & ~penable) begin
            next_state = SETUP;
          end else begin
            next_state = IDLE;
          end
        end
      	
      	SETUP: begin
          if(psel & penable) begin
            
            if(wait_signal == 0) begin
              pready = 1'b1;
              if(paddr > 8'h07) begin
                pslverr = 1'b1;
              end
              next_state = IDLE;
            end else begin
              next_state = ACCESS;
            end
          
          end else begin
            next_state = SETUP;
          end
        end
      
      	ACCESS: begin
          if(wait_signal != 0) begin
            next_state = ACCESS;
          end else begin
            pready = 1'b1;
            if(paddr > 8'h07) begin
              pslverr = 1'b1;
            end
            next_state = IDLE;
          end
        end
      	
      	default:
          next_state = IDLE;
    endcase
  end
  
  always @(posedge pclk or negedge presetn) begin
    if(~presetn) begin
      current_state <= IDLE;
    end else begin
      current_state <= next_state;
      wait_signal <= wait_signal - 1;
    end
  end

  always @(posedge pclk or negedge presetn) begin
    if(~presetn) begin
      tdr_reg <= 8'h00;
      tcr_reg <= 8'h00;
      tsr_reg <= 8'h00;
    end else begin
      if(pready & psel & penable & pwrite) begin
      ////////////////////
        tdr_reg <= (paddr == 8'h00) ? pwdata : tdr_reg;
        tcr_reg <= (paddr == 8'h01) ? pwdata : tcr_reg;
        if(paddr == 8'h02) begin
          
//           if(tsr_reg[1] && pwdata[1]) tsr_reg[1] <= 0;
//           else if (tsr_reg[0] && pwdata[0]) tsr_reg[0] <= 0;
//           else begin
//             tsr_reg[0] <= tsr_reg[0];
//             tsr_reg[1] <= tsr_reg[1];
//           end
//           tsr_reg[DATA_WIDTH-1:2] = pwdata[DATA_WIDTH-1:2];
          
          if((tsr_reg[0] & tsr_reg[1]) & (~pwdata[0] & ~pwdata[1])) begin
            tsr_reg[1:0] <= 2'b11;
          end else begin
            tsr_reg[1:0] <= 2'b00;
          end
          tsr_reg[DATA_WIDTH-1:2] = 0;
        end
        ////////////
      end else if(pready & psel & penable & ~pwrite) begin
        case(paddr)
          8'h00: prdata <= tdr_reg;
          8'h01: prdata <= tcr_reg;
          8'h02: prdata <= tsr_reg;
        endcase
      end else begin
      tdr_reg <= tdr_reg;
      tcr_reg <= tcr_reg;
      tsr_reg <= tsr_reg;
      end
  end

  always @(s_ovf or s_udf) begin
    tsr_reg[0] = s_ovf;
    tsr_reg[1] = s_udf;
  end
         
endmodule

It would be helpful to display the exact error message, including the reported line. It’s most likely that you have an unbalanced set of begin/end statements.

1 Like

Thank you @dave_59. This is the error.

[2025-06-12 16:23:59 UTC] xrun -Q -unbuffered '-timescale' '1ns/1ns' '-sysv' '-access' '+rw' design.sv testbench.sv  
TOOL:	xrun	23.09-s001: Started on Jun 12, 2025 at 12:23:59 EDT
xrun: 23.09-s001: (c) Copyright 1995-2023 Cadence Design Systems, Inc.
  always @(s_ovf or s_udf) begin
       |
xmvlog: *E,NOTSTT (design.sv,132|7): expecting a statement [9(IEEE)].
xmvlog: *W,NOTOPL: no top-level unit found, must have recursive instances.
xrun: *E,VLGERR: An error occurred during parsing.  Review the log file for errors with the code *E and fix those identified problems to proceed.  Exiting with code (status 1).
TOOL:	xrun	23.09-s001: Exiting on Jun 12, 2025 at 12:23:59 EDT  (total: 00:00:00)
Exit code expected: 0, received: 1

The line 132 is always @(s_ovf or s_udf) begin.

Yeah. I fixed the error. Like you said, I got unbalanced set of begin end statements.