Como posso gerar um arquivo de imagem de diagrama de blocos esquemático a partir do verilog?

9

Quero criar um esquema de uma hierarquia específica de módulos verilog mostrando quais blocos estão conectados a quais outros blocos. Muito parecido com a ferramenta Debussy / Verdi nschema de Novas / Springsoft , ou qualquer uma das várias ferramentas de EDA que fornecem um navegador de design gráfico para o seu RTL.

Quais ferramentas estão disponíveis para desenhar esquemas programaticamente a partir de uma definição verilog ou vhdl ou de algum outro formato de entrada baseado em texto?

Ross Rogers
fonte

Respostas:

10

Use o Yosys , a caixa de ferramentas de síntese HDL de fonte aberta e gratuita com doses extras de ser legal (e gratuito) (e mais rápido que o Vivado da atual geração) (mencionei Free como no discurso e na cerveja?) (E incrível)!

Obtenha o yosys e o utilitário xdot (geralmente parte de um pacote chamado python-xdot), bem como o graphviz.

Então, faça algo como em um arquivo verilog (vamos chamar assim minifsm.v):

module piggybank (
                  input         clk,
                  input         reset,
                  input [8:0]   deposit,
                  input [8:0]   withdrawal,
                  output [16:0] balance,
                  output        success
                  );
   reg [16:0]                   _balance;
   assign balance = _balance;
   wire [8:0]                   interest = _balance [16:9];
   reg [5:0]                    time_o_clock;
   localparam STATE_OPEN = 0;
   localparam STATE_CLOSED = 1;
   reg                          openness;
   assign success = (deposit == 0 && withdrawal == 0) || (openness == STATE_OPEN && (withdrawal <= _balance));
   always @(posedge clk)
     if(reset) begin
        _balance <= 0;
        openness <= STATE_CLOSED;
        time_o_clock <= 0;
     end else begin
        if (openness == STATE_CLOSED) begin
           if(time_o_clock == 5'd7) begin
              openness <= STATE_OPEN;
              time_o_clock <= 0;
           end else begin
              time_o_clock <= time_o_clock + 1;
           end
           if (time_o_clock == 0) begin //add interest at closing
              _balance <= _balance + interest;
           end;
        end else begin //We're open!
           if(time_o_clock == 5'd9) begin // open for 9h
              openness <= STATE_CLOSED;
              time_o_clock <= 0;
           end else begin
              _balance <= (success) ? _balance + deposit - withdrawal : _balance;
              time_o_clock <= time_o_clock + 1;
           end
        end // else: !if(openness == STATE_CLOSED)
     end // else: !if(reset)
endmodule // piggybank

e execute yosys:

yosys

 /----------------------------------------------------------------------------\
 |                                                                            |
 |  yosys -- Yosys Open SYnthesis Suite                                       |
 |                                                                            |
 |  Copyright (C) 2012 - 2016  Clifford Wolf <clifford@clifford.at>           |
 |                                                                            |
 |  Permission to use, copy, modify, and/or distribute this software for any  |
 |  purpose with or without fee is hereby granted, provided that the above    |
 |  copyright notice and this permission notice appear in all copies.         |
 |                                                                            |
 |  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES  |
 |  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF          |
 |  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR   |
 |  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    |
 |  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN     |
 |  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   |
 |  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.            |
 |                                                                            |
 \----------------------------------------------------------------------------/

 Yosys 0.6+155 (git sha1 a72fb85, clang 3.7.0 -fPIC -Os)

carregue o arquivo verilog, verifique a hierarquia, extraia os processos, otimize, encontre as máquinas de estado, otimize e mostre um gráfico:

yosys> read_verilog minifsm.v
 
yosys> hierarchy -check;
yosys> proc;
yosys> opt;
yosys> fsm;
yosys> opt;
yosys> show;

e você terá algo como

repr imagem.  lógica

Com opções diferentes para o showcomando, você também pode salvar o gráfico em um arquivo. O Yosys permite que você escreva lógicas "achatadas" em verilog, EDIF, BLIF, ..., sintetize e mapeie para plataformas tecnológicas específicas, incluindo as suportadas pelo ArachnePnR, e faça coisas muito mais interessantes. Em essência, Yosys é como deixar alguém que sabe como construir compiladores escrever um sintetizador de verilog.

Marcus Müller
fonte
1

O que você tem? Esses possuem esse recurso, com várias qualidades de saída.

  • Synplicity
  • Synopsys Design Compiler
  • Altera Quartus II
  • Xilinx ISE
Brian Carlton
fonte
1
Eu estou olhando para fazer isso sob demanda sem interação gui. Ou seja, programaticamente. Eu tenho acesso ao DC.
Ross Rogers
0

Altera Quartus deve ser capaz de fazê-lo.

Quando eu estava estudando VHDL, às vezes eu fazia a conversão reversa (começando do esquemático para obter o equivalente em VHDL) com o Quartus Web Edition, e funcionou.

Axeman
fonte