The Digital Logic course is designed for first-semester students that have no prior experience with electronic circuits or digital design. Course content, organization and pace are typical for a university setting, but the course is suitable for independent self-study as well.
The course is presented as a sequence of hands-on design projects that progress from simple logic circuits to complete digital systems. Each project includes several circuit designs, and as the designs progress, the necessary background knowledge, design skills, and CAD tool features are presented as readings, tutorials, and reference designs.
Successive projects build on one another and should be completed in order. By the end of the course, students will have a firm understanding of digital circuits and design methods, and a strong working knowledge of a modern integrated design environment CAD tool.
In a typical academic setting, completed projects are submitted each week. Deliverables include source files, simulator outputs, and live or video demonstrations of the student-designed circuits working in the Boolean board. A qualified assessor assigns scores according to a fixed scale (discussed below), and those scores, together with any additional homework or test scores, are collected and used to measure overall performance.
Self-exploration and self-reliance are emphasized throughout the course, and extra efforts to extend design projects with new ideas and new features are always encouraged and rewarded.
The course requires a computer with internet access, the Xilinx Vivado Webpack design tools (available as a free download), and a Boolean board. Boolean boards may be purchased from the Real Digital website, and all course materials are all free and open. Materials include design projects, tutorials, user guides, reference designs, background readings, and other materials to help create a stand-alone, self-paced learning environment that students can use in any setting.
The Boolean board
The Boolean board is a highly configurable digital design platform created specifically to support educational needs. The board is built around a large FPGA (Xilinx Spartan-7 XC7S50) that can be configured into a vast array of digital systems, from simple logic circuits to complex computing systems. The Spartan-7 FPGA chip is surrounded by several peripheral devices, including pushbuttons, slide switches, discrete and RGB LEDs, an 8-digit seven-segment display, audio and video outputs – everything needed to implement a wide variety of digital circuits and systems without the need for any other components. See the Boolean board reference manual for a complete description of the board and its features: Booelan Board Reference Manual
When the Boolean board is first powered on, the FPGA must be configured before the board can do anything. Configuration data can come from an on-board ROM, or directly from a live Vivado session over a USB cable. In a typical classroom setting, the FPGA is programmed from Vivado.
To program the Boolean board from Vivado, attach a USB cable to the “PROG UART” USB connector (labeled 17 in the picture), set jumper J13 to PROM, and turn the power switch on. See the first project for step-by-step instructions on creating a Vivado project and programming the Boolean board.
Xilinx’s Vivado Webpack software provides a full-featured integrated design environment for circuit design, simulation, and implementation. Vidado works seamlessly with the Boolean board and supports both Verilog and VHDL design entry. The tool includes an HDL editing and debug environment, a simulator, a synthesizer, and an FPGA programming interface and hardware debugging tool (a logic analyzer). The Vivado Webpack software is available as a free download from the Xilinx website – see the first project for detailed information on downloading the tool and creating an initial design.
Design projects form the core of the Digital Logic course materials, and completing them is by far the best way to learn digital design. The projects form a continuous sequence that progresses through the course, with each new project building on the knowledge and skills from the previous project. They should all be completed in the order they are presented.
Each project opens with an introductory overview, and then presents relevant background information. Most of the background information is presented in “topic documents” that are linked though clickable green buttons. You are encouraged to read through these topics, but if you feel you already know the information, they can be skipped without losing continuity.
If new hardware or software features are introduced in a project, guided tutorials will step through the most important features. In the initial projects, the tutorials are integral to the presentation and are more or less required; in later projects, they are optional.
After the tutorials, a sequence of several design requirements is presented. The requirements describe the design tasks you must perform with enough detail to make the objectives clear. But sometimes, not all design details are provided. In these cases, you must understand the design intent well enough to envision the final result, and then design the under-specified features yourself. All requirements must be completed for full credit.
After the design requirements, one or more design challenges are described. These challenges are generally presented with less guidance and less structure to give you an opportunity to test the depth of your knowledge and understanding. The challenges are always optional, but you are highly encouraged to complete them all.
On any project, you are also encouraged to go “off script”, and extend the requirements or challenges in a new or interesting ways (or, you may to choose to complete your own original design from scratch as your interest dictates). These “extensions” will be evaluated and awarded extra credit according to their difficulty and your success in completing them.
Completed projects are intended to be evaluated by a qualified “Lab Assessor” – typically an instructor, teaching assistant, or other qualified/designated individual. Each module includes a submission form the Assessor can use to record scores during the evaluation.
In a typical evaluation, you will program the Boolean board with your design and demonstrate its function to the Assessor. The Assessor will ask questions to gauge your comprehension, and offer suggestions and feedback that may help improve your design skills. As the demonstration proceeds, the Assessor will record points according to the criteria below:
- Exemplary (4 points): You may receive 4 points if your design meets or exceeds all requirements, if your source files are neat, well organized and commented, and if your design is well-engineered and of high enough quality to serve as an example for others. You may receive 4 points for Q&A if your answers are complete and show a mastery of the material and your design.
- Complete (3 points): You may receive 3 points if your design includes all required features and meets all required specifications, and your source files appear complete. You may receive 3 points for Q&A if you provide concise and competent answers to questions. Most submissions will earn three points most of the time (3 points is considered full credit).
- Incomplete (2 points): You may receive 2 points if your design meets some, but not all requirements. You may receive 2 points for Q&A if your answers are on-topic but tentative and incomplete.
- Minor Effort (1 point): You may receive 1 point if you started and made an honest effort, but did not implement any features or meet and requirements. You may receive 1 point for Q&A if your answers are off-topic, wandering, un-focused, and incomplete.
- Not Submitted (0 points): If you do nothing you will receive 0 points.
Tips for success
At the beginning of any new project, the path ahead can seem daunting - there is much to learn, and for most of us, learning takes significant effort. If you feel bogged down, or if you question your commitment and wonder if it’s worth the effort, keep in mind that the knowledge and skills you are gaining will place you in very select company. You can certainly look forward to a rewarding career, but even more, you can position yourself to help steer human progress. You will be one of the few who can create the products and technologies that will shape the future, and that is a goal worth pursuing.
Among the 80 or so engineering graduates in my class, some went on to design critical circuits for the world’s most popular processors, some wrote code at the core of operating systems we use every day, some created products currently in space (or on another planet), some created revolutionary medical products, and the list goes on. You can do the same - if you become a skilled design engineer, you will absolutely be one the most important people on Earth. You will take a part in defining our collective future, and if history is any guide, you will find financial success in the process. The journey ahead is very much one worth taking, and we’ll do everything we can to make it as satisfying as possible.
It’s not all boring drudgery - learning to be a design engineer can be engaging, challenging (in a good way), and even fun. Just like climbing a mountain, recognize and acknowledge the challenge that lies ahead, commit yourself to taking the first few steps, and pause along the way to recognize your progress. Find and cultivate your passion for the continuing journey, and take satisfaction when you gain new knowledge and skills. Thousands of years ago, the Greeks first wrote about the common experience of striving to gain knowledge, and the very real human pleasure that results when you learn something of consequence. The passion to learn and understand more about our world is built in to of all of us - let that passion guide you.
As you progress through the design projects, you will quickly gain the knowledge and skill needed to invent your own designs – new designs that no one has done before, and that have real intrinsic value. The more you create, the easier and more intuitive the process becomes. As you gain experience and learn first-hand what does and doesn’t work, the faster your skill and confidence will grow. Sooner than you think, you’ll be a sought-after engineer capable of contributing to any number of companies, or perhaps even setting out on your own.
Emphasis on design
To learn digital design, you must practice digital design; the more you practice, the more you will learn. You can read about circuit behaviors, look at logic equations, and conceive of systems that you could build, but when you start writing and simulating code, synthesizing your designs, and programming them into your Boolean board – that’s when you really learn. When you implement a circuit, there is no room left for assumptions, or ambiguity, or unfinished reasoning: the design either works, or it doesn’t. Use the tools! Use them as often as you can! Accept the challenge of the design, commit yourself to completing every design, and take the time to build your knowledge base along the way. Don’t just rush to completion – try different design strategies, and check and compare the results. Once you have a working circuit, take another 5-10 minutes, and change some performances or architectures, and check the results again. You are among the first humans to ever have such a powerful design environment at your fingertips 24 hours a day. Avail yourself!
Make it a point to clearly understand what is required of you in each project before you start writing code. Remember you must complete all requirements, and you should complete the challenges as well. In general, the more thought and effort you put into your designs, and the clearer and more organized your source files, the better score you will receive. After you get some experience with the design tools, use them as much as possible to answer your own questions.
The field of digital design is broad, and new and unexplored for most people. Because so much is new, and because there are relatively few who can serve as mentors, you must develop the ability to check for yourself whether you are right or wrong in making various design choices. Fortunately, you will have everything you need to measure your performance yourself, and to discern whether or not your design works properly. The Vivado tool contains a circuit simulator that lets you examine the behavior of every node and component in your circuit, so you can completely understand the behavior of any circuit (the simulator is introduced in Project 4). You should learn to use the simulator well, and use it often. If using the simulator becomes second nature, and you can quickly and easily simulate and examine any circuit, you will be well positioned to tackle larger and more meaningful designs.
As you work through designs and experiment with alternatives, keep a sense of perspective. Your first task in a new design will be to create a source file that accurately describes the design (for this class, source files will use the Verilog language, as well as some Xilinx-specific commands to set up physical circuit connections). Source files are text documents that can be edited by any editor – you may as well use the editor Xilinx provides, but you aren’t required to use it. Your source file must meet certain requirements (valid syntax, valid keywords, etc.). If you are having troubles, keep in mind people have been creating similar source files for years, and there are many resources you can find to help – go look for them!
Once your source files are correct, you will use other software tools to simulate them, to “synthesize” them into files that can program the FPGA, to add any required external pin connections (for example, to connect circuit inputs to switches and outputs to LEDs), and finally to download your design to the Boolean board. If one of the tools is giving you trouble, know that the tool creator (Xilinx) wants you to be successful, and they have produced as many tutorials and reference guides as they can to help you. Go find them!
When you set out to create a new design, make sure you have a clear understanding of what input and output signals are required, and exactly how the inputs drive the outputs. Pencil and paper are still useful at this stage – sketch a block diagram, and for all but the simplest designs, sketch a more detailed block diagram that shows your intended design broken into smaller, simpler blocks. This divide-and-conquer approach, called “partitioning”, encourages the use of more basic components that can be independently designed and simulated. Complex systems built from simpler components are far easier to implement, debug and verify. After the first few projects in this course, the requirements and source files get too large to tackle without good partitioning.
After you program the Boolean board, if it does not behave as expected, narrow down the list of possible reasons to just one or two, and then use the simulator or debugger to identify what when wrong. This “debug” process can be particularly difficult if you write one large source file, and try to process it all at once (so don’t write your code that way!). Challenge your assumptions about your design, and be willing to decompose your design into ever smaller blocks until you have confidence that your sub-blocks are absolutely working correctly. Then reassemble them, and after each step, check that the design is still working. And always be willing and able to try different ways to accomplish your design goals.
Whenever you set out to do or learn something new, your first steps are tentative, and you naturally look for guidance and support. The simulator and debugger give you the complete and independent ability to quickly and decisively check whether you are right or wrong in all of your design assumptions. Because of these tools, you can get by without a mentor, but you do need to learn the tools well. Use them often! They are absolutely invaluable, and you simply cannot design complex systems without them. All competent engineers instinctively know when and how to check their progress, and that means frequent and thorough use of the simulator and/or debugger. The best engineers are always the most self-reliant. Endeavor to learn self-reliance as you learn design.
Work with others as much and as often as you can. Consult with fellow students, your instructor, other faculty, or family and friends whenever you can. The sooner you identify and establish the communication channels available to you, the sooner you can use them to get assistance along the way.
When you work with others to achieve a distinct goal, you are forced to confront the limits of your knowledge and skill. Peel away your assumptions, find your limits, and attack your weakest areas the most vigorously. Deliberating with other like-minded individuals opens you to new ways of visualizing or conceptualizing issues that are elusive, and discussing and defending your ideas forces you to think more critically. Identify a cohort as soon as you can – introduce yourself to your peers and build a working team. Figure out where your knowledge seems the weakest, present what you think you do know, and let your peers help guide your efforts. Prepare yourself by reading the materials provided, and by formulating sensible questions in areas where you don’t have clarity.
You WILL find that when several minds enthusiastically attack a common problem, a synergy develops, and everyone benefits and does and learns more than they possibly could have individually.
Tenacity pays. Don’t stop until you are 100% done, and until you know for certain you are 100% correct. There are no short cuts - every successful engineer has put in countless hours working on projects, getting stuck, finding the limits of their knowledge, rolling back a design they thought was good and redoing it from scratch, etc. No one is inherently “better” or “smarter” at this kind of design – how could they be? It’s not a part of childhood experiences, it’s not taught in K-12… if you see someone who seems to have a greater mastery of the discipline, it’s because they put in more honest, gut-wrenching time pushing up against their knowledge limits, and then doing the work to learn and move past them.
Learning to be a good designer is a detailed and painstaking process, and you build working knowledge and skill piece by piece, and step by step. There are no “skip ahead” tactics for anyone, ever. From the outside looking in, it may seem like a lot of drudgery, but it’s actually kind of fun and rewarding. Each time you learn something new, that something becomes a part of you, and you begin to develop a broader understanding not only of this discipline, but of yourself and your position in the world. You develop knowledge and insight that you can use in many different situations, and that knowledge and the associated skills will set you apart from 99% of everyone else. You are joining a very unique group – you will be among the few who are able to work at the forefront of human creativity.
But you must keep going, particularly when the going seems the hardest.
It’s likely that everyone taking an entry-level engineering course (including you) is encountering many topics for the first time. Since the digital design field is so broad, and since the student population is so diverse, it’s not possible to create materials that meet everyone’s needs all the time. Everyone arrives at a course like this with different backgrounds, and different levels of prior exposure to the topics we will cover. The Real Digital materials attempt to broadly cover topics, and provide most of what most people will need, but everyone will find the materials lacking at some point.
So, ask questions! Everyone involved with your education wants you to be successful. In fact many of those you will come in contact with in a course like this have devoted a significant part of their lives to your education. Real Digital maintains a forum, as does Xilinx. Use the forums! Many students use the Real Digital forum, and thousands of active digital engineers from around the world working use the Xilinx forums. The forums exist to disseminate information efficiently – if you ask, someone will answer. You should, of course, ask clear and well-formed questions to get the best response.
Learn to use the tools very well
The Vivado tool is one the world’s preeminent digital design environments. It is full-featured, and includes many more features and capabilities than we can formally present in class. The tools is designed to assist working engineers solving real-world problems, and so they include the features that have proven to be the most useful over the years.
Commit to learning the tools, and exploring what they can do for you. The better you can use the tools, the better engineer you will be. Take encouragement from the fact that you are using the same tool as professional engineers, and invest your time and effort in mastering as much as you can. Engineers with a clear mastery of their design tool environment are more productive, more capable, and more highly rewarded.
Obtain a Boolean board, and download and install the Xilinx tools. Refer to the first project in the Digital Logic course for a step-by-step introduction to using Vivado for the first time. After you make it through the tutorials, complete the remaining requirements and challenges, and take time to explore the tools and other related designs. You’re on the way!