【发布时间】:2016-04-10 01:50:04
【问题描述】:
我是 Verilog 的新手。当我尝试为有限状态机编写代码时。我明白了:
- [Synth 8-434] 合成不支持混合电平敏感和边沿触发事件控件
这是我的代码:
module controller1(x, clk, s, v);
input x;
input clk;
output s;
output v;
reg [2:0] state;
reg s;
reg v;
always @ (negedge clk or x) begin
case (state)
3'b0 : begin
state <= x ? 3'b1 : 3'b10;
s = x ? 0 : 1;
v = 0;
end
3'b10 : begin
state <= x ? 3'b11 : 3'b101;
s = x ? 0 : 1;
v = 0;
end
3'b1 : begin
state <= 3'b11;
s = x ? 1 : 0;
v = 0;
end
3'b101 : begin
state <= 3'b100;
s = x ? 1 : 0;
v = 0;
end
3'b11 : begin
state <= x ? 3'b111 : 3'b100;
s = x ? 0 : 1;
v = 0;
end
3'b100 : begin
state <= 3'b0;
s = x ? 1 : 0;
v = 0;
end
3'b111 : begin
state <= 3'b0;
s = x ? 0 : 1;
v = x ? 1 : 0;
end
endcase
end
endmodule
问题是:
时序电路有
- 一个 1 位输入 (X)
- 时钟输入 (CLK)
- 两个 1 位输出(S 和 V)
X代表一个4位二进制数N。4位数字一次输入一位,从最低有效位(LSB)开始。
S代表一个4位二进制数,等于N+3,先输出S的LSB
当出现第四位输入时,如果 N + 3 太大而无法计算,则 V = 1 用4位表示;否则,V = 0。
电路总是在收到 X 的第四位后复位。假设时序电路通过以下方式实现 状态表。
输出是 (S,V)。所有状态变化都发生在时钟脉冲的下降沿。
如果我的代码无法获得所需的结果,请指出。谢谢!
【问题讨论】:
-
“reg v”声明后没有分号(就在之前总是)?
-
@happydave 哦,谢谢你指出这个错误!但是始终存在错误。 Vivado 说“[Synth 8-434] 不支持合成混合电平敏感和边缘触发事件控制”我在编写 always @() 语句的条件时理解有限