原创 艾米电子FPGA入门系列实验教程——实验四 跑马灯

2009-11-28 20:08 2755 1 1 分类: FPGA/CPLD

1.     实验任务<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


让实验板上的8LED实现跑马灯的功能。通过这个实验,进一步掌握采用计数与判断的方式来实现分频的Verilog HDL的编程方法以及移位运算符的使用。


 


2.     实验环境


 


 


硬件实验环境为艾米电子工作室型号EP2C8Q208C8增强版开发套件。


软件实验环境为Quartus II 8.1开发软件。


 


3.     实验原理


 


LED[0]LED[7]依次点亮,第二个灯点亮时第一个熄灭,每个灯交换的时间为0.5S;看上去的效果就象一个亮点从LED[0] 跑向LED[7],然后重复此循环,故命名跑马灯。初始状态时,LED[0]亮,其余熄灭。每来一个时钟脉冲CLK,计数器就加1。每当判断出计数器中的数值达到25000000时,就会点亮LED[1],同时LED[0]熄灭,并进行移位。这样,依次点亮所有的灯,就形成了跑马灯。而当LED[7]点亮时,需要一个操作使得恢复为初始状态,即:LED[0]亮,其余熄灭。然后,再进行一次跑马灯,重复此循环。如果是右移位,就出现向右跑马的现象;反之,向左跑马。


 


4.     实验程序


module ledwalk(led,clk);


input clk;


output [7:0] led;


reg[7:0]led_out;


reg[25:0]buffer;


always@(posedge clk)


begin


     buffer<=buffer+1'b1;


     if(buffer==26'd25000000)


      begin


           led_out=led_out<<1;


           if(led_out==8'b00000000)


            led_out=8'b00000001;


      end


end


assign led="led"_out;


endmodule


 


 


 


5.     实验步骤


 


1)建立新工程项目:


打开Quartus II软件,进入集成开发环境,点击FileNew project wizard建立一个工程项目ledwalk


 


2)建立文本编辑文件:  


点击FileNew..在该项目下新建Verilog HDL源程序文件ledwalk.v,输入试验程序中的源程序代码保存后选择工具栏中的<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />按钮启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。


 


3)选择器件型号及引脚的其他设置:


选择所用的FPGA器件----EP2C8Q208C8,以及进行一些配置。选择配置器件EPCS4,设置不需要使用的IO功能为As inputstri-stated。点击两次ok,回到主界面。


 


4)配置FPGA引脚:


Quartus II软件主页面下,选择AssignmentsPins或选择工具栏上按钮,配置LED[0]---LED[7]以及clk的引脚。


 


5)编译工程项目:


Quartus II主页面下,选择ProcessingStart Compilation或点击工具栏上的按钮启动编译,直到出现“Full Compilation Report”对话框,点击OK即可。


 


6)波形仿真:由于本次试验比较简单,波形仿真将在后面实验详细讲解。


 


7)下载设计程序到目标FPGA


 


 


6.     实验现象


 


实验应该很轻松就成功了吧!看到LED[0]LED[7]依次点亮,移位运算符的使用应当非常熟练了吧!你有没有想过用其他方式实现跑马灯的功能,比如用case语句。下面给出一个用case语句实现的跑马灯程序供大家学习。大家可以比较一下两钟方式实现跑马灯的资源占用情况。


 


 


 


 


 


 


 


module ledwalk(sys_clk,led);


input sys_clk;


output [7:0] led;


reg [7:0] led;


reg [24:0] count;


reg [2:0] state;


wire clk;


 


always @ (posedge sys_clk)


count=count+1;


assign clk="count"[24];


 


always @ (posedge clk)


begin


case(state)


3'b000:    led=8'b10000000;


3'b001:    led=8'b01000000;


3'b010:    led=8'b00100000;


3'b011:    led=8'b00010000;


3'b100:    led=8'b00001000;


3'b101:    led=8'b00000100;


3'b110:    led=8'b00000010;


3'b111:    led=8'b00000001;


endcase


state=state+1;


end


endmodule


 


case语句实现跑马灯的方法应该很容易理解吧!简单的介绍一下,先把系统时钟进行分频,分频后的时钟clk作为case语句的触发时钟,每来一个clk脉冲,计数器加1,通过case语句的选择实现跑马灯的功能。大家试着修改一下程序让它实现流水灯的功能或者其他方式的花样灯。应该很简单吧!


艾米电子FPGA入门系列实验教程——实验四 跑马灯下载点击下载


 

 


 



实验教程配套开发板照片:


 

点击看大图


 


 

 


艾米电子工作室:http://www.amy-studio.com


 


艾米电子淘宝店:http://shop33537127.taobao.com/


 


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
1
关闭 站长推荐上一条 /3 下一条