前回に続いて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」を公開しました)