1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| module kj(j1,l1,j,k,clock,reset,q,qb,q1,qb1,b);
input j1,l1,j,k,clock,reset;
output reg q1,qb1;
output reg [3:0]q,qb,b,a;
always@(negedge clock)
begin
case({reset,j1,l1})
3'b100 :q1=q1;
3'b101 :q1=0;
3'b110 :q1=1;
3'b111 :q1=~q1;
default :q1=0;
endcase
qb1<=~q1;
end
always@*
begin
if(q1==q1)
kl JK1(j,k,clock,reset,q[0],qb[0]);
kl JK2(j,k,q[0],reset,q[1],qb[1]);
kl JK3(j,k,q[1],reset,q[2],qb[2]);
kl JK4(j,k,q[2],reset,q[3],qb[3]);
end
always@*
begin
else if(q1==0)
kl JK5(j,k,clock,reset,q[0],qb[0]);
kl JK6(j,k,q[0],reset,q[1],qb[1]);
kl JK7(j,k,q[1],reset,q[2],qb[2]);
kl JK8(j,k,q[2],reset,q[3],qb[3]);
end
else if(q1==1)
begin
always@(reset)
begin
if(reset)
q <=4'b0000;
else if(q<4'b0101)
q <= q+1;
else
b=q[1]&&q[3];
end
end
else if (q1==~q1)
begin
always@(posedge clock)
begin
if(reset)
q <=4'b0000;
else if(q<4'b0011)
q <= q+1;
else
a=q[2]&&q[3];
end
end
endmodule |