第一步:化成最小项形式
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;
display(“Running testbench”);
end
endmodule
第五步:时序仿真图