TA的每日心情 | 怒 2018-3-13 13:50 |
---|
签到天数: 299 天 连续签到: 1 天 [LV.8]以坛为家I
|
在上一篇试用中,我编写了一个最简单的fpga程序,只是简单按键控制引脚。如果这一篇试用还是只是编写简单的功能就有点对不起小编给我提供的试用机会了,所以本文我要提高一下程序的复杂度(当然提高的有限,原谅我只是一个刚开始接触fpga的小白!)。
在这一篇中,使用板载的数码管来实现一个秒表的功能(其实就是一个0~59的计数器,每秒加一),瞬间高大上了有没有!!!!
话不多说先上原理图
至于数码管的原理我就不讲解了网上一搜一大把!!!
module seg(input wire clk,input wire key,output wire[8:0] SEG_ONE, //output, MSB~LSB = SPGFEDCBAoutput wire[8:0] SEG_TWO //output, MSB~LSB = SPGFEDCBA);reg[24:0] cnt_clk;reg clk_1_hz_pulse;reg[3:0] the_unit_cnt;reg the_unit_pulse;reg[3:0] decade_cnt;reg[8:0] mem [15:0]; //Segment_led output, MSB~LSB = SPGFEDCBAinitial begin mem[0] = 9'h3f; // 0 mem[1] = 9'h06; // 1 mem[2] = 9'h5b; // 2 mem[3] = 9'h4f; // 3 mem[4] = 9'h66; // 4 mem[5] = 9'h6d; // 5 mem[6] = 9'h7d; // 6 mem[7] = 9'h07; // 7 mem[8] = 9'h7f; // 8 mem[9] = 9'h6f; // 9 mem[10]= 9'h77; // A mem[11]= 9'h40; // b mem[12]= 9'h39; // C mem[13]= 9'h5e; // d mem[14]= 9'h79; // E mem[15]= 9'h71; // F endalways@(posedge clk or negedge key) begin if(!key) begin cnt_clk <=0; clk_1_hz_pulse <= 0; end else if(cnt_clk >= ((12000000 >> 1) - 1)) begin cnt_clk <= 0; clk_1_hz_pulse <= ~clk_1_hz_pulse; end else begin cnt_clk <= cnt_clk + 25'b1; end endalways@(posedge clk_1_hz_pulse or negedge key) begin if(!key) begin the_unit_cnt <=0; the_unit_pulse <= 0; end else if(the_unit_cnt < 9) begin the_unit_cnt <= the_unit_cnt + 4'b1; the_unit_pulse <= 0; end else begin the_unit_cnt <= 0; the_unit_pulse <= 1; end end always@(posedge the_unit_pulse or negedge key) begin if(!key) begin decade_cnt <= 0; end else if(decade_cnt < 5) begin decade_cnt <= decade_cnt + 1; end else begin decade_cnt <= 0; end endassign SEG_ONE = mem[decade_cnt];assign SEG_TWO = mem[the_unit_cnt];endmodule这次的代码比上一篇长了好多,好有成就感!!!
照例来简单介绍一下代码的执行流程:
1、首先是数码管的显示定义也就是17行~32行的代码,每一个寄存器代表一个数码管显示数字。小脚丫二代开发板板载的数码管是共阴极数码管,所以,当将引脚拉高就可以点亮数码管上相应的部分;
2、接下来35行到51行代码实现的功能是一个1秒为单位的pwm脉冲。由于板子上是12MHz的晶振,说以我们每6000000个时钟周期产生一次io翻转;
3、53行到70行是秒表的个位计数器,每一个clk_1_hz_pulse的上升沿都进行一次计数值加一;
4、72行到86行是秒表的十位计数器,每一个the_unit_pulse的上升沿都进行计数值加一。
其实实现起来还是很简单的。
总结:
很感谢小编给我提供这次试用的机会,说实话文章写的很菜,还请大家多多见谅。
对于初学者来说小脚丫二代真的很适合,与一代相比它提供了丰富的外设,对于入门学习来说足够了,当然对于创客们来说它的体积和它的扩展性,也可以满足日常的开发需求,真是一款很棒的开发板!!! |
|