【黑金教程笔记之002】【建模篇】【Lab 01 永远的流水灯】—笔记&勘误

学习并行操作的思想。

勘误001:

Page 17,模块图下方,“扫描频配置定为100Hz”应为10Hz。

勘误002:

Page 17,最后一行

“10ms”应为100ms;“2.5ms”应为25ms;(ps:这里用1000ms,每个led亮250ms效果比较明显)

源码如下:

 1 /*************************************************
 2 module name:led0_module.v
 3 function:drive led on for 25ms;
 4
 5 by yf.x
 6 2014-11-3
 7 **************************************************/
 8 module led0_module(
 9 CLK,RST_n,LED0
10 );
11
12 input CLK,RST_n;
13 output LED0;
14
15 /****************************************/
16 //DE2-115 has 50MHz oc,so 50M*1s=50_000_000
17 parameter T1000ms=26‘d50_000_000;
18 /****************************************/
19 //1000ms counter
20
21 reg [25:0]count1;
22
23 always @(posedge CLK or negedge RST_n)
24 if(!RST_n)
25   count1<=26‘d0;
26 else if(count1==T1000ms)
27   count1<=26‘d0;
28 else
29   count1<=count1+1‘b1;
30
31 /***************************************/
32 // control led on for 100ms
33
34 reg rLED;
35
36 always @(posedge CLK or negedge RST_n)
37 if(!RST_n)
38   rLED<=1‘b0;
39 else if(count1>=26‘d0 && count1<26‘d1_2500_000)
40   rLED<=1‘b1;
41 else
42   rLED<=1‘b0;
43
44 /***************************************/
45
46 assign LED0=rLED;
47
48 endmodule
49
50
51       
 1 /*************************************************
 2 module name:led1_module.v
 3 function:drive led on for 25ms;
 4
 5 by yf.x
 6 2014-11-3
 7 **************************************************/
 8 module led1_module(
 9 CLK,RST_n,LED1
10 );
11
12 input CLK,RST_n;
13 output LED1;
14
15 /****************************************/
16 //DE2-115 has 50MHz oc,so 50M*1=50_000_000
17 parameter T1000ms=26‘d50_000_000;
18 /****************************************/
19 //1000ms counter
20
21 reg [25:0]count1;
22
23 always @(posedge CLK or negedge RST_n)
24 if(!RST_n)
25   count1<=26‘d0;
26 else if(count1==T1000ms)
27   count1<=26‘d0;
28 else
29   count1<=count1+1‘b1;
30
31 /***************************************/
32 // control led on for 100ms
33
34 reg rLED;
35
36 always @(posedge CLK or negedge RST_n)
37 if(!RST_n)
38   rLED<=1‘b0;
39 else if(count1>=26‘d1_2500_000 && count1<26‘d2_5000_000)
40   rLED<=1‘b1;
41 else
42   rLED<=1‘b0;
43
44 /***************************************/
45
46 assign LED1=rLED;
47
48 endmodule
49
50
51       
 1 /*************************************************
 2 module name:led2_module.v
 3 function:drive led on for 25ms;
 4
 5 by yf.x
 6 2014-11-3
 7 **************************************************/
 8 module led2_module(
 9 CLK,RST_n,LED2
10 );
11
12 input CLK,RST_n;
13 output LED2;
14
15 /****************************************/
16 //DE2-115 has 50MHz oc,so 50M*1=50_000_000
17 parameter T1000ms=26‘d50_000_000;
18 /****************************************/
19 //1000ms counter
20
21 reg [25:0]count1;
22
23 always @(posedge CLK or negedge RST_n)
24 if(!RST_n)
25   count1<=26‘d0;
26 else if(count1==T1000ms)
27   count1<=26‘d0;
28 else
29   count1<=count1+1‘b1;
30
31 /***************************************/
32 // control led on for 100ms
33
34 reg rLED;
35
36 always @(posedge CLK or negedge RST_n)
37 if(!RST_n)
38   rLED<=1‘b0;
39 else if(count1>=26‘d2_5000_000 && count1<26‘d3_7500_000)
40   rLED<=1‘b1;
41 else
42   rLED<=1‘b0;
43
44 /***************************************/
45
46 assign LED2=rLED;
47
48 endmodule
49
50
51       
 1 /*************************************************
 2 module name:led3_module.v
 3 function:drive led on for 25ms;
 4
 5 by yf.x
 6 2014-11-3
 7 **************************************************/
 8 module led3_module(
 9 CLK,RST_n,LED3
10 );
11
12 input CLK,RST_n;
13 output LED3;
14
15 /****************************************/
16 //DE2-115 has 50MHz oc,so 50M*1=50_000_000
17 parameter T1000ms=26‘d50_000_000;
18 /****************************************/
19 //1000ms counter
20
21 reg [25:0]count1;
22
23 always @(posedge CLK or negedge RST_n)
24 if(!RST_n)
25   count1<=26‘d0;
26 else if(count1==T1000ms)
27   count1<=26‘d0;
28 else
29   count1<=count1+1‘b1;
30
31 /***************************************/
32 // control led on for 100ms
33
34 reg rLED;
35
36 always @(posedge CLK or negedge RST_n)
37 if(!RST_n)
38   rLED<=1‘b0;
39 else if(count1>=26‘d3_7500_000 && count1<26‘d50_000_000)
40   rLED<=1‘b1;
41 else
42   rLED<=1‘b0;
43
44 /***************************************/
45
46 assign LED3=rLED;
47
48 endmodule
49
50
51       
 1 /*********************************
 2 module name:top.v
 3 function:control 4 led on for 250ms
 4 (for DE2-115)
 5 pin assignments:
 6 ---------------------------------
 7 CLK----------------------CLOCK_50
 8 RST_n--------------------KEY[0]
 9 LED(0-3)-----------------LEDG[0-3]
10 ---------------------------------
11
12 yf.x
13 2014-11-03
14 **********************************/
15
16 module top(
17 CLK,RST_n,LED
18 );
19
20 input CLK,RST_n;
21 output [3:0]LED;
22
23 /*********************************/
24
25 wire [3:0]LED_out;
26
27 led0_module u0(
28 .CLK(CLK),
29 .RST_n(RST_n),
30 .LED0(LED_out[0])
31 );
32
33 /*********************************/
34
35 led1_module u1(
36 .CLK(CLK),
37 .RST_n(RST_n),
38 .LED1(LED_out[1])
39 );
40
41 /*********************************/
42
43 led2_module u2(
44 .CLK(CLK),
45 .RST_n(RST_n),
46 .LED2(LED_out[2])
47 );
48
49 /*********************************/
50
51 led3_module u3(
52 .CLK(CLK),
53 .RST_n(RST_n),
54 .LED3(LED_out[3])
55 );
56
57 /*********************************/
58
59 assign LED=LED_out;
60
61 endmodule
时间: 2024-10-20 20:00:35

【黑金教程笔记之002】【建模篇】【Lab 01 永远的流水灯】—笔记&勘误的相关文章

Verilog HDL那些事_建模篇笔记(实验一,实验二)

实验一:永远的流水灯 扫描频率配置为100Hz,即是说扫描周期为10ms.这里需要注意的是扫描周期的概念.流水灯嘛,顾名思义,扫描周期指的是流水灯扫一轮所需要的时间.听到说周期,就应该想到在建模的时候需要写计数器模块,这个计数器模块应该是神一般的独立存在,独立运行.每隔10ms复位一次,复位后又重新开始计数. 实验二:闪耀灯和流水灯 闪耀灯涉及到闪耀频率,流水灯涉及到扫描频率的概率.这里先区分一下闪耀频率和扫描频率的概念.闪耀频率对应闪耀周期,闪耀周期是针对于单个LED灯而言的,即是指LED灯亮

【黑金原创教程】【FPGA那些事儿-驱动篇I 】【实验一】流水灯模块

实验一:流水灯模块 对于发展商而言,动土仪式无疑是最重要的任务.为此,流水灯实验作为低级建模II的动土仪式再适合不过了.废话少说,我们还是开始实验吧. 图1.1 实验一建模图. 如图1.1 所示,实验一有名为 led_funcmod的功能模块.如果无视环境信号(时钟信号还有复位信号),该功能模块只有一组输出端,亦即4位LED信号.接下来让我们来看具体内容: led_funcmod.v 1. module led_funcmod2. (3. input CLOCK, RESET,4. output

Unity5 官方教程笔记(2D Rogue Like)01 —— BoardManager

作为一个Rogue Like游戏,随机生成地图的功能是必不可少的.在上一篇博文(Unity5 官方教程笔记(2D Rogue Like)01 —— Game Manager)中,我们知道了在此项目中,负责这项工作的类叫做“BoardManager”,而且同时它还要负责对地图的存储工作.下面笔者就来对这个类的功能进行介绍. 首先还是看一下代码的基本结构: 可以看到在这个类里面,我们: 规定了地图的尺寸 设定了墙壁(地图)单元和食物单元的生成数量(也就是在特定关卡中这些单元的数量范围) 保存了各类单

SaltStack 学习笔记 - 第十二篇: SaltStack Web 界面

SaltStack 有自身的用python开发的web界面halite,好处是基于python,可以跟salt的api无缝配合,确定就比较明显,需要个性化对web界面进行定制的会比较麻烦,如果喜欢体验该界面的可以参考下面的文章  http://rfyiamcool.blog.51cto.com/1030776/1275443/ 我是运用另一个python+php来进行web开发,具体需要的工具有在我的另一篇文章里面介绍过,这里再重新进行整个开发介绍 首先介绍php 跟python通信的工具 pp

树莓派玩耍笔记3 -- LCD1602显示篇

LCD1602是一块成本低廉的输出设备,它有着体积小.操作简单.功耗低等优点,所以在一些DIY 产品上会用它来输出一些信息.昨天在使用时,虽然借鉴网上的资源,但是仍然有遇到一些问题,在这里写出来以便大家遇到时能够正确处理. 一.LCD1602 相关[1] 工业字符型液晶,能够同时显示16x02即32个字符.(16列2行) 1.1 管脚 1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线. 引脚 符号 功能说明 1 VSS 一般接地 2 VDD 接电源(+5V

现代C++学习笔记之二入门篇2,数据转换

static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换,但是,编译器在无法分辨此类转换在运行时是否是安全的. dynamic_cast: dynamic_cast在运行时检查基类指针和派生类指针之间的强制转换. dynamic_cast 是比 static_cast 更安全的强制类型转换,但运行时检查会带来一些开销. const_cast:    con

【LaTeX】E喵的LaTeX新手入门教程(1)准备篇

昨天熄灯了真是坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础排版上一期测试答案1.大家一开始想到的肯定是\LaTeX{}er.其实\LaTeX er也可以的.2.\LaTeX{} er或\LaTeX\ er数学模式现在我们打算在文档中插入一些数学公式什么的了:按照正常的情况来说,数学公式里面的字符一般都是斜体,而我们要用\textit来一点点把需要变的文字变成斜体这显然是一件极其坑爹的事情.TeX的创造者高爷爷表示他搞T

[Aaronyang] 写给自己的WPF4.5 笔记11[自定义控件-AyImageButton篇 1/4]

我的文章一定要对读者负责-否则不是好文章  ----       www.ayjs.net  aaronyang技术分享 文章导航: 介绍vs2013 WPF开发,属性代码相关技巧 实战AyImageButton 1.0细用慢讲,学会用户控件,依赖属性,属性回调事件 诞生AyImageButton 1.1 支持 控件简单写法,支持自定义AyImageButton写法,提供详细的API 效果图: AyImageButton记录 源码下载:http://pan.baidu.com/s/1eQlHly

现代C++学习笔记之二入门篇1

现代 C++ 强调: 基于堆栈的范围,而非堆或静态全局范围. 自动类型推理,而非显式类型名称. 智能指针而不是原始指针. std::string 和 std::wstring 类型(请参见 <string>),而非原始 char[] 数组. 标准模板库 (STL) 容器(例如 vector.list 和 map),而非原始数组或自定义容器. 请参见 <vector>.<list> 和 <map>. STL 算法,而非手动编码的算法. 异常,可报告和处理错误条