0
我是Verilog的新手。當我嘗試編寫有限狀態機的代碼時。我得到: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。LSB S的將被輸出第一
當第四比特的輸入發生時,V = 1,如果N + 3是太大而 由4位表示;否則,V = 0.
在接收到X的第四位後,電路總是復位。假設時序電路採用以下 狀態表來實現。
輸出是(S,V)。所有狀態改變都發生在時鐘脈衝的下降沿。
如果我的代碼有問題以獲得所需的結果,請指出。謝謝!
「reg v」聲明後(之前總是)沒有分號? – happydave
@happydave哦,謝謝你指出這個錯誤!但總是存在錯誤。 Vivado表示「合成器不支持[Synth 8-434]混合電平敏感和邊緣觸發事件控制」我對寫入always @()語句的條件的理解有限 – Jiang