电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区
论坛
综合技术专区
【XILINX FPGA AX309开发板试用体验】+点灯
【XILINX FPGA AX309开发板试用体验】+点灯
listen
LV2工程师
| 2018-01-29 20:22:15
浏览量 2615
回复:1
发表新帖
FPGA做LED控制还是比较简单的,先做一个计数器,然后根据计数器的值控制FPGA的引脚高低电平。AX309 开发板上共有 4 个红色的用户 LED 灯(LED1~LED4),硬件电路上设计的是高电平点亮 LED 灯。
程序中定义了一个 32 位的寄存器 timer, 用于循环计数 0~199_999_999(4 秒钟), 计数到 49_999_999(1 秒)的时候, 点灭 LED1 灯; 计数到99_999_999(2 秒)的时候, 点灭 LED2 灯; 计数到 149_999_999(3 秒)的时候, 点灭 LED3 灯;计数到 199_999_999(4 秒)的时候, 点灭 LED4 灯。 `timescale 1ns / 1ps module led_test ( clk, // 开发板上输入时钟: 50Mhz rst_n, // 开发板上输入复位按键 led // 输出LED灯,用于控制开发板上四个LED(LED1~LED4) ); //=========================================================================== // PORT declarations //=========================================================================== input clk; input rst_n; output led; //寄存器定义 reg timer; reg led; //=========================================================================== // 计数器计数:循环计数0~4秒 //=========================================================================== always @(posedge clk or negedge rst_n) //检测时钟的上升沿和复位的下降沿 begin if (~rst_n) //复位信号低有效 timer <= 0; //计数器清零 else if (timer == 32'd199_999_999) //开发板使用的晶振为50MHz,4秒计数(50M*4-1=199_999_999) timer <= 0; //计数器计到4秒,计数器清零 else timer <= timer + 1'b1; //计数器加1 end //=========================================================================== // LED灯控制 //=========================================================================== always @(posedge clk or negedge rst_n) //检测时钟的上升沿和复位的下降沿 begin if (~rst_n) //复位信号低有效 led <= 4'b1111; //LED灯输出全为高,四个LED灯亮 else if (timer == 32'd49_999_999) //计数器计到1秒, led <= 4'b1000; //LED1点灭 else if (timer == 32'd99_999_999) //计数器计到2秒, led <= 4'b0100; //LED2点灭 else if (timer == 32'd149_999_999) //计数器计到3秒, led <= 4'b0010; //LED3点灭 else if (timer == 32'd199_999_999) //计数器计到4秒, led <= 4'b0001; //LED4点灭 end endmodule 管脚约束: ## NET clk LOC = T8 | TNM_NET = sys_clk_pin | IOSTANDARD = "LVCMOS33"; TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz; ## ## NET rst_n LOC = L3 | IOSTANDARD = "LVCMOS33"; ## Reset Button ## ########LED Pin define##################### NET led<0> LOC = P4 | IOSTANDARD = "LVCMOS33"; ## LED1 NET led<1> LOC = N5 | IOSTANDARD = "LVCMOS33"; ## LED2 NET led<2> LOC = P5 | IOSTANDARD = "LVCMOS33"; ## LED3 NET led<3> LOC = M6 | IOSTANDARD = "LVCMOS33"; ## LED4 下载后效果:
FPGA做LED控制还是比较简单的,先做一个计数器,然后根据计数器的值控制FPGA的引脚高低电平。AX309 开发板上共有 4 个红色的用户 LED 灯(LED1~LED4),硬件电路上设计的是高电平点亮 LED 灯。
程序中定义了一个 32 位的寄存器 timer, 用于循环计数 0~199_999_999(4 秒钟), 计数到 49_999_999(1 秒)的时候, 点灭 LED1 灯; 计数到99_999_999(2 秒)的时候, 点灭 LED2 灯; 计数到 149_999_999(3 秒)的时候, 点灭 LED3 灯;计数到 199_999_999(4 秒)的时候, 点灭 LED4 灯。 `timescale 1ns / 1ps module led_test ( clk, // 开发板上输入时钟: 50Mhz rst_n, // 开发板上输入复位按键 led // 输出LED灯,用于控制开发板上四个LED(LED1~LED4) ); //=========================================================================== // PORT declarations //=========================================================================== input clk; input rst_n; output led; //寄存器定义 reg timer; reg led; //=========================================================================== // 计数器计数:循环计数0~4秒 //=========================================================================== always @(posedge clk or negedge rst_n) //检测时钟的上升沿和复位的下降沿 begin if (~rst_n) //复位信号低有效 timer <= 0; //计数器清零 else if (timer == 32'd199_999_999) //开发板使用的晶振为50MHz,4秒计数(50M*4-1=199_999_999) timer <= 0; //计数器计到4秒,计数器清零 else timer <= timer + 1'b1; //计数器加1 end //=========================================================================== // LED灯控制 //=========================================================================== always @(posedge clk or negedge rst_n) //检测时钟的上升沿和复位的下降沿 begin if (~rst_n) //复位信号低有效 led <= 4'b1111; //LED灯输出全为高,四个LED灯亮 else if (timer == 32'd49_999_999) //计数器计到1秒, led <= 4'b1000; //LED1点灭 else if (timer == 32'd99_999_999) //计数器计到2秒, led <= 4'b0100; //LED2点灭 else if (timer == 32'd149_999_999) //计数器计到3秒, led <= 4'b0010; //LED3点灭 else if (timer == 32'd199_999_999) //计数器计到4秒, led <= 4'b0001; //LED4点灭 end endmodule 管脚约束: ## NET clk LOC = T8 | TNM_NET = sys_clk_pin | IOSTANDARD = "LVCMOS33"; TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz; ## ## NET rst_n LOC = L3 | IOSTANDARD = "LVCMOS33"; ## Reset Button ## ########LED Pin define##################### NET led<0> LOC = P4 | IOSTANDARD = "LVCMOS33"; ## LED1 NET led<1> LOC = N5 | IOSTANDARD = "LVCMOS33"; ## LED2 NET led<2> LOC = P5 | IOSTANDARD = "LVCMOS33"; ## LED3 NET led<3> LOC = M6 | IOSTANDARD = "LVCMOS33"; ## LED4 下载后效果:
0
收藏
举报
分享
×
微信分享
扫描二维码分享
qq分享
QQ空间分享
微博分享
我来回复
登录后可评论,请
登录
或
注册
所有回答
数量:
1
wg3613
2018-02-23
不错哦,谢谢分享
0
回复
举报
发布
×
举报
举报人:
被举报人:listen
*
类型:
请选择类型
问题质量差
垃圾广告信息
偏离社区主题
违规内容
不友善内容
与社区已有问题重复
以上选项都不是
*
详细原因:
取消
提交
x
收藏成功!点击
我的收藏
查看收藏的全部帖子