IMO, VHDL and Verilog are both outstandingly terrible. There are tons of good options that compile from another language to VHDL/Verilog, such as Clash, Chisel, and nmigen. I cannot recommend strongly enough to use any of those over VHDL or Verilog.
My personal favorite is Clash - it’s unusual in that it actually compiles the host language (a subset of Haskell) into VHDL/Verilog, rather than simply providing a library which you can use to create circuit objects. This means you can compile your hardware and run it like a normal program, or include it as a library, or whatever. Very nice for testing. You can also use arbitrary libraries as long as you don’t use anything that falls outside the compilable subset.
I'm kind of torn on the alternative HDLs. The HDL code they generate is often not very readable. When you're simulating you're effectively debugging that generated code. Generate statements in VHDL/System Verilog can often cover some of the use cases. Mostly I find them useful for testbench generation - that seems to be where things like Cocotb really shine.
For Chisel, the most popular tester Treadle has VCD dumps built in. That way you can do your behavioral debugging directly with the source. Of course, for anything involving timing etc you'll have to go with the relevant vendors' tools, which is typically Verilog/VHDL.
https://github.com/stnolting/neorv32
Also the Documentation
https://stnolting.github.io/neorv32/
This is absolutely one of the best documented free hardware projects that I have ever seen. Most company documentation is worse by far.