前回に続いてBeMicro Max10をCPU無しで使います。
BeMicro Max10をサポートしているQuartus Prime software Lite editionにはDSP用のIPが含まれています。開発環境に繋いだ状態でのみ動作する評価版ですが、ただいま勉強中なので問題ありません。
今回はNCOを使ってみます。NCOの出力周波数をWindows PCのアプリから設定します。
Windows PC →(Wifi)→ ESP-WROOM-32 →(SPI)→ BeMicro Max10
LチカのQsys画面にNCOを追加します。PIOのビット数はNCOの周波数設定用に32ビットに増やします。
HDLの記述にもNCO関連の接続を追加します。
module ledtest ( RST_N, CLK, LED1, LED2, LED3, LED4, LED5, LED6, LED7, LED8, SCLK, CS_N, MOSI, MISO ); input CLK, RST_N; output LED1, LED2, LED3, LED4, LED5, LED6, LED7, LED8; input SCLK, CS_N, MOSI; output MISO; wire [17:0] leds_sig; wire [31:0] nco_in; unsaved u0 ( .clk_clk (CLK), // clk.clk .reset_reset_n (RST_N), // reset.reset_n .spi_bridge_mosi_to_the_spislave_inst_for_spichain (MOSI), // spi_bridge.mosi_to_the_spislave_inst_for_spichain .spi_bridge_nss_to_the_spislave_inst_for_spichain (CS_N), // .nss_to_the_spislave_inst_for_spichain .spi_bridge_miso_to_and_from_the_spislave_inst_for_spichain (MISO), // .miso_to_and_from_the_spislave_inst_for_spichain .spi_bridge_sclk_to_the_spislave_inst_for_spichain (SCLK), // .sclk_to_the_spislave_inst_for_spichain .pio_nco_export (nco_in), // pio_nco.export .nco_ii_0_in_valid (1'b1), // nco_ii_0_in.valid .nco_ii_0_in_data (nco_in), // .data .nco_ii_0_out_data (leds_sig), // nco_ii_0_out.data .nco_ii_0_out_valid () // .valid ); assign LED1 = ! leds_sig[10]; assign LED2 = ! leds_sig[11]; assign LED3 = ! leds_sig[12]; assign LED4 = ! leds_sig[13]; assign LED5 = ! leds_sig[14]; assign LED6 = ! leds_sig[15]; assign LED7 = ! leds_sig[16]; assign LED8 = ! leds_sig[17]; endmodule
ピン配置は変わりません。sofファイルをFPGAに書き込むと次のようなダイアログが表示され、閉じるとNCOの動作が停止します。評価用なので仕方ありません。
NCOの周波数設定用入力はアドレス0x00000000のPIOに接続しました。動作確認用のWindowsアプリからアドレス0x00000000にデータ0xaという小さな値を書いているので目に見えるゆっくりした速度でLEDが変化します。値を大きくすると変化が速くなります。
(追記2017/9/21:Google Playに「FPGA SPI Bridge Console for Avalon Bus」を公開しました)