labview FPGA模块中控制DIO板卡输出IO量控制继电器吸合,怎么实现IO量自动输出功能?

labview FPGA模块中控制DIO板卡输出IO量控制继电器吸合,怎么实现IO量自动输出功能?,第1张

第一步:使用Quartus和Qsys工具完成硬件系统的配置。

该步骤实现SOC最小系统的硬件配置,包括硬核处理器配置、HPS和FPGA之间通信接口总线的选择、HPS外设裁剪、HPS时钟配置和SDRAM配置。该实验中主要用到HPS硬核,以及PIO外设IP核。Qsys工具为用户提供硬件系统的可视化设计,能够自动生成handoff文件,该文件配合bsp-editor工具可以生成preloader。Preloader是HPS的第二阶段引导源,主要作用为:初始化SDRAM接口,配置HPS IO口,加载下一引导源并跳转到它。

实验步骤

1 新建Quartus工程

11 设置工程存放路径,工程名以及顶层文件名,如图1所示

图 1

12 选择FPGA器件型号,如图2所示,DE10-Standard板载FPGA型号为5CSXFC6D6F31C6。

图 2

13 点击next直到finish,未提及的页面均按默认设置即可。

2 在Qsys中配置SOC。

21 运行Qsys工具。

在Quartus软件中,通过菜单栏Tools->Qsys打开Qsys工具。刚打开的Qsys工具页面如图3所示。

图 3

22 添加HPS并完成配置。

在左侧的IP目录中输入hps,选中Arria V/Cyclone V Hard Processor System,双击添加HPS,在d出的HPS配置页面中进行HPS配置。HPS配置页面如图4所示。

图 4

1) 在FPGA Interfaces页面中,General一栏均不勾选,AXI Bridges一栏设为64-bit、64-bit、32-bit,FPGA-to-HPS SDRAM Interface一栏中移除原有接口,Resets一栏中均不勾选。

2)在Peripheral Pins页面中,设置HPS外设引脚复用及模式选择。设置如表1所示。设置完成后页面如图5所示。(本实验其实未用到这些外设)

表1 外设引脚复用及模式选择

外设名称

引脚复用选择

模式选择

EMAC1

HPS I/O Set 0

RGMII

QSPI

HPS I/0 Set 0

1SS

SDIO

HPS I/0 Set 0

4-bit Data

USB1

HPS I/0 Set 0

SDR

UART0

HPS I/0 Set 0

No Flow Control

(注:表中未提及的外设即Unused,无需设置)

图 5 Peripheral Pins 页面设置

在HPS Clocks页面中,确认下Input Clocks->External Clock Sources 中的时钟频率为25MHz,其它无需设置,默认即可。

在SDRAM页面中,参考图6-11更改该页面下所有子页面中的参数。(本实验未用到SDRAM,所以不设置也可)

图 6

图 7

图 8

图 9

图 10

图 11

5) 至此,HPS设置完毕,点击finish离开HPS设置页面。

23 添加并设置其它Qsys元件

本实验通过HPS控制FPGA部分的IO口,以此来控制连接在FPGA IO引脚LED灯的亮灭。所以整个SOC只需包含HPS和PIO,即Qsys中还需要添加PIO外设。

添加PIO外设。在IP目录中输入PIO,选中PIO双击添加外设,设置页面如图12所示,本实验通过PIO控制4个LED,故宽度为4。

图 12

24 配置Qsys系统元件

修改元件名称。本实验把pio_0重命名为led_pio。

导出外设的顶层I/O接口。在Export一栏下相应位置双击,导出led_pio的顶层I/O接口,命名为fpga_led_pio,导出hps_0的h2f_reset接口,命名为hps_0_h2f_reset,如图13所示。

图 13

连接Qsys外设接口。外设的接口信号之间没有连接,需要根据系统要求手动进行连接。各个外设之间的信号连接c如表2所示。连接好后如图14所示。

表2 元件信号连接关系

需要连接的

   

被连接的

   

元件

   

信号名

   

元件

   

信号名

   

led_pio

   

clk

   

clk_0

   

clk

   

reset

   

clk_0

   

clk_reset

   

s1

   

hps_0

   

h2f_lw_axi_master

   

hps_0

   

h2f_lw_axi_clock

   

clk_0

   

clk

   

h2f_lw_axi_master

   

led_pio

   

s1

   

图 14

4)配置Qsys的地址映射。Qsys中添加的元件及外设都需要分配对应的基地址。这里我们采用自动分配的方式,在Qsys菜单中选择System->Assign Base Address,完成基地址自动分配。

5)生成Qsys系统。Save保存Qsys文件,命名为soc_ledqsys。然后点击菜单Generate->Generate HDL,d出如图15设置框,按图设置好后点击Generate,Qsys将生成与硬件系统相关的一系列文件。

图 15

3 完成Quartus工程编译

31 在Quartus工程中添加Qsys产生的系统模块。

1)Quartus中点击菜单Assignments->Settings,d出设置框,选中左侧Files一栏,添加Qsys文件soc_ledv和soc_ledqip,添加完成后如图16所示。

图 16

2)新建顶层文件。本实验采用的顶层文件类型为bdf(Block Diagram/Schematic File)。点击菜单File->New,选择Design Files中的Block Diagram/Schematic File后点击OK,点击菜单File->Save As将该文件保存到工程目录下,命名为topbdf。在该原理图空白处右键Insert->Symbol,选择Qsys生成的soc_ledbsf,将该模块插入到顶层原理图文件中。选中插入的元件,右键点击Generate Pins for Symbol Ports,为元件添加输入输出端口,如图17所示。

图 17

32 工程分析综合后分配引脚

完成以上步骤后,需要分配引脚,包括HPS外设默认引脚分配以及FPGA部分引脚分配,在分配引脚之前,工程必须通过分析综合,否则引脚分配会出错。

图 18

然后按2)所示Tcl Scripts工具执行上面编写的脚本,完成FPGA部分LED引脚的分配。

33 工程编译。

完成以上所有 *** 作后,可以点击菜单Processing->Start Compilation对工程进行完全编译。编译成功后会生成FPGA编程所需的sof文件。

4 完成FPGA编程。

这里只介绍采用JTAG方式完成FPGA编程方式,注意这种方式下,FPGA编程电路断电后就丢失。

点击菜单Tools->programmer,打开编程工具,选择连接至计算机的DE10开发板,如图19所示。Close硬件设置框。编程页面中Mode选择JTAG,点击Auto Detect按钮,在d出的器件选择框中选择相应的器件型号,DE10-Standard板载FPGA型号应选择5CSXFC6D6。选中FPGA设备,点击Change FIle,选中编译生成的topsof文件,如图20所示。然后勾选Program/Configure,如图21所示。最后点击Start按钮开始编程。

图 19

图 20

图 21

实验细节注意:

在分配引脚之前必须先对工程进行分析综合(Analysis and Synthesis)

第二步:使用SOCEDS完成HPS软件开发

说明:

该步骤完成HPS软件部分的开发,SOC EDS提供了全套的软件开发工具。本实验只是通过HPS控制FPGA部分的IO口,系统架构简单,采用裸机开发方法。DS-5为SoC FPGA裸机开发提供了两套编译工具:ARM Compiler 和 Altera Baremetal GCC。本实验采用ARM Compiler。

实验步骤

1 运行软件开发工具DS-5。

打开Embedded_Command_Shellbat,输入eclipse &命令回车,打开DS-5开发软件。如图1所示。 DS-5界面如图2所示。

图1

图2

2 新建C Project

点击菜单File->New->C Project,d出工程配置框如图3所示,按图完成设置,注意编译工具链选择ARM Compiler 5

图3

3 工程编译选项设置

31 添加HWLIB路径

因为本实验用到了SOC EDS提供的HWLIB中的API访问硬件,所以要在项目编译选项中添加HWLIB路径。HWLIB所在路径为:<SOC EDS安装路径>\ip\altera\hps\altera_hps\hwlib\include 和 <SOC EDS安装路径>\ip\altera\hps\altera_hps\hwlib\include\soc_cv_av

*** 作:在DS-5左侧的Project Explorer中选中LedWater工程,右键点击Properties。d出的对话框按图4设置,完成HWLIB路径的添加。

图4

32为工程编写分散文件scatter。

scatter文件为连接器指定映像的内存映射。本实验中,映像文件的加载区和执行区都在HPS的片内RAM上,而HPS片内RAM的地址映射为0xFFFF0000-0xFFFFFFFF,所以编写分散文件内容如下,分散文件编写完成后添加到编译选项中。

OCRAM 0xFFFF0000 0x1000

{

APP_CODE +0

{

(+RO, +RW, +ZI)

}

ARM_LIB_STACKHEAP 0xFFFF8000 EMPTY 0x8000

{}

}

*** 作:点击菜单File->New->Other,d出对话框,按图5 *** 作。打开新建的scat文件,输入上面的分散文件内容。在DS-5左侧的Project Explorer中选中LedWater工程,右键点击Properties。d出的对话框按图6设置,完成scat文件路径的添加。

图5

图6

4 生成硬件设备描述头文件。

利用SOC EDS提供的swinfo2header工具,将Qsys硬件系统信息转换为软件开发所需的设备描述头文件。

*** 作:在嵌入式命令行shell中cd到soc_ledsopcinfo所在目录,然后输入如下命令:sopc-create-header-files soc_ledsopcinfo --single hps_0h --module hps_0    如图7所示,同目录下将会生成名为hps_0h的头文件,将其拷贝至软件工程目录下。

图7

5 编写mainc

为工程新建mainc文件,输入mainc代码,代码如下:

#include "hwlibh"

#include "socal\socalh"

#include "socal\hpsh"

#include "hps_0h"

void delay(int delay_time)

{

int k;

for(k=0; k<delay_time; k++) ;

}

int main()

{

int i = 0x1;

while(1)

{

alt_write_word( ALT_LWFPGASLVS_OFST+LED_PIO_BASE, i );

if( (i&0xf) == 0x8 ) i=0x1;

else

i = i<<1;

delay(100000000);

}

return 1;

}

6 工程编译连接

在DS-5左侧的Project Explorer中选中LedWater工程,右键点击Build Project,生成可执行文件ledWateraxf。

7 生成preloader

裸机工程中,preloader即u-boot-spl。在shell中输入bsp-editor启动工具,如图8所示。在打开的bsp-editor工具中,点击菜单File->New HPS BSP,选择handoff文件目录,如图9所示。设置中取消勾选WATCHDOG_ENABLE选项,如图10所示,因为我们没有在裸机应用程序中用到看门狗。设置完成后点击generate,产生我们设置的preloader源代码,生成的源代码路径显示在Information栏中。Shell中cd到preloadre源代码目录下,输入make -j8 (多线程编译提高编译效率),如图11所示,回车生成preloader二进制文件,需要等待几分钟。在<Quartuas工程目录>\software\spl_bsp\uboot-socfpga\spl目录下,可以看到已经生成了u-boot-spl二进制文件。将其拷贝至LedWater工程目录下。

图8

图9

图10

图11

8 编写调试脚本

为LedWater工程新建调试脚本,步骤如图12所示。打开新建的文件输入以下内容。

reset system

stop

wait 30s

set semihosting enabled false

loadfile "$sdir/u-boot-spl" 0x0

set semihosting enabled true

delete

tbreak spl_boot_device

run

wait

loadfile "$sdir/Debug/ledWateraxf"

Start

图12

完成以上所有 *** 作后,工程目录应该如图13所示。

图13

9 工程调试。

1) 在进行工程调试前,首先要确保板卡连接至计算机,并先下载硬件sof文件至fpga。然后新建调试配置项,选中LedWater工程,右键选择Debug As->Debug Configurationz,d出会话框,按图14和图15设置。设置完成后点击Debug开始调试。

图14

图15

2)进入调试页面后,如图16所示,点击红圈中Continue图标,开始运行main程序,DE10开发板上的4个LED灯依次循环点亮。

编写fpga部分的外设引脚分配脚本。根据硬件板卡的实际连接关系,编写引脚分配脚本,本实验用到DE10-Standard板卡上的4个LED,参考原理图,编写脚本如下:

set_location_assignment PIN_AA24 -to fpga_led_pio_export[0]

set_location_assignment PIN_AB23 -to fpga_led_pio_export[1]

set_location_assignment PIN_AC23 -to fpga_led_pio_export[2]

set_location_assignment PIN_AD24 -to fpga_led_pio_export[3]

set_location_assignment PIN_AF14 -to clk_clk

菜单点击Processing->Start->Start Analysis & Synthesis开始分析综合。

分析综合完成后,点击菜单Tools->Tcl Scripts,d出脚本运行框,如图18所示。分别运行hps_sdram_p0_parameterstcl和hps_sdram_p0_pin_assignmentstcl。

虚拟仪器的主要平台应该是LabVIEW,Labwindows是为了给那些用C用习惯的人使得。LabVIEW的最大特点是傻瓜似的编程,为了把工程师从繁琐的编程中解脱出来,还有人说LabVIEW实现了测试仪器模块化,使测试配置更加灵活,但是我觉得人家C编程,汇编就不灵活了?现在哪个大的测试厂商没有模块化仪器?关键还是开发周期短编程效率高。当然,这个是见仁见智的。
发展前景吗,怎么说呢,LabVIEW现在所处的阶段应该是人的青春期,很多有测试需求大的企业都已经注意到他了,NI做得好的话前途一片光明,但是也不是肯定的,谁知道明天又有什么新东西被弄出来?FPGA现在用的依然很多,所以我觉得哪个个前途都不错,贵在专注。
PS:我现在就在做虚拟仪器这一行,过的还凑活。最后加一句大实话,想发财就别做技术了,呵呵。

如果是 步进电机,需要给步进电机驱动器输入 脉冲 和方向,而你需要有一个装置来产生 脉冲和方向。可以用运动控制卡,这样就和其他的采集卡是一样的;也可以用单片机控制,然后labview给单片机发指令,单片机接收指令,产生相应的动作。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/10937984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存