找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5257|回复: 1
收起左侧

EAD万年历实训报告及Verilog HDL源码

[复制链接]
ID:325913 发表于 2018-5-14 17:47 | 显示全部楼层 |阅读模式
《EDA技术及应用》实训报告
1  系统设
1.1 设计要求
1.1.1 设计任务  
设计并制作一台数字日历。
1.1.2 性能指标要求
⑴用Verilog HDL语言设计一个数字日历。
⑵数字日历能显示年、月、日、时、分和秒。
⑶通过开关分别控制对年、月、日或时、分、秒校对及自动切换、,并且
运用按钮对年、月、日或时、分、秒校对。
⑷通过按钮对数码管全部清零。
1.2 设计思路及设计框图
1.2.1设计思路
通过EDA课程的学习,可知运用Verilog HDL语言设计一个数字日历
括计时器模块(jsq60、jsq)、年月日模块(nyr2016)、控制模块(contr)、
校时选择模块(mux_4)、显示选择模块(mux_16);然后将各个模块连接起来画成原理图再下载到实训仪上,调节开关及按钮来实现数字日历的功能。
1.2.2总体设计框图
  
2  各个模块程序的设计
地电平,用于万年历的自动倒换的显  ⑴使用了一个16分频的电路,输出rc是周期为16秒的方波,即8秒高电平、8秒示模式。
   
分析:如图所示,其中,clk是1秒时钟输入端,k1和k2是控制输入端,当k1k2=00或11时是自动显示模式,控制数码显示器用8秒钟时间显示年、月、日,另外8秒时钟时间显示时、分、秒;当k1k2=01时,仅显示年、月、日,同时用j1,j2,和j3校秒、校分、校时;当k1k2=10时,仅显示年、月、日,同时用j1、j2和j3校日、校月和校年;k是控制输出端。
        ⑵分别设计一个能显示年月日和时分秒的程序
校准年月日和秒分时的原理图如下:
分析:①当k=0时,开关j1,j2,j3校秒时分然后将信号分别送到jsq模块的jm(校秒)、jf(校分)、js(校时)。
②当k=1时,开关j1,j2,j3校年月日然后将信号分别送到nyr2009模块的jr(校日)、jy(校月)、jn(校年)。
计算年月日的模块如下:
分析:clrn是异步清除输入端,低电平有效;clk是时钟输入端,上升沿有效;jn、jy和jr分别是校年、校月、校日输入端;qn[15..0]、qy[7..0]、qr[7..0]分别是年、月、日的输出端。
显示时分秒与年月历的模块如下:
分析:①当k=0时,把jsq送来的时分秒的状态信号送到数码管显示。
②当k=1时,把nyr2016送来的年月日的状态信号送到数码管显示。
计算时分秒的模块如下:
分析: clrn是异步清除输入端,低电平有效;clk是时钟输入端,上升沿有效;jm、jf和js分别是校秒、校分、校时输入端;qm[7..0]、qf[7..0]、qs[7..0]分别是年、月、日的输出端;cout是进位;clkcout是由clk控制的秒秒脉冲。
⑶计时器24的模块如下:
3  调试过程
        在这一次实训中我选择的是数字日历电路的设计。首先按照实训题目的要求进行电路的设计,编写好程序画好原理图;然后用Quartus9.0进行程序的调试和修改,看看那些地方有错误就把错误的地方改正;最后来到实验室下载到试验箱进行题目要求的验证和调试。
4  功能测试
4.1 测试仪器与设备
EDA实训仪的I/O设备 1台
4.2 性能指标测试
    ⑴数字日历能够显示年、月、日、时、分和秒。
    ⑵用EDA实训仪上的8只八段数码管分两屏分别显示年、月、日和时、分、秒,即在一定时间段内显示年、月、日,然后在另一时间段内显示时、分、秒,两个时间段能自动倒换。
    ⑶数字日历具有复位和校准年、月、日、时、分、秒的按钮,但校年和校时同用一个按钮,即在显示年、月、日时用此按钮校年,在显示时、分、秒时则用此按钮校时。
4.3 误差分析
    无须误差分析
5  实训心得体会
   这次实训,做的是万年历,在上课上的是刚好做过,觉得挺简单的,觉得挺放松,不过为了与老师在上课上做得不同,就小小的设计一个亮灯功能。不过真正做起来的时候发现了很多问题,因为上课的时候匆匆忙忙的完成万年历,当时对程序还不是很熟悉,要看书了解各条语句,对操作也不是太熟悉,要请教同学,但最终还是完成了,不过在验收的时候不能全部回答老师提出的问题,说明在EDA道路上还有走很长的道路。努力加油吧。通过这次EDA实训,我学会并熟悉运用quartus软件,非常感谢黄金海老师的耐心指导
6  参考文献
EDA技术与应用/江国强编著.——4版.电子工业出版社,2013。
附录
附录1:仿真波形图(部分模块)
cnt60模块仿真波形图
contr模块仿真波形图
mux-4模块仿真波形图
nyr2016模块仿真波形图
附录2:程序清单
⑴基于Verilog HDL的控制模块contr
module contr(clk,k1,k2,k);
input clk,k1,k2;
output reg k;
reg [3:0] qc;
reg rc;
always @(posedge clk)
begin qc=qc+1;
  if (qc<8) rc=0;
   else rc=1;
   case ({k1,k2})
     0:k=rc;
     1:k=0;
     2:k=1;
     3:k=rc;
   endcase
end
endmodule
⑵基于Verilog HDL的校时选择模块mux_4
module mux_4(k,jm,jf,js,jr,jy,jn,j1,j2,j3);
input k,j1,j2,j3;
output reg jm,jf,js,jr,jy,jn;
always
begin
  if (k==0) {jm,jf,js}={j1,j2,j3};
  else {jr,jy,jn}={j1,j2,j3};
end
endmodule
⑶基于Verilog HDL的显示模块mux_16
module mux_16(k,qm,qf,qs,qr,qy,qn,q);
input k;
input[7:0] qm,qf,qs,qr,qy;
input[15:0] qn;
output reg [31:0] q;
always
begin
  if (k==0) begin
  q[31:24]=0;
  q[23:0]={qs,qf,qm};end
  else q={qn,qy,qr};
  end
endmodule
⑷基于Verilog HDL的年月日模块nyr2016
module nyr2016(clrn,clk,jn,jy,jr,qn,qy,qr);
  input         clrn,clk,jn,jy,jr;
  output [15:0] qn;  //年为4位有效数字,要16位显,赋值
    output [7:0]  qy,qr; //月和日为2位有效数字,8位显示
  reg  [15:0]   qn;
  reg [7:0]     qy,qr;
  reg           clkn,clky;//日的进位和月的进位
  reg [7:0]     date;//日的中间变量年
  reg           clkn1,clkn2,clkn3;//的个、十、百位的进位
initial  begin clkn1=1;clkn2=1;clkn3=1;end//初始化程序
initial  begin qn='h2000;qy=1;qr=1;end
always @(posedge (clk^jr) or negedge clrn)//校日程序
    begin
      if (~clrn) qr=1;
        else begin
            if (qr==date) qr=1;//每个月的天数不同,所以赋值的data不一样
              else qr=qr+1;
              if (qr[3:0]=='ha) begin
                qr[3:0]=0; qr[7:4]=qr[7:4]+1;end
            if  (qr==date)  clky = 1;
            else clky = 0;end
    end
always @(posedge clky^jy or negedge clrn)//月程序
    begin
      if (~clrn) qy=1;
        else begin
            if (qy=='h12) qy=1;
              else qy=qy+1;
                if (qy[3:0]=='ha) begin
                  qy[3:0]=0;qy[7:4]=qy[7:4]+1;end
            if  (qy=='h12)  clkn = 1;
            else clkn = 0;end
    end
always
  begin
    case (qy)//不同月的天数选择
    'h01: date='h31;
    'h02:   begin
      if ((qn%4==0)&(qn%100 != 0)|(qn%400==0)) date='h29;
        else date='h28; end//闰年和非闰年二月的天数判断
    'h03: date='h31;
    'h04: date='h30;
    'h05: date='h31;
    'h06: date='h30;
    'h07: date='h31;
    'h08: date='h31;
    'h09: date='h30;
    'h10: date='h31;
    'h11: date='h30;
    'h12: date='h31;
    default :date='h30;
    endcase
  end
always @(posedge (clkn^jn) or negedge clrn )//年程序
    begin
      if (~clrn) qn[3:0]=0;//个位进位程序
        else begin if(qn[3:0]==9) qn[3:0]=0;
          else qn[3:0]=qn[3:0]+1;
      if (qn[3:0]==9) clkn1=0;
        else clkn1=1;end      
    end
always @(posedge clkn1 or negedge clrn )
    begin
      if (~clrn) qn[7:4]=0;//十位进位程序
        else begin if(qn[7:4]==9) qn[7:4]=0;
          else qn[7:4]=qn[7:4]+1;
      if (qn[7:4]==9) clkn2=0;
        else clkn2=1;end      
    end
always @(posedge clkn2 or negedge clrn )
    begin
      if (~clrn) qn[11:8]=0;//百位进位程序
        else begin if(qn[11:8]==9) qn[11:8]=0;
          else qn[11:8]=qn[11:8]+1;
      if (qn[7:4]==9) clkn3=0;
        else clkn3=1;end      
    end
always @(posedge clkn3 or negedge clrn )//年程序显示程序
    begin
      if (~clrn) qn[15:12]=2;
        else if(qn[15:12]==9) qn[15:12]=0;
          else qn[15:12]=qn[15:12]+1;         
    end
endmodule
⑸基于Verilog HDL计数器jsp

0.jpg 0.png
全部资料51hei下载地址:
EDA万年历.rar (1.2 MB, 下载次数: 133)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:422637 发表于 2018-11-29 22:45 | 显示全部楼层
请教那个计时器模块怎么设计?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表