下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于FPGA至简设计法的4位闪烁灯附件更详细4位闪烁灯一、项目背景LED灯的理论、教学板的原理图,已经在案例1位闪烁灯中有详细的描述,在此不再讲述,有兴趣的读者可以返回去阅读。二、设计目标本工程使用4个LED灯---LED1~LED4,实现一个呼吸灯的功能。这4个灯具体的变化情况为:第1个灯隔1秒后,亮1秒;然后第2个灯隔1秒后,亮2秒;然后第3个灯隔1秒后,亮3秒,最后第4个灯隔1秒,亮4秒。如此循环往复。下面是波形图:上板效果图如下图所示。上板的演示视频,请登陆网址查看:。三、模块设计我们先分析一下板子上的LED灯。每个LED灯都有一个信号来控制,该信号为0,则灯亮,如果该信号为1,则灯来。现在我们要控制4个LED灯亮灭,那就需要4个信号,假设分别为led0、led1、led2和led3。这4个信号分别连接到4个led灯上。如果要让LED0灯0亮,LED1~3灯来,那FPGA就让led0信号为0,led1~3信号都为1。综上所述,我们这个工程需要6个信号:时钟clk,复位rst_n、led0、led1、led2和led3。我们再分析一下功能需求,第1个灯隔1秒后,亮1秒;然后第2个灯隔1秒后,亮2秒;然后第3个灯隔1秒后,亮3秒,最后第4个灯隔1秒,亮4秒。如此循环往复。上面的功能需求,也可以翻译成:对于LED0,复位后,先灭1秒,亮1秒,然后再灭12秒,循环往复;对于LED1,复位后,先灭3秒,亮2秒,然后再灭9秒,循环往复;对于LED2,复位后,先灭6秒,亮3秒,然后再灭5秒,循环往复;对于LED3,先灭10秒,亮4秒,循环往复。再将其翻译成信号来理解:复位后,让信号led0=1并持续1秒,然后让led0=0并持续1秒,然后让led0=1持续12秒。循环往复。复位后,让信号led1=1并持续3秒,然后让led1=0并持续2秒,然后让led1=1持续9秒。循环往复。复位后,让信号led2=1并持续6秒,然后让led2=0并持续3秒,然后让led2=1持续5秒。循环往复。复位后,让信号led3=1并持续10秒,然后让led3=0并持续4秒。循环往复。再将其翻译成波形如下图所示。由图中可看到,信号led0~led3的变化单位最小是1秒,同时4个信号都是经过14秒后就循环一次。由至简设计法的思想,很容易就得出我们需要2个计数器,1个计数器用来计算1秒时间,另1个计数器用来计算14秒。有了这两个计数器,led0~led3的变化时间就有了标准。我们用1个计数器用来计算1秒时间,该计数器名称为cnt0。本工程的工作时钟是50MHz,即周期为20ns,计数器计数到1_000_000_000/20=50_000_000个,我们就能知道1秒时间到了。该计数器是不停地计数,永远不停止的,可以认为加1条件一直有效,可写成:assignadd_cnt==1。综上所述,该计数器的代码如下。我们再用1个计数器用来表示14秒,名称为cnt1。该计数器表示次数,自然是每隔1秒就加1,那就是end_cnt0。该计数器一共要数14次。所以代码为:有了两个计数器,我们来思考输出信号led0的变化。概括起来,led0有两种变化点:变0和变1。变0的原因都是计数到1秒时间,也就是add_cnt1&&cnt1==1-1时,led0变0。变1的原因,则是数到2秒时间时,即add_cnt1&&cnt1==2-1时,led0变1。所以led0信号的代码如下:接下来我们思考输出信号led1的变化。概括起来,led1有两种变化点:变0和变1。变0的原因都是计数到3秒时间,也就是add_cnt1&&cnt1==3-1时,led1变0。变1的原因,则是数到5秒时间时,即add_cnt1&&cnt1==5-1时,led1变1。所以led1信号的代码如下:接下来我们思考输出信号led2的变化。概括起来,led2有两种变化点:变0和变1。变0的原因都是计数到6秒时间,也就是add_cnt1&&cnt1==6-1时,led2变0。变1的原因,则是数到9秒时间时,即add_cnt1&&cnt1==9-1时,led2变1。所以led2信号的代码如下:接下来我们思考输出信号led3的变化。概括起来,led3有两种变化点:变0和变1。变0的原因都是计数到10秒时间,也就是add_cnt1&&cnt1==10-1时,led3变0。变1的原因,则是数到14秒时间时,即add_cnt1&&cnt1==14-1,也就是end_cnt1时,led3变1。所以led3信号的代码如下:此次,主体程序已经完成。接下来是将module补充完整。将module的名称定义为huxiled。并且我们已经知道该模块有六个信号:clk、rst_n、led0、led1、led2、led3。为此,代码如下:其中clk、rst_n是输入信号,led0、led1、led2、led3是输出信号,并且六个信号都是1比特的,根据这些信息,我们补充输入输出端口定义。代码如下:接下来定义信号类型。cnt0是用always产生的信号,因此类型为reg。cnt0计数的最大值为500_000_000,需要用29根线表示,即位宽是29位。因此代码如下:add_cnt0和end_cnt0都是用assign方式设计的,因此类型为wire。并且其值是0或者1,1个线表示即可。因此代码如下:cnt1是用always产生的信号,因此类型为reg。cnt1计数的最大值为8,需要用4根线表示,即位宽是4位。因此代码如下:add_cnt1和end_cnt1都是用assign方式设计的,因此类型为wire。并且其值是0或者1,1根线表示即可。因此代码如下:led0、led1、led2、led3是用always方式设计的,因此类型为reg。并且其值是0或者1,1根线表示即可。因此代码如下:至此,整个代码的设计工作已经完成。下一步是新建工程和上板查看现象。四、综合工程和上板新建工程首先在d盘中创建名为“huxiled”的工程文件夹,将写的代码命名为“huxiled.v”,顶层模块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- “双减”政策下我国中小学课后延时体育服务的演进历程、机遇挑战及实现路径
- “双减”背景下的小学语文大单元作业设计策略
- 临床CT识别肺炎支原体肺炎影像学特征
- 专题一第2课二、《文档的编辑》说课稿 2023-2024学年青岛版(2018)初中信息技术七年级下册
- Unit 7 have用法小结(说课稿)-2024-2025学年人教新目标Go For It!英语八年级上册
- 购物袋、30万套帐篷、收纳盒及防尘罩项目可行性研究报告写作模板-备案审批
- 二零二五年度安全生产责任追究制度合同2篇
- Unit 2 My week Part A Lets spell大单元整体说课稿表格式-2024-2025学年人教PEP版英语五年级上册
- 全国人教版信息技术八年级上册第三单元第12课三、《制作按钮并设置动作脚本》说课稿设计
- 贵州商学院《机器学习与深度学习理论双语教学》2023-2024学年第一学期期末试卷
- 2025届上海市复旦附中浦东分校物理高二上期末教学质量检测试题含解析
- 快乐读书吧:童年(专项训练)-2023-2024学年六年级语文上册(统编版)(含答案)
- 2023-2024学年广东省广州市海珠区九年级(上)期末英语试卷
- 红色蛇年大吉年终总结汇报
- 农业机械培训课件
- 河南省郑州市2023-2024学年高二上学期期末考试英语试题 附答案
- 2024年度心理辅导合作协议模板版
- GB/T 22723-2024天然气能量的测定
- 能源岗位招聘笔试题与参考答案(某大型国企)2024年
- 航空与航天学习通超星期末考试答案章节答案2024年
- 麻醉苏醒期躁动患者护理
评论
0/150
提交评论