【问题标题】:verilog syntax error near always几乎总是verilog语法错误
【发布时间】: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. 一个 1 位输入 (X)
  2. 时钟输入 (CLK)
  3. 两个 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 @() 语句的条件时理解有限

标签: verilog vivado


【解决方案1】:

基本上每个always块都在描述一组触发器、一组锁存器或一组组合电路。

在您的代码中,您使用“negedge clock”和“x”混合了边缘和电平灵敏度。如果您的 FSM 仅对时钟的下降沿敏感,则从始终阻止的敏感度列表中删除“x”。

电平和边沿的混合敏感列表不可合成,因为触发器不能同时边沿触发和电平触发。 检查此链接: Synthesis of `always` blocks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多