【黑金教程笔记之007】【建模篇】【Lab 06 SOS信号之二】—笔记
控制模块的协调角色。
实验六用到了实验四的按键消抖模块debounce_module.v和实验五的sos_module.v。
设计思路:
debounce_module.v看成一个输入,sos_module.v看成输出,而inter_control_module.v负责两个模块之间的沟通。
当按键按下时,debounce_module.v过滤抖动,然后产生一个时钟的高脉冲(原码里是100ms)Trig_sig信号。当Inter_control_module.v接收到这个高脉冲信号,它会转发产生一个时钟的高脉冲SOS_en_sig信号。即inter_control_module.v间接触发sos_module.v。
模块:
- /****************************************
- module name: debounce_module.v
- function: debounce a key
- pin assignments(for DE2-115):
- by yf.x
- 2014-11-05
- ****************************************/
- module debounce_module(
- CLK,
- RST_n,
- Pin_in,
- Pin_out
- );
- input CLK;
- input RST_n;
- input Pin_in;
- output Pin_out;
- /*******************************/
- wire H2L_Sig;
- wire L2H_Sig;
- detect_module u0(
- .CLK(CLK),
- .RST_n(RST_n),
- .Pin_in(Pin_in), //input from top
- .H2L_Sig(H2L_Sig), //output to u1
- .L2H_Sig(L2H_Sig) //output to u1
- );
- /***************************************/
- delay_module u1(
- .CLK(CLK),
- .RST_n(RST_n),
- .H2L_Sig(H2L_Sig), //input from u1
- .L2H_Sig(L2H_Sig), //input from u1
- .Pin_out(Pin_out) //output to top
- );
- /***************************************/
- endmodule
- /************************************************************
- module name: inter_control_module.v
- function: detect trig_sig and generate SOS_en_sig.
- by yf.x
- 2014-11-08
- ************************************************************/
- module inter_control_module(
- CLK,
- RST_n,
- Trig_sig,
- SOS_en_sig
- );
- input CLK;
- input RST_n;
- input Trig_sig;
- output SOS_en_sig;
- /****************************************************/
- reg i;
- reg isEn;
- always @(posedge CLK or negedge RST_n)
- if(!RST_n)
- begin
- i<='b0;
- isEn<='b0;
- end
- else
- case(i)
- 'b0:
- if(Trig_sig)
- begin
- isEn<='b1;
- i<='b1;
- end
- 'b1:
- begin
- isEn<='b0;
- i<='b0;
- end
- endcase
- /**********************************************************/
- assign SOS_en_sig=isEn;
- /**********************************************************/
- endmodule
- /**********************************************************
- module name:sos_module.v
- function: generate sos signal
- by yf.x
- 2014-11-07
- **********************************************************/
- module sos_module(
- CLK,
- RST_n,
- Pin_out,
- SOS_en_sig
- );
- input CLK;
- input RST_n;
- input SOS_en_sig;
- output Pin_out;
- /***********************************************************/
- // DE2-115 use 50MHz oscillator,50M*0.001-1=49_999
- parameter T1ms='d49_999;
- /**********************************************************/
- reg [:]count1; //1ms counter
- always @(posedge CLK or negedge RST_n)
- if(!RST_n)
- count1<='d0;
- else if(iscount && count1==T1ms)
- count1<='d0;
- else if(iscount)
- count1<=count1+'b1;
- else if(!iscount)
- count1<='d0;
- /***********************************************************/
- reg [:]count_ms;
- always @(posedge CLK or negedge RST_n)
- if(!RST_n)
- count_ms<='d0;
- else if(iscount && count1==T1ms)
- count_ms<=count_ms+'b1;
- else if(!iscount)
- count_ms<='d0;
- /***********************************************************/
- reg iscount;
- reg rPin_out;
- reg [:]i;
- always @(posedge CLK or negedge RST_n)
- if(!RST_n)
- begin
- iscount<='b0;
- rPin_out<='b0;
- i<='d0;
- end
- else
- case(i)
- 'd0:
- if(SOS_en_sig=='b1)
- i<='d1;
- 'd1,
- 'd3,
- 'd5,
- 'd13,
- 'd15,
- 'd17: //short
- if(count_ms=='d100)
- begin
- iscount<='b0;
- rPin_out<='b0;
- i<=i+'b1;
- end
- else
- begin
- iscount<='b1;
- rPin_out='b1;
- end
- 'd2,
- 'd4,
- 'd6,
- 'd8,
- 'd10,
- 'd12,
- 'd14,
- 'd16,
- 'd18: //interval
- if(count_ms=='d50)
- begin
- iscount<='b0;
- i<=i+'b1;
- end
- else
- iscount<='b1;
- 'd7,
- 'd9,
- 'd11: //long
- if(count_ms=='d300)
- begin
- iscount<='b0;
- rPin_out<='b0;
- i<=i+'b1;
- end
- else
- begin
- iscount<='b1;
- rPin_out='b1;
- end
- 'd19: //end
- begin
- rPin_out<='b0;
- i<='b0;
- end
- endcase
- /*******************************************************************/
- assign Pin_out=rPin_out;
- endmodule
- /***********************************************************
- module name: lab06_top.v
- function: press a key, then trig SOS signal
- pin assignments(for DE2_115):
- ---------------------------------------------
- CLK--------------------------------CLOCK_50
- RST_n------------------------------KEY[0]
- Pin_in-----------------------------KEY[3]
- Pin_out----------------------------LEDG[8]
- by yf.x
- 2014-11-08
- ***********************************************************/
- module lab06_top(
- CLK,
- RST_n,
- Pin_in,
- Pin_out
- );
- input CLK;
- input RST_n;
- input Pin_in;
- output Pin_out;
- /**************************************************/
- wire Trig_sig;
- debounce_module u0(
- .CLK(CLK),
- .RST_n(RST_n),
- .Pin_in(Pin_in),
- .Pin_out(Trig_sig)
- );
- /**************************************************/
- wire SOS_en_sig;
- inter_control_module u1(
- .CLK(CLK),
- .RST_n(RST_n),
- .Trig_sig(Trig_sig),
- .SOS_en_sig(SOS_en_sig)
- );
- /***************************************************/
- sos_module u2(
- .CLK(CLK),
- .RST_n(RST_n),
- .Pin_out(Pin_out),
- .SOS_en_sig(SOS_en_sig)
- );
- /***************************************************/
- endmodule
完成的框图:
实验六结论:
单针对这个实验,设计可以简化,即去掉inter_control_module.v。但是这个模块可以提供更好的扩展性。
【黑金教程笔记之007】【建模篇】【Lab 06 SOS信号之二】—笔记的更多相关文章
- 【黑金教程笔记之006】【建模篇】【Lab 05 SOS信号之一】—笔记
sos_module.v是产生SOS信号的功能模块.即有次序的输出莫斯码:点.画.间隔.control_module.v是一个定时触发器,每一段时间使能sos_module.v. 模块: /***** ...
- Python笔记_第四篇_高阶编程_二次封装
1.二次封装: 二次封装其实就是对一个类或者一个方法进行二次的改造增加新的功能. 2.一个类的二次封装: 我们以一个进程为例,我们把Process这个库进行二次封装,增加一些功能,在调用. thoma ...
- 《Kafka权威指南》读书笔记-操作系统调优篇
<Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...
- 【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
昨天熄灯了真是坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础排版上一期测试答案1.大家一开始想到的肯定是\LaTeX{}er ...
- Pycharm新手教程,只需要看这篇就够了
pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycharm一共有两个版 ...
- 【转】寻找最好的笔记软件:海选篇 (v1.0)
原文网址:http://blog.sina.com.cn/s/blog_46dac66f01000b55.html 序言: 我见过的多数软件爱好者,无论是资深用户,还是初级用户,都有一个梦想:找到 ...
- Matlab 多个版本的安装包下载、安装和激活教程 + 多套数学建模视频教程
目录 1. 关键词 1.1. 说明 2. 下载地址 2.1. OneDrive高速云盘 2.1.1. 多版本的安装包 2.1.2. 多套数学建模的视频教程 2.2. 百度云 3. 安装教程 1. 关键 ...
- Redis 笔记 01:入门篇
Redis 笔记 01:入门篇 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
- tensorflow笔记(五)之MNIST手写识别系列二
tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...
随机推荐
- 深入理解计算机操作系统——第11章:CS模型,网络
网络编程: 11.1 客户端-服务器编程模型 (1)一个应用是由一个服务器进程和一个或多个客户端进程组成. (2)服务器管理某种资源,并且操纵这种资源来为客户端服务. CS模型: CS的基本操作是事务 ...
- HDU 5883 欧拉路径异或值最大 水题
The Best Path Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- Nexus3.0.1如何上传第三方插件
原文:http://blog.csdn.net/wang465745776/article/details/52527905 前提条件 Nexus 3.0.1 提出问题 如何上传第三方插件到Nexus ...
- SD/MMC的Commands和Responses的总结
SD总线通信是基于指令和数据比特流,起始位開始和停止位结束. SD总线通信有三个元素:1.Command:由host发送到卡设备.使用CMD线发送. 2.Response:从card端发送到host端 ...
- [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。
原文:http://www.infoq.com/interviews/Technology-Influences-DDD# 要实现DDD(domain drive design 领域驱动设计)原始意 ...
- java克隆对象clone()的使用方法和作用
转自:997.html">http://www.okrs.cn/blog/news/?997.html 内容摘要 若需改动一个对象,同一时候不想改变调用者的对象.就要制作该对象的一个本 ...
- C#使用SharpZipLib压缩解压文件
#region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...
- poj2488--A Knight's Journey(dfs,骑士问题)
A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 31147 Accepted: 10 ...
- 初步认识Tensorflow
不多说,直接上干货! TensorFlow 是一个开源软件库,用于使用数据流图进行数值计算.换句话说,即是构建深度学习模型的最佳方式. Tensorflow的官网 https://www.tensor ...
- IDEA--java版本修改(jdk1.8改成jdk1.7)
转载:https://blog.csdn.net/huyishero/article/details/61916516