snifer

【赛灵思FPGA】[原创]基于Xilinx FPGA的静态LED显示

0
阅读(15025)

一直有朋友给我交流PGA显示的问题,我也做过一点东西,把这个小东西写出来,希望能让大家更贴切的理解现实的部分细节。

亮点:通过设计控制静态LED显示,掌握组合逻辑设计方法;

通过设计控制静态LED显示,掌握静态LED的显示原理。

利用FPGA芯片,用verilog语言编写逻辑,控制静态LED显示数字。

静态LED显示的原理框图如下:

静态LED的显示,由CLK控制数据,在CLK上升沿,将SDA送出的数据打入LED中,高位顺次往上移,直至最高位为止。由FPGA产生CLK来控制SDA的送出,将要显示的LED段码值串行打入LED中。

1.使用Xilinx XC2S200型FPGA器件设计实现

2.使用电子EDA实验开发系统的通用IO口,将静态LED的段码值由高往低送。

3.使用Xinlix ISE 6.3软件进行Verilog HDL开发。

步骤

1.在软件中,从菜单打开iMAPCT,在JTAG菜单中选择StaticLED.bit文件,并将Multi-Device JTAG Chain 选项选定,运行Configu+re将程序写入器件中。

2.按照为器件分配的引脚进行正确连线,将输入引脚RST连接按键上,将输出引脚连接到静态LED的DATA和CLK信号上,系统时钟输入连1KHZ,再进行测试。

源代码

1.Verilog源代码,LED_S.v

module LED_S(rst, clk_in, synclk, data);

    input rst, clk_in;

    output synclk;

    output data;

      reg synclk, data;

 

      reg [3:0] i,j;

      reg [7:0] count;

      reg [3:0] num[5:0];

      reg [7:0] temp;

 

      parameter ZERO = 8'b11111100, ONE = 8'b01100000, TWO = 8'b11011010;

      parameter THREE = 8'b11110010, FOUR =8'b01100110;

      parameter FIVE = 8'b10110110, SIX = 8'b10111110, SEVEN =8'b11100000;

      parameter EIGHT = 8'b11111110, NINE = 8'b11110110, BLANK = 8'b00000000;

 

    always @(posedge clk_in or negedge rst)

    begin

             if (!rst)

             begin

                    count = 0;

                    synclk = 1;

 

                    num[0] = 0;

                    num[1] = 1;

                    num[2] = 2;

                    num[3] = 3;

                    num[4] = 4;

                    num[5] = 5;

             end

             else

             begin

                    if (count < 96)

                    begin

                           synclk = ~synclk;

                           count = count + 1;

                    end

                    else

                    begin

                           synclk = synclk;

                           count = count;

                    end               

             end                  

      end

 

      always @(negedge synclk or negedge rst)

      begin

             if (!rst)

             begin

                    i = 0;

                    j = 0;

             end

             else

             begin                   

                    case (num[i])

                    0 : temp = ZERO;

                    1 :   temp = ONE;

                    2 :   temp = TWO;

                    3 :   temp = THREE;

                    4 :   temp = FOUR;

                    5 :   temp = FIVE;

                    6 :   temp = SIX;

                    7 :   temp = SEVEN;

                    8 :   temp = EIGHT;

                    9 :   temp = NINE;

                    //default temp = BLANK;

                    endcase

     

                    case (j)

                    0 : data = temp[0];

                    1 :   data = temp[1];

                    2 :   data = temp[2];

                    3 :   data = temp[3];

                    4 :   data = temp[4];

                    5 :   data = temp[5];

                    6 :   data = temp[6];

                    7 :   data = temp[7];

                    //default data = 0;

                    endcase

     

                    if (j == 7)

                    begin

                           i = i + 1;

                           j = 0;

                    end

                    else

                           j = j + 1;

             end

      end

endmodule

2.引脚分配源代码,LED_S.ucf

net rst loc = p57;#1khz

net clk_in loc = p80;

net synclk loc = p205;

net data loc = p203;

这样就好了,可以按要求显示你的内容了,很多朋友觉得神奇,周末愉快。