Over the weekend I worked on a higher level section of my code and I tried implementing this auto incrementing address again and this time it worked without complaints. Here is the code that worked:
always_ff @ (posedge ale, negedge rd)
begin
if (ale)
addr_register <= data_in;
else
if (! rd) addr_register <= addr_register + 8'h01;
else ;
end
There are a couple differences with the original code. I have an explicit test for the rd line low, which I had assumed in the original code (only other way to trigger this code if the ale was not the cause). I also used a non-blocking assignment and added an 8 bit representation of the +1. I'm not sure which of these actually makes it work but it seems to work fine now.