流水灯似乎是个学习嵌入式编程的永恒实验,任何一种开发板的配套程序,第一个肯定是点亮一个LED,接下来则是流水灯。从汇编到C,从AT89C51到mega16,我实现了很多流水灯。今天又用Verilog HDL写了一个(想起一个关于程序员的冷笑话,书法家:我会用N种字体写毛泽东的词。程序员:我会用N种语言写"Hello world!" = =)。思路比较简单,时钟分频后用case语句驱动LED,实现多种状态的变化。本文因作者属于初学水平,技术含量不高,高手路过即可,愿意的话也可指点一二。
硬件环境:Xilinx Spartan-3e Starter Kit Board
软件环境:Xilinx ISE 8.2i
编程语言:Verilog HDL
实验过程:
打开ISE,新建一个工程。取名为led_variable,点击next。
选择正确的器件,并一路next到finish。在工作区里右键-new source,选择Verilog Module,命名为led_variable,一路next到finish。
在代码编辑区里输入Verilog源码,具体源码见文后。
接下来,综合,实现,无错误之后配置引脚。参考Spartan-3E Starter Kit Board User Guide.pdf
分配好引脚之后就可以生成编程文件了。
将生成的.bit文件烧录到FPGA中,就可以看到绚丽的彩灯了。
附件:
Verilog HDL源程序
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 19:49:41 01/09/2011
// Design Name:
// Module Name: led_variable
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module led_variable(clk_50MHz, led);
input clk_50MHz;
output[7:0] led;
reg [7:0] led;
reg [22:0] count;
reg [4:0] state;
wire clk;
always @ (posedge clk_50MHz)
count<=count+1'b1;
assign clk=count[22];//division
always @ (posedge clk)
begin
case(state)
5'b00000: led=8'b11111111;
5'b00001: led=8'b00000000;
5'b00010: led=8'b01010101;
5'b00011: led=8'b00000000;
5'b00100: led=8'b10101010;
5'b00101: led=8'b00000000;
5'b00110: led=8'b00000001;
5'b00111: led=8'b00000010;
5'b01000: led=8'b00000100;
5'b01001: led=8'b00001000;
5'b01010: led=8'b00010000;
5'b01011: led=8'b00100000;
5'b01100: led=8'b01000000;
5'b01101: led=8'b10000000;
5'b01110: led=8'b01000000;
5'b01111: led=8'b00100000;
5'b10000: led=8'b00010000;
5'b10001: led=8'b00001000;
5'b10010: led=8'b00000100;
5'b10011: led=8'b00000010;
5'b10100: led=8'b00000001;
5'b10101: led=8'b00000000;
5'b10110: led=8'b11111111;
5'b10111: led=8'b01111110;
5'b11000: led=8'b00111100;
5'b11001: led=8'b00011000;
5'b11010: led=8'b00000000;
5'b11011: led=8'b00011000;
5'b11100: led=8'b00111100;
5'b11101: led=8'b01111110;
5'b11110: led=8'b11111111;
5'b11111: led=8'b00000000;
endcase
state=state+1;
end
endmodule |