尝试1, 错误, 完全没输出
module top_module (
input clk,
input aresetn, // Asynchronous active-low reset
input x,
output z );
parameter BIT1 = 3'b001;
parameter BIT2 = 3'b001;
parameter BIT3 = 3'b100;
reg [2:0] state, next;
always @(posedge clk or negedge aresetn) begin
if(aresetn == 0)
state <= BIT1;
else
state <= next;
end
always @(*) begin
next = BIT1;
case(state)
BIT1: begin
if(x == 1'b1)
next = BIT2;
else
next = BIT1;
end
BIT2: begin
if(x == 1'b0)
next = BIT3;
else
next = BIT1;
end
BIT3: begin
if(x == 1'b1)
next = BIT1;
else
next = BIT1;
end
default: begin
next = BIT1;
end
endcase
end
always @(posedge clk or negedge aresetn) begin
if(aresetn == 0)
z <= 1'b0;
else if(state == BIT3 && x == 1'b1)
z <= 1'b1;
else
z <= 1'b0;
end
endmodule
上面的parameter错了, 修改后
module top_module (
input clk,
input aresetn, // Asynchronous active-low reset
input x,
output z );
parameter BIT1 = 3'b001;
parameter BIT2 = 3'b010;
parameter BIT3 = 3'b100;
reg [2:0] state, next;
always @(posedge clk or negedge aresetn) begin
if(aresetn == 0)
state <= BIT1;
else
state <= next;
end
always @(*) begin
next = BIT1;
case(state)
BIT1: begin
if(x == 1'b1)
next = BIT2;
else
next = BIT1;
end
BIT2: begin
if(x == 1'b0)
next = BIT3;
else
next = BIT1;
end
BIT3: begin
if(x == 1'b1)
next = BIT2;
else
next = BIT1;
end
default: begin
next = BIT1;
end
endcase
end
//always @(posedge clk or negedge aresetn) begin
always @(*) begin
if(aresetn == 0)
z <= 1'b0;
else if(state == BIT3 && x == 1'b1)
z <= 1'b1;
else
z <= 1'b0;
end
endmodule
![](https://i-blog.csdnimg.cn/blog_migrate/93792140f93dff016872ddbd3130dfa9.png)
再次修改, OK了
module top_module (
input clk,
input aresetn, // Asynchronous active-low reset
input x,
output z );
parameter BIT1 = 3'b001;
parameter BIT2 = 3'b010;
parameter BIT3 = 3'b100;
reg [2:0] state, next;
always @(posedge clk or negedge aresetn) begin
if(aresetn == 0)
state <= BIT1;
else
state <= next;
end
always @(*) begin
next = BIT1;
case(state)
BIT1: begin
if(x == 1'b1)
next = BIT2;
else
next = BIT1;
end
BIT2: begin
if(x == 1'b0)
next = BIT3;
else
next = BIT2;
end
BIT3: begin
if(x == 1'b1)
next = BIT2;
else
next = BIT1;
end
default: begin
next = BIT1;
end
endcase
end
//always @(posedge clk or negedge aresetn) begin
always @(*) begin
if(aresetn == 0)
z <= 1'b0;
else if(state == BIT3 && x == 1'b1)
z <= 1'b1;
else
z <= 1'b0;
end
endmodule