控制模块的协调角色。

实验六用到了实验四的按键消抖模块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。

模块:

  1. /****************************************
  2. module name: debounce_module.v
  3. function: debounce a key
  4. pin assignments(for DE2-115):
  5.  
  6. by yf.x
  7. 2014-11-05
  8.  
  9. ****************************************/
  10.  
  11. module debounce_module(
  12. CLK,
  13. RST_n,
  14. Pin_in,
  15. Pin_out
  16. );
  17.  
  18. input CLK;
  19. input RST_n;
  20. input Pin_in;
  21. output Pin_out;
  22.  
  23. /*******************************/
  24.  
  25. wire H2L_Sig;
  26. wire L2H_Sig;
  27.  
  28. detect_module u0(
  29. .CLK(CLK),
  30. .RST_n(RST_n),
  31. .Pin_in(Pin_in), //input from top
  32. .H2L_Sig(H2L_Sig), //output to u1
  33. .L2H_Sig(L2H_Sig) //output to u1
  34. );
  35.  
  36. /***************************************/
  37.  
  38. delay_module u1(
  39. .CLK(CLK),
  40. .RST_n(RST_n),
  41. .H2L_Sig(H2L_Sig), //input from u1
  42. .L2H_Sig(L2H_Sig), //input from u1
  43. .Pin_out(Pin_out) //output to top
  44. );
  45.  
  46. /***************************************/
  47.  
  48. endmodule
  1. /************************************************************
  2. module name: inter_control_module.v
  3. function: detect trig_sig and generate SOS_en_sig.
  4.  
  5. by yf.x
  6. 2014-11-08
  7.  
  8. ************************************************************/
  9.  
  10. module inter_control_module(
  11. CLK,
  12. RST_n,
  13. Trig_sig,
  14. SOS_en_sig
  15. );
  16.  
  17. input CLK;
  18. input RST_n;
  19. input Trig_sig;
  20. output SOS_en_sig;
  21.  
  22. /****************************************************/
  23.  
  24. reg i;
  25. reg isEn;
  26.  
  27. always @(posedge CLK or negedge RST_n)
  28. if(!RST_n)
  29. begin
  30. i<='b0;
  31. isEn<='b0;
  32. end
  33. else
  34. case(i)
  35. 'b0:
  36. if(Trig_sig)
  37. begin
  38. isEn<='b1;
  39. i<='b1;
  40. end
  41.  
  42. 'b1:
  43. begin
  44. isEn<='b0;
  45. i<='b0;
  46. end
  47. endcase
  48.  
  49. /**********************************************************/
  50.  
  51. assign SOS_en_sig=isEn;
  52.  
  53. /**********************************************************/
  54.  
  55. endmodule
  1. /**********************************************************
  2. module name:sos_module.v
  3. function: generate sos signal
  4.  
  5. by yf.x
  6. 2014-11-07
  7.  
  8. **********************************************************/
  9.  
  10. module sos_module(
  11. CLK,
  12. RST_n,
  13. Pin_out,
  14. SOS_en_sig
  15. );
  16.  
  17. input CLK;
  18. input RST_n;
  19. input SOS_en_sig;
  20. output Pin_out;
  21.  
  22. /***********************************************************/
  23. // DE2-115 use 50MHz oscillator,50M*0.001-1=49_999
  24. parameter T1ms='d49_999;
  25.  
  26. /**********************************************************/
  27.  
  28. reg [:]count1; //1ms counter
  29.  
  30. always @(posedge CLK or negedge RST_n)
  31. if(!RST_n)
  32. count1<='d0;
  33. else if(iscount && count1==T1ms)
  34. count1<='d0;
  35. else if(iscount)
  36. count1<=count1+'b1;
  37. else if(!iscount)
  38. count1<='d0;
  39.  
  40. /***********************************************************/
  41.  
  42. reg [:]count_ms;
  43.  
  44. always @(posedge CLK or negedge RST_n)
  45. if(!RST_n)
  46. count_ms<='d0;
  47. else if(iscount && count1==T1ms)
  48. count_ms<=count_ms+'b1;
  49. else if(!iscount)
  50. count_ms<='d0;
  51.  
  52. /***********************************************************/
  53.  
  54. reg iscount;
  55. reg rPin_out;
  56. reg [:]i;
  57.  
  58. always @(posedge CLK or negedge RST_n)
  59. if(!RST_n)
  60. begin
  61. iscount<='b0;
  62. rPin_out<='b0;
  63. i<='d0;
  64. end
  65. else
  66. case(i)
  67.  
  68. 'd0:
  69. if(SOS_en_sig=='b1)
  70. i<='d1;
  71.  
  72. 'd1,
  73. 'd3,
  74. 'd5,
  75. 'd13,
  76. 'd15,
  77. 'd17: //short
  78. if(count_ms=='d100)
  79. begin
  80. iscount<='b0;
  81. rPin_out<='b0;
  82. i<=i+'b1;
  83. end
  84. else
  85. begin
  86. iscount<='b1;
  87. rPin_out='b1;
  88. end
  89.  
  90. 'd2,
  91. 'd4,
  92. 'd6,
  93. 'd8,
  94. 'd10,
  95. 'd12,
  96. 'd14,
  97. 'd16,
  98. 'd18: //interval
  99. if(count_ms=='d50)
  100. begin
  101. iscount<='b0;
  102. i<=i+'b1;
  103. end
  104. else
  105. iscount<='b1;
  106.  
  107. 'd7,
  108. 'd9,
  109. 'd11: //long
  110. if(count_ms=='d300)
  111. begin
  112. iscount<='b0;
  113. rPin_out<='b0;
  114. i<=i+'b1;
  115. end
  116. else
  117. begin
  118. iscount<='b1;
  119. rPin_out='b1;
  120. end
  121.  
  122. 'd19: //end
  123. begin
  124. rPin_out<='b0;
  125. i<='b0;
  126. end
  127. endcase
  128.  
  129. /*******************************************************************/
  130.  
  131. assign Pin_out=rPin_out;
  132.  
  133. endmodule
  1. /***********************************************************
  2. module name: lab06_top.v
  3. function: press a key, then trig SOS signal
  4. pin assignments(for DE2_115):
  5. ---------------------------------------------
  6. CLK--------------------------------CLOCK_50
  7. RST_n------------------------------KEY[0]
  8. Pin_in-----------------------------KEY[3]
  9. Pin_out----------------------------LEDG[8]
  10.  
  11. by yf.x
  12. 2014-11-08
  13.  
  14. ***********************************************************/
  15.  
  16. module lab06_top(
  17. CLK,
  18. RST_n,
  19. Pin_in,
  20. Pin_out
  21. );
  22.  
  23. input CLK;
  24. input RST_n;
  25. input Pin_in;
  26. output Pin_out;
  27.  
  28. /**************************************************/
  29.  
  30. wire Trig_sig;
  31.  
  32. debounce_module u0(
  33. .CLK(CLK),
  34. .RST_n(RST_n),
  35. .Pin_in(Pin_in),
  36. .Pin_out(Trig_sig)
  37. );
  38.  
  39. /**************************************************/
  40.  
  41. wire SOS_en_sig;
  42.  
  43. inter_control_module u1(
  44. .CLK(CLK),
  45. .RST_n(RST_n),
  46. .Trig_sig(Trig_sig),
  47. .SOS_en_sig(SOS_en_sig)
  48. );
  49.  
  50. /***************************************************/
  51.  
  52. sos_module u2(
  53. .CLK(CLK),
  54. .RST_n(RST_n),
  55. .Pin_out(Pin_out),
  56. .SOS_en_sig(SOS_en_sig)
  57. );
  58.  
  59. /***************************************************/
  60.  
  61. 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. 深入理解计算机操作系统——第11章:CS模型,网络

    网络编程: 11.1 客户端-服务器编程模型 (1)一个应用是由一个服务器进程和一个或多个客户端进程组成. (2)服务器管理某种资源,并且操纵这种资源来为客户端服务. CS模型: CS的基本操作是事务 ...

  2. HDU 5883 欧拉路径异或值最大 水题

    The Best Path Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  3. Nexus3.0.1如何上传第三方插件

    原文:http://blog.csdn.net/wang465745776/article/details/52527905 前提条件 Nexus 3.0.1 提出问题 如何上传第三方插件到Nexus ...

  4. SD/MMC的Commands和Responses的总结

    SD总线通信是基于指令和数据比特流,起始位開始和停止位结束. SD总线通信有三个元素:1.Command:由host发送到卡设备.使用CMD线发送. 2.Response:从card端发送到host端 ...

  5. [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。

    原文:http://www.infoq.com/interviews/Technology-Influences-DDD# 要实现DDD(domain drive  design 领域驱动设计)原始意 ...

  6. java克隆对象clone()的使用方法和作用

    转自:997.html">http://www.okrs.cn/blog/news/?997.html 内容摘要 若需改动一个对象,同一时候不想改变调用者的对象.就要制作该对象的一个本 ...

  7. C#使用SharpZipLib压缩解压文件

    #region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...

  8. poj2488--A Knight&#39;s Journey(dfs,骑士问题)

    A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31147   Accepted: 10 ...

  9. 初步认识Tensorflow

    不多说,直接上干货! TensorFlow 是一个开源软件库,用于使用数据流图进行数值计算.换句话说,即是构建深度学习模型的最佳方式. Tensorflow的官网 https://www.tensor ...

  10. IDEA--java版本修改(jdk1.8改成jdk1.7)

    转载:https://blog.csdn.net/huyishero/article/details/61916516