控制模块的协调角色。

实验六用到了实验四的按键消抖模块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。但是这个模块可以提供更好的扩展性。

最新文章

  1. Spring HTTP下载
  2. SQLSERVER远程备份、恢复(转)
  3. HDU 5047
  4. spring mvc中的文件上传
  5. 协议Protocol
  6. Linux进程调度
  7. int21 h
  8. PDF/WORD/EXCEL 图片预览
  9. 使用jQuery调用ASP.NET WebService的简易教程
  10. iOS里面消除使用代理调用方法时间警告问题
  11. asp.net正则表达式去除a标签
  12. 05String字符串课后作业
  13. Java面试系列
  14. 电脑本机ping通Linux虚拟机的方法
  15. 使用tcp+select实现客户端与客户端的通信
  16. A1017. Queueing at Bank
  17. python测试断言
  18. Asp.net Daily Build by MsBuild
  19. HDU 5442 Favorite Donut(暴力 or 后缀数组 or 最大表示法)
  20. Singer 学习二 使用Singer进行gitlab 2 postgres 数据转换

热门文章

  1. 转:SIP相关的RFC文档索引
  2. java . 请在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同,如:144,676。
  3. DTrace C++ Mysteries Solved 转
  4. [Bash] Find Files and Folders with `find` in Bash
  5. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
  6. 找中位数O(n)算法
  7. MongoDB 操作手冊CRUD 更新 update
  8. 适合初学C语言是练习的代码
  9. 修改linux环境变量配置文件
  10. android 怎样将主菜单图标改成按安装时间排序