Real Digital produces educational materials to help you learn digital circuit design, microprocessor systems programming, and digital systems engineering. To use the Real Digital materials, you’ll need a suitable computer with internet access (something less than two years old), the Xilinx tools (available as a free download), and a Blackboard to implement and validate your hardware and software designs. Real Digital materials are all free and open, and they are created, maintained and updated by a network of university faculty and practicing engineers. Materials include four major components:
- The Blackboard circuit board. The Blackboard is a highly configurable digital/system design platform, created specifically to support educational needs (although it is used in industry as well). The Blackboard is built around Xilinx’s ZYNQ “system-on-chip” that contains both an ARM processor and an FPGA, allowing both custom hardware and software designs to be developed;
- Courseware, including design projects, homework problems, and lectures. Courseware materials support undergraduate courses in digital logic design, microprocessor systems, and digital system design. They are organized in accordance with typical university-based courses, and they include background reading materials, design tutorials, reference code, homework problems and design challenges that progress from first principles through advanced topics;
- Design software. The Blackboard works seamlessly with Xilinx’s free Vivado and SDK WebPack design tools – Vivado is used to create custom digital circuits using Verilog or VHDL, and SDK is used to write Assembly or C software for the ARM. Both tools can program the Blackboard directly, making it easy to download and test new designs;
- Reference material. A library of reference designs, tutorials, user guides, and other materials that help create a stand-alone, self-paced learning environment that students can use in any setting.
ZYNQ’s ARM processor and FPGA can be used separately/independently to create either a stand-alone ARM microprocessor system, or a stand-alone FPGA-based digital circuit development system. The ARM and FPGA can also be used in combination to create powerful digital systems that include both hardware and software components. The “digital logic” course uses the Blackboard as a hardware design platform supporting entry-level digital design (the ARM is ignored); the microprocessor course uses the Blackboard as an entry-level software development board (the FPGA is ignored); and the digital systems course uses the ARM and FPGA to build powerful, highly customized solutions with tightly-coupled hardware and software components. The ZYNQ chip is surrounded by memories, sensors, bus controllers, general purpose I/O devices, etc. - everything needed to implement a wide variety of digital circuits and systems.
Real Digital’s materials are centered on a sequence of hands-on design projects that are drawn from real applications, and they progress from first-touch logic circuits through complex digital systems with both hardware and software components. They are most effective in a classroom setting where instructors and assistants are readily available, but they support independent study as well. New circuits, design methods and tool features are introduced each week, and each new project builds on and extends the concepts presented earlier. Self-exploration and self-reliance are emphasized, and extra efforts to extend design projects with new ideas and new features are always encouraged and rewarded.
The free Webpack and SDK design tools provide a professional and stable environment for design entry, simulation, synthesis, compilation, programming, and hardware and software debug. Hardware designs can use Verilog, VHDL, or HLS environments, and software can be written in Assembly and/or C.
The Digital Logic course presents the knowledge and skills needed to design and implement custom hardware circuits that target ZYNQ’s FPGA. It is designed for first-semester students, but it is suitable for anyone, whether in a formal educational setting or a self-study environment. It starts from the very beginning, with no prior coursework assumed. Weekly design projects progress from simple logic circuits to complete digital systems, and serve to illustrate and reinforce the concepts presented in readings and lectures. Each week, designs are captured, simulated, synthesized, and downloaded to the Blackboard for physical verification.
The Microprocessor course is designed for second-semester students, and presents low-level software design in Assembly and C. It builds on many of the concepts presented in the Digital Logic course, and it assumes some basic programming experience using C or Java. It is presented as a series of hands-on design projects that progress from simple Assembly language programs that use I/O devices like LEDs and switches, to more complex C-language programs that use programmable time bases, interrupts, and SPI or I2C connected peripherals. Programs are written and debugged in Xilinx’s SDK environment, and then transferred to Blackboard’s ARM processor for validation.
The Digital Systems course builds on concepts presented the first two courses, and explores designs and methods that use both the ARM and FPGA. Experience using Vivado and SDK is expected, as is a basic working knowledge of digital design and programming in C. Projects include the creation of custom Verilog IP modules, configuring the modules as IP blocks that can be integrated into the ZYNQ system, and then writing software to control the custom IP blocks.
The Blackboard can be purchased directly from Real Digital, and the Vivado and SDK design tools can be downloaded from Xilinx at no cost. The first project in the Digital Logic course includes step-by-step instructions for downloading, installing, and starting the Vivado tool, and the first project in the Microprocessors course includes step-by-step instructions for downloading, installing, and starting the SDK tool.
Design projects form the core of Real Digital’s materials, and completing them is by far the best way to learn digital design. The projects form a continuous sequence that progresses through all the classes, 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, you are required to step through the tutorials; in later projects, they are optional.
After the tutorials, a sequence of several design requirements are presented. The requirements describe the design tasks you must perform in enough detail to make the objectives clear. But sometimes, not all the specific 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 must be evaluated by a qualified “Lab Assessor” – typically an instructor, teaching assistant, or other qualified/designated individual. In the evaluation, you will program the Blackboard with your design and demonstrate its function to the Assessor. The Assessor will ask questions to probe your design comprehension, and offer suggestions and feedback that may help you improve your design skills. As your demonstration proceeds, the Assessor will award points on a submission form.
A submission form is provided for each module. Submission forms have blanks where scores can be recorded for each requirement and challenge, and for your answers to pertinent questions asked by the Assessor (“Q&A”). The Assessor will record the date and scores as you progress through the demonstration, with scores being awarded according to the criteria below:
Exemplary (4 points): You may receive 4 points if your design meets or exceeds all requirements, your source files are neat, well organized and commented, and your design is well-engineered and of high enough quality to be used 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.
You must sign and submit your completed submission forms to receive credit for your work.
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 begin to feel bogged down, and start to question your commitment and wonder if it’s worth the effort, keep in mind that the knowledge and skills you are learning here will place you in very select company. You can certainly look forward to a rewarding career, but perhaps more enticingly, you can position yourself to help steer all of 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.
My graduating class had fewer than 100 engineers. Graduates from my class designed critical circuits on the world’s most popular processors, wrote code at the core of operating systems we all use every day, developed new network architectures, created products that are currently in space (or on another planet), created revolutionary medical products, etc. 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, and commit yourself to taking the first few steps that set you in the right direction. As you get going, find your passion for continuing the journey, and recognize (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 enough knowledge and skill to invent and create your own designs – new designs that no one has done before, and even designs that have real intrinsic value. The more you create, the more you learn what does and doesn’t work, and the faster your skill and confidence grows. 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 you could build, but when you actually start writing and simulating code, and further, programming your circuits into the Blackboard – that’s when you really learn. When you implement a circuit or program, there’s 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, and commit yourself to completing every design. Test your boundaries along the way – try different design strategies, and check the results. Once you have a working circuit, take another 5-10 minutes, and change some performances or architectures, and check the results. 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 (or to compile them into files that can program the ARM), 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 Blackboard. If one of the tools is giving you trouble, keep in mind 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 very clear understanding of exactly what input and output signals are required, and exactly what they do. Likewise, make sure you understand the functional mapping between the inputs and outputs – that is, understand exactly what the circuit (or software) is supposed to do. Create a top-level block diagram, and for all but the simplest designs, create a more detailed block diagram that shows your intended design broken into smaller, simpler blocks. This “divide and conquer” approach, called “partitioning”, lets you conceive, design, and verify the building blocks of larger, more complex designs. Then, these known-good blocks can be assembled into the more complex final design. After the first few projects, the requirements and source files get too large to tackle without good partitioning.
After you program the Blackboard, 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 interact with others, you are forced to identify what you do and don’t know. When you clearly identify what you don’t know well, you can attack it. Deliberating with other like-minded individuals opens you to new ways of visualizing or conceptualizing what you are wrestling with, and discussing and defending your ideas forces you to think more critically. So as quickly as possible, identify your cohort, figure out where your knowledge seems the most lacking, and start talking and working with others. In your conversations, head straight for your weaknesses, 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 will joining a very unique group – you will be among those 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 and SDK environments are two of the world’s preeminent digital design tools. They are full-featured, and offer many more features and capabilities than we can formally present in class. They are 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. If the Vivado and SDK design tools weren’t up to the task, they would fade from the market (they are not – they are gaining market share).
Commit to learning the tools, and exploring what they can do for you. The better you can use the tool(s), 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 Blackboard, and download and install the Xilinx tools (you will need to create an account with Xilinx – see the tutorial for more information). Refer to the first project in the Digital Logic course for a step-by-step introduction to using Vivado for the first time, and to the first project in the Microprocessors course for an introduction to SDK. After you make it through the tutorials, complete the remaining requirements and challenges, and take time to explore the tools and other related designs.