【问题标题】:Verilog: Always statement, trigger on positive edge for 3 bit variableVerilog:Always 语句,在 3 位变量的上升沿触发
【发布时间】:2020-01-13 22:56:54
【问题描述】:

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

我想计算 A、B 或 C 上的正边沿数量。我有一个 3 位变量 [2:0] hallIn 来存储这些输入。下面的代码适用于 modelsim 仿真,但不适用于实际芯片。怎么会?这样做的正确方法是什么?我得到的错误信息是:73:12:73:55|Can't mix posedge/negedge use with plain signal references

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

【问题讨论】:

  • 这不是 Verilog 编程问题,而是如何进行硬件设计 问题。尝试在electronics.stackexchange.com 上提问。
  • 您的块仅由位 [2] 的上升沿触发,实际上由位 [1] 和 [0] 的两个沿(更改)触发。我怀疑它在modelsim中是否正确工作。你可能没有做足够的测试。

标签: verilog


【解决方案1】:

合成代码是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2023-01-19
    • 2018-03-08
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多