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
我的项目是使用 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