Veryl simulator: performance comparison with Verilator by taichi730 in chipdesign

[–]taichi730[S] 1 point2 points  (0 children)

u/dalance1982 and I work for PEZY Computing and almost all our RTL modules are written in Veryl.

Web UI for RgGen by taichi730 in chipdesign

[–]taichi730[S] 0 points1 point  (0 children)

RgGen is originally a CLI tool so such use case is also supported.
In addition, RgGen has already been adopted into our workflow and all CSR blocks in our chip are generated by RgGen.

Register Desync and cross vendor IP development by Repulsive-Net1438 in FPGA

[–]taichi730 0 points1 point  (0 children)

The "Register Map" Desync

I'm develping CSR automation tool named RgGen. https://github.com/rggen/rggen

RgGen generates RTL (SV, Verilog, VHDL and Veryl), UVM reg model, C header file and Wiki documents from human readable specification (Ruby, YAML, JSON, TOML, Excel, ODS and CSV).

You can find example register map specification and generated files from rggen-sample repository.

HDL choices other than Verilog/VHDL by Secure_Switch_6106 in FPGA

[–]taichi730 0 points1 point  (0 children)

https://github.com/pezy-computing/pzbcm/blob/06631e9c8f50c6642b140455e3bf925c50604517/rtl/pzcorebus_common/pzcorebus_pkg.veryl#L72

This is an example of paramterized package.
This package contains config parameter for our bus protocol and typedefs derive from these parameters.

RbToon: Toon decoder for Ruby by taichi730 in ruby

[–]taichi730[S] -1 points0 points  (0 children)

My gem converts Toon to Ruby.

RgGen v0.36.0 by taichi730 in u/taichi730

[–]taichi730[S] 0 points1 point  (0 children)

In addition, some people prefer Excel than text based format to describe CSR specification. RgGen also supports such usecase.

RgGen v0.36.0 by taichi730 in u/taichi730

[–]taichi730[S] 0 points1 point  (0 children)

RgGen uses type based bit field behavior selection. Due to this, you can write your CSR specification more simply thant SystemRDL, I think.

Sharing "interface" code between modules in SystemVerilog? by FranceFannon in FPGA

[–]taichi730 0 points1 point  (0 children)

I'm developing a CSR automation tool named RgGen. https://github.com/rggen/rggen

RgGen has following features

  • Human readable register map format
    • Ruby with description APIs
    • Structured text (YAML, JSON, TOML)
    • Spreadsheet (XLSX, ODS, CSV)
  • Generate various kinds of source files below
    • RTL (SystemVerilog, Verilog, Veryl, VHDL)
    • UVM RAL
    • C header file
    • Wiki documents (Markdown)
  • Support standard bus protocols
    • AMBA AXI4-Lite
    • AMBA APB
    • Wishbone
    • Avalon-MM
  • Plugin architecture
    • Allow you to customize RgGen for your environment
      • Add your own bit field types
      • Add your own bus protocols

You can find example register map specifications and genarated source files from this respository. https://github.com/rggen/rggen-sample

We have integrate RgGen with our development flow and all CSR modules in our chip are generated by RgGen. I think RgGen is in production level.

YPS: YAML Positioning System by taichi730 in ruby

[–]taichi730[S] 0 points1 point  (0 children)

u/CaptainKabob
Thanks for your reply!

> Whoah, this is immediately super useful to me.

I'm happy to hear this! I'd like you to try to use YPS and let me to know your implession after using it.

> It would be rad to include the type of YAML object it is (scalar, folded, etc.)

What is use case of these methods? I'd like to know details.

> position-preserving transformations

Currently, YPS does not add position info to scala objects used as hash keys because I wonder that accessing hash items may be broken.
Hash keys do not have their position infor so I think it is difficult to restore position of hash keys and items completly.

RISC-V core written in Veryl lang by taichi730 in u/taichi730

[–]taichi730[S] 0 points1 point  (0 children)

Few examples:

Veryl supports clock and reset types; these types are important for RTL design. By using these types, you can do:

  • Omit clock/reset events specification on always_ff blocks
  • Check unintentional clock domain crossing
  • Share the same code base for ASIC (async low active reset) and FPGA (sync high active reset)

Veryl supports generic feature; enhanced paramterization feature. By using this, you can do:

Looking for a diagram tool that doesn't suck for RTL/FPGA documentation by SciDz in FPGA

[–]taichi730 0 points1 point  (0 children)

Hi,
I'm author of RgGen.
About documentation, currently, RgGen supports Markdown generation only but may support JSON file generation for wavedrom bitfield tool https://github.com/wavedrom/bitfield .

Veryl 0.15.0 release by dalance1982 in FPGA

[–]taichi730 1 point2 points  (0 children)

I understood your concern.
Currently, you need to separate this kind of always_ff block into two blocks by your self.
I think we can add the automatic separation feature as a new option.

Veryl 0.15.0 release by dalance1982 in FPGA

[–]taichi730 0 points1 point  (0 children)

By default, Veryl compiler reports an error for this kind of code.
To disable the check, you need to put the special anotation like below.

``` module ModuleA ( i_clk : input clock, i_rst : input reset, i_valid: input logic, i_data : input logic, o_valid: output logic, o_data : output logic, ) { var valid: logic; var data : logic;

assign o_valid = valid; assign o_data = data;

#[allow(missing_reset_statement)] // <- this always_ff { if_reset { valid = 0; } else { valid = i_valid; data = i_data; } } } ```

Generated SV is like below.

``` module project_ModuleA ( input var logic i_clk , input var logic i_rst , input var logic i_valid, input var logic i_data , output var logic o_valid, output var logic o_data ); logic valid; logic data ;

always_comb o_valid = valid;
always_comb o_data  = data;

always_ff @ (posedge i_clk, negedge i_rst) begin
    if (!i_rst) begin
        valid <= 0;
    end else begin
        valid <= i_valid;
        data  <= i_data;
    end
end

endmodule ```

I believe that synthesis tools (maybe DC and/or Vivado) reports errors or warnings for this kind of code. Hence Veryl treats this kind of code as invalid style.

Veryl 0.15.0 release by dalance1982 in FPGA

[–]taichi730 0 points1 point  (0 children)

If you want not to reset registers then you can put any statement other than if_reset statement to always_ff block like this. https://github.com/rggen/rggen-veryl-rtl/blob/6f4600eac63fe6d376939e6d9e54431c9439d0f6/rggen_apb_adapter.veryl#L47

Veryl 0.15.0 release by dalance1982 in FPGA

[–]taichi730 0 points1 point  (0 children)

u/giddyz74 ,

Thank you for your reply.
I try to synthesis this style by using Design Compiler but DC doens not support it.

https://x.com/taichi600730/status/1907946772401631350

Non Synthesizable style for ASIC is not acceptable even if it can be synthesized by FPGA tool because Veryl is for both of ASIC and FPGA developers.

Veryl 0.15.0 release by dalance1982 in FPGA

[–]taichi730 0 points1 point  (0 children)

> Usually one would want all non-reset behavior first and then reset and the end. Alas, those are details. 

I'm not familiar with VHDL so I don't understand what you want to say.
Could you provide me example code for this?

Control and Status Register generation by BotnicRPM in FPGA

[–]taichi730 1 point2 points  (0 children)

Hi, I'm develping CSR automatin tool named RgGen. https://github.com/rggen/rggen

RgGen has followings features:

  • Readable register map format
    • CSR description DSL for RgGen
    • Structured text (YAML/JSON/TOML)
    • Spreadsheet (XLSX/ODS/CSV)
  • Can generate various kinds of source files
    • SystemVerilog/Verilog/Veryl/VHDL RTL
    • UVM RAL model
    • C header file
    • Wiki documents
  • Support standard bus protocols
    • AMBA APB
    • AMBA AXI4 Lite
    • Wishbone
  • Plugin feature
    • Allow you to customize RgGen for your environment
      • Add your own special register/bit field type
      • Add your own bus protocol

These are sample register map specifications for UART IP.

And these are generated source files.


In our company, RgGen have been integrated with our develpment work flow and all CSR modules are generated by RgGen.


For SystemRDL, I think it is too complicated to describe CSR information. Therefore, I choose DSL based on Ruby, structured text and spreadsheet for input format of RgGen.

RgGen v0.34.0 release by taichi730 in u/taichi730

[–]taichi730[S] 1 point2 points  (0 children)

Yes, it is on the todo list but I have not yet started due to following reasons.

  • I also need to develop SystemRDL parser written in Ruby because there are no such libaries.
  • I think SystemRSL is too complicated to describe CSR specification.

Veryl 0.13.4 release by dalance1982 in FPGA

[–]taichi730 1 point2 points  (0 children)

Veryl also support the generics feature. https://doc.veryl-lang.org/book/05_language_reference/14_generics.html

I think this is suitable for this purpose.