在做HIL开发的时候用到了FPGA,对于Labview中可以很方便的使用FPGA,但是在用VeriStand 做模型仿真的时候,调用FPGA就没呢么方便了。感觉就是功能还没有完善。
如果想要在Labview中编译好的FPGA bit文件被VeriStand识别的话,就需要编写对应的配置文件。配置文件的作用就是告诉Veristand比特文件中有哪些输入输出,输入输出的数据类型是什么。和custom device是什么关系呢?刚开始接触的时候一直搞不懂custom device 到底是怎么一种原理,后来随着开发的深入,custom device 的自由度应该更高一些,也学要写定义文件,而淡出的custom FPGA则是在一套custom device 基础上去声明你的FPGA有什么输入输出端口。本质上还是custom device 只不过很多东西已经提前写好,可以理解为深度定制的custom device。实际上custom FPGA 要简单的多,NI提供了一套例子,help文档里也有比较详细的说明。仔细看一下基本就能编写了。
这里我提供一段非常简单的custom FPGA 配置文件代码,以及实现效果。这个比自带的模板还要简单。指示带四个接收PWM信号的功能,四个输入。
<?xml version='1.0' standalone='yes' ?>
<?xml-stylesheet type="text/xsl" href='NI VeriStand FPGA DMA.xsl'?>
<FPGADMAChannelData xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "NI VeriStand FPGA DMA.xsd">
<Version>2.0</Version>
<Bitfile>NIVeriStandFPGAI_PXI.lvbitx</Bitfile>
<Categories>
<Category>
<Name>Input</Name>
<Description>Description</Description>
<Symbol>Default</Symbol>
<Category>
<Name>PWMin</Name>
<Description>Category with Default Symbol contained in PWMin</Description>
<Symbol>Default</Symbol>
</Category>
</Category>
</Categories>
<DMA_Read>
<Packets>2</Packets>
<Packet/>
<Packet>
<U16>
<Name>PWM1</Name>
<Description>PWM1 channel</Description>
<Category>Input\PWMin</Category>
<InitialValue>0</InitialValue>
<Scale>65536</Scale>
<Offset>0</Offset>
<Symbol>Default</Symbol>
</U16>
<U16>
<Name>PWM2</Name>
<Description>PWM2 channel</Description>
<Category>Input\PWMin</Category>
<InitialValue>0</InitialValue>
<Scale>65536</Scale>
<Offset>0</Offset>
<Symbol>Default</Symbol>
</U16>
<U16>
<Name>PWM3</Name>
<Description>PWM3 channel</Description>
<Category>Input\PWMin</Category>
<InitialValue>0</InitialValue>
<Scale>65536</Scale>
<Offset>0</Offset>
<Symbol>Default</Symbol>
</U16>
<U16>
<Name>PWM4</Name>
<Description>PWM4 channel</Description>
<Category>Input\PWMin</Category>
<InitialValue>0</InitialValue>
<Scale>65536</Scale>
<Offset>0</Offset>
<Symbol>Default</Symbol>
</U16>
</Packet>
</DMA_Read>
<DMA_Write>
<Packets>1</Packets>
<Packet/>
</DMA_Write>
</FPGADMAChannelData>
配置文件就是XML语言,我是零基础。但是这个很简单。
后面一点点分析
<?xml version='1.0' standalone='yes' ?>
<?xml-stylesheet type="text/xsl" href='NI VeriStand FPGA DMA.xsl'?>
<FPGADMAChannelData xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "NI VeriStand FPGA DMA.xsd">
上面的代码里,基本内容固定。里面提到的两个文件是NI提供的其中的xsd文件是用来检查我们自己写好的XML配置文件的语法结构问题。xsl文件应该就是custom device生成的文件,这里已经提供,相当于custom FPGA就是custom device的一个模板。
<Version>2.0</Version>
<Bitfile>NIVeriStandFPGAI_PXI.lvbitx</Bitfile>
上面代码提到的文件就是编译好bit文件,需要手动复制并和配置文件放在一起。
<Categories>
<Category>
<Name>Input</Name>
<Description>Description</Description>
<Symbol>Default</Symbol>
<Category>
<Name>PWMin</Name>
<Description>Category with Default Symbol contained in PWMin</Description>
<Symbol>Default</Symbol>
</Category>
</Category>
</Categories>
上面代码表示的是如何在Veristand中显示FPGA IO口目录。具体来说这里是建立了Input目录,Input下面又建立了PWMin的目录,其他Tag标记的意义可以参考Veristand的帮助文档。
<DMA_Read>
<Packets>2</Packets>
<Packet/>
<Packet>
<U16>
<Name>PWM1</Name>
<Description>PWM1 channel</Description>
<Category>Input\PWMin</Category>
<InitialValue>0</InitialValue>
<Scale>65536</Scale>
<Offset>0</Offset>
<Symbol>Default</Symbol>
</U16>
上面就是具体对bit文件中的IO定义的部分了,<Packets>表示有几个打包的数据,每个包数据长度是64位,我这里设置的PWM接收的数据类型是U16,也就是这一个包就可以装下这四个PWM的输入。《U16》说的是数据类型,如果是其他数据类型请参考帮助文档,比如I32。这里设置了名字是PWM1,目录是刚才定义的Input-->PWMin下面,可以设置初始值,以及范围。后面的内容同理。需要说明的是<DMA_Read>标签,因为这种数据传输是通过DMA FIFO传输的,在生成的bit文件的VI中有相应的FIFO,VI中接受到的PWM数值实际上是通过通过局部变量传输到DMA FIFO中,转到VeriStand中由VeriStand进行读取,所以这里是DMA_Read并且每一个Packet对应一个子vi,或者理解为是U64 类型的DMA FIFO被拆分成了几个Packet进行定义。具体只要看到NI提供的vi模板想必就会很清楚,后面还有DMA_Write可以定义写通道,从主机将数据传到FPGA,原理和DMA_Read相同,方向相反而已。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)