I have a SystemVerilog module representing a 4-word x 3-bit ROM. It's from a textbook (Harris & Harris Digital Design and Computer Architecture), so I'm sure this isn't a typo. I understand that ROM is combinational only, and they use an always_comb statement and case statements, but then use nonblocking assignments. I'm trying to understand why.
module rom(input logic [1:0] adr, output logic [2:0] dout); always_comb case(adr) 2'b00: dout <= 3'b011; 2'b01: dout <= 3'b110; 2'b10: dout <= 3'b100; 2'b11: dout <= 3'b010; endcase endmodule