Verilog HDL的简单应用之74ls160功能的实现

结束喽!

简报

这是集成同步加法计数器,也是简单元器件的FPGA实现系列的最后一篇。希望能够对和笔者一样刚刚接触到FPGA的朋友们有所帮助,有所广益。下面,笔者将对74ls16x(x=0,1,2,3)系列进行说明,并用Verilog HDL进行74ls160功能的实现。

引脚

该系列元器件均有1+1+1+2+4+4+1+2=16根引脚,其中包括1根时钟信号引脚,1根清零信号引脚,1根置数信号引脚,2根计数使能信号引脚,4根数字输入引脚,4根数字输出引脚,1根进位引脚以及电源和接地引脚。下面为对其引脚的详细说明。

  1. 时钟信号引脚(CP):输入时钟信号,在时钟信号上升沿激发置数或计数功能。
  2. 清零信号引脚(~CR):输入清零信号。器件中清零信号引脚相当于一个非门输入,当清零信号输入为高电平(即 ~CR=0)时,计数器清零,进位引脚RCO以及数字输出引脚Q输出低电平。
  3. 置数信号引脚(~LD):输入置数信号,即当该引脚输入高电平( ~LD=0)时将输入的数字传递给输出引脚Q。
  4. 计数使能信号(EP,ET):当清零信号CR=0且置数信号LD=0时,计数使能信号有0则保持,全1且处于时钟上升沿则开始计数。
  5. 数字输入引脚(D,C,B,A):输入数字,以作为加数参与加法器功能。
  6. 数字输出引脚(Q):共4根,输出加法运算后的数据。
  7. 进位引脚(RCO):为级联提供功能支持。
  8. 电源、接地:略。

代码

`timescale 1ns / 1ps
module x74x160(
    input clk,
    input CR_n,
    input LD_n,
    input EP,ET,
    input D,C,B,A,
    output reg RCO = 1'b0,
    output [3:0]Q
    );
    reg [3:0]data_in;
    assign Q = data_in;
    always@ (posedge clk or negedge CR_n)
    begin
        if(~CR_n)
        begin
            data_in     <=4'b0;
            RCO   <=1'b0;
        end
        else if( ~LD_n )
            data_in <= { D, C, B, A };
        else if( ~EP | ~ET )
            data_in <= data_in;        
        else
        begin
           data_in <= (data_in < 4'b1010) ? data_in + 1'b1 : 4'b0;
           RCO     <= (data_in < 4'b1001) ? RCO            : 1'b1;
        end
    end
endmodule

下面为74ls160在Verilog HDL中的仿真代码:

module SIM;
    reg clk;
    reg CR_n;
    reg LD_n;
    reg EP,ET;
    reg D,C,B,A;
    wire RCO;
    wire [3:0] Q;
x74x160 u1(clk,CR_n,LD_n,EP,ET,D,C,B,A,RCO,Q);
initial begin
    clk=0;CR_n=1;LD_n=1;EP=0;ET=0;D=1;C=0;B=1;A=0;
#100;
    CR_n = 0;
#200;
    CR_n = 1; LD_n = 0;
#200
    EP = 0; ET = 1; LD_n = 1;
#200
    ET = 0;
    #100
    CR_n = 0;
    #100 
    CR_n = 1;
#260
    EP = 1;
    ET = 1;
end
always #25 clk=~clk;
endmodule

当然,时钟还是用的又细又短的那种(真的好方便啊@_@)

仿真效果

在这里插入图片描述

总之就是很可爱(〃‘▽’〃)

小结

众所周知,天下没有不散的宴席,天下没有不劳的收获。Verilog HDL的学习绝非朝日之功,跟随别人的脚步永远只能步其后尘。世上不存在完美的物件,这一系列的文章也一定会存在缺陷。为各位朋友提供某些环境(比如大一实验室笔试╮(─▽─)╭)的试题答案不是我创作的意图,一点也不是。这六篇文章(可能以后一时兴起会再续更一些)仅仅是用来告诉各位刚刚接触到Verilog HDL的朋友,不要看着Verilog HDL语法极其类似C/C++而认为可以直接着手某些协议的编写,更不能认为自己C/C++基础极好便可直接接单某些工程。相反,对于数电知识和逻辑方面严格的约束更要求初学者们从简单处入手,在简单处碰壁,在简单处探索,在简单处攻关,才能化简为繁,完善思维,纠正风格,最后获得能够自主搭建一套严密的逻辑体系的能力,甚至,摆脱外族束缚,逐步走向自主研发。这才应当是我们学习技术的目的。

  • 22
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值