我是 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代表一个等于N+3的4位二进制数,先输出S的LSB
当出现第 4 位输入时,如果 N + 3 太大而不能用 4 位表示,则 V = 1;否则,V = 0。
电路总是在收到 X 的第四位后复位。假设时序电路使用以下状态表实现。
输出为 (S,V)。所有状态变化都发生在时钟脉冲的下降沿。
如果我的代码无法获得所需的结果,请指出。谢谢!</p>