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
in = reg or wire; out = wire
. For making a module it is the opposite:input = wire; output = reg or wire
\$\endgroup\$jkff
doesn't have aQ
pin, and if it did, you can only connect one signal to it. There are also missing inputs to thejkff
. I think you wantwire a,b, a1,a2,a3,a4; jkff i_jkff(.s0(a), .s1(b), .*);
FYIs0
is not assigned and should be. \$\endgroup\$