模60的加法器四位计数器异步复位JK触发器同步D触发器.docx
《模60的加法器四位计数器异步复位JK触发器同步D触发器.docx》由会员分享,可在线阅读,更多相关《模60的加法器四位计数器异步复位JK触发器同步D触发器.docx(9页珍藏版)》请在冰豆网上搜索。
模60的加法器四位计数器异步复位JK触发器同步D触发器
模60的加法器--四位计数器-异步复位--JK触发器--同步D触发器
moduleMUX_4(out,in0,in1,in2,in3,sel);
outputout;
inputin0,in1,in2,in3;
input[1:
0]sel;//定义sel输入//
regout;
always@(in0orin1orin2orin3orsel)
begin
if(sel==2'b01)
out=in0;
elseif(sel==2'b01)
out=in1;
elseif(sel==2'b10)//判断sel的值//
out=in2;
else
out=in3;
end
endmodule
模60的加法器
moduleJSQ60(qout,cout,data,load,cin,reset,clk);
output[7:
0]qout;
outputcout;
input[7:
0]data;
inputload,cin,clk,reset;
reg[7:
0]qout;//定义qout为寄存器//
always@(posedgeclk)
begin
if(reset)qout<=0;
else
if(load)qout<=data;
else
if(cin)
begin
if(qout[3:
0]==9)//个位已经到9了//
begin
qout[3:
0]<=0;
if(qout[7:
4]==5)qout[7:
4]<=0;//十位过5,清零//
else
qout[7:
4]<=qout[7:
4]+1;
end
elseqout[3:
0]<=qout[3:
0]+1;
end
end
assigncout=((qout==8'h59)&cin)?
1:
0;//当计数器满59且使能端为1,进位端输出1;//
Endmodule
看图描述
moduleMUX4(Z,D0,D1,D2,D3,S0,S1);
outputZ;
inputD0,D1,D2,D3,S0,S1;
wireT0,T1,T2,T3,S0f,S1f;
andu0(T0,D0,S0f,S1f);
andu1(T1,D1,S0f,S1f);
andu2(T2,D3,S0,S1f);
andu3(T3,D3,S0,S1);
notu4(S0f,S0);
notu5(S1f,S1);
oru6(Z,T0,T1,T2,T3);
endmodule
四位计数器异步复位
modulejohnson(clk,clr,out);
inputclk,clr;
output[3:
0]out;
reg[3:
0]out;//将out设置为寄存器型//
always@(posedgeclkorposedgeclr)
begin
if(clr)out<=4'h0;//即执行清零操作即输出全0//
else
begin
out<=out<<1;
out[0]<=~out[3];
end
end
Endmodule
JK触发器
moduleJKCFQ(Q,J,K,CLK,RD);
inputJ,K,CLK,RD;
outputQ;//把Q设置为输出//
regQ;
always@(posedgeCLKornegedgeRD)
begin
if(!
RD)Q<=1'B0;
else
case({J,K})
2'b00:
Q<=Q;
2'b01:
Q<=1'b0;//Q置0//
2'b10:
Q<=1'b1;//Q置1//
2'b11:
Q<=~Q;
default:
Q<=1'bx;
endcase
end
endmodule
同步D触发器
moduleDFF2(q,qn,d,clk,set,reset);
inputd,clk,set,reset;
outputq,qn;
regq,qn;
always@(posedgeclk)
begin
if(reset)
begin
q<=0;qn<=1;//当reset为1q为0qn为1//
end
elseif(set)
begin
q<=1;qn<=0;//当set为q置1qn置1//
end
else
begin
q<=d;qn<=~d;//当有时钟但是setreset都是0的情况下;q=dqn等于d非//
end
end
Endmodule
74ls138(38译码器);
modulels138(Y,A,G1,G2);
output[7:
0]Y;
output[2:
0]A;
inputG1,G2;
reg[7:
0]Y;
wireG;
assignG=G1&~G2;
always@(AorG1orG2)
begin
if(G)
case(A)
3'd0:
Y=8'b11111110;
3'd1:
Y=8'b11111101;
3'd2:
Y=8'b11111011;
3'd3:
Y=8'b11110111;
3'd4:
Y=8'b11101111;
3'd5:
Y=8'b11011111;
3'd6:
Y=8'b10111111;
3'd7:
Y=8'b01111111;//d7十进制7//
endcase
else
Y=8'b11111111;
end
endmodule