ROPS让你更容易开发机器人


    所有机器人都需要传感器,计算和驱动。
    现成的x86 PC为您提供了一个熟悉的Linux环境来进行开发和部署。 然而,PC存在严重问题,现成的主板不能提供与外界的低延迟和噪声容忍连接。 USB似乎就是解决方法,但是一旦总线忙碌,如果你通过USB连接到电机控制器,延迟会让你感到困惑。
    在机箱内隐藏着一个解决方案PCI Express。 虽然你很难找到PCI-e电机控制器或激光雷达,但速度快,延迟低。 这就是ROPS的用武之地,可以作为PCI-e与CAN和RS485等总线之间的桥梁,您可以在电机控制器和传感器上找到它们。
    由于几乎所有移动机器人都需要IMU和GPS,有了ROPS这些都不是问题。
    我们将在CSG325封装中使用Xilinx Artix-7 XC7A35T作为ROPS的核心。 35T是中档Artix部分,CSG325封装将所有重要的GTP收发器绑定,以便我们可以使用PCI-e连接到主机。
    我们计划使用的传感器是ST LSM9DS1 IMU,ST LPS25HW气压计和uBlox NEO-M8T GPS。
    将有后面板IO用于连接第三方硬件,如电机控制器和其他传感器,但我们还没有确定任何细节。 目前只有很少的FPGA用于IO,因此这里有很多灵活性。 在主机外壳内的夹层或柔性电缆连接器上也可能有额外的IO。
    Verilog仿真工具
    当你处理任何类型的代码时,收紧write-compile-test循环总是有帮助的,特别是当你第一次学习时。 对于SPI模块,最重要的是SPI输出的时序。 为此,我们需要模拟verilog并检查输出。 以下是我过去常用的工具。
    编辑器
    我使用neovim,但它并不重要。 我强烈建议使用语法高亮,强大的查找和替换以及跨平台功能,以便您可以随时随地使用它。
    Bash Glue
    这就是魔术发生的地方,这个脚本以您当前正在处理的文件的形式接受一个参数,并等待它被保存。 保存后,脚本会编译该文件,对其进行模拟,并更新GTKWave的输出。 我在这里使用verilog,但你可以在inotifywait之后用你正在处理的项目中有用的东西替换它们。 这可能是编译器,linter等。我将它的输出保存在我工作区的左上方窗格中,这样我就可以检查出现的任何错误。
    inotifywait
    这确实是脚本的关键。 当作为第一个参数提供给脚本的文件被关闭时,如果它被打开为可写,则inotifywait退出。 这样,如果你捕获文件,或差异,它将不会做任何事情。 它不会查看文件内部以查看是否已进行更改,它只知道文件已关闭。
    iVerilog
    Icarus Verilog是一个verilog综合和模拟工具。 iVerilog将源编译为类似中间程序集的源,然后由iVerilog工具集的另一部分vvp执行。 这样做会输出一个.lxt文件,该文件存储verilog中各种连线和寄存器的波形。
    在脚本中,iverilog的-o选项命名输出文件,这里我们只使用main。 然后我们在main上调用vvp,并告诉vvp将波形输出到.lxt文件。
    GTKWave
    模拟verilog时,可以使用类似printf的语句,也可以转储每行的状态并注册到文件中。 查看寄存器转储。 我正在使用GTKWave。 在我看来,它是一个完美的软件。 当我想检查波形时,它会完成我需要的一切,而不是其他任何东西。
    在脚本中,我们调用gconftool-2来更新波形。 我不知道他们为什么选择配置工具来做这件事,但它很有效。