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