我在 Verilog 中编写一个典型的 count-to-n-then-reset-to-0 计数器。我的模块具有递增和重置计数器的逻辑。
我的问题是我不知道应该在哪里定义计数器本身。
我可以将计数器(作为 inout?)传递给模块。没关系,但是计数器仍然必须在某个地方定义,所以这对我没有任何好处。
除了这个模块之外,没有其他东西应该接触计数器,所以我想在这个模块中创建计数器,而不是传入或传出。
这是合理的标准吗?如果是这样,有人会指出如何实例化计数器的参考吗?
(我在 Verilog 的第 2 天,所以要害怕,呵呵)
编辑 - 这是代码。据我所知,它有效。我还没有实现DIR == REVERSE
。几个有趣的陷阱。(现在已注释掉)STEPPER=0
行导致原理图中出现错误;它认为 STEPPER 与地面以及其他逻辑有关。
另外,我在某些涉及的地方使用=
而不是- 我遇到了时间问题(我想。)程序分配消除了(隐藏?)问题。<=
counter
module cam(
input [7:0] DIVISOR,
input DIR,
input SPINDLE,
output reg STEPPER
);
parameter FORWARD = 1'b1;
parameter REVERSE = !FORWARD;
reg[7:0] counter = 0;
always @(posedge SPINDLE) begin
// STEPPER = 0;
if (DIR == FORWARD) begin
counter = counter + 1;
if (counter == DIVISOR) counter = 0;
end
else begin
// counter <= counter - 1;
// if (counter == (-1)) counter <= DIVISOR;
end
end
always @(negedge SPINDLE) begin
STEPPER = (counter == 0) ? 1 : 0;
end
endmodule