vGoodtimes
Advanced Member level 4
- Joined
- Feb 16, 2015
- Messages
- 1,089
- Helped
- 307
- Reputation
- 614
- Reaction score
- 303
- Trophy points
- 83
- Activity points
- 8,730
I've done a fair amount of RTL design. At first, there is a "how does this work" outlook. But eventually I started wondering "why doesn't this"...
So for fun, what are your most desired language features that just never got added?
For me:
1.) export combinatorial signals from clocked processes. Having access to next-state logic is amazingly useful if you don't have to do any work to get it. But multi-process designs are very verbose and can generate accidental latches.
2.) currying. Functions can't return types, subtypes, functions, or procedures/tasks. There are no lambda function or boost::bind equivalents. I started using procedures on fairly simple code to add meaning and to shrink the core of my FSM's. Much of it was just copy-paste and could have been handled by the language. (I guess this could also be templated functions/procedures).
3.) output generics/parameters. I've always liked the idea of auto-allocating the control address space of my design. I'd like to be able to have submodules advertise how many addresses they need and pass the info up to controllers that can then pass base addresses back down. There could be loops, but VHDL/Verilog can already deal with combinatorial loops, this is no different.
4.) assert exists. In all honesty, it is impossible to have no warnings in VHDL. Some designs rely on const-propagation to remove unused logic. But it would be nice to be able to assert that signal x (eg, "clk") is never removed. The tools could give more detailed info when the signal is removed.
In the end, it won't matter -- anything you suggest will at best be added to VHDL2100, or SystemVerilog2100...
So for fun, what are your most desired language features that just never got added?
For me:
1.) export combinatorial signals from clocked processes. Having access to next-state logic is amazingly useful if you don't have to do any work to get it. But multi-process designs are very verbose and can generate accidental latches.
2.) currying. Functions can't return types, subtypes, functions, or procedures/tasks. There are no lambda function or boost::bind equivalents. I started using procedures on fairly simple code to add meaning and to shrink the core of my FSM's. Much of it was just copy-paste and could have been handled by the language. (I guess this could also be templated functions/procedures).
3.) output generics/parameters. I've always liked the idea of auto-allocating the control address space of my design. I'd like to be able to have submodules advertise how many addresses they need and pass the info up to controllers that can then pass base addresses back down. There could be loops, but VHDL/Verilog can already deal with combinatorial loops, this is no different.
4.) assert exists. In all honesty, it is impossible to have no warnings in VHDL. Some designs rely on const-propagation to remove unused logic. But it would be nice to be able to assert that signal x (eg, "clk") is never removed. The tools could give more detailed info when the signal is removed.
In the end, it won't matter -- anything you suggest will at best be added to VHDL2100, or SystemVerilog2100...