找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1788|回复: 1
收起左侧

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

[复制链接]
ID:1003637 发表于 2022-1-27 12:17 | 显示全部楼层 |阅读模式
可算是放寒假了。。。泪目!
简报

众所周知,74ls138是一种应用广泛的电子元器件。其本体共有3+3+8+1+1=16根引脚,其中,电源与接地口我们直接忽略掉吧(毕竟这兄弟俩也没什么大用处。。。也许吧)。 因此,本篇文章将利用Verilog HDL对 74ls138 16个接口中的14个接口功能进行实现。

引脚
74ls138逻辑符号中的14个引脚及其功能如下:

1. 地址端:共3个,按高低顺序组成二进制代码,通过数字的先后顺序对应8个数据输出端,为主要实现功能的端口之一。
2. 输出端:为主要实现功能的端口之一,共8个,根据地址段输入的信息,不同的输出端将会作出相应反应(比如电平由高转低)==注意:74ls138的8个输出端输出的为最小项的反,即默认状态下输出均为1==。
3. 选通端:共3个,为原件功能的开关。当且仅当一个选通端为高电平,其余两个选通端为低电平时,允许原件进行正常工作。


代码
根据上述内容,我们可以很容易地在Vivado上面利用Verilog HDL语言实现74ls138的功能。废话不多说,我们直接上代码。


module x74x138(
g1,g2,g3,a,y
);                                   //定义模块
input           g1,g2,g3;
input     [2:0] a;
output    [7:0] y;                   //声明输入输出量 这一步不能放到定义模块中去
reg       [7:0] y=0;                 //作为变量要声明为reg

    always @ *
            begin

                if(g1 && ~g2 && ~g3)                 //选通端

                    case(a)
                            7:y= 8'b01111111;
                                   6:y= 8'b10111111;
                            5:y= 8'b11011111;
                            4:y= 8'b11101111;
                            3:y= 8'b11110111;
                            2:y= 8'b11111011;
                            1:y= 8'b11111101;
                            0:y= 8'b11111110;
                            default: y= 8'b11111111;
                    endcase
                else
                    y= 8'b11111111;
    end
endmodule


以上为74ls138的Verilog HDL代码。我用的FPGA设计套件是Vivado,下面是对应的仿真文件。


module SIM;
    reg        g1;
    reg        g2;
    reg        g3;
    reg  [2:0] a;
    wire [7:0] y;

    x74x138 u1(g1,g2,g3,a,y);
            initial begin
                       g1=0;
                       g2=0;
                g3=0;
                a=0;
                #100;
                g1=1;
                g2=0;
                g3=0;
            end
            always #100 a=a+1;
endmodule


在仿真文件里,我们先令选通端均为低电平,在100ns后,改变电平状态,启动原件,并在每100ns将a的数值+1,以便验证功能。
小结
讲真的,我自己都感觉这个东西写上去有点简单,不会有多少人会看。但是,我还是要把它认真的写出来,毕竟,这是我设计的第一个硬件,懂的都懂(刚学的时候这些东西都是能让我抓狂的。。。),所以将他们写出来。一来便于对硬件的理解,二来帮助刚刚接触到Verilog HDL的同仁更好的对代码和仿真文件进行一定的理解。就这样吧。这几天要是有时间我会把我初期写的一些代码发出来,正好当做我博客的头几篇文章(别说,还真合适)。各位,拜拜喽!

评分

参与人数 1黑币 +50 收起 理由
admin + 50

查看全部评分

回复

使用道具 举报

ID:691028 发表于 2022-2-16 08:42 | 显示全部楼层
谢谢楼主的例子!学习一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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