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

我的错,人神共愤,天理难容……

简报

众所周知,74ls283是和74ls151还有74ls138一样应用广泛的电子元器件,其本体共有1+4+4+4+1+1+1=16根引脚,鉴于电源和接地引脚仍旧“没有用处”,我们再次对其进行忽略。下面笔者将利用Verilog HDL在Vavido环境下对其功能进行实现。

引脚

74ls283的逻辑符号共有14根引脚,其中1根为从低位进位数据输入端,4根为加数A数据输入端,4根为加数B数据输入端,4根为四位结果输出端,1根为向高位进位数据输出端。下面为详细介绍。

  1. 从低位进位数据输入端:共1根,是从上一个加法器或者其他的乱七八糟的什么东西引入的一个,对加数进行某些处理的数据的入口。总之只有一个口,顶多给得到的结果的低位加上一个1(毕竟数字信号只有1和0,他想加个2端口也不够…)
  2. 加数A数据输入端:共4根,具体功能同字面意思[doge]
  3. 加数B数据输入端:同上[doge]
  4. 结果输出端:共4根,具体功能同字面意思。注意:由于结果输出端一共4根,所以 4位数A + 4位数B 得到的结果中,五位数的最高位(第五位)无法作为结果输出,而是被转移至向高位进位数据输出端。
  5. 向高位进位数据输出端:共1根,是从这个加法器向下一个加法器或者其他的乱七八糟的什么东西传输进位数据的端口。

代码

说实话,笔者在写代码时犯了几个十分严重的错误…将在小结里面进行深刻的反思…

module x74x283(
    input  [3:0] A,
    input  [3:0] B,
    input        c0,
    output [3:0] S,
    output       c4
    );
    
    assign {c4,S}={1'b0,A}+{1'b0,B}+c0;
    
endmodule

下面为在Vivado环境下的仿真文件代码。鉴于74ls283的特殊用途,笔者选择了几个个人认为能够全面证明功能的数字进行仿真操作。可能会有缺漏,如有意见或建议,恳请不吝赐教。

module SIM;
    reg  [3:0] A;
    reg  [3:0] B;
    reg        c0;
    wire [3:0] S;
    wire       c4;
    x74x283 u1(A,B,c0,S,c4);
    initial begin
        A=4'b0;
        B=4'b0;
        c0=0;
        #100;
            A=4'b1010; B=4'b0101; c0=0;
        #100;
            A=4'b1010; B=4'b0101; c0=1;    
        #100;
            A=4'b1011; B=4'b0101; c0=0;
        #100;
            A=4'b1011; B=4'b0101; c0=1;
        #100;
            A=4'b1011; B=4'b1101; c0=0;            
    end
endmodule

加法器…仿真文件真的没什么好说的…

仿真效果

在这里插入图片描述
根据波形图,我们可以发现代码可以实现两个四位二进制数字与来自低位的进位相加,并正确产生结果和对高位的进位,即可实现74ls283功能,符合预期。

小结

说出来各位观众老爷们可能不信,笔者写这段代码写了一个多小时…不是因为它难,也不是因为笔者一边写一边和女朋友聊天(笔者也没有女朋友…)而是因为今天脑子突然抽了一根大筋,先是受到进位影响用循环语句给他一位一位地进行加法运算,导致代码冗长(如图1),后面又在写仿真文件进行端口连接的时候顺序出错(如图二),之后的时间全浪费在找出这个问题上面了…真的是人神共愤,天理难容…各位看官一定要引以为戒…

图一在这里插入图片描述
图二
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值