Verilog:始终声明,在 3 位变量的上升沿触发

Verilog: Always statement, trigger on positive edge for 3 bit variable

我的项目是使用 CPDL,我正在使用 verilog 对其进行编程以对 BLDC 电机进行换向。该过程的一部分是读取霍尔传感器 A、B、C。

我想计算 A、B 或 C 上的上升沿数量。我有一个 3 位变量 [2:0] hallIn 来存储这些输入。下面的代码适用于 modelsim 模拟,但不适用于实际芯片。怎么会?这样做的正确方法是什么?我收到的错误消息是:73:12:73:55|不能将 posedge/negedge 与纯信号引用混合使用

always @ (posedge hallIn[2] or hallIn[1] or hallIn[0])

综合代码是 Verilog 让您做的事情的一个子集。可综合代码需要一个可以映射到逻辑单元的编码结构。不可综合的代码用于行为建模和测试平台。

触发器通常应由公共时钟源同步;不是数据。使用时钟,您可以通过将输入当前值与之前的值进行比较来检测姿势数据。

示例:

assign posedge_detected = |(hallIn & ~prev_hallIn);

always @(posedge clock) begin
  if (reset) begin
    prev_hallIn <= 3'b000;
    count <= 16'h0000;
  end
  else begin
    prev_hallIn <= hallIn;
    count <= count + posedge_detected;
    end
  end
end