【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯

文章目录

  • 前言
  • 一、什么是FPGA图形化设计
  • 二、为什么要学习FPGA图形化开发?
  • 三、Xilinx Spartan-6 系列网表文件封装的注意事项
  • 四、传统HDL语言流水灯逻辑
  • 五、Labview调用网表文件
  • 六、实验验证
  • 总结

前言

FPGA图形化可以提高FPGA的开发效率,为产品迭代、功能机验证,产品参数调试提供的便捷的编程方式。LabVIEW作为一款图形化开发软件可以为FPGA提供零代码开发,图形化界面可以非常直观的展示出FPGA的并行结构。LabVIEW的开发思路是顶层调用,其自身有丰富的函数和滤波器,同时支持在线前面板调试,对于PID调参等工业实践具有很大的帮助。但FPGA图形化编程的过程中,如果仅仅利用LabVIEW自身的资源,脱离底层Verliog就会缺乏灵活性,例如需要对新的传感器进行开发时,没有可以依赖的IP集成节点或Socket,程序框图就会比较复杂,FPGA图形化开发既要具有图形化编程的简洁性,又需要Verliog语言的灵活性,两者相辅相成使得LabVIEW FPGA大大节约了工程师的时间。


一、什么是FPGA图形化设计

随着FPGA的发展,国内外在数字电路相关的课程学习中都开始学习HDL(硬件描述语言)进行电路的设计,但是在HDL语言上由于它是用来描述底层的硬件,底层的语言学习过程花费的学习成本相对较高,例如VHDL,这种语言并不直观,而这会大大增加硬件设计的门槛。
因此,FPGA图形化设计为降低编程学习的门槛提供了新的思路,利用LabVIEW图形化程序编译平台,以框图的形式编写程序,通过LabVIEW开发环境设计、编译程序后下载至微处理器或FPGA芯片,最终达到独立运行的功能。

二、为什么要学习FPGA图形化开发?

FPGA图形化开发对于刚入坑的FPGA的小白来说比较友好,以图形化的界面呈现出了FPGA设计中的要素,而传统Verilog界面面向代码,语言描述硬件较为抽象,同时在LabVIEW中,它的时钟、FIFO、IO、LED、与或非门、条件结构、循环结构、顺序结构等都是以图形化的方式呈现,理解代码逻辑能有一个直观的印象。
FPGA有两条蔡氏定律:
1、FPGA不仅仅是FPGA。
2、FPGA的最终目的是做出可用的电路。

在产品级的FPGA开发上,应用工程师不关心FPGA内核是用什么语言去开发,更希望产品功能可以尽快实现,因此FPGA工程师不能仅仅专注于FPGA本身,更要去关注FPGA的硬件电路,不关注硬件电路的FPGA在实现功能上是有欠缺的,就比如USB通信,在STM32上由于集成的硬件的USB控制器,在驱动USB相对简单,但是对于FPGA来说就是一张白纸,如果从协议开始写会大大的提高FPGA的开发难度,于是采用USB芯片,FPGA只需要处理数据就行了,对于不同的芯片,控制方法不尽相同,但最终的目的都是一样的——做出可用的电路,实现产品功能。

两个界面的代码给人的感觉是不一样的。

三、Xilinx Spartan-6 系列网表文件封装的注意事项

由于Spartan6系列属于旧版本,不被新的编程软件Vivado支持,只能用ise进行下载编程,而ISE14.7生成网表文件格式为ngc,Vivado软件生成的网表文件为edf,在ISE环境下调用edf文件会提示black box,认为edf文件不被Spartan6支持,但是若使用LabVIEW封装成IP集成节点,可以跳过这个警告,从而可以在Spartan6系列中调用edf文件。

edf—>ISE14.7–×—>Spartan6 不支持
edf—>LabVIEW---->Spartan6 支持

要是现有edf文件运行很稳定,可以考虑用LabVIEW封装成IP集成节点进行调用。

四、传统HDL语言流水灯逻辑


我们希望实现功能是实现任意时间间隔的LED灯流水,因此我们的输入接口留出了Count,在输出接口留4位的LED变量,以实现流水功能。

它的代码实现

module flow_led(input                clk,input               reset,input   wire [31:0] Count,output  reg [3:0]   led);reg [31:0] counter;
reg [1:0] State;
always@(posedge clk or posedge reset) beginif(reset) counter<=24'd0;else if(counter<Count)counter<=counter+1'b1;elsecounter<=24'd0;
endalways@(posedge clk or posedge reset) beginif(reset)State<=2'b00;else if(counter==Count)State<=State+1'b1;elseState<=State;
endalways @(posedge clk or posedge reset)beginif(reset)led[3:0]<=4'b0001;else if(State==2'b00)led[3:0]<=4'b0001;else if(State==2'b01)led[3:0]<=4'b0010;else if(State==2'b10)led[3:0]<=4'b0100;elseled[3:0]<=4'b1000;endendmodule

注意,传统HDL语言编写好逻辑后,需要在综合设置中取消插入IO buffer,否则在调用的时候编译不通过。

设置好后综合,检查语法,并导出生成好的ngc文件,若读者采用Vivado可尝试同样方式生成网表,本文不再赘述。

五、Labview调用网表文件

  • 新建FPGA工程,添加需要的vi和IO,将ngc网表复制到工程目录下

  • 将ngc网表复制到工程目录下
    -

  • 在程序框图中添加IP集成节点,添加网表文件,将仿真行为设置成综合后模型,生成支持文件,并调整好接线端。
    -



    添加好节点后编写好程序:

六、实验验证

经过编译后,下载至FPGA验证流水灯时序,在在线前面板可以观察到LED灯不断地进行流水。

总结

通过以上网表文件,我们实现了Verliog语言与FPGA图形化的交互,打通了底层硬件语言在高级语言中调用的困难,对FPGA图形化编程的推广大有裨益。以上的代码资源和LabVIEW程序均开源在我的创作中心,欢迎下载交流。

【LabVIEW FPGA图形化】 ngc、edf网表文件的编写:LED流水灯相关推荐

  1. 【LabVIEW FPGA图形化】IP集成节点:USB通信

    目录 一.前情提要 二.FPGA蔡氏定律 三.USB外围电路 四.LabVIEW FPGA IP集成节点网表文件的编写 五.FPGA图形化程序编写 总结 一.前情提要 上一节内容介绍了图形化FPGA测 ...

  2. vivado生成和调用edf网表文件

    1.把需要生成网表模块文件set as top . 2.设置project setting如下, Options中将-flatten_hierarchy设为full,意思是模块综合后的层次结构全部为平 ...

  3. (3)QuartusII 封装网表文件(FPGA不积跬步101)

    名言:当你油箱里的油越多,你行驶的路程就会更远:学会给自己加油,懂得的帮别别人加油! 1 什么是网表文件? 在电子设计自动化中,网表(英语:netlist),或称连线表,是指用基础的逻辑门来描述数字电 ...

  4. Vivado生成网表文件

    如何操作? 以之前写的采用有限状态机实现序列检测模块为例,现在写了个两路"101"序列检测器模块(就是把原来的例化两个),该模块的结构如下: module fsm_test_top ...

  5. (91)如何网表文件?

    1.1 如何网表文件? 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)如何网表文件: 5)结束语. 1.1.2 本节引言 "不积跬步,无以至千里:不积小流,无 ...

  6. 使用Quartus将用户模块封装成网表文件:Quartus17.0及之前版本.qxp文件、Quartus17.1及之后版本.qdb文件(上)

    前面一篇文章介绍了Xilinx FPGA平台下如何封装用户的源代码,形成网表文件的操作教程,具体见: 使用Vivado将包含Xilinx IP的用户模块封装成网表文件(也适用不包含Xilinx IP的 ...

  7. 使用Quartus将用户模块封装成网表文件:Quartus17.0及之前版本.qxp文件、Quartus17.1及之后版本.qdb文件(下)

    Xilinx FPGA平台下如何封装用户的源代码,形成网表文件的操作教程,具体见: 使用Vivado将包含Xilinx IP的用户模块封装成网表文件(也适用不包含Xilinx IP的用户模块) Alt ...

  8. Vivado生成及仿真网表文件

    Vivado生成及仿真网表文件 1- 将子模块设置为顶层模块 - 右键Set as top 2-将该顶层模块设置综合属性 Options中将-faltten_hierarchy设置为full属性(意思 ...

  9. 网表文件的生成和使用

    将hdl封装成blackbox 生成blackbox的具体操作 一.将hdl封装成blackbox: https://blog.csdn.net/jbb0523/article/details/784 ...

最新文章

  1. mpvue 转uniapp 导航栏样式错乱问题修复 tabbar 样式修复
  2. C之 #pragma(二十二)
  3. DBGRIDEH 组件在Borland开发工具中应用全攻略
  4. linux命令free
  5. hibernate教程--检索方式详解(hql,sql,QBC)
  6. 《X86汇编语言:从实模式到保护模式》读书笔记之引言
  7. VS2008中使用JSONCPP方法小结
  8. 路由器连接久点就慢下来了,怎么回事?
  9. python合法的字符串_Python判断字符串是否为合法标示符操作
  10. Mybatis generator 自动生成代码(实例讲解)
  11. linux加载dl580网卡驱动,HP DL580G5安装centos下的阵列卡驱动
  12. Java开发微信小程序(三)用小程序给用户推送服务消息
  13. java-php-python-ssm演唱会购票系统计算机毕业设计
  14. linux启动速度优化
  15. 大型网站的演化之路——读《大型网站技术架构》
  16. vncviewer退出全屏
  17. Oracle数据库练习2
  18. VASP计算笔记_弹性常数计算
  19. 2020年最新Django经典面试问题与答案汇总(下)-大江狗整理
  20. FPGA学习方法_明德扬

热门文章

  1. JDK 8 新特性之接口详解
  2. 利用arpspoof探取账户密码
  3. RO反渗透膜规格尺寸该如何选择?
  4. hadoop集群:Mapreduce-----WordCount
  5. 瑞昱Realtek(Realtek HD Audio Driver)音频声卡驱动R2.49 for Win7_Vista
  6. web学习 -- w3c dom标准
  7. 【数字逻辑】逻辑函数式化简为其他形式
  8. [C++] [MinGW] MinGW下载与使用
  9. 入门--什么是机器码、注册机和注册码
  10. 北京54和西安80投影坐标系,高斯-克吕格投影