用3-8译码器实现L=~(A+C)+AB

第一步:化成最小项形式
L=(~A)(~B)(~C)+(~A)(B)(~C)+(A)(B)(~C)+(A)(B)(C)=M0+M2+M6+M7
第二步:代码

module cy4(input[2:0] E,//输入端口声明 
input[2:0] A,//输入端口声明 
output reg[7:0] Y,//输出端口声明 
output L
);
parameter M0 = 8'b1111_1110;
parameter M1 = 8'b1111_1101;
parameter M2 = 8'b1111_1011;
parameter M3 = 8'b1111_0111;
parameter M4 = 8'b1110_1111;
parameter M5 = 8'b1101_1111;
parameter M6 = 8'b1011_1111;
parameter M7 = 8'b0111_1111;
parameter M8 = 8'b1111_1111;
always @(A,E) 
if(E == 3'b111) 
begin 
case(A) 
3'b000: Y = M0;
3'b001: Y = M1; 
3'b010: Y = M2; 
3'b011: Y = M3; 
3'b100: Y = M4; 
3'b101: Y = M5; 
3'b110: Y = M6; 
3'b111: Y = M7; 
default: Y = M8; 
endcase 
end 
else;
assign L = ~(Y[0]&Y[2]&Y[6]&Y[7]);
endmodule

第三步:RTL视图
这里写图片描述
第四步:测试脚本代码

`timescale 1 ns/ 1 ps
module cy4_vlg_tst();
reg [2:0] A;
reg [2:0] E;
wire L;
wire [7:0] Y;

cy4 i1 (
.A(A),
.E(E),
.L(L),
.Y(Y)
);
initial
begin

20 E = 3’b111;

50 A = 0;

50 A = 1;

50 A = 2;

50 A = 3;

50 A = 4;

50 A = 5;

50 A = 6;

50 A = 7;

50;

s t o p ; display(“Running testbench”);
end

endmodule
第五步:时序仿真图
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_41982581/article/details/82562986
今日推荐