Desktop library for HDL designer and verifier

Circuit design.

About what everything consists of in more detail. As a basis, I would recommend no less classic ones: Wackerly “Digital Device Design” And Ugryumov “Digital circuitry”. Books on development for FPGAs would also be appropriate, for example Maxfield Clive: Design on FPGA. Architecture, means and methods. Young fighter course” According to FPGA, books appear more or less regularly, you can choose what suits you personally.

Hardware description languages.

If anyone didn’t know or forgot, the development of a full-fledged digital device in the form of a circuit is now almost never practiced. Instead, a functional description of the microcircuit is developed in a special language (hardware description language or HDL), which is then turned into logical elements and wires between them using a synthesizer program. There are not very many hardware description languages, and the most common one now is SystemVerilog (or SV for short). There are not so many books on it in Russian, but there are still some. I usually recommend Donald Thomas: “Logical design and verification of systems using SystemVerilog”. A good option to start with is quite a lot on the topic, a normal presentation, and even in Russian. But not without its drawbacks, of course: a lot is left out of the equation, so additions are needed. For example: Stuart Sutherland: “SystemVerilog For Design”. A good book, it tells you in an accessible language how to write something that actually works in SV.

It’s not enough to write, we also need to test what we’ve written. In the case of hardware development, the history of testing is an inexhaustible topic (missed errors are VERY expensive). Here you can advise Chris Spear: SystemVerilog for Verification” This is a general description of how to write code for testing. But this is just the beginning of the conversation. The next steps, without which it will be difficult, are SVA and UVM.

SVA or SystemVerilog assertions – a special language (as part of SV) for describing statements. With their help, it is very convenient to check the exchange between devices and compliance with protocols. There is something in almost all books and tutorials on SV, but it is advisable to understand how to use this powerful tool correctly and effectively. You can read, for example: Srikanth Vijayaraghavan: A Practical Guide for System Verilog Assertions” And “SystemVerilog Assertions Handbook

UVM, or Universal Verification Methodology – a verification methodology and, at the same time, the most common verification library. It is quite large, object-oriented (yes, SystemVerilog is an OOP language, and without knowledge of OOP it is still possible to develop the device itself, but creating a high-quality verification system for it is almost impossible). Quite a lot has been written about it, there are documents of very different quality – everyone will find something to read to their liking. But I’ll give you some advice.

A short webinar on working with UVM: https://www.youtube.com/watch?v=WhdQJjqx9cU and manual https://fpga-systems.ru/articles/132/uvmgiaootm.pdf from the FPGA-SYSTEMS community (website https://fpga-systems.ru also on the list of recommendations for anyone interested). A good portal on UVM: http://testbench.in/ .

UVM Practical Guide: Sharon Rosenberg A Practical Guide to Adopting the Universal Verification Methodology” And Vanessa R. Cooper Getting Started with UVM. A beginner's guide” Plus, of course, “recipes from the chef”, i.e. from the UVM community: “UVM_Class_Reference_Manual_1.2.pdf» (https://accellera.org/images/downloads/standards/uvm/UVM_Class_Reference_Manual_1.2.pdf ) .

As a reference book (or file at hand), it is always useful to have standards:

IEEE_1800-2017_SystemVerilog

IEEE_18002-2017_UVM

Additionally, we can recommend the following books (about verification in general):

1. Hamilton B. Carter & Shankar Hemmady: Metric-Driven Design Verification

2. Ashok B. Mehta: ASIC/SoC Functional Design Verification

3. PeetJames: VERIFICATION PLANS The Five-Day Verification Strategy for Modern Hardware Verification Languages

4. William K. Lam & Sun Microsystems: Hardware Design Verification: Simulation and Formal Method-Based Approaches

5. Alan Wiemann: Standardized Functional Verification

6. Andreas Meyer: Principles of Functional Verification

7. Ray Salemi: Python for RTL verification – interesting for its special approach to verification using the Python language.

There is another interesting direction that we have to deal with – SystemC. In fact, this is a library for C++, with which you can develop functional descriptions of microcircuits and test them. One of the advantages is the speed of work. Of the minuses – C++ “as it is”. If you're good at Pros and bad at SV, this might be your choice. Or suddenly you need to write very fast code – also here. You can read, for example David C. Black and Jack Donovan SYSTEMC: FROM THE GROUND UP“.

And one more comparative new direction – Chisel. A high-level language (or library) based on Scala for the development and verification of microcircuits. You can read, for example, Martin Schoeberl: Digital Design with Chisel» (https://github.com/schoeberl/chisel-book), and, of course, a tutorial on Scala, without which you can’t figure it out: Odersky, Spoon, Wenners, Sommers: Scala. Professional programming. 5th ed.

Backend

After we have developed and tested something, it would be nice to turn it into a microcircuit. This process is called physical design, or backend (frontend is HDL). A good book about physical design: “Khosrow Golshan: PHYSICAL DESIGN ESSENTIALS An ASIC Design Implementation Perspective” Another interesting book about the backend and the synthesis process is “Romanov A. Yu., Panchul Yu. V.: Digital synthesis. Practical course”.

Programming

It is not enough to make a microcircuit; it must be made to work. And for this, at a minimum, you need to know the basics of programming. We need C and Assembler (which Assembler depends on what processor we will use inside the chip, if there is one, of course). For assembler, it's probably best to read the Programmes' Guide for the architecture on which the processor is designed. As for C, this is unoriginal: Brian Kernighan and Dennis Ritchie: C programming language” And Herbert Schild: C: The Complete Guide, Classic Edition“, but everything depends on taste and color, thanks to textbooks on the Sea.

It is also very useful to familiarize yourself with the operating features of embedded systems, at least to understand the process of initial loading of the chip. The topic is also very large and here everyone can find something to their liking. As a starting point: Tarasov Alexey: C for Embedded Systems“, “Practical Aspects in U-Boot Programming“, “Making Embedded Systems

Since we started talking about programming and have already mentioned OOP, it would be good to at least familiarize ourselves with one of these books: Johnson Ralph, Gamma Erich: Object-Oriented Design Patterns” (also known as Gang of Four design patterns) or “Andrei Alexandrescu: Modern design in C++. Generic Programming and Application Design Patterns” These books will help you not to get lost in large and sprawling verification systems: many templates are actively used there, and Singletone and Factory do this all the time.

Interfaces.

Books on exchange interfaces between devices may also be useful:

Mikhail Guk. “PC hardware interfaces. Encyclopedia”

Mikhail Guk. “PC Interfaces. Directory”

Mikhail Guk. “Storage device interfaces. ATA, SCSI and others. Encyclopedia”

Mikhail Guk. “PCI, USB and FireWire buses. Encyclopedia”

Last but not least on the list are books on organizing the development process. At a minimum, you need to know what version control systems are. There is a lot of information here, but let's take another classic as a starting point Scott Shacon: Pro Git

Of course, the list of good and useful books and websites does not end there. There are still a lot of interesting and useful things. But these books can be a good basis for further study of such an interesting and multifaceted process as the development of a modern microcircuit.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *