Как я могу сгенерировать файл изображения схематической блок-схемы из Verilog?

9

Я хочу создать схему конкретной иерархии модулей verilog, показывающую, какие блоки связаны с какими другими блоками. Так же, как инструмент Debussy / Verdi nschema от Novas / Springsoft или любой из ряда инструментов EDA, которые предоставляют браузер графического дизайна для вашего RTL.

Какая область инструментов доступна для программного рисования схем либо из определения verilog или vhdl, либо из какого-либо другого текстового формата ввода?

Росс Роджерс
источник

Ответы:

10

Используйте Yosys , бесплатный HDL Synthesis Toolbox с открытым исходным кодом и дополнительными дозами быть крутым (и бесплатным) (и быстрее, чем Vivado текущего поколения) (я упоминал Free как в речи и пиве?) (И потрясающе)!

Получите yosys, утилиту xdot (часто часть пакета с именем python-xdot), а также graphviz.

Затем сделайте что-то вроде файла verilog (давайте назовем это 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

и запустите 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)

загрузите файл verilog, затем проверьте иерархию, затем извлеките процессы, оптимизируйте, найдите конечные автоматы, оптимизируйте и покажите график:

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

и вы получите что-то вроде

изображение репр.  логика

С помощью различных параметров showкоманды вы также можете просто сохранить график в файл. Yosys позволяет вам писать «сплющенную» логику в verilog, EDIF, BLIF,…, синтезировать и отображать для конкретных технологических платформ, в том числе поддерживаемых ArachnePnR, и делать гораздо более интересные вещи. По сути, Yosys - это как позволить кому-то, кто знает, как создавать компиляторы, написать синтезатор verilog.

Маркус Мюллер
источник
1

Что у тебя есть? У этих есть та особенность, с различными качествами продукции.

  • Synplicity
  • Synopsys Design Compiler
  • Альтера Квартус II
  • Xilinx ISE
Брайан Карлтон
источник
1
Я хочу сделать это по требованию без графического взаимодействия. Т.е. программно. У меня есть доступ к DC.
Росс Роджерс
0

Altera Quartus должен уметь это делать.

Когда я изучал VHDL, я иногда делал обратное преобразование (начиная со схемы для получения эквивалента VHDL) с Quartus Web Edition, и это работало.

лесоруб
источник