こんばわぁ。
久々のブログです。
今回はSwitch Scienceさんとかで販売している
Tiny FPGA AX2
https://www.switch-science.com/catalog/3980/
と、そのプログラマ(Tiny FPGAプログラマ)
https://www.switch-science.com/catalog/3979/
を使って、Lチカしたのでそのご報告を。
ボードに搭載されているFPGAがXO2-1200(Lattice Semiconductor)
ということで、Lattice社のDiamondを使って作っていきます。
ユーザーガイドではVerilogでのコードが書いてありましたが、
ここでは、VHDLコードを記載しておきますね。
内蔵CLKを使ったり、内蔵クロックを上位モジュールに
組み込んだりと、はじめの一歩としてはかなり敷居が
高いようにも思えますが、まぁいいでしょう(^-^;
---ここから----
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
library machxo2;
use machxo2.all;
entity LED_ONOFF is
port (
--clk : in std_logic;
out1: out std_logic);
end LED_ONOFF;
architecture RTL of LED_ONOFF is
COMPONENT OSCH
-- synthesis translate_off
GENERIC (NOM_FREQ: string := "2.56");
-- synthesis translate_on
PORT ( STDBY :IN std_logic;
OSC :OUT std_logic;
SEDSTDBY :OUT std_logic);
END COMPONENT;
attribute NOM_FREQ : string;
attribute NOM_FREQ of OSCinst0 : label is "2.56";
signal reg1:std_logic_vector(23 downto 0);
signal stdby:std_logic;
signal osc_int:std_logic;
signal stdby_sed:std_logic;
begin
OSCInst0: OSCH
-- synthesis translate_off
GENERIC MAP ( NOM_FREQ => "2.56" )
-- synthesis translate_on
PORT MAP ( STDBY=> stdby,
OSC=> osc_int,
SEDSTDBY=> stdby_sed
);
out1 <= reg1(23);
stdby <= '0';
process(osc_int) begin
if(osc_int'event and osc_int='1') then
reg1 <= reg1 + 1;
end if;
end process;
end RTL;
---ここまで---
動作的には、内蔵クロックを2.08MHzに設定して、
変数regをクロックに同期させて1ずつ足していく。
そのregの最上位ビットを出力(pin13は、ボード上のLEDにつながっています)
しています。
最初、コードはできたもののJEDICファイル(書き込むファイル)を
Tiny FPGAプログラマを使って、書けねー!と何時間か戸惑い
ましたが、PCとの接続に使ったUSBケーブルのせいでした(-_-;
きちんと通信できるケーブルにしたら、Virtual COM Portとして
認識してくれました。
Latticeの純正ダウンロードケーブルや他のFPGAライターを
使わなくても、Tiny FPGAプログラマで書けるのはいいですね。
今後は、周辺回路も作ってみたいと思います(時間があったら)。
