I have everything right now, but the output I desire should be 00 00 11 00 00 00 00 10 00 00 00 when the clock is 1(z1z0). Can someone tell me what is wrong with my code? I've checked my Kmap numerous times.
The JKFFs I should be implementing is:
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
Below is the jkff implementation:
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
Below is the test bench
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