EDA课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA课程设计

·设计目标:

本设计完成基于Verilog HDL的自动售票系统,综合软件用Quartus II8.1。

本自动售票系统可以完成1元、2元、3元、4元四种票的自动售出,货币种类可以是1元、5元、10元、50元、100元,能自动找零和显示

·总体设计:

共有四个主要模块和一个顶层模块:四个模块分别是主控模块、统计模块、出票模块和找零模块;顶层模块负责各模块间的连接,组成一个可用的自动售票系统。

总体结构如下:

·各模块设计:

统计模块:

根据各种货币输入,统计出总钱数提供给主控模块。每次售票完成后总钱数自动归零(主控模块提供售票完成信号,计数清零)

代码如下:

1: //统?计?钱?数?模?块?

2: module count ( rst, //复?位?高?有??

3: clr,

4: ci1,ci5,ci10,ci50,ci100, //1元?、?元?、?元?、?元?、?元?输?入?

5: cout //统?计?出?的?总?钱?数?

6: );

7:

8: input rst;

9: input clr; //清?零?信?号?

10: input ci1,ci5,ci10,ci50,ci100; //高?脉?冲?有??

11: output [7:0] cout;

12:

13: reg [2:0] q1,q5,q10,q50,q100;

14:

15: assign cout = q1 + 5*q5 + 10*q10 + 50*q50 + 100*q100; 16:

17: //一?元?计?数?

18: always @ (posedge rst or posedge clr or posedge ci1) 19: begin

20: if(rst==1) q1 <= 0;

21: else if(clr==1) q1 <= 0;

22: else

23: begin

24: q1 = q1 + 1;

25: end

26: end

27:

28: //5元?计?数?

29: always @ (posedge rst or posedge clr or posedge ci5) 30: begin

31: if(rst==1) q5 <= 0;

32: else if(clr==1) q5 <= 0;

33: else

34: begin

35: q5 = q5 + 1;

36: end

37: end

38:

39: //10元?计?数?

40: always @ (posedge rst or posedge clr or posedge ci10) 41: begin

42: if(rst==1) q10 <= 0;

43: else if(clr==1) q10 <= 0;

44: else

45: begin

46: q10 = q10 + 1;

47: end

48: end

49:

50: //50元?计?数?

51: always @ (posedge rst or posedge clr or posedge ci50)

52: begin

53: if(rst==1) q50 <= 0;

54: else if(clr==1) q50 <= 0;

55: else

56: begin

57: q50 = q50 + 1;

58: end

59: end

60:

61: //100元?计?数?

62: always @ (posedge rst or posedge clr or posedge ci100)

63: begin

64: if(rst==1) q100 <= 0;

65: else if(clr==1) q100 <= 0;

66: else

67: begin

68: q100 = q100 + 1;

69: end

70: end

71:

72: endmodule

模块先统计各种金额的货币数,然后用并行赋值(assign赋值语句)统计出总钱数输出。

仿真波形如下:

由仿真波形:

初始时,cout为0,即总钱数为0,经过货币输入脉冲后能准确记录输出钱的总数。清零脉冲后,cout可归零,只需把主控模块的完成脉冲加到此,则完成一次售票后,本模块可以自动归零,准备接受下一次投币。

主控模块:

完成总体控制和各种控制信号。

程序代码如下:

1: // 主?控?模?块?,?完?成?自?动?售?票?逻?辑?计?算?及?产?生?各?种?控?制?信?号?

2: module contrl ( rst,clk, //复?位?高?有?? 时?钟?

3: get,cancel,

4: sel, //票?类?别?,?

5: count, //票?数?

6: money, //总?钱?数?

7: mout, //找?零?钱?数?

8: finish, //出?钱?信?号?

9: finishp //出?票?信?号?

10: );

11:

12: input rst;

13: input clk; //时?钟?,?

14: input get,cancel;

15: input [1:0] sel,count;

16: input [7:0] money;

17: output reg [7:0] mout;

18: output reg finish,finishp; //完?成?脉?冲?

19:

20:

21: always @ (posedge rst or posedge clk)

22: begin

23: if(rst==1)

24: begin

25: mout <= 0;

26: finish <= 0;

27: finishp <= 0;

28: end

29: else

30: begin

31: if((get == 1)&&(money >= sel*count + count))

32: begin

33: finish <= 1;

34: finishp <= 1;

35: mout = money - sel*count - count;

36: end

37: else if((cancel == 1)||((get == 1)&&(money < sel*count + count)))

相关文档
最新文档