找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9092|回复: 1
打印 上一主题 下一主题
收起左侧

74LS160计数器功能模块

[复制链接]
跳转到指定楼层
楼主
本帖最后由 WeTiGY 于 2016-11-25 23:13 编辑

实验五  74LS160计数器功能模块
一、实验目的
1、学会用HDL语言设计时序电路;
2、用HDL语言设计74LS160计数器功能模块。
二、硬件需求
    EDA/SOPC实验箱一台。
三、实验原理
计数器是最常用的寄存器逻辑电路,从微处理器的地址发生器到频率计都需要用到计数器。一般计数器可以分为两类:加法计数器和减法计数器。加法计数器每来一个脉冲计数值加1;减法计数器每来一个脉冲计数值减1。
下面将通过模仿中规模集成电路74LS160的功能,用HDL语言设计一个十进制可预置计数器。74LS160共有一个时钟输入端CLK,一个清除输入端CLR,两个计数允许信号P和T,4个可预置数据输入端D、C、B、A,一个置位允许端LOAD,4个计数输出端QD、QC、QB、QA,一个进位输出端RC,其工作模式及时序图如下表和图2-14所示。
  
功能
  
输入
输出
操作
CLR
CLK
P
T
LOAD
QDQCQBQA
复位
L
X
X
X
X
LLLL
预置
H
X
X
L
DCBA
计数
H
H
H
H
+1
保持
H
X
L
X
H
QDQCQBQA
保持
H
X
X
L
H
QDQCQBQA
注:进位输出端RC=Q3&!Q2&!Q1&Q0&T
四、实验内容
本实验要完成的任务就是实现中规模集成电路74LS160的功能,观察其工作时序,并下载到芯片中观察其实际工作过程。实验时为了便于观察,需经分频得到1Hz时钟,用拨挡开关的SW1A~SW4A作为计数器的输入D,按键F3和F4作为计数器的控制允许P和T信号,F2作为清除输入CLR,用按键开关模块的F1作为LOAD信号(注意:由于计数器采用的是1Hz时钟,而装载数据是在时钟信号的上升沿作用下进行,所以要想正确的加载预制数据,F1按键必须按住至少1s以上才可以),用七段数码管模块中的某一位作为计数器的输出Q指示,用led8作为计数器的输出翻转信号RC指示。
第一个是分频模块:
  1. module divider_module
  2. (
  3.        CLK,f_Out
  4. );

  5.        input CLK;
  6.        output f_Out;
  7.    

  8.        parameter T1s=26'd50_000_000;
  9.        reg [25:0]Count1;
  10.    
  11.       always @ ( posedge CLK )
  12.                  if( Count1 == T1s)
  13.                       Count1 <= 26'd0;
  14.                 else
  15.                       Count1 <= Count1 + 1'b1;
  16.         
  17.        reg rf_Out;        
  18.        always @ ( posedge CLK )
  19.                    if( Count1 >= 26'd0 && Count1 <= 26'd25_000_000)
  20.                         rf_Out <= 1'b0;
  21.                   else
  22.                         rf_Out <= 1'b1;     
  23.       assign f_Out = rf_Out;

  24. endmodule
复制代码


第二个是数码管模块:
  1. module hex_module
  2. (
  3.    f_Out,hex,Q
  4. );
  5.    input  f_Out;
  6.    input  [3:0] Q;
  7.    output [6:0] hex;
  8.    
  9.    reg [6:0] rhex;
  10.    always@(posedge f_Out)
  11.         begin
  12.            case(Q)
  13.                  4'd0 :  rhex<=7'b0000001;    //0
  14.                  4'd1 :  rhex<=7'b1111001;    //1
  15.                  4'd2 :  rhex<=7'b0010010;    //2
  16.                  4'd3 :  rhex<=7'b0000011;    //3
  17.                  4'd4 :  rhex<=7'b1001100;    //4
  18.                  4'd5 :  rhex<=7'b0100100;    //5
  19.                  4'd6 :  rhex<=7'b0100000;    //6
  20.                  4'd7 :  rhex<=7'b0001111;    //7
  21.                  4'd8 :  rhex<=7'b0000000;    //8
  22.                  4'd9 :  rhex<=7'b0000100;    //9
  23.                  
  24.                default:  rhex<=7'b0110110;    //F
  25.            endcase
  26.          end
  27.    assign hex=rhex;

  28. endmodule
复制代码
第三个是计数模块:
  1. module count_module
  2. (
  3.    f_Out,RSTn,P,T,LOAD,D,Q,RC
  4. );
  5.    input  f_Out,RSTn,P,T,LOAD;
  6.         input  [3:0] D;
  7.         output [3:0] Q;
  8.         output RC;
  9.        
  10.    reg [3:0] Q;
  11.         reg RC;
  12.         always@(posedge f_Out or negedge RSTn)
  13.               if(!RSTn)
  14.                            Q<=4'd0;
  15.                         else if(!LOAD)
  16.                            Q<=D;
  17.                         else if(P&T)
  18.                            begin

  19.                                             if(Q<4'd9)
  20.                                                     begin
  21.                                                     Q<=Q+1'b1;
  22.                                                          RC<=1'b0;
  23.                                                          end
  24.                                                   else
  25.                                                     begin
  26.                                                          Q<=4'd0;
  27.                                                          RC<=1'b1;
  28.                                                          end                                         
  29.                                 end
  30.                         else
  31.                            Q<=4'd0;
  32.                                
  33. endmodule
复制代码


第四个是顶层模块:
  1. module top_module
  2. (
  3.    CLK,RSTn,P,T,LOAD,D,RC,hex
  4. );
  5.    input  CLK,RSTn,P,T,LOAD;
  6.         input  [3:0] D;
  7.         output [6:0] hex;
  8.         output RC;
  9.         
  10.    wire f_out;
  11.         divider_module u1
  12.         (
  13.           .CLK(CLK),
  14.           .f_Out(f_Out)
  15.         );
  16.         wire [3:0] Q;
  17.         count_module u2
  18.         (
  19.           .f_Out(f_Out),
  20.           .RSTn(RSTn),
  21.           .P(P),
  22.           .T(T),
  23.           .LOAD(LOAD),
  24.           .D(D),
  25.           .RC(RC),
  26.           .Q(Q)
  27.         );
  28.         
  29.         hex_module u3
  30.         (
  31.           .f_Out(f_Out),
  32.           .Q(Q),
  33.           .hex(hex)
  34.         );
  35.         
  36.         

  37. endmodule        
复制代码

注:使用20分频仿真

仿真图:


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:646928 发表于 2019-12-30 01:01 来自手机 | 只看该作者
楼主分享个压缩包啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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