如何在设备驱动程序和它控制的FPGA之间共享寄存器和位字段定义

Tim*_*ger 8 c embedded driver vhdl device-driver

是否有任何好的,现有的软件工具可以帮助生成C头文件,其中#defines用于寄存器偏移以及来自VHDL的位定义?如果确实存在任何此类工具,它们对VHDL有什么限制以及如何指定要导出的内容?

到目前为止,我已经找到了这些工具,但它们并不是我正在寻找的:

基于这些工具,我也感兴趣,如果正确的工作流程是生成C和VHDL而不是尝试直接从VHDL(可能在注释中添加额外的标签)到C.

Red*_*yph 5

您可以查看doxygen,它支持VHDL语言,通过使用中间文件,您可以或多或少地轻松提取信息.副产品将是您的RTL代码文档.

另一个选择是从Yacc/Lex定义构建一个C解析器,你可以在这里找到几个.从那里,您可以解析VHDL,提取信息(您必须确定如何检索寄存器的定义)并生成C头文件.这可能很复杂.

但如果我是你,我会以不同的方式进行,并在单独的文件中定义寄存器偏移量和字段(例如,在XML中),并编写一个小脚本来生成C头和VHDL包,这样可以节省一些很多时候,从流程的角度来看会更加健壮.

这也有助于构建任何文档.

您当然可以使用makefile /或在模拟/合成之前准备数据库的脚本自动化该过程.


Mar*_*rty 2

我认为虽然这一直困扰着你,但最终却让你朝着正确的方向前进。我同意 RedGlyph 的观点,你应该考虑稍微改变一下你的工作流程。

您是否考虑过为您的控制寄存器信息创建一个“主文档”,并由此自动生成所有内容 - RTL、测试台代码、驱动程序软件标头和文档?

我曾经参与过一些项目,其中控制信息保存在一个主电子表格中,我们需要的一切都从中生成。在一个芯片系列上,我编写了一些 Python 脚本来从电子表格导出的 CSV 文件生成这些内容。在另一个项目中,电子表格包含用于生成我们需要的 RTL 文件等的宏。

编写内部脚本很好,因为您可以完全控制它们并了解它们的详细工作原理。但请记住,您必须花时间支持这些脚本并更新它们以执行新操作。并考虑一下,如果编写这些脚本的人决定去找一份新工作,会发生什么 - 其他人是否足够熟悉这些脚本来修改它们?出于上述原因,我们正在考虑购买第三方工具。

我还参与过从 RTL 向后移植文档和头文件的项目 - 这是一场噩梦。文档通常落后于设计,并且控制字段常常会“丢失”。我宁愿不再参与这样的项目;)