Shift left by custom number
always @ (*) begin
    data &lt;= 35'b1 &lt;&lt; (x * 3'd7 + y);
end


I think you may have an integer overflow issue. I would try changing 3'd7 to 6'd7 to make sure the calculations happen with wide enough values. (i'm not positive what the verilog rules are with regards operation sizes in complex expressions like this)

I would also get rid of the "data &lt;= 35'b1;" in the first always block. You should only set each signal in one always block.