这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» DIY与开源设计» 电子DIY» halfmoon 的 FPGA DIY 进程贴

共7条 1/1 1 跳转至

halfmoon 的 FPGA DIY 进程贴

菜鸟
2012-10-28 15:42:51 打赏
FPGA DIY 主贴,记录进程,与大家一同研究和学习:

序号

日期

内 容

链接

1

2012-09-03

FPGA DIY 活动申请

FPGA活动介绍

2

2012-09-12

发布申请帖

申请帖

3

2012-09-22

通过审核可下单名单

审核可下单名单

4

2012-10-09

到淘宝购买商品四、五

下单

5

2012-10-22

收到购买的 PCB板和 USB Blaster

6

2012-10-23

安装程序

7

2012-10-23

PCB 板上电测试,发现问题!

请教问题

8

2012-10-26

sof 代码下载测试成功

sof代码下载

9

2012-10-28

发布进程贴

1楼

10

2012-10-28

LED点亮(附代码)

2楼

11

2012-10-28

LED闪烁灯(附代码)

3楼

12

2012-10-28

LED跑马灯(附代码)

4楼

13

2012-10-28

LED流水灯(附代码)

5楼

14

2012-10-29

读取按键信号(附代码)

6楼


FPGA PCB板
FPGA PCB板

USB Blaster
USB Blaster



关键词: halfmoon 进程

菜鸟
2012-10-28 16:10:41 打赏
2楼
LED 点亮:

由于开发板 (第四种方案) 是购买回来,所以对硬件的了解不多,首先是要确定 LED 灯 1 是代表点亮或是熄灭,所以先做了第一个简单的程序来测试 LED 的状态。



源代码:
// **********************************************
// DIY FPGA - 11 LED On
// Version: 20121028
// LED = 0000_0000 0=Light On 1=Light Off
// **********************************************
module led_on( clk_y2,rst_n,led);

input clk_y2;
input rst_n;
output[10: 0] led;

reg[10:0] led_r;

always @(posedge clk_y2 or negedge rst_n)
if(!rst_n)
led_r <= 11'b00000000000;

assign led = led_r;

endmodule

测试后结果:
0 = LED是点亮
1 = LED是熄灭

sof代码下载:
led_on.zip

菜鸟
2012-10-28 19:14:09 打赏
3楼
LED 闪烁灯:

LED 闪烁灯,使得间隔的6个LED 点亮 (LED 11、9、7、5、3、1点亮,其它熄灭),相隔大约一秒半,交替的 5个 LED 点亮 (LED 10、8、6、4、2点亮,其它熄灭),然后循环再做。

LED 11、9、7、5、3、1点亮,其它熄灭


LED 10、8、6、4、2点亮,其它熄灭


源代码:
// **********************************************
// DIY FPGA - LED Flash
// Version: 20121028
// LED = 01010101010 0=Light On 1=Light Off
// **********************************************
module led_flash( clk_y2,rst_n,led);

input clk_y2;
input rst_n;
output[10: 0] led;

reg[25: 0] count; //Counter,Max count 2^26*20 ns=1.34s

always @(posedge clk_y2 or negedge rst_n)
if(!rst_n)
count <= 26'b0;
else
count <= count + 1'b1;

reg[10: 0] led_r;

always @(posedge clk_y2 or negedge rst_n)
if(!rst_n)
led_r <= 11'b01010101010;
else if(count == 26'b1) //1.34s, Invert led_r
led_r <= ~led_r;

assign led = led_r;

endmodule

sof代码下载:
led_flash.zip

菜鸟
2012-10-28 19:54:18 打赏
4楼
LED 跑马灯:

LED跑马灯,从 LED 1 开始点亮,然后熄灭 LED 1,并点亮 LED 2,直至点亮 LED 11,然后熄灭 LED 11,再从 LED 1 循环开始再做。

LED跑马灯开始


LED 1 开始点亮


熄灭 LED 1,并点亮 LED 2


直至点亮 LED 11


源代码:
// **********************************************
// DIY FPGA - LED Running
// Version: 20121028
// LED : 0=Light On 1=Light Off
// **********************************************
module led_run( clk_y2,rst_n,led);

input clk_y2,rst_n;
output [10:0]led;

reg [10:0]led_r;

reg [24:0]count;
parameter Timer25=25'd25_000_000;

always @ (posedge clk_y2 or negedge rst_n)
if(~rst_n)
count<=25'd0;
else if(count==Timer25)
count<=25'd0;
else
count<=count+1'b1;

always @ (posedge clk_y2 or negedge rst_n)
if(~rst_n)
begin
led_r<=11'b11111111111; // All LED = light OFF
end
else if(count==Timer25)

begin
if(count==Timer25)
if(led_r==11'b11111111111)
led_r<=11'b11111111110; // Start Bit1 = Light ON
else
led_r<={led_r[10:0],1'b1}; // Left Shift and Add 1
end

assign led=led_r;

endmodule

sof代码下载:
led_run.zip

菜鸟
2012-10-28 21:48:06 打赏
5楼
LED流水灯:

LED流水灯,从 LED 1 开始点亮,并点亮 LED 2,直至点亮 LED 11,全部 LED点亮,然后熄灭所有LED,再从 LED 1开始循环再做。

LED流水灯开始


LED 1 开始点亮


LED1 至 LED 2 开始点亮



LED1 至 LED 7 点亮


LED1 至 LED 11 点亮


源代码:
// **********************************************
// DIY FPGA - LED Water
// Version: 20121028
// 0=Light On 1=Light Off
// **********************************************
module led_water(clk_y2,rst_n,led);

input clk_y2
input rst_n;
output [10:0]led;

reg [10:0]led_r;

reg [24:0]count;
parameter Timer25=25'd25_000_000;

always @ (posedge clk_y2 or negedge rst_n)
if(~rst_n)
count<=25'd0;
else if(count==Timer25)
count<=25'd0;
else
count<=count+1'b1;

always @ (posedge clk_y2 or negedge rst_n)
if(~rst_n)
begin
led_r<=11'b11111111111;
end
else if(count==Timer25)
begin
if(count==Timer25)
if(led_r==11'b00000000000)
led_r<=11'b11111111111;
else
led_r<={led_r[10:0],1'b0};
end

assign led=led_r;

endmodule

sof代码下载:
led_water.zip

菜鸟
2012-10-29 22:00:43 打赏
6楼
Normal 0 0 2 false false false MicrosoftInternetExplorer4

读取按键信号:

程序开始时,所有 LED 都是熄灭,正常按键是处于 1 (+3.3V) 的状态,当按键被按下,按键便会处于 0 ( 0V) 的状态,程序扫描所有按键状态,如发现按键被按下,相对应的 LED (Key x = LED x x=1 - 7) 便会改变之前的状态,如果是熄灭,便会点亮;但如果是点亮,便会熄灭,程序运作后,发现按键 7,按下没有反应,LED 也不会改变的状态,估计是按键有问题,由于没有按键消抖 (Debounce) 功能,有时按下时,LED会连续改变状态几次。

**先要解决按键 7不良!

开始时,所有 LED 都是熄灭


按下KEY 1,2,3,4,5,6,7,8,发现按键 7,按下没有反应


源代码:
// **********************************************
// DIY FPGA - Key Toggle
// Version: 20121028
// LED 0=Light On, 1=Light Off
// KEY 0=Press Down, 1=Normal
// **********************************************
module key_toggle(led,key);

input [7:0]key;
output[7:0]led;
reg [7:0]led1;

integer i;

always @ (key)
for(i=0;i<8;i=i+1) // Scan Key 0-7
if(key[i]==1'b0) // If key press down = 0
led1[i]<=~led1[i]; // Toggle LED Status

assign led=led1;

endmodule

sof代码下载:
key_toggle.zip

助工
2012-11-27 17:46:23 打赏
7楼
学习!!!!!

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]