【黑金教程笔记之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 ...
随机推荐
- 【2018 Multi-University Training Contest 3】
01:https://www.cnblogs.com/myx12345/p/9420198.html 02: 03: 04:https://www.cnblogs.com/myx12345/p/940 ...
- msp430入门编程35
msp430中C语言的可移植--规划软件层次
- 2016 ACM/ICPC 区域赛(北京) E 题 bfs
https://vjudge.net/problem/UVALive-7672 题意 输入一个五位数n 问由12345变到n的操作最少次数 不可达输出-1 有三种操作 1.交换相邻的位置 次数不 ...
- topcoder 650 srm div2 1000pts
(15) 也是 DIV1 500 题意是给定 一个无向图 删去一条边以后 可不可以是完全二叉树. 细节点很多,开始做法居然求到桥去了,最近强联通写傻了. 最多1024-1个点 1024-1条边枚举 所 ...
- [洛谷U22156]未曾届到游览(矩阵树定理)
题目背景 又到了某任*堂开关中学一年一度的自主招生考试的时间了,在考试完后许多家长决定带着自己的孩子参观一下这所距千年名校还有890周年的百年学校: 题目描述 这所学校的布局非常奇怪,是一个由N 个点 ...
- eclipse提速02 - eclipse.ini优化
给eclipse执行jvm.它可以让你使用自己的jdk,而不是系统环境变量所指定的jdk -vm /path/to/your/java 使用最新的jdk来运行eclipse.使用最新的jdk要好很多. ...
- struts2 自己定义表单
自己定义表单一定会涉及<s:iterator/>迭代,一个复杂的自己定义表单可能会嵌套n多层迭代. 比方一个自己定义一个问卷调查页面涉及3个模型:一个Survey代表一个调查.一个Page ...
- iphone5s 耳机更换插头 EarPods change jack
iphone5s 耳机使用了不到两年,出现了接头接触不良,话筒线短路的状况,经常自动出现暂停或者siri.买了一个新耳机,这几天有时间,把旧耳机修好了,更换了一个新的插头. 工具/原料 剥线钳 ...
- Office EXCEL 中单元格怎么打斜线
右击单元格,然后设置单元格格式,然后添加需要的边框 注意里面的文字有讲究,比如我要右上角显示Value,左下角显示Payload,则需要先输一堆空格,然后输入Value,把Value挤到右边去 ...
- Centos 6.4 实际工作环境搭建(LNMP)
基本配置 服务器IP设置.编辑网卡配置文件,命令: vi /etc/sysconfig/network-scripts/ifcfg-eth0 注:ifcfg-eth0参数 TYPE=Ethernet ...