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