TL;DR: Need good block diagram schematic drawing process.
Table of Contents
- Topicality and Relevance
- Question
Topicality and Relevance
Topicality: John F. Wakerly, in his book Digital Design: Principles and Practice, Fourth Edition, (Amazon, book site) devotes an entire section, 6.1, to "Documentation Standards." He says "Good documentation is essential for correct design and efficient maintenance of digital systems" (p342; emphasis is mine). He then outlines six major components of good documentation, of which block diagrams are the second.
The next section, 6.1.1, is devoted to block diagrams, their features and their use. For example, he lets us know that "important control signals and buses should have names, usually the same names that appear in the more detailed schematic." (p346) I will note that this is the only subsection devoted specifically to any of the six types of documentation he describes.
Relevance: Clearly, any large project will be composed of a number of components. These components are shown in a block diagram. There may be several levels of block diagrams, which in turn describe the higher level blocks using lower level blocks in a mostly hierarchial fashion. To keep a project comprehensible to both the creator (over time) and others, block diagrams are essential. Hence, good digital design includes the creation of these diagrams.
If the diagram takes more time and effort to create than other stages of the design process, it is more likely to be skipped, short-circuited, or otherwise not given the proper attention. I'm a new digital designer and I have spent one full week (of several hours an evening) creating a block diagram of my MIPS processor's data path. To me, this seems like an excessive amount of time to have spent creating a block diagram, especially when I could have created the same diagram in under an hour with paper and pencil.
There are many layers to digital design, from concept to diagram to schematic to HDL to synthesis or tape-out or whatever happens next (I'm a novice so I can't say for sure). The ability to create this block diagram form of documentation efficiently seems to be highly relevant to digital design. After all, the about site for this Stack Exchange states to ask about "an actual problem you have faced" that deals with "a specific electronics design problem."
Well, here's my problem: How do I efficiently create (and maintain) block diagrams? I would love to know about procedures, processes, tools, and the like, because what I am doing so far as a novice clearly is untenable.
Question
I'm working on building a full pipelined-architecture MIPS-style CPU in SystemVerilog, extending the concepts in Digital Design and Computer Architecture, 2e. This is being done with Quartus II running in BootCamp.
To keep things straight as it gets more complex, I want to keep the processor's block diagram up to date with my SV code. So far I have been using print outs of the diagrams in the book, generally starting from this one but sometimes using others from the published (odd) answer key (see book link for this and other PDF versions).
So, I recreated much of the diagram in Omnigraffle Pro 5, which I have used for years. (Edit: I have since completed the block diagram for the processor's datapath.) However, this incomplete result has so far taken me almost 10 hours, which is completely unacceptable, given that I could draw the whole thing in probably 20 minutes and modify the pre-generated diagrams (although with more messiness as complexity increases) in five. It's very difficult to label lines, to connect lines to other lines, make sure lines don't cross in bad locations, and even connect lines to objects in this program. I never noticed this in the past as I never had to do diagrams of such complexity.
I'm clearly in need of a better process, method and/or tools. I welcome suggestions. Thanks!