这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 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 跳转至

回复

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