【LabVIEW FPGA图形化】 IP集成节点:按键控制LED

一、前情提要

上一节内容介绍了ngc、edf文件导入LabVIEW,Labview IP集成节点导入与编写方法,以及LabVIEW图形化的优点,本节内容承前节,对按键控制LED网表文件进行编写和导入。

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

二、FPGA蔡氏定律

FPGA有两条蔡氏定律:
1、FPGA不仅仅是FPGA。
2、FPGA的最终目的是做出可用的电路。

FPGA的学习脱离不了硬件电路,因此本节实验我们需要结合Spartan6的硬件电路进一步了解实验要求:

  • 按下按键1实现LED灯依次右移一位的功能;
  • 按下按键2实现LED灯依次左移一位的功能;
  • 按下按键3实现LED灯亮灭闪烁的功能;
  • 按下按键4实现LED灯全亮的功能
按键电路

在这里插入图片描述

结合按键的硬件电路,该独立按键在正常状态下,上拉电阻使得IO处于高电平,当按键按下时IO为低电平,即低电平按键有效,因此程序中1‘b0表示按键按下。

LED灯电路

在这里插入图片描述

LED灯均采用低电平有效,LED灯点亮,因此我们在配置【3:0】LED变量的时候,逻辑0表示有效,复位状态下拉高IO。

LabVIEW FPGA IP集成节点网表文件的编写

根据模块的功能,我们要提前想好我们需要设计模块的输入和输出,怎么样才能实现我们的功能,因此我们先要绘制出RTL视图:
RTL视图
RTL视图反映出硬件之间的连接关系,有了这个,我们可以很清楚的定义输入和输出变量,根据每个变量之间的关系写出对应模块:

module LED_key(
		input 			clk,
		input 			reset,
		input 		 [3:0] key,
		output 	reg  [3:0] led
);
reg [3:0] 	State;
reg [1:0] 	Status;
reg [31:0] 	cnt;

always @(posedge clk or negedge reset) begin
	if(!reset)
	State<=4'b0000;
	else if(key==4'b1110)
	State<=4'b0001;
	else if(key==4'b1101)
	State<=4'b0010;
	else if(key==4'b1011)
	State<=4'b0100;
	else if(key==4'b0111)
	State<=4'b1000;
	else
	State<=State;
	
	end

always @(posedge clk or negedge reset) begin
	if(!reset)
	cnt<=1'b0;
	else if(cnt==32'd10000000)
	cnt<=1'b0;
	else
	cnt<=cnt+1'b1;
	end
	
	
always @(posedge clk or negedge reset) begin
	if(!reset)
	Status<=2'b00;
	else if(State==4'b0001&&cnt==32'd10000000)
	Status<=Status+1'b1;
	else if(State==4'b0010&&cnt==32'd10000000)
	Status<=Status+1'b1;
	else if(State==4'b0100)
	Status<=Status+1'b1;
	else
	Status<=Status;
	end
	
always @(posedge clk or negedge reset) begin
	if(!reset)
	led<=4'b1111;
	else if(State==4'b0001&&Status==2'b00)
	led<=4'b1110;
	else if(State==4'b0001&&Status==2'b01)
	led<=4'b1101;
	else if(State==4'b0001&&Status==2'b10)
	led<=4'b1011;
	else if(State==4'b0001&&Status==2'b11)
	led<=4'b0111;
	else if(State==4'b0010&&Status==2'b00)
	led<=4'b0111;
	else if(State==4'b0010&&Status==2'b01)
	led<=4'b1011;
	else if(State==4'b0010&&Status==2'b10)
	led<=4'b1101;
	else if(State==4'b0010&&Status==2'b11)
	led<=4'b1110;
	else if(State==4'b0100&&Status==2'b00)
	led<=4'b0000;
	else if(State==4'b0100&&Status==2'b01)
	led<=4'b1111;
	else if(State==4'b0100&&Status==2'b10)
	led<=4'b0000;
	else if(State==4'b0100&&Status==2'b11)
	led<=4'b1111;
	else if(State==4'b1000)
	led<=4'b0000;
	else
	led<=led;
	end
	
	endmodule 

编写好LED_key.v文件后需要修改综合参数,在Xilinx Specific Options中去掉 Add I/O Buffer选项,不添加I/O buffer并综合。

四、FPGA图形化程序编写

将上一个程序生成的LED_key.ngc 添加到vi所在的工程目录下,调用IP节点,对其各个端口进行连线。
LabVIEW程序
添加网表文件后,由于复位为低电平复位,因此需要在程序首次调用后或非门取反,为了更直观的在前面板上显示出LED灯状态,可以添加显示控件。当然,本程序直接将key映射到物理按键上,通过前面板也可以虚拟出一个输入控件按键,通过虚拟按键实现实验中的功能。
前面板
在没有按下按键时,按键的状态都是高电平,物理LED是熄灭的,虚拟LED是点亮的,按下第一个按键LED灯间隔200ms向右流水,按下第二个按键 LED向左流水,按下第三个按键LED亮灭闪烁,按下第四个按键 LED灯全亮。

总结

FPGA图形化编程其优势在于逻辑图形化,若不去考虑底层verliog,在顶层设计上FPGA的图形化编程是有优势的,可以更有效率的完成FPGA的设计,本节实验的Verliog网表文件和LabVIEW的vi均开源在 我的资源 如有需要可以下载学习。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
LabVIEW是一种图形编程环境,可以用于控制FPGA(Field-Programmable Gate Array)。LabVIEW提供了FPGA模块,可以与Xilinx编译工具集成,以实现对FPGA控制和编程。然而,需要注意的是,LabVIEW 2020 FPGA模块的Xilinx编译工具不支持在不受支持的操作系统上安装或运行。因此,您需要确保您的操作系统是受支持的,并安装了适当的Xilinx编译工具。LabVIEW 2020 FPGA模块的Xilinx编译工具支持64位操作系统,而对于32位操作系统,可能需要禁用物理地址扩展(PAE)。如果您计划使用LabVIEW控制FPGA,建议您参考NI官方网站上的相关信息,以了解更多关于操作系统和硬件的支持情况。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [LabVIEWFPGA 模块 Xilinx 编译工具](https://blog.csdn.net/Bruce_Qee/article/details/115973609)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【LabVIEW FPGA图形IP集成节点:按键控制LED](https://blog.csdn.net/weixin_41882741/article/details/124250560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值