Which procedural block executed first, in SystemVerilog?

If I have both always_comb and always_ff in a single module, which one executed first?.

for example, I have seen this code in a book but I am confused about the functionality. for example, if WE=0 what will be the value of Qout?

module SyncRAM #(parameter M = 4, N = 8)(output logic [N-1:0] Qout,
   input logic [M-1:0] Address, input logic [N-1:0] Data, input logic clk, WE);

logic [N-1:0] mem [0:(1<<M)-1];

always_comb
  Qout = mem[Address];

always_ff @(posedge clk)
  if (~WE)
    mem[Address] <= Data;

endmodule

Any help about the truth table of this code is appreciated,

regards

In reply to Mahdiyar:

Hi,

Execution depend on events for which always block triggers. Here, always_ff triggers whenever theres a positive transition in clock signal. And always_comb triggers when mem array changes.

Execution order will be,

  • Update mem[Address] with Data value at positive edge if WE is 0.
  • Then, this update to mem[Address] causes always_comb execution and Qout is updated with content of mem[Address].