LoginSignup
1
0

More than 5 years have passed since last update.

DE0-Nanoでダブルパルス

Last updated at Posted at 2017-02-12

DE0-Nanoでダブルパルスを出すVerilog HDLのリスト。
初学者ゆえ、よくわかっていないで書いている部分が多々あります。
「こういう書き方のほうがよい」等のアドバイスをいただけると助かります。

module double_pulse(CLOCK, GPIO);

    input CLOCK;  // 50MHz. 1clock = 20nsec.

    output [33:0] GPIO;

    parameter [17:0] pulse_cycle = 199999;  // 200000*20nsec = 4000usec

    parameter [17:0] pulse1_start = 0;
    parameter [17:0] pulse1_width = 200;  // 200*20nsec = 4usec

    parameter [17:0] pulse_interval = 25000;  // 25000*20nsec = 500usec

    parameter [17:0] pulse2_start = pulse1_width + pulse_interval;
    parameter [17:0] pulse2_width = pulse1_width;

    reg [17:0] pulse_cycle_count = 0;
    reg pulse;

    always @(posedge CLOCK) begin

        if(pulse_cycle_count == pulse_cycle) begin
            pulse_cycle_count = 0;
        end

        else begin
            pulse_cycle_count = pulse_cycle_count + 1;
        end

    end

    always @(posedge CLOCK) begin

        if(pulse_cycle_count == pulse1_start) begin
            pulse = 1;
        end

        else if(pulse_cycle_count == pulse1_start + pulse1_width) begin
            pulse = 0;
        end

        if(pulse_cycle_count == pulse2_start) begin
            pulse = 1;
        end

        else if(pulse_cycle_count == pulse2_start + pulse2_width) begin
            pulse = 0;
        end

    end

    assign GPIO[0] = CLOCK;
    assign GPIO[1] = pulse;

endmodule

DSC_0057.JPG

やっていることは単純にクロックでカウンターを回して周期をつくり、何クロック目でパルスをオン/オフするか条件分岐しているだけです。
だから分解能は20nsec。
どうにか工夫して10nsecまであげられないものでしょうか。

1
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0