Skip to content

Hardware / Logical / HDL Design Daigram #7092

@MichalMKsiazek

Description

@MichalMKsiazek

Proposal

I am a massive fan of tools such as mermaid and plantuml (especially as a meotodoloy for project planning). However, I find that their focuse thends to be on software development and rightfully that is their popualr use case. I would love to see the functionality be exapnded for Logical Hardware diagrams.

The diagram should have:

  • Logical Operators
  • Module Blocks
    • abstractions of an existing collection of logical elemets with inpuyts and ouputs
  • Arrmows to represent single signal connections
  • Arrows to represent multi singal connections (mabey with with representing number of singals)
  • Element to represent a BUS
  • Elements to represent inputs and outputs for particual compoents

Use Cases

RTL, HDL enginnering and design for FPGAs and ASIC Architectures at the conceptual deisgn stage.

The representation of Hardware designs in existing tools that integrade Mermaid e.g. GitHub

Screenshots

Example logical operators

Image

Example of Existing daigrams (Quartus)

Image Image

Example of a logical and block daigram mix

Image

Example of me abusing the class diagram system to help accomplish someting simillar

Image

Example of a BUS (Again abusing the Class Diagram Style)

The bus is the verical line and should help organised common connectiosn between mulitple blocks. I think this looks more organised then the above diagram.
Image

Syntax

Taking the example from the "Example of a logical and block daigram mix" of the ALU

HardwareDiagram

  val3 = val1 + val2 %% this would generate an AND gate
  val3 = val1 | val2 %% this would generate an OR gate
  val3 = mux_val ? val1 : val2 %% this would generate a multiplexer symbol (e.g. A Mux / B Mux)
  ...

  module ALU{
    inputclk clk_i : wire %% closcks hsould probobaly have a unique 'type' to allow for special symbol to be added to the block
    input a_i : wire[0..7]
    input  b_i : wire[0..7]
    output q_o : wire[0..7]
    output EQ : wire
    output LT : wire
    output LTU : wire
    inout some_input_and_output_value %% port that would be both input and output therfore have a bi-directional arrow
    interface axi4_lite : axi4_lite.master %% Note the .master defines the subtype (a.k.a. modports) in this case the master end of a master and slave interface topology.

Implementation

None

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions