Lo tengo todo ahora mismo, pero la salida que deseo debería ser 00 00 11 00 00 00 00 00 00 00 00 cuando el reloj es 1 (z1z0). ¿Alguien puede decirme qué está mal con mi código? He revisado mi Kmap varias veces.
LosJKFFquedeboimplementarson:
module csm51a_proj3(
input r,
input x1,
input x0,
input clk,
output z0,
output z1
);
jkff i_jkff
(
.r(r),
.x1(x1),
.x0(x0),
.clk(clk),
.z0(z0),
.z1(z1)
);
endmodule
A continuación se muestra la implementación jkff:
module jkff(
input clk, r, x1, x0,
output wire z1,z0
);
reg s0,s1;
initial begin s0<=1'b0; s1<=1'b0; end
assign z0=(x1&&!s0&&s1);
assign z1=(s1&&x0&&(!s0||x1));
wire a1, a2, a3, J1, K1, J0, K0;
assign a1=(x1||s0);
assign J1=(a1&&x0);
assign a2=(x1||!s0);
assign K1=(x0&&a2);
assign a3=(x1||s1);
assign J0=(x0&&!s1);
assign K0=(a3&&x0);
always @(posedge clk or posedge r)
begin
if (r) begin
s1<=0;
s0<=0;
end
else begin
case ({J1,K1})
2'b00: s1<=s1;
2'b01: s1<=1'b0;
2'b10: s1<=1'b1;
2'b11: s1<=~s1;
endcase
case ({J0,K0})
2'b00: s0<=s0;
2'b01: s0<=1'b0;
2'b10: s0<=1'b1;
2'b11: s0<=~s0;
endcase
end
end
endmodule
A continuación se muestra el banco de pruebas
module csm51a_proj3_tb(
);
reg reset, clk, x1, x0;
wire z0, z1;
initial begin clk=0; end
always begin #5 clk=~clk; end
csm51a_proj3 csm51a_proj3
(
.r(reset),
.x1(x1),
.x0(x0),
.clk(clk),
.z0(z0),
.z1(z1)
);
initial begin
reset=0;x1=1;x0=1;//clk=1;
#10;
reset=0;x1=0;x0=1;//clk=1;
#10;
reset=0;x1=1;x0=1;//clk=1;
#10;
reset=1;x1=0;x0=0;//clk=1;
#10;
reset=0;x1=0;x0=1;//clk=1;
#10;
reset=0;x1=0;x0=1;//clk=1;
#10;
reset=0;x1=0;x0=1;//clk=1;
#10;
reset=0;x1=0;x0=1;//clk=1;
#10;
reset=1;x1=0;x0=0;//clk=1;
#10;
reset=0;x1=1;x0=1;//clk=1;
#10;
reset=1;x1=0;x0=0;//clk=1;
#10;
end
endmodule