FPGA活用回路&サンプル記述集(1) ―― アナログ信号入出力回路

石谷 真

● NCOの記述

 リスト3-1が今回のNCOのVerilog HDL記述です.NCOの本質は累加算器ですから,
  div <= div + di ;
の1行です.この累加算器の上位8ビットをcase文で作成したROMテーブルで正弦波に変換しています.もちろんメモリ・コアを使用したROMブロックを使っても構いません.


module nco(di, wave, clk, nreset) ;
        input [11:0]di ;←※12
        input clk ;
        input nreset ;
        output [7:0]wave ;    ※12↑
 
        reg [15:0]div ; ←※13
 
        reg [15:0]dii ;
        reg [7:0]wave ;
        always @( posedge clk or negedge nreset )
        begin
          if( nreset<= 0 ) begin←※14
            div <= 0 ;
            dii <= 0 ;
          end
          else begin
          div <= div + di ;   ↑※14
          case (div[15:8]) ←※15
              0:wave <= 8'h00 ; 1:wave <= 8'h00 ;
              2:wave <= 8'h00 ; 3:wave <= 8'h00 ;
              4:wave <= 8'h00 ; 5:wave <= 8'h00 ;
              6:wave <= 8'h01 ; 7:wave <= 8'h01 ;
              8:wave <= 8'h02 ; 9:wave <= 8'h03 ;
              10:wave <= 8'h03 ; 11:wave <= 8'h04 ;
              12:wave <= 8'h05 ; 13:wave <= 8'h06 ;
              14:wave <= 8'h07 ; 15:wave <= 8'h08 ;
              16:wave <= 8'h09 ; 17:wave <= 8'h0A ;
              18:wave <= 8'h0C ; 19:wave <= 8'h0D ;
              20:wave <= 8'h0F ; 21:wave <= 8'h10 ;
              22:wave <= 8'h12 ; 23:wave <= 8'h13 ;
              24:wave <= 8'h15 ; 25:wave <= 8'h17 ;
              26:wave <= 8'h19 ; 27:wave <= 8'h1B ;
              28:wave <= 8'h1D ; 29:wave <= 8'h1F ;
              30:wave <= 8'h21 ; 31:wave <= 8'h23 ;
              32:wave <= 8'h25 ; 33:wave <= 8'h27 ;
              34:wave <= 8'h2A ; 35:wave <= 8'h2C ;
              36:wave <= 8'h2E ; 37:wave <= 8'h31 ;
              38:wave <= 8'h33 ; 39:wave <= 8'h36 ;
              40:wave <= 8'h38 ; 41:wave <= 8'h3B ;
              42:wave <= 8'h3E ; 43:wave <= 8'h40 ;
              44:wave <= 8'h43 ; 45:wave <= 8'h46 ;
              46:wave <= 8'h49 ; 47:wave <= 8'h4C ;
              48:wave <= 8'h4F ; 49:wave <= 8'h51 ;
              50:wave <= 8'h54 ; 51:wave <= 8'h57 ;
              52:wave <= 8'h5A ; 53:wave <= 8'h5D ;
              54:wave <= 8'h60 ; 55:wave <= 8'h63 ;
              ~中略~
              252:wave <= 8'h00 ; 253:wave <= 8'h00 ;
              254:wave <= 8'h00 ; 255:wave <= 8'h00 ;
            endcase
        end
    end
endmodule


リスト3-1 数値制御型発振器のVerilog HDL記述

;入出力の宣言.内部で分周された最低周波数のdi倍の周波数の正弦波がwaveから出力される
;内部で216分周する従って,最低周波数はclkの65,536分の1になる
;NCOの本体となる累加算器
;このcase文で正弦波に変換する

 最後に,このブロックを米国Mentor Graphics社の論理シミュレータModelSimでシミュレーションした例を図3-4に示します.

zu03_04.gif
図3-4 NCOブロックの動作シミュレーション結果

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日