6.25号收到板子和器件包,周末焊接完成,各种忙,迟上加迟啊,先上照片,看一下板子,稍后上进程细节。。。
时间:2013年9月19日
实验:LED闪烁 1S间隔(手把手教程对应的课后作业);
进程: 此间一直在学习Verilog语言,由于基础为零,只是理解CPLD的原理而已,至于开始一个设计,哪怕是小小的简单的,也不知道该如何下手,例如,FPGA开发当中仿真是非常重要的,那么每个工程都要进行仿真吗?最简单的点灯程序写好了,怎么分配管脚?我的Pin Planer打开了怎么看不到有待分配的管脚定义呢?一头雾水,初学者大概都有此类问题,每个问题都去坛子里群里问吧,那自己就没有什么思考了,而且,已经入门的高手大都享受过这样的进阶乐趣了,怎能在百忙中回答这些琐碎问题。自己来吧还是,绝知此事要躬行啊!
我首先看了教程中的例程,再三琢磨,终于明白了,算是看懂了吧,然后新建立一个工程,原样敲进去例程,编译、通过(必须啊,抄的啊这是),然后分配管脚,处理未使用管脚(容易忘哦这一点),然后下载,完成后立即观察到8只LED按照同样频率(0.5S周期)闪烁,欣喜!!
按照课后作业要求,使8只LED间隔1S闪烁,easy!于是我改了代码,如下:(稍等,记得有规则说此处不能上源码?而且我用手机拍照的,现在还没传到电脑上)。
要实现1S间隔闪烁,只需要让计数器计数到50M即可,外部晶振50M赫兹,也就是每秒计数50M次,那么这样的频率正是所要的。于是直接修改了计数寄存器的值为49 000 000,然后,编译,下载,就等1S闪烁了,结果,竟然闪烁的更快了!?什么情况呢,计数大了,反倒闪烁快了,难道是要缩小计数值??仔细看了代码,没错啊,计数大才能获得更长的周期啊,然后。。。终于想到,计数寄存器位宽设为25为,那么最大值是335 544 32,到不了49 000 000啊,原来如此,增加一位位宽,编译,下载,终于实现了,闹钟正在桌子上哦,闪烁节奏,正是秒针的节奏,就是这个了!
module led_flick(sys_clk,sys_rstn,led);
input sys_clk;
input sys_rstn;
output [7:0] led;
reg [7:0] led;
reg [25:0] delay_cnt;
always @(posedge sys_clk or negedge sys_rstn)
begin
if (!sys_rstn)
delay_cnt <= 26'd0;
else
begin
if (delay_cnt==26'd49999999)
delay_cnt<=26'd0;
else
delay_cnt<=delay_cnt+1'b1;
end
end
always @ (posedge sys_clk or negedge sys_rstn)
begin
if (!sys_rstn)
led <= 8'b11111111;
else
begin
if (delay_cnt==26'd49999999)
led=~led;
else
led=led;
end
end
endmodule
享受进步的快乐!
这可全得感谢CPLD DIY活动啊,这可还得感谢EEPW啊,珍惜这个活动,继续进行下一进程!
打赏帖 | |
---|---|
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 | |
【瑞萨RA2E1开发板】:使用ADC功能实现位移传感器采集方案被打赏20分 |