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

本文介绍使用VerilogHDL语言实现74ls138译码器的过程。74ls138具有3个地址端和8个输出端,通过3个选通端控制其工作状态。文章提供了详细的Verilog代码及仿真结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


可算是放寒假了。。。泪目!

简报

众所周知,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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值