数字逻辑——用verilog语言实现NS74LS163的功能

一、 实验目的

用verilog语言实现NS74LS163的功能,通过时钟分频电路的得到频率较小的时钟信号,作为输入到NS74LS163模块的时钟信号。加深对LS163模块功能的印象,掌握时钟分频电路的使用方法。
在这里插入图片描述

二、 实验内容

1. 实验流程

① 本次实验目的较明确,根据NS74LS163的功能表,写出其verilog代码
② NS74LS163是一个带同步清零、同步置数功能的四位二进制计数器
③ 因为需要调用时钟分频模块,所以增加top.v文件,在该文件中调用clkdiv.v和NS74LS163.v
④ 上板实验

2. Verilog代码分析

(1) Design source(.v文件):

top.v:
module top(
   input [3:0]P,//Parallel Inputs
    output [3:0]Q,//Parallel Outputs 
    input LOAD,//Parallel Enable (Active LOW) Input
    input CEP,//Count Enable Parallel Input
    input CET,//Count Enable Trickle Input
    input CLR,//Synchronous Reset (Active LOW) Input
    output RCO,//Terminal Count Output 
    input  CLK100MHZ
    );
    wire CP;
    clkdiv CLKDIV1(.mclk(CLK100MHZ),.clk1_0dot75hz(CP));
    NS74LS163 U1(P,Q,LOAD,CEP,CET,CLR,RCO,CP);
    
endmodule
NS74LS163.v:
module NS74LS163(
    input [3:0]P,//Parallel Inputs
    output reg [3:0]Q,//Parallel Outputs 
    input LOAD,//Parallel Enable (Active LOW) Input
    input CEP,//Count Enable Parallel Input
    input CET,//Count Enable Trickle Input
    input CLR,//Synchronous Reset (Active LOW) Input
    output RCO,//Terminal Count Output 
    input  CP
    );
   
    assign RCO=Q[0]&Q[1]&Q[2]&Q[3];
    always@(posedge CP)
   begin
    if(~CLR)
    Q<=4'b0000;
    else if(~LOAD)
    Q<=P;
    else if(CET&CEP)
    Q<=Q+4'b0001;
    else
    Q<=Q; 
   end
endmodule
clkdiv.v:
module clkdiv(
    input mclk,
    output clk1_0dot75hz
    );
    reg [27:0]q;
    always@(posedge mclk)
         q<=q+1;
    assign clk1_0dot75hz=q[26];     
endmodule

.v分析:
本次实验共有三个模块,一个顶层模块和两个子模块,163的功能作为子模块之一,通过顶层模块的调用在适当的时钟信号下便于观察到计数时led灯亮灭的变化。

top.v:
① Input信号与NS74LS163相同,有输入P,置数LOAD,清零CLR,计数CET和CEP,时钟信号CLK100MHZ
② Output信号为输出Q,进位信号RCO
③ 定义wire变量CP,作为调用的时钟分频电路的输出
④ 调用163模块,CP作为 时钟信号输入

NS74LS163:
① Input和output与top.v中几乎相同,其中时钟信号为CP
② 进位信号RCO用assign语句赋值,当输出所有位均为1时,进位输出为1
③ always语句敏感信号表只有时钟信号上升沿,表示同步电路
④ always语句内,操作的优先级为:清零,置数,计数,保持。其中计数信是CET&CEP

clkdiv.v:
① 输入一个时钟信号(本次实验为100MHZ)将其分频成频率更小的信号
② 利用二进制加法器,取向量q的q[26]输出,以此得到频率为0.75HZ的时钟信号

(2) Constraints source(.xdc文件)

## Clock signal
set_property -dict { PACKAGE_PIN E3    IOSTANDARD LVCMOS33 } [get_ports { CLK100MHZ }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CLK100MHZ}];

##Switches

set_property -dict { PACKAGE_PIN J15   IOSTANDARD LVCMOS33 } [get_ports { P[0] }]; #IO_L24N_T3_RS0_15 Sch=sw[0]
set_property -dict { PACKAGE_PIN L16   IOSTANDARD LVCMOS33 } [get_ports { P[1] }]; #IO_L3N_T0_DQS_EMCCLK_14 Sch=sw[1]
set_property -dict { PACKAGE_PIN M13   IOSTANDARD LVCMOS33 } [get_ports { P[2] }]; #IO_L6N_T0_D08_VREF_14 Sch=sw[2]
set_property -dict { PACKAGE_PIN R15   IOSTANDARD LVCMOS33 } [get_ports { P[3] }]; #IO_L13N_T2_MRCC_14 Sch=sw[3]
set_property -dict { PACKAGE_PIN R17  IOSTANDARD LVCMOS33 } [get_ports { LOAD }]; #IO_L12N_T1_MRCC_14 Sch=sw[4]
set_property -dict { PACKAGE_PIN T18   IOSTANDARD LVCMOS33 } [get_ports { CEP }]; #IO_L7N_T1_D10_14 Sch=sw[5]
set_property -dict { PACKAGE_PIN U18   IOSTANDARD LVCMOS33 } [get_ports { CET }]; #IO_L17N_T2_A13_D29_14 Sch=sw[6]
set_property -dict { PACKAGE_PIN R13   IOSTANDARD LVCMOS33 } [get_ports { CLR }]; #IO_L5N_T0_D07_14 Sch=sw[7]

##Led

{ PACKAGE_PIN H17   IOSTANDARD LVCMOS33 } [get_ports { Q[0] }]; #IO_L18P_T2_A24_15 Sch=led[0]
set_property -dict { PACKAGE_PIN K15   IOSTANDARD LVCMOS33 } [get_ports { Q[1] }]; #IO_L24P_T3_RS1_15 Sch=led[1]
set_property -dict { PACKAGE_PIN J13   IOSTANDARD LVCMOS33 } [get_ports { Q[2] }]; #IO_L17N_T2_A25_15 Sch=led[2]
set_property -dict { PACKAGE_PIN N14   IOSTANDARD LVCMOS33 } [get_ports { Q[3] }]; #IO_L8P_T1_D11_14 Sch=led[3]
set_property -dict { PACKAGE_PIN R18   IOSTANDARD LVCMOS33 } [get_ports { RCO }]; #IO_L7P_T1_D09_14 Sch=led[4]

.xdc分析
① 每个引脚两行语句:第一行代表引脚在实验板上的位置;第二行代表输入输出标准电平3.3V
② 引脚锁定文件使用到的引脚名称与design source中所使用到变量名称相对应
③ 本次实验中用到实验板的时钟信号引脚CLK100MHZ,8个输入端,5个输出端
(3) Elaborated design:
在这里插入图片描述

三、 实验结论

本次实验中,通过对163计数器功能的实践检验,我对163的构造和工作原理有了更加深刻的印象。LS163是带清零、置数、计数功能的四位二进制同步计数器,其功能优先级是清零>置数>计数>保持。时钟分频电路的原理是通过一个多位二进制计数器将时钟信号频率降低至一个适用频率,这个频率可以根据需要进行调整。

四、 思考与讨论

(一)实验感想:

本次实验是我第一次接触时序逻辑电路,在实验验收过程中,led灯随着时间流动发生规律性的跳变,让我对时序逻辑电路的功能有了直观的体会。同时,我也尝试了将时序逻辑电路应用到7段数码管上,做十进制的加法器,这个探索的过程是十分有趣的。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

adriaW

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

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

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

打赏作者

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

抵扣说明:

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

余额充值