DE2 实验练习解答lab4 countersverilogdigital logic.docx

上传人:b****5 文档编号:3194216 上传时间:2022-11-20 格式:DOCX 页数:13 大小:307.87KB
下载 相关 举报
DE2 实验练习解答lab4 countersverilogdigital logic.docx_第1页
第1页 / 共13页
DE2 实验练习解答lab4 countersverilogdigital logic.docx_第2页
第2页 / 共13页
DE2 实验练习解答lab4 countersverilogdigital logic.docx_第3页
第3页 / 共13页
DE2 实验练习解答lab4 countersverilogdigital logic.docx_第4页
第4页 / 共13页
DE2 实验练习解答lab4 countersverilogdigital logic.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

DE2 实验练习解答lab4 countersverilogdigital logic.docx

《DE2 实验练习解答lab4 countersverilogdigital logic.docx》由会员分享,可在线阅读,更多相关《DE2 实验练习解答lab4 countersverilogdigital logic.docx(13页珍藏版)》请在冰豆网上搜索。

DE2 实验练习解答lab4 countersverilogdigital logic.docx

DE2实验练习解答lab4countersverilogdigitallogic

本练习的目的是使用计数器。

PartI用T触发器实现16-bit的计数器

参照图1所示的4-bit的同步计数器,实现一个16-bit的计数器。

代码16-bit counter

1//top-levelfile

2modulepart1(KEY0,SW,HEX3,HEX2,HEX1,HEX0);

3inputKEY0;//时钟脉冲

4input[1:

0]SW;//使能&复位

5output[6:

0]HEX3,HEX2,HEX1,HEX0;//输出显示

6wire[15:

0]q;//16-bit计数输出

7

8counter_16(SW[1],KEY0,SW[0],q);

9

10seg7_lutH0(q[3:

0],HEX0);

11seg7_lutH1(q[7:

4],HEX1);

12seg7_lutH2(q[11:

8],HEX2);

13seg7_lutH3(q[15:

12],HEX3);

14

15endmodule

1//由T触发器构建的16-bit计数器

2modulecounter_16(en,clk,clr,Q);

3inputen,clk,clr;

4wire[15:

0]q;

5output[15:

0]Q;

6t_ffu0(en,clk,clr,q[0]);

7t_ffu1(en&q[0],clk,clr,q[1]);

8t_ffu2(en&q[0]&q[1],clk,clr,q[2]);

9t_ffu3(en&q[0]&q[1]&q[2],clk,clr,q[3]);

10t_ffu4(en&q[0]&q[1]&q[2]&q[3],clk,clr,q[4]);

11t_ffu5(en&q[0]&q[1]&q[2]&q[3]&q[4],clk,clr,q[5]);

12t_ffu6(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5],clk,clr,q[6]);

13t_ffu7(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6],clk,clr,q[7]);

14t_ffu8(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6]&q[7],clk,clr,q[8]);

15t_ffu9(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6]&q[7]&q[8],

16clk,clr,q[9]);

17t_ffu10(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6]&q[7]&q[8]&q[9],

18clk,clr,q[10]);

19t_ffu11(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6]&q[7]&q[8]&q[9]&q[10],

20clk,clr,q[11]);

21t_ffu12(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6]&q[7]&q[8]&q[9]&q[10]&q[11],

22clk,clr,q[12]);

23t_ffu13(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6]&q[7]&q[8]&q[9]&q[10]&q[11]&q[12],

24clk,clr,q[13]);

25t_ffu14(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6]&q[7]&q[8]&q[9]&q[10]&q[11]&q[12]&q[13],

26clk,clr,q[14]);

27t_ffu15(en&q[0]&q[1]&q[2]&q[3]&q[4]&q[5]&q[6]&q[7]&q[8]&q[9]&q[10]&q[11]&q[12]&q[13]&q[14],

28clk,clr,q[15]);

29

30assignQ=q;

31

32endmodule

1//Tflipflop

2modulet_ff(t,clk,rst_n,q);

3inputt,clk,rst_n;

4outputregq;

5

6always@(posedgeclk)

7begin

8if(!

rst_n)

9q<=0;

10else

11begin

12if(t==1'b1)

13q<=~q;

14else

15q<=q;

16end

17end

18

19endmodule

图2 Fmax值

图3 占用的LE数量

Part II 用赋值语句实现16-bit计数器

代码

1//counter-16bit

2modulepart2(clk,rst_n,q);

3inputclk,rst_n;

4outputreg[15:

0]q;

5

6always@(posedgeclk)

7begin

8if(!

rst_n)

9q<=1'b0;

10else

11begin

12if(q==65535)

13q<=0;

14else

15q<=q+1;

16end

17end

18

19endmodule

图4 16-bit计数器的RTL视图

图5 Fmax值

图6 16-bit计数器占用的LE

Part III 用LPM实现16-bit计数器

代码

1//Top-levelfile

2modulecounter_lpm(en,clk,clr,q);

3inputen,clk,clr;

4output[15:

0]q;

5

6megcountercounter_16bit(.clock(clk),.cnt_en(en),.sclr(clr),

7.q(q)

8);

9endmodule

1//synopsystranslate_off

2`timescale1ps/1ps

3//synopsystranslate_on

4modulemegcounter(

5clock,

6cnt_en,

7sclr,

8q);

9

10inputclock;

11inputcnt_en;

12inputsclr;

13output[15:

0]q;

14

15wire[15:

0]sub_wire0;

16wire[15:

0]q=sub_wire0[15:

0];

17

18lpm_counterlpm_counter_component(

19.sclr(sclr),

20.clock(clock),

21.cnt_en(cnt_en),

22.q(sub_wire0),

23.aclr(1'b0),

24.aload(1'b0),

25.aset(1'b0),

26.cin(1'b1),

27.clk_en(1'b1),

28.cout(),

29.data({16{1'b0}}),

30.eq(),

31.sload(1'b0),

32.sset(1'b0),

33.updown(1'b1));

34defparam

35lpm_counter_component.lpm_direction="UP",

36lpm_counter_component.lpm_port_updown="PORT_UNUSED",

37lpm_counter_component.lpm_type="LPM_COUNTER",

38lpm_counter_component.lpm_width=16;

39

40

41endmodule

图7 用LPM实现16-bit计数器所占用的LE

Part IV 循环显示0-9

在HEX0上循环显示0-9,每秒刷新一次。

代码

1//top-levelfile

2moduleseg_number(

3output[6:

0]HEX0,

4inputCLOCK_50,

5input[0:

0]KEY

6);

7

8wireclk_1hz;

9reg[3:

0]cnt;

10

11divu0(

12.o_clk(clk_1hz),

13.i_clk(CLOCK_50),

14.rst_n(KEY)

15);

16

17always@(posedgeclk_1hzornegedgeKEY)

18begin

19if(!

KEY)

20cnt<=4'b0;

21else

22begin

23if(cnt==4'd9)

24cnt<=4'b0;

25else

26cnt<=cnt+1'b1;

27end

28end

29

30seg7_lutu1(

31.oseg(HEX0),

32.idig(cnt[3:

0])

33);

34endmodule

35

36//divider

37modulediv(

38outputrego_clk,

39inputrst_n,

40inputi_clk

41);

42

43parameterN=50_000_000;

44parameterM=24_999_999;

45

46reg[25:

0]cnt;

47

48always@(posedgei_clkornegedgerst_n)

49begin

50if(!

rst_n)

51cnt<=26'b0;

52else

53begin

54if(cnt==N-1)

55cnt<=26'b0;

56else

57cnt<=cnt+26'b1;

58end

59end

60always@(posedgei_clkornegedgerst_n)

61begin

62if(!

rst_n)

63o_clk<=0;

64else

65begin

66if(cnt<=M)

67o_clk<=1;

68else

69o_clk<=0;

70end

71end

72

73endmodule

74

75//seg7_lut

76moduleseg7_lut(

77outputreg[6:

0]oseg,

78input[3:

0]idig

79);

80always@(idig)

81begin

82case(idig)

834'h1:

oseg=7'b1111001;//---t---

844'h2:

oseg=7'b0100100;//||

854'h3:

oseg=7'b0110000;//ltrt

864'h4:

oseg=7'b0011001;//||

874'h5:

oseg=7'b0010010;//---m---

884'h6:

oseg=7'b0000010;//||

894'h7:

oseg=7

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1