Verilog HDL 第二次实验

作者: Carbin | 来源:发表于2017-04-05 21:51 被阅读0次

1.设计一个10进制计数器,用七段数码管显示计数器的数值,以DE2板上1个拨动开关(switch)作为计数器的时钟输入,开关每上下拨动一次,相当于产生“一个时钟周期”,观察开关抖动情况。


module switch_bounce(clk, rst, switch, y);

input clk,rst;

input switch;

output [6:0] y;

reg [6:0] y;

reg [3:0] i;

reg [9:0] switchtemp;

always@(posedge switch or negedge rst)

if(0 == rst)

begin

i <= 0; switchtemp <= 0; y <= 7'hFF;

end

else

begin

switchtemp <= {switch, switchtemp [8:0]};

if(switchtemp == 10'b1000000000)

i <= i+1;

case(i)//译码程序

4'b0000: y <= 7'hC0;//0

4'b0001: y <= 7'hF9;//1

4'b0010: y <= 7'hA4;//2

4'b0011: y <= 7'hB0;//3

4'b0100: y <= 7'h99;//4

4'b0101: y <= 7'h92;//5

4'b0110: y <= 7'h82;//6

4'b0111: y <= 7'hF8;//7

4'b1000: y <= 7'h80;//8

4'b1001: y <= 7'h90;//9

default: y <= 7'hFF;

endcase

if(i == 10) i <= 0;

end

endmodule


2.查阅资料设计一个去抖电路,拨动开关接去抖电路后再作为计数器的时钟输入,观察去抖效果。


module switch_debounce(clk, rst, switch, y);

input clk,rst;

input switch;

output [6:0] y;

reg [6:0] y;

reg [3:0] i;

reg switchtemp = 0;

reg [17:0] high,low;//定义高低电平脉宽采样计数寄存器

/*

*时钟信号clk为50MHz,对应1s=1000ms

*按键抖动时间5~10ms,取最大值计算10ms,相当于1/100,也就是0.5MHz

*延时时间一般取10~20ms,取最大值计算20ms,相当于1/50,,也就是1Mz

*/

always@(posedge clk)

if(switch) high <= high + 1;//对输入的高电平脉宽采样计数

else high <= 18'd0;

always@(posedge clk)

if(!switch) low <= low + 1;//同时对输入的低电平脉宽采样计数

else low <= 18'd0;

always@(posedge clk)

//对高电平脉宽采样计数若大于12,则输出1

if(high == 12) switchtemp <= 1'b1;

//对低电平脉宽计数若大于7,则输出0

else if (low == 7) switchtemp <= 1'b0;

always@(posedge switchtemp or negedge rst)

if(0 == rst)

begin

i <= 0; y <= 7'hFF;

end

else

begin

if(switchtemp == 1'b1)

i <= i+1;

case(i)//译码程序

4'b0000: y <= 7'hC0;//0

4'b0001: y <= 7'hF9;//1

4'b0010: y <= 7'hA4;//2

4'b0011: y <= 7'hB0;//3

4'b0100: y <= 7'h99;//4

4'b0101: y <= 7'h92;//5

4'b0110: y <= 7'h82;//6

4'b0111: y <= 7'hF8;//7

4'b1000: y <= 7'h80;//8

4'b1001: y <= 7'h90;//9

default: y <= 7'hFF;

endcase

if(i == 10) i <= 0;

end

endmodule


3(选做)设计一个上升沿检测电路,统计并显示输入信号中上升沿的个数,用DE2板上1个按键(key)模拟输入信号(注:与第一个类似)


module key_countSeg(rst, key, y);

input rst;

input key;

output [6:0] y;

reg [6:0] y;

reg [3:0] i;

reg [9:0] keytemp;

always@(posedge key or negedge rst)

if(0 == rst)

begin

i <= 0; keytemp <= 0; y <= 7'hFF;

end

else

begin

keytemp <= {key, keytemp [8:0]};

if(keytemp == 10'b1000000000)

i <= i+1;

case(i)//译码程序

4'b0000: y <= 7'hC0;//0

4'b0001: y <= 7'hF9;//1

4'b0010: y <= 7'hA4;//2

4'b0011: y <= 7'hB0;//3

4'b0100: y <= 7'h99;//4

4'b0101: y <= 7'h92;//5

4'b0110: y <= 7'h82;//6

4'b0111: y <= 7'hF8;//7

4'b1000: y <= 7'h80;//8

4'b1001: y <= 7'h90;//9

default: y <= 7'hFF;

endcase

if(i == 10) i <= 0;

end

endmodule


相关文章

  • Verilog 语言简介

    什么是 Verilog 语言 Verilog一般指Verilog HDL。Verilog HDL是一种硬件描述语言...

  • Verilog HDL 入门

    Verilog HDL 快速入门 Verilog HDL是一种硬件描述语言(HDL:Hardware Descri...

  • Verilog:基础语法(上)

    Verilog HDL简介 Verilog HDL(简称 Verilog )是一种硬件描述语言,用于数字电路的系统...

  • Verilog HDL 第二次实验

    1.设计一个10进制计数器,用七段数码管显示计数器的数值,以DE2板上1个拨动开关(switch)作为计数器的时钟...

  • 《Verilog HDL数字设计与综合》

    《Verilog HDL数字设计与综合》:

  • Computer Principles and Design i

    下载地址:Computer Principles and Design in Verilog HDL 1st Ed...

  • Verilog HDL语法总结

    module是Verilog HDL基本概念,是以module开始,以endmodule结束的一段程序,其代表的是...

  • Verilog HDL基本结构

    通过上一篇《VerilogHDL入门》,我们大致了解Verilog的一个基本结构,即: 本篇主要说的是中间部分的“...

  • Verilog HDL 第一次实验

    1、设计一个键值显示电路,以DE2板上10个拨动开关(switch)作为输入,代表0-9十个十进制数,用七段数码管...

  • Icarus Verilog 教程

    Icarus Verilog,简称iVerilog,是比较著名的开源HDL仿真工具。这里简单介绍一下如何使用。 下...

网友评论

    本文标题:Verilog HDL 第二次实验

    本文链接:https://www.haomeiwen.com/subject/cpoxattx.html