現在,FPGAとVerilogを用いて、モータの回転数をセンサでカウントする回路を作成しています。
countという名前のカウント回路を作成し、2つのセンサ(センサ1とセンサ2)があるため、count1,count2とインスタンスを2つ作成しています。
トップモジュールでは以下のように宣言しています。
count count1(
.CLK( CLK),
.SENSOR( SENSOR1),
.COUNT_DIGI_0( COUNT_DIGI_20),
.COUNT_DIGI_1( COUNT_DIGI_21),
.COUNT_DIGI_2( COUNT_DIGI_22),
);
count count2(
.CLK( CLK),
.SENSOR( SENSOR2),
.COUNT_DIGI_0( COUNT_DIGI_0),
.COUNT_DIGI_1( COUNT_DIGI_1),
.COUNT_DIGI_2( COUNT_DIGI_2),
);
countモジュール内では、SENSORが入力されると、カウント数が1upするだけです。
COUNT_DIGI_*は別の回路にカウント数を伝えるためにwireで接続しています。
最初に,センサ1をcount1に、センサ2をcount2に接続したところ、2つのカウント数に相違がでてしまいました。(count2のカウント数が多い)
センサの配線が悪いと思い、センサ1の出力をcoun1とcount2に接続してテストしてもカウント数に相違がでてしまいました。
なぜ、同じモジュールを使用し、入力も同じなのに、結果に違いが出るのでしょうか?
FPGAの特性などがあるのでしょうか?
お分かりになられる方がいらっしゃいましたら宜しくご教授お願い致します。
No.3
- 回答日時:
ハードウェアの基本的なことなので
もしかしたら失礼にあたるかも知れませんが念の為。
SENSOR の信号波形は大丈夫でしょうか。
デジタル波形として文句なければよいですが、
オープンコレクタなのにプルアップ抵抗がないか値が大きすぎて立ち上がりが鈍ってるとか
信号伝達経路が長くてスレッショルドギリギリのノイズが載ってるとか
High レベルの電圧が低すぎるとか。
あと、フォトセンサなら大丈夫とは思いますが
メカ接点にあるチャタリング(バウンス)のような余分なエッジがあるとか。
このような場合、2つの入力端子の電気的特性や伝達経路のわずかな違いにより
エッジを認識する回数が異なり結果カウント数が異なる、という結果も有り得ます。
そんなの確認済み、という事でしたら失礼しました。
ご回答ありがとうございます。
当初はマイコンを使用して回路を組んでおり、問題はありませんでした。また、波形も確認済みですので、問題はないと考えます。
当方経験があまりありませんので、基本的なことでもご指摘いただけると幸いです。
No.2ベストアンサー
- 回答日時:
always @(posedge PS or posedge C_RESET)
の PS ていうのは何ですか?
私がcountモジュールの中身を見たいといったのは、主に、CLKに同期するカウンタ(posedge CLK)なのか、非同期カウンタ(posedge SENSOR)なのかを知りたかったらなんですが、posedge PSとは予想外ですね。。
とりあえず、先回りして言うと、
非同期入力のカウンタ(posedge SENSOR)は、FPGAの種類によっては、うまく扱えない場合があります。
ここらへんは、FPGAの仕様を調べてください、としかいえませんが、非同期カウンタは、
>なぜ、同じモジュールを使用し、入力も同じなのに、結果に違いが出るのでしょうか?FPGAの特性などがあるのでしょうか?
となる場合もないとは言えません。
とくに、CLKが入力されているモジュールは、コンパイラが特別扱いして、暗黙のうちに、posedge CLKがある前提でコンパイルされる場合とかもあるので。(コンパイラの設定なんかにもよりますが)
もし、CLKの周波数が、SENSOR入力の頻度に比べて十分に高くて、取りこぼすおそれがないなら、CLK同期カウンタにすると、変なことがおこる可能性は減ると思います。
どうしても、CLKとは非同期にしたいなら、ちょっとマニュアルを読んでみてください。
ご回答ありがとうございます。
申し訳ありません。PSはPhoto Seneorの略で、こちらに投稿するときにSENSORに書き換えていたのですが、書き換え漏れがあったようです。
>>もし、CLKの周波数が、SENSOR入力の頻度に比べて十分に高くて、取りこぼすおそれがないなら、CLK同期カウンタにすると、変なことがおこる可能性は減ると思います。
CLK50MHzに対して、SENSORはせいぜい80Hzですので、一度同期カウンタに変更して試してみたいと思います。
No.1
- 回答日時:
countモジュールの中身を見せてください。
ご回答ありがとうございます。
countモジュールは以下のようになります。
module count(
SENSOR,
CLK,
C_RESET,
COUNT_DIGI_0,
COUNT_DIGI_1,
COUNT_DIGI_2,
);
input SENSOR;
input CLK;
input C_RESET;
reg [7:0] R_COUNT;
output reg [7:0] COUNT_DIGI_0;
output reg [7:0] COUNT_DIGI_1;
output reg [7:0] COUNT_DIGI_2;
always @(posedge PS or posedge C_RESET)
begin
//Count Clear
if(C_RESET == 1'b1)
R_COUNT <= 8'b0;
else begin
//Count Up
R_COUNT <= R_COUNT + 1'b1;
if (R_COUNT < 4'd10) begin
COUNT_DIGI_0 <= R_COUNT + 6'd48;
COUNT_DIGI_1 <= 8'b0 + 6'd48;
COUNT_DIGI_2 <= 8'b0 + 6'd48;
end else if (4'd10 <= R_COUNT && R_COUNT < 7'd100) begin
COUNT_DIGI_0 <= R_COUNT % 4'd10 + 6'd48;
COUNT_DIGI_1 <= R_COUNT / 4'd10 + 6'd48;
COUNT_DIGI_2 <= 8'b0 + 6'd48;
end else if (4'd100 <= R_COUNT && R_COUNT < 7'd1000) begin
COUNT_DIGI_0 <= R_COUNT % 4'd10 + 6'd48;
COUNT_DIGI_1 <= R_COUNT / 4'd10 % 4`d10 + 6'd48;
COUNT_DIGI_2 <= R_COUNT / 7'd100 + 6'd48;
end
end
end
endmodule
C_RESET入力でCOUNTを同時にクリアしています。
始めてVerilog-HDLを用いてプログラムしていますので、お見苦しい点などあると思いますが、何卒よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Visual Basic(VBA) Sheet1の出荷日と品名が並んだ表からSheet2の品名別出荷日別の個数一覧表を作っています。 オ 3 2022/12/01 23:54
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Visual Basic(VBA) 1つの入力フォルダの値を読み込み、3分割をして新しい変数に代入する方法を教えていただきたいです。 読 4 2022/10/17 20:52
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Visual Basic(VBA) vba シートコピーの不具合 1 2022/06/25 17:48
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
電気回路について
-
400V 3相4線式について...
-
トライアック位相制御回路特性...
-
60Hz誘導電動機を関東の50H...
-
同調回路と共振回路の違いについて
-
分岐回路と分岐幹線の違いは何...
-
NPNとPNPの違いについて
-
電気設備で使われるGCの意味...
-
EVT(GPT)の電圧比について
-
ブザーの音を大きくする
-
近接スイッチの2線式と3線式...
-
同一電圧値、異なる電源供給源...
-
リップルについて
-
利得と増幅率
-
電気回路のπ型回路の2端子対回...
-
電流値(AC・DC)
-
オシロの入力インピーダンスに...
-
T型等価回路とπ型等価回路について
-
クランプ回路
-
[LT Spice] オペアンプのシミュ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
400V 3相4線式について...
-
パルスとレベルについて
-
近接スイッチの2線式と3線式...
-
NPNとPNPの違いについて
-
電気設備で使われるGCの意味...
-
EVT(GPT)の電圧比について
-
同一電圧値、異なる電源供給源...
-
オペアンプを使用したアナログ...
-
3端子レギュレータ、トランジス...
-
4入力XORの論理式
-
[LT Spice] オペアンプのシミュ...
-
クランプ回路
-
電気回路について
-
利得と増幅率
-
オペアンプ/反転増幅器/頭打ち
-
オペアンプの故障に関する質問
-
60Hz誘導電動機を関東の50H...
-
電気回路のπ型回路の2端子対回...
-
オシロの入力インピーダンスに...
-
ベース変調方式におけるLC共振
おすすめ情報