实验01流水灯模块那些事儿驱动篇i_第1页
实验01流水灯模块那些事儿驱动篇i_第2页
实验01流水灯模块那些事儿驱动篇i_第3页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一:流水灯模块对于发展商而言,动土仪式无疑是最重要的任务。为此,流水灯实验作为低级建模 II的动土仪式再适合不过了。废话少说,我们还是开始实验吧。图 1.1 实验模图。如图 1.1 所示,实验一有名为 led_funcmod 的功能模块。如果无视环境信号(时钟信号还有复位信号),该功能模块只有一组输出端,亦即 4 位 LED 信号。接下来让我们来看具体内容:led_funcmod.v以为出入端。以为常量。分别是 1 秒至 1 毫秒。11.reg 3:0i;12.reg 25:0C1;13.reg 3:0D;14.reg 25:0T;15.reg 3:0isTag; 16.17.always

2、 ( posedge CLOCK or negedge RESET )6.parameter T1S = 26'd50_000_000; /1Hz7.parameter T100MS = 26'd5_000_000; /10Hz 8.parameter T10MS = 26'd500_000; /100Hz9.parameter T1MS = 26'd50_000; /1000Hz10.1.module led_funcmod 2.(3. input CLOCK, RESET,4. output 3:0LED 5.);以是相关的寄存器以及复位操作。寄存器 i 用

3、来指向步骤,寄存器 C1 用来计数,寄存器 D 用来暂存结果和驱动输出,寄存器 T 用来暂存计数量,isTag 则用来暂存延迟。27.case( i )28.29.0:30.if( C1 = T -1) begin C1 <= 26'd0; i <= i + 1'b1; end31.else begin C1 <= C1 + 1'b1; D <= 4'b0001; end 32.33.1:34.if( C1 = T -1) begin C1 <= 26'd0; i <= i + 1'b1; end35.else

4、 begin C1 <= C1 + 1'b1; D <= 4'b0010; end 36.37.2:38.if( C1 = T -1) begin C1 <= 26'd0; i <= i + 1'b1; end39.else begin C1 <= C1 + 1'b1; D <= 4'b0100; end 40.41.3:42.if( C1 = T -1) begin C1 <= 26'd0; i <= i + 1'b1; end43.else begin C1 <= C1 +

5、 1'b1; D <= 4'b1000; end 44.45.4:46.begin isTag <= isTag2:0, isTag3 ; i <= i + 1'b1; end 47.48.5:49. if( isTag0 ) begin T <= T1S; i <= 4'd0; end50. else if( isTag1 ) begin T <= T100MS; i <= 4'd0; end51. else if( isTag2 ) begin T <= T10MS; i <= 4'd0;

6、 end52. else if( isTag3 ) begin T <= T1MS; i <= 4'd0; end 53.54.endcase55.18. if( !RESET )19. begin20.i <= 4'd0;21.C1 <= 26'd0;22.D <= 4'b0001;23.T <= T1S;24.isTag <= 4'b0001;25. end26. else以为是操作以及输出驱动。步骤 03 用来实现流水灯效果。最初,每个步骤的停留时间是 1 秒,然后步骤 03 按顺序执行便会产生流水效果。步

7、骤 4 是用来切换模式,步骤 5 则是根据 isTag 的内容再为 T 寄存器载入不同的延迟内容,如 0 延迟1 秒,1 延迟 100 毫妙,2 延迟 10 毫妙,3 延迟 1 毫妙。默认下为模式 0(第 24行),既延迟 1 秒(第 23 行)。这个实验所在乎的内容根本不是实验结果而是低级建模 II 本身。假若比较建模篇的流水实验,低级建模 I 与低级建模 II 之间是有明显的差距。首先,低级建模 II 再也不见计数器或者定时器等周边操作。再者,低级建模 II 的整合度很高,例如步骤 03:代码 1.1内容如代码 1.1 所示,步骤 03 每个步骤示意一段完整的小操作,例如步骤 0 为 4b

8、0001 保持一段时间,步骤 1 为 4b0010 保持一段时间,步骤 23 也是如此。其中 -1 也考虑了步骤切换的时间。假设流水间隔要求 1 毫妙,那么每个步骤都会准确无误停留 50000个时钟。事实上,步骤 0 也可以换成比较方便的写法,如代码 1.2 所示:代码 1.2代码 1.2 表示,只要寄存器D 准备好初值,例如 4b0001,那么步骤 03 都可以共享同样的操作,如此一来会大大减少行数,节省空间。好奇的同学一定觉得疑惑,既然代码1.reg 3:0 D = 4b0001;2.3.0,1,2,3:4.if( C1 = T -1) begin D <= D2:0, D3 ; C

9、1 <= 26'd0; i <= i + 1'b1; end5.else begin C1 <= C1 + 1'b1; end1.0:2.if( C1 = T -1) begin C1 <= 26'd0; i <= i + 1'b1; end 3.else begin C1 <= C1 + 1'b1; D <= 4'b0001; end4.1:5.if( C1 = T -1) begin C1 <= 26'd0; i <= i + 1'b1; end 6.else be

10、gin C1 <= C1 + 1'b1; D<= 4'b0010; end7.2:8.if( C1 =T -1) begin C1 <= 26'd0; i <= i + 1'b1; end 9.else begin C1 <= C1 + 1'b1; D <= 4'b0100; end10.3:11.if( C1 = T -1) begin C1 <= 26'd0; i <= i + 1'b1; end12.else begin C1 <= C1 + 1'b1; D <= 4'b1000; end56.assign LED = D; 57.58. endmodule1.2 的写法那么方便,反之笔者为何要选择代码 1.1 的写法呢?很单纯,那是为了清晰模块内容,以致我们容易脑补时序。感觉上,两者虽然都差不多,但是我们只要仔看,我们便会发现 . 代码 1.2 它虽然书写方便,细节模糊而且内容也不直观。在此,笔者需要强调!低级建模 II 虽然有整合技巧让操作变得更加便捷,不过比起整合它更加注重表达能力以及清晰度。这样做的关键是为了发挥主动思想,以便摆脱无谓的。所以说,如果读者想和低

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论