Another interesting strategy is to use RAM as programmable logic. It's faster, which can be beneficial in some situations, and is obviously easy to change on the fly. The catch is that you'll need a mechanism to bootstrap it - which can be as simple as copying the contents of an EPROM using a counter on startup/reset.