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

您所在的位置:网站首页 74ls48数码管 Verilog HDL的简单应用之74ls148功能的实现

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

2023-11-26 09:08| 来源: 网络整理| 查看: 265

不知为何,人是一种对3和1情有独钟的生物

简报

众所周知,74ls148是和74ls283、74ls151还有74ls138一样应用广泛的电子元器件。而且功能还存在一些微妙的地方。其本体共1+1+1+1+1+8+3=16根引脚。鉴于接地和电源引脚还是没有什么大用处,笔者将使用Verilog HDL语言在Vivado上面对其余14根引脚的功能进行实现。

引脚

74ls148的逻辑符号共1+1+1+8+3=14根引脚,分别为使能输入端,使能输出端,组信号输出端,十进制输入端8根,二进制输出端3根。下面为具体说明。

使能输入端:共1根,低电平有效,是元件的“开关”。使能输出端:共1根,根据真值表(笔者不想插入了…插入就要重新设计排版的说…)当且仅当十进制输入端的八根引脚输入为11111111时,才会输出低电平(0),其余情况均输出高电平(1),在级联时有意义,表示触发低位编码器工作。组信号输出端:共1根,在级联时作为进位输出。十进制输入端:共8根,输入待编码的信号。二进制输出端:共3根,输出编码。 注意:74ls148为优先编码器,优先顺序为自高位向低位编码,由于其所有引脚均为反码输入,所以对输入信号左边最后一个1进行编码。这种规定可避免由信号重复造成的混乱。 代码

下面为74ls148对应的Verilog HDL代码。

module x74x148( input EI, input [7:0] I, output reg GS, output reg [2:0] Q, output reg EO ); always@ * begin Q=3'b111; EO=1; GS=1; if(~EI) begin casez(I) 8'b11111111: begin EO=0; end 8'b0???????: begin GS=0; Q=3'b000; end 8'b10??????: begin GS=0; Q=3'b001; end 8'b110?????: begin GS=0; Q=3'b010; end 8'b1110????: begin GS=0; Q=3'b011; end 8'b11110???: begin GS=0; Q=3'b100; end 8'b111110??: begin GS=0; Q=3'b101; end 8'b1111110?: begin GS=0; Q=3'b110; end 8'b11111110: begin GS=0; Q=3'b111; end endcase end end endmodule

笔者根据真值表对其功能进行编码,其中EI为使能输入端,EO为使能输出端,GS为组信号输出端,I为十进制待编码信号,Q为二进制输出。

然而,事情却并没有那么简单……

module x74x148( input EI, input [7:0] I, output reg [2:0] Q, output reg EO, output reg GS ); integer i; reg [7:0] _reg; always @ * begin //A Q=3'b111; EO=1; GS=1; if(~EI) begin //B if(I==8'b11111111) begin //C EO=0; end //C else begin //D Q=3'b000; _reg=I; GS=0; EO=~EI; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3