2011-10-18 11:47:32 +02:00

108 lines
1.7 KiB
Plaintext

module aut1 (input d,
input clk,
input reset,
output y);
reg state, nextstate;
parameter s0 = 2'b00;
parameter s1 = 2'b01;
parameter s2 = 2'b10;
//state
always @ (posedge clk,posedge reset)
begin
if (reset) state <= s0;
else state <= nextstate;
end
//next stages
always @ (*)
case(sate)
s0: if(d) nextstate = s1; else nextstate = s0;
s1: if(d) nextstate = s2; else nextstate = s1;
s2: if(d) nextstate = s1; else nextstate = s0;
default: nextstate = s0
endcase
//output logic
assign y = (state == s2);
endmodule
module aut2 (input d,
input clk,
input reset,
output y)
reg state,nextstate
parameter s0 = 1'b0;
parameter s1 = 1'b1;
//state register
always @ (posedge clk, posedge reset)
if (reset) state <= s0;
else state <= nextstate;
//nextstage
always @ (*)
case(state)
s0: if(d) nextstate = s1; else nextstate = s0;
s1: if(d) nextstate = s0; else nextstate = s0;
default: nextstate = s0
endcase
//output
assign y = (d & state == s1);
endmodule
module test();
wire clk;
wire reset;
wire d;
wire y1;
wire y2
aut1 a( d,clk,reset,y1);
aut2 b( d,clk,reset,y2);
initial
begin
d = 0
#10
reset = 1;
#10
reset = 0;
#10
d = 1;
#10
d = 1;
#10
d = 1;
#10
d = 0;
#10
d = 0;
#10
d = 0;
#10
d = 1;
#10
d = 0;
#10
d = 1;
end
always
begin
clk = 0; #5 clk = 1
$display("aut1 = "+y1+" aut2 = "+y2)
end
endmodule