Package Request: VHDL IDE features


#1

I mainly write VHDL for FPGA development. As most firmware developers find, there is not much available for VHDL tools that give you things that a normal software IDE would give you. Things such as,

  • Type-time naming conventions check.
  • Type-time error checking and highlighting.
  • Tooltips/Quickinfo for signals, ports, constants, types, etc.
  • Number conversion on hover: hex/decimal/binary/etc.
  • State machine (case) generation based off a previously defined state type.
  • Code navigation using a process/instance dropdown list (similar to a function/symbol list in a software IDE).

These types of features are available in tools such as Sigasi, or the Visual Studio plugin V3S, however, these tools lack some of the other features that makes Atom so great.

Unfortunately, my experience does not extend very far into the realm of software development. Creating a package that added these features to Atom would be an extreme effort for me at this time. Is there anyone out there that is interested in creating something like this? I’d even be willing to attempt it myself if you can provide information on how to get started. I’ve followed the Atom package tutorial, and I understood well enough, but the main concepts of software development that they mentioned (callback functions, anonymous functions, serialization, etc.) were a bit over my head.


#2

If you have specific questions, there are a number of people here that would be happy to help out. For the ones you listed:

Callback functions

These are functions that are passed to other functions to do something after or during the execution of the function being called. In JavaScript, callback functions are often passed into functions to do one thing on success or another thing on failure.

Anonymous functions

These are functions that are not given a name often because they are defined in the place that they are used (like for callback functions) and not used anywhere else. For example, if you wanted to sort an array of objects by their numeric id field, you could do:

function doSomethingCool (objects) {
  // Do some cool stuff

  objects.sort(function (a, b) {
    return a.id - b.id
  })

  // Do some other cool stuff
}

Notice that doSomethingCool has a name but the function passed to objects.sort does not.

Serialization

Serialization is essentially the process of converting an in-memory object to the format that is used when storing it to persistent storage like a hard drive. Deserialization is the process of converting it the other direction :grinning:

I hope that’s helpful :+1: