EDA数字钟实验

一、 实验类型(Experiment type) ): :综合设计性实验

二、 实验目的(Experimental purposes

1. 掌握多位计数器相连的设计方法。
2. 掌握十进制,六进制,二十四进制计数器的设计方法。
3. 掌握扬声器(The speaker)的驱动(driving)。
4. 掌握 EPLD 技术的层次化(layering)设计方法。

三、 实验内容(Experiment contents )

完成数字时钟的设计,要求该时钟具有下述功能:
1. 具有时,分,秒,计数显示功能,以 24 小时循环计时。
2. 具有清零,调节小时、分钟功能。
3. 具有整点报时功能,整点报时的同时 LED 灯花样显示。

四、 实验原理 ( (Experimental principle)

在同一 EPLD 芯片 EPF10K10 上集成了如下电路模块:
1. 时钟计数: 秒——60 进制 BCD 码计数;
分——60 进制 BCD 码计数;
时——24 进制 BCD 码计数;
同时整个计数器有清零,调分,调时功能。在接近整数时间能提供报时信号。
2. 具有驱动 8 位八段共阴扫描数码管(8 bits erection of Yin scanning
digital tube)的片选驱动信号输出和八段字形译码输出。
3. 扬生器在整点时有报时驱动信号产生。

五、 实验要求 ( (Experimental requirements)

硬件要求
1. 主芯片 EP5CSEMA5F31C6N。
2. 8 个 LED 灯。
3. 扬声器。
4. 8 位八段扫描共阴级数码显示管。
5. 三个按键开关(清零,调小时,调分钟)。
各模块都由 VHDL 语言编写。顶层设计采用原理图设计方法实现。根据电路
持点,可在教师指导下用层次设计概念。将此设计任务分成若干模块,规定每
一模块的功能和各模块之间的接口。由几个学生分做和调试其中之一,然后再
将各模块合起来联试。以培养学生之间的合作精神,同时加深层次化设计概念。
要求每组学生完成各自相应的任务,最后将其综合起来,实现仿真和硬件
68
EDA 技术实验指导书
测试功能。

六、 实验仪器设备 ( (Experiment instruments)

计算机、EDA 实验箱、导线。

七、 预习要求 ( (Preview requirements)

要求学生自己写出详细的实验电路原理图、实验步骤以及调试过程。

八、 实验报告要求 ( (Experimental reporting requirements)

将实验原理、设计过程、编译仿真波形和分析结果、硬件测试实验结果写
进实验报告。

代码

代码解释

好的,我将逐句解释这个代码:

1. `module acfsy_4(clk,rst,sec,min,hour,cout1,cout2,beef,led);` 定义了一个名为acfsy_4的模块,并指定了其输入和输出信号。

2. `input clk,rst,cout1,cout2;` 指定clk、rst、cout1、cout2为输入信号。

3. `output reg[7:0] sec,min,hour;` 指定sec、min、hour为输出信号,并声明它们是8位宽的寄存器类型。

4. `output  beef;` 指定beef为一个普通的输出信号。

5. `output[7:0] led;` 指定led为一个8位宽的输出信号。

6. `reg minclk=0,hclk=0;` 声明两个内部寄存器minclk和hclk,并初始化为0。

7. `wire m_clk,h_clk,cout1,cout2;` 声明m_clk和h_clk为内部连线(wire),并重申cout1和cout2作为输入信号。

8. `always @(posedge clk or posedge rst)` 使用always语句在时钟上升沿或复位事件发生时执行以下操作。

9. `begin` 开始描述秒计数器的行为。

10. `if(rst) begin sec<=0;minclk<=1; end else begin` 如果检测到复位信号,则清零秒寄存器并将分钟计数器的内部clk置位;否则继续执行其他逻辑。

11. `if(sec==8'h59) begin sec<=0;minclk<=1;end` 当秒寄存器达到最大值(8'h59)时,清零秒寄存器并置位分钟计数器的内部clk。

12. `else if(sec[3:0]==4'b1001) begin  sec[3:0]<=4'b0000;  sec[7:4]<=sec[7:4]+1;  end` 如果秒寄存器的低四位等于4'b1001,则进位到高四位,同时将低四位清零。

13. `else   sec[3:0]<=sec[3:0]+1;` 否则,只对秒寄存器的低四位加1。

14. `minclk<=0;` 将分钟计数器的内部clk置位为0。

15. `end` 结束秒计数器的行为描述。

16. `end` 结束always语句。

17. `assign  m_clk=minclk|cout1;` 计算m_clk信号,它是分钟计数器的内部clk与cout1信号的逻辑或。

18. `always @(posedge m_clk or posedge rst)` 在m_clk上升沿或复位事件发生时执行以下操作。

19. `begin` 开始描述分钟计数器的行为。

20. `if(rst) begin min<=0;hclk<=1; end else begin` 如果检测到复位信号,则清零分钟寄存器并将小时计数器的内部clk置位;否则继续执行其他逻辑。

21. `if(min==8'h59) begin min<=0;hclk<=1; end` 当分钟寄存器达到最大值(8'h59)时,清零分钟寄存器并置位小时计数器的内部clk。

22. `else if(min[3:0]==4'b1001) begin  min[3:0]<=4'b0000;  min[7:4]<=min[7:4]+1;   end` 如果分钟寄存器的低四位等于4'b1001,则进位到高四位,同时将低四位清零。

23. `else   begin min[3:0]<=min[3:0]+1 ;end` 否则,只对分钟寄存器的低四位加1。

24. `hclk<=0;` 将小时计数器的内部clk置位为0。

25. `end` 结束分钟计数器的行为描述。

26. `end` 结束always语句。

27. `assign  h_clk=hclk|cout2;` 计算h_clk信号,它是小时计数器的内部clk与cout2信号的逻辑或。

28. `always @(posedge h_clk or posedge rst)` 在h_clk上升沿或复位事件发生时执行以下操作。

29. `begin` 开始描述小时计数器的行为。

30. `if(rst) begin hour<=0;end else begin` 如果检测到复位信号,则清零小时寄存器;否则继续执行其他逻辑。

31. `if(hour==8'h23) begin hour<=0;end` 当小时寄存器达到最大值(8'h23)时,清零小时寄存器。

32. `else if(hour[3:0]==4'b1001) 
    begin  hour[7:4]<=hour[7:4]+1;  hour[3:0]<=0; end` 如果小时寄存器的低四位等于4'b1001,则进位到高四位,同时将低四位清零。

33. `else  begin hour[3:0]<=hour[3:0]+1;end` 否则,只对小时寄存器的低四位加1。

34. `end` 结束小时计数器的行为描述。

35. `end` 结束always语句。

36. `assign beef= (min == 0)&&(sec == 0) ? 1 : 0;` 计算beef信号,如果分钟寄存器和秒寄存器都为0,则beef被赋值为1;否则被赋值为0。

37. `assign led = (min == 0)&&(sec == 0) ? 8'b01010101 : 8'b11001100;` 计算led信号,如果分钟寄存器和秒寄存器都为0,则led被赋值为特定的二进制值;否则被赋值为另一个二进制值。

38. `endmodule` 结束模块定义。

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子废墟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值