We approached the design problem with hiearchy in mind (i.e. top-down design). Our approach was to, break the design into several modules. We then designed and tested each module separately. Once this was finished, we merged the components together.
Our design tool of choice was VHDL. Ideally, VHDL provides a high level abstraction in the hardware design process (i.e. the designer does not need to know anything about hardware). However, we found the opposite to be true. An expert in VHDL will not necessarily be able to design a digital system. This is due to the fact that much of the VHDL language has no meaning in hardware. Also, there are many VHDL statements that synthesize, but do so very inefficiently. Thus, in order to use VHDL sucessfully in your designs, you absolutely must have an understanding of the hardware level of your design. This is the approach we used in using VHDL as a design tool.