河工大vivado-多种能数字钟电路设计

一、实验目的

1. 了解可参数化宏模块及其应用,掌握层次化结构电路设计的思想。

2. 进一步掌握EDA电子系统设计及其分析方法。

二、实验设备

1、 计算机

2、 实验板

三、实验要求:

1、在PC机上完成仿真,对结果进行分析;

2、完成下载,在实验板上进行验证。

3、通过分组进行项目实践。

四、实验内容

(一)多功能数字钟设计

1、设计原理

   我所设计的是多种能数字钟电路设计,其中包括模块:

时钟信号生成模块

利用板载的100MHz的晶振设计计时1s的时钟,再设计1024hz、512hz、2hz、1hz的频率来实现整点报时和闹钟的警报频率。

计时功能模块

借用之前所学的计数器功能设计时计时器、分计数器和秒计数器。时计数器采用24进制计数器,其余两个计数器的十位是六进制计数器,个位是十进制器。

闹钟计时功能模块

闹钟功能则是与计时功能计数器相似。

整点报时模块

当闹钟计数器与计时功能计数器的数值通过比较器和选择器相互配合,再与时钟信号发生器所设计的声音频率配合在耳机中产生声音。

显示模块

配合之前所设计的多位数码管显示,将其封装IP调用,还借用计数器产生扫描信号配合多路选择器来显示。

给出设计源文件    

module clock(

input clk,

input sd,

input rst,

input close,

input enable,

input set,

input adj_m,

input adj_h,

output [7:0]bitcode,

output [6:0]a_to_g1,

output [6:0]a_to_g2,

output soundout

); //音频输出  

wire clk1000H,clk500H,clk1s,clk2s;

wire [4:0]sl,sh,c_ml,c_mh,c_h,s_ml,s_mh,s_h;

assign sd=1;

jishi u1(clk1s,rst,enable,set,adj_m,adj_h,sl,c_ml,sh,c_mh,c_h);

displayc u2(clk,rst,set,adj_m,adj_h,sl,sh,c_ml,c_mh,c_h,s_ml,s_mh,s_h,

bitcode,a_to_g1,a_to_g2);

fenpin u3(clk,rst,clk1000H,clk500H,clk1s,clk2s);

alarmclock u4(clk1s,rst,set,adj_m,adj_h,s_ml,s_mh,s_h);

sound u5(clk1000H,clk500H,clk1s,clk2s,close,sl,sh,c_ml,c_mh,c_h,s_ml,

s_mh,s_h,soundout);

endmodule

module fenpin(

input clk,

input rst,

output clk1000H,

output clk500H,

output clk1s, 

output clk2s);

frequency1#9999_9999 u1(clk,rst,clk2s); 

frequency1#4_9999 u2(clk,rst,clk1000H); 

frequency1#19_9999 u3(clk,rst,clk500H);  

frequency1#4999_9999 u4(clk,rst,clk1s);  

endmodule

module counter

#( parameter [4:0]count_max=5'b01001)

(

input clk,

input rst,

input en,

output co,

output reg[4:0]count);

always @(posedge clk or negedge rst)

  if(rst==0) count<=0;

  else 

      if(en==1)

        if(count==count_max) count<=0; else count<=count+1;

      else count<=count;

assign co=((count==count_max)&&(en==1))?1:0;

endmodule

module jishi(

input clk1s,

input rst,

input enable,

input set,

input adj_m,

input adj_h,

output [4:0]sl, 

output [4:0]c_ml,

output [4:0]sh,

output [4:0]c_mh,

output [4:0]c_h);

  wire c_sh_en,c_ml_en,c_mh_en,c_h_en;

wire c_h_en1,c_ml_en1,c_mh_en1;

wire disa;

  assign disa=1;

  assign c_ml_en=((~set) && adj_m)||(c_ml_en1 && c_sh_en);

  assign c_mh_en=c_mh_en1 && c_ml_en;

  assign c_h_en=(~set && adj_h)||(c_sh_en && c_ml_en1 && c_mh_en1 && c_h_en1);

  counter#(5'b01001) u1 (clk1s,rst,enable,c_sh_en,sl);

  counter#(5'b00101) u2 (clk1s,rst,c_sh_en,c_ml_en1,sh);

  counter#(5'b01001) u3 (clk1s,disa,c_ml_en,c_mh_en1,c_ml);

  counter#(5'b00101) u4 (clk1s,disa,c_mh_en,c_h_en1,c_mh);

  counter#(5'b10111) u5 (.clk(clk1s),.rst(disa),.en(c_h_en),.count(c_h));

endmodule

module alarmclock(

input clk1s,

input rst,

input set,

input adj_m,

input adj_h,

output [4:0]s_ml,

output [4:0]s_mh,

output [4:0]s_h); 

wire s_ml_en,s_mh_en,s_h_en;

wire disa;

assign disa=1;

assign s_ml_en=set && adj_m;

assign s_h_en=set && adj_h;

counter #(5'b01001) u6 (clk1s,disa,s_ml_en,s_mh_en,s_ml);

counter #(5'b00101) u7 (.clk(clk1s),.rst(disa),.en(s_mh_en),.count(s_mh));

counter #(5'b10111) u8 (.clk(clk1s),.rst(disa),.en(s_h_en),.count(s_h));

endmodule

module sound(

input clk1000H,

input clk500H,

input clk1s, 

input clk2s,

input close,

input [4:0]sl, 

input [4:0]sh, 

input [4:0]c_ml, 

input [4:0]c_mh, 

input [4:0]c_h, 

input [4:0]s_ml, 

input [4:0]s_mh, 

input [4:0]s_h,

output soundout); 

wire sound1,sound2,sound3; 

assign sound1=((s_ml==c_ml)&&(s_mh==c_mh)&&(s_h==c_h)&& (close==0))?clk500H:1'b0;

assign sound2=((c_ml==0)&&(c_mh==0)&&(sh==0)&&(sl==0)&&(clk1s==0))?clk1000H:1'b0;

assign sound3=((c_ml==9)&&(c_mh==5)&&(sh==5)&&(clk2s==0)&&(clk1s==0))?clk500H:1'b0;

assign soundout=sound1||sound2||sound3;

endmodule

module displayc(

input clk,

input rst,

input set,

input adj_m,

input adj_h,

input [4:0]sl,

input [4:0]sh,

input [4:0]c_ml,

input [4:0]c_mh,

input [4:0]c_h,

input [4:0]s_ml,

input [4:0]s_mh,

input [4:0]s_h,

output [7:0]bitcode,

output [6:0]a_to_g1,

output [6:0]a_to_g2);

wire [4:0]hh,hl,ml,mh,h,value;

wire [3:0]bitcode1,bitcode2;

assign bitcode={2'b00,bitcode1[3:2],bitcode2};

assign h=(set==0)?c_h:s_h; 

assign mh=(set==0)?c_mh:s_mh; 

assign ml=(set==0)?c_ml:s_ml; 

assign hh=(h>=10 && h<20)?1:((h>=20)?2:0); 

assign hl=(h<10)?(h-0):(((h>=10) && (h<20))?(h-10):(h-20)); 

tube1 u1(clk,rst,{mh[3:0],ml[3:0],sh[3:0],sl[3:0]},a_to_g2,bitcode2); 

tube1 u2(clk,rst,{8'b00000000,hh[3:0],hl[3:0]},a_to_g1,bitcode1);  

endmodule

module tube1(

input clk100M,

input rst,

input [15:0]sw, 

output [6:0]a_to_g1,

output reg[3:0]bitcode1); 

reg [1:0]dispbit1; 

wire clkout1;

reg [3:0]bitnum1; 

frequency1 #(49_999) u1(clk100M,rst,clkout1); 

sw_smg10 u2(bitnum1,a_to_g1);

always@(posedge clkout1 or negedge rst)  

  begin

     if(rst==0) dispbit1<=0;

     else if(dispbit1>=3) dispbit1<=0; 

     else dispbit1<=dispbit1+1;

  end

always @(dispbit1 or sw) 

  begin

    case(dispbit1)

        2'b00:begin bitnum1=sw[15:12]; bitcode1=4'b0001; end

        2'b01:begin bitnum1=sw[11:8]; bitcode1=4'b0010; end

        2'b10:begin bitnum1=sw[7:4]; bitcode1=4'b0100; end

        2'b11:begin bitnum1=sw[3:0]; bitcode1=4'b1000; end

        default:begin bitnum1=4'b0000; bitcode1=4'b0000; end

    endcase

end

endmodule

module frequency1

#( parameter integer count1s=49_999_999)

(

  input clk100M,

  input rst,

  output reg clkout);   

  reg [28:0]count;  

  always@(posedge clk100M or negedge rst)  

    if(rst==0)   

      count<=0; 

    else if(count<count1s)  

      count<=count+1;  

    else 

      count<=0;  

  always@(posedge clk100M or negedge rst) 

    if(rst==0) 

      clkout<=1'b0;   

    else if(count<count1s)  

      clkout<=clkout;   

    else  

      clkout<=~clkout;   

endmodule  

module sw_smg10(

  input [3:0]sw,

  output reg[6:0]a_to_g);

always@(sw) 

begin

case(sw)

4'b0000:a_to_g=7'h3f; 

4'b0001:a_to_g=7'h06; 

4'b0010:a_to_g=7'h5b; 

4'b0011:a_to_g=7'h4f; 

4'b0100:a_to_g=7'h66; 

4'b0101:a_to_g=7'h6d; 

4'b0110:a_to_g=7'h7d; 

4'b0111:a_to_g=7'h07; 

4'b1000:a_to_g=7'h7f; 

4'b1001:a_to_g=7'h6f; 

default:a_to_g=7'h00; 

endcase

end

endmodule

38909b60c25f4c0bba6cc46503e9be99.jpg

6f8c0e91b52e4c4aa1115a2cc88c1750.png

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
multisim仿真多功能数字钟电路设计源文件+课设文档资料,multisim13设计,可以做为你的学习设计参考。 摘 要 数字时钟是一种用数字显示秒、分、时的技术设备,其与传统的机械时钟相比,数字时钟具有走时准确、显示直观、物机械传动装置等优点。特别如今随着技术的飞跃发展,利用集成芯片制作成的数字时钟应用广泛,是人们生活必不可缺的物品。 本课程设计是要通过简单的计数芯片、显示译码的数码管、555时基芯片以及基本电子元器件构成简单能够计时、整点报时以及可以设置闹钟的数字时钟。其中用到了74LS161N型号的四位二进制芯片、74LS160D型号的十进制计数器芯片,通过74LS00D与非门以及其它的一些逻辑门共同构成24进制和60进制计数器,再通过数码管将其显示。 关键词:数字时钟、计数器、555芯片   1. 设计要求和目的 数字钟是采用数字电路实现“时”、“分”、“秒”数字显示的计时装置,钟表的数字化同时也提高报时精度的,也大大扩展了它的应用功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭路灯等。因此,研究数字钟及扩大其应用,有着非常现实的意义。 1.1 设计目的 1)掌握数字钟设计、组装与调试方法。 2)熟悉集成电路的使用方法。 1.2设计任务与要求 1)时钟显示功能,能够以十进制显示“时”、“分”、“秒”。 2)具有校准时、分的功能。 3)整点自动报时,在整点时,便自动发出鸣叫声,时长1s。 选做: 1)闹钟功能,可按设定的时间闹时。 2)日历显示功能。将时间的显示增加“年”、“月”、“日”。 2. 系统的总体设计 2.1 系统概述 数字时钟电路是一个典型的数字电路系统,其由时、分、秒计数器以及校时和显示电路组成,其主要功能为计时。数字时钟利用六十进制和二十四进制递增计数器子电路构成数字时钟系统,其由两个六十进制同步递增计数器完成秒、分计数器,由一个二十四进制同步计数器完成小时的计数。 数字时钟的扩展功能则是在数字时钟的主体添加的外电路部分,其由可多个与非门的逻辑电路构成整点报时、闹钟,也可由计数器或比较器与逻辑门组成一个报时电路或一个闹钟,以及日期的显示电路。 2.2硬件设计 2.21系统设计框图
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白义

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

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

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

打赏作者

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

抵扣说明:

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

余额充值