Йосис интерпретирует и не гейт как нанд для визуализации - PullRequest
0 голосов
/ 09 октября 2018

Я пытался использовать yosys исключительно для визуализации в сочетании с https://github.com/nturley/netlistsvg. Инструментом, который берет сгенерированный yosys файл json и создает из него SVG.Если у меня есть код verilog:

module test(a,b,c);
    input wire a,b;
    output wire c;
    assign c = ~(a & b);
endmodule

, я хочу сгенерировать файл SVG, имеющий NAND-шлюз.Я использую следующие команды Yosys:

read_verilog test.v
write_json output.json

Yosys интерпретирует оператор присвоения как вентиль AND и вентиль NOT и выводит следующий json:

{
  "creator": "Yosys 0.7 (git sha1 61f6811, gcc 6.2.0-11ubuntu1 -O2 -fdebug-prefix-map=/build/yosys-OIL3SR/yosys-0.7=. -fstack-protector-strong -fPIC -Os)",
  "modules": {
    "test": {
      "attributes": {
        "src": "test.v:1"
      },
      "ports": {
        "a": {
          "direction": "input",
          "bits": [ 2 ]
        },
        "b": {
          "direction": "input",
          "bits": [ 3 ]
        },
        "c": {
          "direction": "output",
          "bits": [ 4 ]
        }
      },
      "cells": {
        "$not$test.v:4$2": {
          "hide_name": 1,
          "type": "$not",
          "parameters": {
            "Y_WIDTH": 1,
            "A_WIDTH": 1,
            "A_SIGNED": 0
          },
          "attributes": {
            "src": "test.v:4"
          },
          "port_directions": {
            "Y": "output",
            "A": "input"
          },
          "connections": {
            "Y": [ 4 ],
            "A": [ 5 ]
          }
        },
        "$and$test.v:4$1": {
          "hide_name": 1,
          "type": "$and",
          "parameters": {
            "Y_WIDTH": 1,
            "B_WIDTH": 1,
            "A_WIDTH": 1,
            "B_SIGNED": 0,
            "A_SIGNED": 0
          },
          "attributes": {
            "src": "test.v:4"
          },
          "port_directions": {
            "Y": "output",
            "B": "input",
            "A": "input"
          },
          "connections": {
            "Y": [ 5 ],
            "B": [ 3 ],
            "A": [ 2 ]
          }
        }
      },
      "netnames": {
        "$not$test.v:4$2_Y": {
          "hide_name": 1,
          "bits": [ 4 ],
          "attributes": {
            "src": "test.v:4"
          }
        },
        "$and$test.v:4$1_Y": {
          "hide_name": 1,
          "bits": [ 5 ],
          "attributes": {
            "src": "test.v:4"
          }
        },
        "c": {
          "hide_name": 0,
          "bits": [ 4 ],
          "attributes": {
            "src": "test.v:3"
          }
        },
        "b": {
          "hide_name": 0,
          "bits": [ 3 ],
          "attributes": {
            "src": "test.v:2"
          }
        },
        "a": {
          "hide_name": 0,
          "bits": [ 2 ],
          "attributes": {
            "src": "test.v:2"
          }
        }
      }
    }
  }
}

Есть ли способ принудительно вызвать yosysинтерпретировать строку как nand gate и вывести json больше так:

{
  "creator": "Yosys 0.7 (git sha1 61f6811, gcc 6.2.0-11ubuntu1 -O2 -fdebug-prefix-map=/build/yosys-OIL3SR/yosys-0.7=. -fstack-protector-strong -fPIC -Os)",
  "modules": {
    "test": {
      "attributes": {
        "src": "test.v:1"
      },
      "ports": {
        "a": {
          "direction": "input",
          "bits": [ 2 ]
        },
        "b": {
          "direction": "input",
          "bits": [ 3 ]
        },
        "c": {
          "direction": "output",
          "bits": [ 4 ]
        }
      },
      "cells": {
        "$nand$test.v:4$1": {
          "hide_name": 1,
          "type": "$nand",
          "parameters": {
            "Y_WIDTH": 1,
            "B_WIDTH": 1,
            "A_WIDTH": 1,
            "B_SIGNED": 0,
            "A_SIGNED": 0
          },
          "attributes": {
            "src": "test.v:4"
          },
          "port_directions": {
            "Y": "output",
            "B": "input",
            "A": "input"
          },
          "connections": {
            "Y": [ 4 ],
            "B": [ 3 ],
            "A": [ 2 ]
          }
        }
      },
      "netnames": {
        "$nand$test.v:4$1_Y": {
          "hide_name": 1,
          "bits": [ 5 ],
          "attributes": {
            "src": "test.v:4"
          }
        },
        "c": {
          "hide_name": 0,
          "bits": [ 4 ],
          "attributes": {
            "src": "test.v:3"
          }
        },
        "b": {
          "hide_name": 0,
          "bits": [ 3 ],
          "attributes": {
            "src": "test.v:2"
          }
        },
        "a": {
          "hide_name": 0,
          "bits": [ 2 ],
          "attributes": {
            "src": "test.v:2"
          }
        }
      }
    }
  }
}

Или это не то, что можно сделать.

1 Ответ

0 голосов
/ 17 октября 2018

Поскольку вы не выполняли никакого синтеза, дизайн все еще находится в форме словесного списка RTL.В этом контексте «$ and», «$ not» и подобные строчные ячейки являются многобитными ячейками, разработанными для соответствия операторам Verilog.

Выполнение команды «synth» синтезирует ваш проект в стандартный набор из одного битаклетки уровня ворот.Это включает в себя ячейку NAND.Обратите внимание, что у этих ячеек будут имена в верхнем регистре, такие как «$ _NAND_», и они эквивалентны базовым логическим элементам.

...