重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

現在、FPGAとVerilogHDLを使用して、入力された値によってDuty比50%の方形波の周波数を変更するプログラムを作成しています。

reg [9:0] HALF_SPEED;
reg [9:0] SPEED;
reg [4:0] ORDER_SPEED;
reg [9:0] HZ;

always @(posedge CLK) begin
HZ = ORDER_SPEED * 5'd20 + 6'd40;
SPEED <= 16'd50000 / HZ;
HALF_SPEED <= SPEED / 2'd2;
end

上記の様なプログラムになり、もしORDER_SPEEDが20なら
HZ = 440
SPEED =113
HALF_SPEED = 56
になり、約440Hz,Duty50%の方形波を出力します。

機能自体は問題ないのですが、ロジックエレメント数を消費し過ぎてしまいます。
上記のような機能を、ロジックエレメント数を抑えて実現するためにはどのように
すればよろしいでしょうか?

A 回答 (1件)

除算器を、組み合わせ回路で作ったら、そりゃ巨大になるでしょうね。

。。

質問者さんの、やりたいことをやるのに除算器は不要です。

質問者さんの方式は、最初に、SPEED、HALF_SPEEDを計算しておいて、
その後は、クロックのたびに、カウンタに1足してって、HALF_SPEEDにになるたびに出力を反転させる、ってことですね。

そうではなくて、
クロックのたびに、カウンタに(1ではなくて) HZ を足していって、カウンタが 16'd50000/2 になったら出力を反転させればよい。
SPEED、HALF_SPEEDなんかを計算する必要はないです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
ロジックエレメント数を6割程度節約することができました。
プログラムの工夫で、こんなにも変化があるのかと驚きました。ほかのプログラムも見直してみます。
本当にありがとうございました。

お礼日時:2013/10/10 09:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!