我在做EDA设计时下面这个语句不能被综合请问怎么改??repeat(2)@(posedge clk);这个语句在下面这个程序段中always@(state or x)begincase(state)s0:if(x)next_state=s1;elsenext_state=s0;s1:beginrepeat(`Y2RDELAY)@(posedge clock);next_state=s2;ends2:beginrepeat(`R2GDELAY)@(posedge clock); next_state=s3;end s3:if(x)next_state=s3;elsenext_state=s4;s4:beginrepeat(`Y2RDELAY)@(posedge clock);next_state=s0;enddefault:next_state=s0;endcaseendendmodulerepeat(`Y2RDELAY)@(posedge clock);这条语句怎么替代
2 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
你也就是想让下面的语句执行2次对吧,可以用计数器实现。程序开始计数器初值赋0;比如说S2状态可以像下面这样写:
s2:begin
if(cnt==1)
begin
cnt<=0;
next_state<=S 3;
end
else
begin
cnt<=cnt+1;
next_state<=S2;
end
end
慕工程0101907
TA贡献1887条经验 获得超5个赞
always@(state or x)
这是个组合逻辑电路
然后你在内部用 @(posedge clock)这是个时序逻辑电路
你还是没理解代码与硬件映射的关系
请参考标准状态机写法
always@(posedge clock or negedge reset_n)begin
if( !reset_n)
CurrState <= 4'b0;
else
CurrState <= NextState;
end
always@(*) begin
NextState = CurrState;
case(CurrState)
State0:
if(...)
NextState = State1;
State1:
if(...)
NextState = State2;
....
default: ....;
endcase
end
- 2 回答
- 0 关注
- 195 浏览
添加回答
举报
0/150
提交
取消