在用verilog编写三段式状态机的时候,我看网上很多地方都是提到格式如下:always @ (posedge clk or negedg

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在用verilog编写三段式状态机的时候,我看网上很多地方都是提到格式如下:always @ (posedge clk or negedg相关的知识,希望对你有一定的参考价值。

always @ (posedge clk or negedge nrst)
if (!nrst)
CS <= IDLE;
else
CS <=NS;

always @ (CS)
begin
case (CS)
……
endcase
end

//3rd always block, the sequential FSM output
always @ (posedge clk or negedge nrst)
if (!nrst)
……
else
begin
o1,o2,err <= 3'b000;
case (NS)
……
endcase
end
我想问的问题是:1、第二段的组合逻辑假如要是用时序逻辑的话,对第三段有没有什么影响,或者整个状态机的时序有什么问题?2、还有第三段假如case里边用CS的话行不行?

参考技术A 1.第二段如果用时序逻辑,会导致你的状态机对输入条件的引起的变化多延迟一拍。
2.CS比NS慢一拍,如果用CS,你的o1,o2都会晚一拍。本回答被提问者采纳
参考技术B 都用时序逻辑的话,功能上没有什么区别,只是速度会慢一半。第三段假如case里边用CS的话,与第二段要么相矛盾,要么多此一举。追问

假如第二段用时序逻辑,而第三段用时序逻辑,但case里边用CS的话,您说的相矛盾,多此一举, 是怎么回事呢?不太理解哦,我觉得用cs跟ns都可以,只是在看功能仿真波形图的时候,假如用ns:则看ns 对应的是当前的输出;假如用cs,则cs的下一个时钟上升沿才能看到当前状态的输出。您看我的理解有没有问题?

一个关于verilog 状态机的问题程序,综合的时候出了点错误,希望各位可以帮忙解决下问题

module Status_Machine(
Clk_In,Reaset,
Effect_0,Effect_1,
Status,Clk_Out
);

input Clk_In,Reaset;output Status,Effect_0,Effect_1,Clk_Out;
reg [1:0] status;
reg [1:0] Effect_0;
reg [7:0] Effect_1;
reg [3:0] Cunt;
reg Clk_Out;

parameter LED = 2'b01, Digital_tube = 2'b10;
always @ (posedge Clk_In)
begin
Cunt <=Cunt+1;
if (Cunt<4'b1001)
Clk_Out <= 1'b0;
else
begin
Clk_Out <=1'b1;
Cunt <=4'b0000;
end
end
always @ (posedge Clk_Out)
if (!Reaset)
begin
Status <= LED;
end
else
begin
case(Status)
LED :
begin
Status <=Digital_tube;
Effect_0 <= 2'b11;
end
Digital_tube:
begin
Status <= LED;
Effect_1 <= 8'b01111111;
end
default :
begin
Effect_0 <= 2'b11;
Effect_1 <=8'b01111111;
end
endcase
end
endmodule

个人觉得在分频程序和状态机状态调用程序上无错误,倒是一到赋值就有错了
Error (10137): Verilog HDL Procedural Assignment error at Status_Machine.v(34): object "Status" on left-hand side of assignment must have a variable data type

状态机使用的是Status跟你定义的reg [1:0] status第一个字母大小写不一样~~ 参考技术A reg [1:0] status; 大小写错误,应该是 reg [1:0] Status; 参考技术B 早知道先看下楼上的了,先看了一分钟... 参考技术C case(Status)改成case(status)

以上是关于在用verilog编写三段式状态机的时候,我看网上很多地方都是提到格式如下:always @ (posedge clk or negedg的主要内容,如果未能解决你的问题,请参考以下文章

如何用verilog设计有限状态机

一个关于verilog 状态机的问题程序,综合的时候出了点错误,希望各位可以帮忙解决下问题

Verilog 三段式状态机中第三个always块的问题

怎么定义Verilog状态机每个状态执行啥动作?

verilog状态机中的一个状态执行时间问题

verilog三段式状态机中的问题,第三个always