私は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