是否有任何好的现有软件工具可用于帮助生成具有适当#defines 用于寄存器偏移以及来自 VHDL 的位定义的 C 头文件?如果确实存在任何此类工具,它们对 VHDL 的限制是什么?应该如何指定应该导出的东西?
到目前为止,我已经找到了这些工具,但它们并不是我想要的:
基于这些工具,如果正确的工作流程是同时生成 C 和 VHDL,而不是尝试直接从 VHDL(可能在注释中带有额外的标签)到 C,我也很感兴趣。
您可以查看doxygen,它支持 VHDL 语言,并且通过使用中间文件,您可以或多或少地轻松提取信息。副产品将是您的 RTL 代码文档。
另一种选择是从 Yacc/Lex 定义构建 C 解析器,您可以在此处找到几个。从那里,您可以解析 VHDL,提取信息(您必须确定如何检索寄存器的定义)并生成 C 头文件。这可能相当复杂。
但如果我是你,我真的会以不同的方式进行,在单独的文件中定义寄存器偏移量和字段(例如,在 XML 中),并编写一个小脚本来生成 C 头文件和 VHDL 包,这将为您节省很多时间,并且从流量的角度来看会更加健壮。
这也将有助于构建任何文档。
您当然可以使用生成文件/或在模拟/综合之前准备数据库的脚本中自动化该过程。
我同意 Marty 的观点,创建内部脚本来做这类事情很有趣,但从长远来看可能会出现问题。
我们创建了一个名为 IDesignSpec 的工具,它作为文档编辑器的插件实现,使您能够在文档中指定寄存器并生成 C 头文件、VHDL、Verilog、OVM、VMM、IP-XACT、HTML、XML、SystemRDL、PDF 等。 从中。
您可以使用 TCL API 生成自定义输出。它还可以读取各种输入格式,例如 XML、IP-XACT、SystemRDL 等。
这种方法的好处是您有一个规范,并且所有内容都会自动保持同步。
目前支持的编辑器有:MS Word 2003 & 2007、OpenOffice、StarOffice 和 FrameMaker。
您可以在http://www.agnisys.com获得更多详细信息
以下是可用解决方案的完整列表:
我认为尽管这让你感到烦恼,但最终还是把你送向了正确的方向。我同意 RedGlyph 的观点,你应该考虑稍微改变一下你的工作流程。
您是否考虑过为您的控制寄存器信息创建一个“主文档”并由此自动生成所有内容 - RTL、测试台代码、驱动程序软件头文件和文档?
我参与过一些项目,其中控制信息保存在一个主电子表格中,我们需要的所有内容都由此生成。在一个芯片系列上,我编写了一些 Python 脚本来从电子表格导出的 CSV 文件中生成这些内容。在另一个项目中,电子表格包含用于生成我们需要的 RTL 文件等的宏。
编写内部脚本非常好,因为您可以完全控制它们并了解它们的详细工作方式。但请记住,您必须花时间支持这些脚本并更新它们以做新的事情。并考虑如果编写这些脚本的人决定找一份新工作会发生什么 - 其他人是否足够熟悉这些脚本来修改它们?出于上述原因,我们正在考虑购买第三方工具。
我还从事过从 RTL 向后移植文档和头文件的项目——这是一场噩梦。文档通常落后于设计,而且控制字段通常会“丢失”。我宁愿不再参与这样的项目;)
我们的设计小组使用 SystemRDL 来捕获我们的可编程片上系统的寄存器定义。我们使用 Denali 蓝图和针对各种目标的定制脚本 - 生成寄存器映射、PDF 文档、验证、C 头文件等。
我们还没有使用它来生成 RTL 源。
http://www.spiritconsortium.org/releases/SystemRDL
http://www.google.com/search?q=SystemRDL
答案可能来得有点晚,但我们使用免费的 netpp 库和一些修改过的 XSL 样式表从一个 XML 源生成文档、VHDL 和 C 源。还有一个 VHDL 模拟器扩展,让 VHDL 和 C 库交换数据以创建具有网络功能的“虚拟 FPGA”。它叫做 ghdlex,我不记得它在哪里,但你会在http://section5.ch网站的 netpp 下载区域下的某个地方找到它。使用起来有点棘手,但是,它是免费的..
The real source of the shared information is your original design, so I would enter the original design in a form that is easy to process. Here are a couple of ideas...
Use YAML. (Or, sigh, XML, or even a very simple DSL of your design.) Define the original data. Write scripts to dump it as VHDL and C. All the scripting languages support YAML and it's designed to be parsed with shell tools as well. You might even use simplified VHDL or C, and write a script to turn that via a simple text transformation into the corresponding C or VHDL.
Do it all in the C preprocessor. You could write a set of macro calls that specify register layouts. You could then have a #if
or perhaps two separate .h
files that define two different versions of your definition macros, one which expands into VHDL and one which expands those same definitions into C.
Spectareg允许您在一处指定寄存器并为不同环境创建多个输出(例如 VHDL、C、Verilog)