控制模块的协调角色。

实验六用到了实验四的按键消抖模块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信号之二】—笔记的更多相关文章

  1. 【黑金教程笔记之006】【建模篇】【Lab 05 SOS信号之一】—笔记

    sos_module.v是产生SOS信号的功能模块.即有次序的输出莫斯码:点.画.间隔.control_module.v是一个定时触发器,每一段时间使能sos_module.v. 模块: /***** ...

  2. Python笔记_第四篇_高阶编程_二次封装

    1.二次封装: 二次封装其实就是对一个类或者一个方法进行二次的改造增加新的功能. 2.一个类的二次封装: 我们以一个进程为例,我们把Process这个库进行二次封装,增加一些功能,在调用. thoma ...

  3. 《Kafka权威指南》读书笔记-操作系统调优篇

    <Kafka权威指南>读书笔记-操作系统调优篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 大部分Linux发行版默认的内核调优参数配置已经能够满足大多数应用程序的运 ...

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

    昨天熄灯了真是坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇 [LaTeX]E喵的LaTeX新手入门教程(2)基础排版上一期测试答案1.大家一开始想到的肯定是\LaTeX{}er ...

  5. Pycharm新手教程,只需要看这篇就够了

    pycharm是一款高效的python IDE工具,它非常强大,且可以跨平台,是新手首选工具!下面我给第一次使用这款软件的朋友做一个简单的使用教程,希望能给你带来帮助! 目前pycharm一共有两个版 ...

  6. 【转】寻找最好的笔记软件:海选篇 (v1.0)

    原文网址:http://blog.sina.com.cn/s/blog_46dac66f01000b55.html   序言: 我见过的多数软件爱好者,无论是资深用户,还是初级用户,都有一个梦想:找到 ...

  7. Matlab 多个版本的安装包下载、安装和激活教程 + 多套数学建模视频教程

    目录 1. 关键词 1.1. 说明 2. 下载地址 2.1. OneDrive高速云盘 2.1.1. 多版本的安装包 2.1.2. 多套数学建模的视频教程 2.2. 百度云 3. 安装教程 1. 关键 ...

  8. Redis 笔记 01:入门篇

    Redis 笔记 01:入门篇 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...

  9. tensorflow笔记(五)之MNIST手写识别系列二

    tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...

随机推荐

  1. POJ3177,/3352.求最少添加多少边使无向图边双连通

    俩个题一样.tarjan算法应用,开始求桥,WA,同一个边双连通分量中low值未必都相同,不能用此来缩点.后来用并查集来判断,若不是桥,则在一个双连通分量中,并之,后边再查,将同一个双连通分量中的点通 ...

  2. python学习之-- redis模块操作 HASH

    redis 操作 之 -Hash Hash 操作:hash在内存中的存储格式 name hash n1 ------> k1 -> v1 k2 -> v2 k3 -> v3hs ...

  3. gitlab上fork的项目如何获取源更新

    1.添加上游项目地址 git remote add upstream URL 2.查看远程仓库信息 可以看到上游项目地址已经添加进来了 git remote -v 3.获取上游项目更新 获取到的更新会 ...

  4. 105. Construct Binary Tree from Inorder and preorder Traversal

    /* * 105. Construct Binary Tree from Inorder and preorder Traversal * 11.20 By Mingyang * 千万不要以为root ...

  5. EF关联

    public CustomerMap() { this.ToTable("Customer"); this.HasKey(c => c.Id); this.Property( ...

  6. Spring Boot项目错误:Error parsing lifecycle processing instructions

    pom.xml文件错误:Error parsing lifecycle processing instructions 解决方法:清空.m2/repository下的所有依赖文件,重新下载即可解决该问 ...

  7. ArcGIS Engine三维动画开发 来自:http://www.iarcgis.com/?p=826

    ArcGIS Engine 三维开发 来自:http://www.iarcgis.com/?p=826 在三维中,经常使用的一个功能就是播放动画,也就是我们要对一条动画轨迹进行播放,而在ArcGIS ...

  8. windows下开发PHP扩展dll(无需Cygwin)

    windows下开发php扩展网上很多资料都说需要Cygwin,其实完全可以不必安装该东东.没错,是可以在linux下生成骨架后拷到windos下来用,但是,如果没有linux环境呢?什么,装虚拟机? ...

  9. Office WORD EXCEL批量查找和替换技巧实例

    1 删除多余的空行 如果是在WORD中,则查找^p^p替换为^p.   如果是在EXCEL里,则为全部选中,然后点击编辑,定位,定位条件,空值. 将全部选中空白的行,如图所示 再次点击编辑,删除,删除 ...

  10. 创业公司做数据分析(四)ELK日志系统

      作为系列文章的第四篇.本文将重点探讨数据採集层中的ELK日志系统.日志.指的是后台服务中产生的log信息,一般会输入到不同的文件里.比方Django服务下,一般会有nginx日志和uWSGI日志. ...