使用两个状态机,一个只在时钟上升沿工作,另一个只在时钟下降沿工作,两个信号相与后产生输出信号。这个电路没有除时钟和复位以外的其他输入信号。
设计代码
`timescale 1ns / 1ps
module Test1448(clk,reset,dout);
input clk;
input reset;
output dout;
reg [1:0] pr_state1,nx_state1;
reg [1:0] pr_state2,nx_state2;
reg dout1,dout2;
parameter s0=0,s1=1,s2=2;
/
always @(posedge clk or posedge reset)
if(reset)
pr_state1<=s0;
else
pr_state1<=nx_state1;
/
always @(negedge clk or posedge reset)
if(reset)
pr_state2<=s0;
else
pr_state2<=nx_state2;
/
always @(pr_state1)
case(pr_state1)
s0:begin dout1=1; nx_state1=s1;
end
s1:begin dout1=1; nx_state1=s2;
end
s2:begin dout1=0; nx_state1=s0;
end
default:nx_state1=s0;
endcase
/
always @(pr_state2)
case(pr_state2)
s0:begin dout2=0; nx_state2=s1;
end
s1:begin dout2=1; nx_state2=s2;
end
s2:begin dout2=1; nx_state2=s0;
end
default:nx_state2=s0;
endcase
assign dout=dout1&dout2;
endmodule
测试代码
`timescale 1ns / 1ps
module Test1507;
reg clk;
reg reset;
wire dout;
Test1448 x1(.clk (clk ),
.reset (reset),
.dout (dout ));
always begin
#15 clk=1;
#15 clk=0;
end
initial begin
clk=0;
reset=1;
#5;
reset=0;
#1000;
end
endmodule
产生波形
波形图中dout的输出结果是dout1和dout2的与的结果。