Saint's Log


Common Verilog Mistakes by SystemVerilog Newbies

As part of my HDL Digital Design course at the University of Wyoming, I have to implement various modules using Verilog. Interestingly, the course textbook (Digital Design and Computer Architecture) uses SystemVerilog. This leaves an HDL newbie like me in an interesting spot since I tend to make assumptions about Verilog based on what I've seen in SystemVerilog, even though the latter is newer. Some common newbie issues I ran into (that were easily resolved by finding examples of Verilog modules):

  1. Declaring inputs as "input xyz[3:0]" instead of "input [3:0]xyz".
  2. Trying to use assertions. It was quite surprising to me that assertions as explained in SystemVerilog weren't "a thing" in Verilog. Some digging around led me to this article discussing assertions (and implying there wasn't a direct way to assert facts in Verilog).
  3. Concatenating values
  4. No assertions? What... oh, I guess I already mentioned that, but I'm new to this HDL arena.

I guess I could have been more diligent in my search for Verilog tutorials for beginners (like this one) to alleviate all the annoyances I ran into assuming that learning SystemVerilog would translate in a completely seamless transition into writing Verilog code. Oh well, I guess learning a new language doesn't always involve taking the most efficient path from A to B.


Resolving iverilog __gxx_personality_v0 errors

I ran into a strange error while trying to compile a Verilog module using theĀ Icarus Verilog compiler:

iverilog DLL error

A quick lookup of the __gxx_personality_v0 error on StackOverflow revealed to me that the cause of this strange error is a mismatched/missingĀ libstdc++-6.dll, fixable with a simple command:

copy C:\dev\tools\iverilog\bin\libstdc++-6.dll C:\dev\tools\iverilog\lib\ivl

I still need to investigate exactly why this libstdc++-6.dll problem occurs. It might be related to my Git environment (Git Bash?)