LEDチカチカ
BeMicro Max10用のVHDLコード。
-- LED display demo on BeMicro MAX10 -- Shifting LED pattern every second. library ieee; use ieee.std_logic_1164.all; entity blink_top is port ( reset : in std_logic; clock : in std_logic; -- assign 50Mhz clock. led : out std_logic_vector( 7 downto 0 ) ); end blink_top; architecture rtl of blink_top is signal count : integer; -- 50Mhz divider signal pattern : std_logic_vector( 15 downto 0 ); -- LED internal pattern. type stateType is ( counting, saturated ); -- for State machine signal state : stateType ; begin process ( clock, reset ) begin if reset = '0' then -- async reset the internal state and signals; led <= ( others => '0' ); pattern <= "0000000011111111"; count <= 1; state <= saturated; elsif clock'event and clock = '1' then -- State transition case state is -- count up till 50M when counting => count <= count + 1; if count > 50000000 then state <= saturated; end if; -- output the display pattern to LED, then, rotate the pattern -- initialize the counter when saturated => led <= pattern( 15 downto 8 ); -- output to LED pattern <= pattern( 14 downto 0 ) & pattern(15); -- rotate pattern count <= 1; -- reset counter state <= counting; end case; end if; end process; end rtl;
ubuntuとquartus
- Ubuntu 14.04 LTS 64bit 日本語版
- Quartus Prime 15.1
起動まで確認済み。32bit版では動かない。
追記:
- /opt配下にインストールすると、どうしてもoption等を保存してくれない。結局~/配下にインストールした。
- 15.1にupdate1を適用した。
- USB Blasterを安定動作させるために、/etc/udev/rules.d/に51-usbblaster.rules を作った
# Altera USB-Blaster for Quartus FPGA Software
SUBSYSTEMS=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="0666"
SUBSYSTEMS=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6002", MODE="0666"
SUBSYSTEMS=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6003", MODE="0666"
# USB-Blaster II
SUBSYSTEMS=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6010", MODE="0666"
SUBSYSTEMS=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6810", MODE="0666"
現状、sofファイルはターゲットにダウンロードできる。pofファイルはツールにロードした段階でツールがクラッシュ。
ubuntuはサポート対象外。
qemuでu-boot
ubuntu 14.04 LTS。
apt-get install でqemuをインストールする。
sudo apt-get install gcc-arm-none-eqbi sudo apt-get install qemu
u-bootは2010.09をダウンロードする。これよりあとのバージョンだとqemuでは起動しない。ダウンロードしたらmakeをかける。
make all versatilepb_config arch=ARM CROSS_COMPILE=arm-none-eabi-
qemuで起動する。
qemu-system-arm -M versatilepb -m 128M -nographic -kernel u-boot.bin
U-Boot 2010.09 (Aug 21 2015 - 17:33:49) DRAM: 0 Bytes Flash: 64 MiB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: SMC91111-0
range()とfor文
range(a,b)で、aからb-1の範囲オブジェクトを作る。
range(1,5)
だと、値の範囲は1から4である(5は範囲に含まない)。0から始まる範囲の場合、最初の0は省いて良い。
range(0)
for文を回すときにはrange()を使う。
for i in range(5): print(i)
実行すると0から5までの数字が印字される。
for文は範囲だけでなく、リストの要素に対して回すことも出来る。
b = ['a', 'b', 'c', 'd'] for i in b: print(i)
これでリストbの要素がすべて印字される。
辞書に対してfor文を回すことも出来る。
a = { '春':'あけぼの', '夏':'よる', '秋':'ゆうぐれ','冬':'つとめて' } for v,u in a.items(): print(v,u)
a.items()は、キーと値のペアを列挙する。そのため、印字結果はすべてのキーと値1行ずつ印字したものになる。なお、印字される順序は辞書を作った順序では無い。実装はハッシュなので順序は制御できないのである。
リストと辞書
リスト
オブジェクトをコンマで区切って[]で囲むとリストになる
a = [ 1,2,3,4,5 ] print[1]
オブジェクトは数値でも文字列でもなんでもいい。リストでもいい。
リストは添え字を持つ。順番に0,1,2...となる。上の例だと、0番目のオブジェクトにアクセスするにはa[0]とする。上のプログラムは実行すると「2」を出力する
スライシング機能を使ってサブリストを抽出できる。
a[1:3]
は、添え字1の手前から添え字3の手前までをサブリストとして抽出することを意味する。上の例では値は[2,3,4]となる。
辞書
リストは添え字で順序されたオブジェクトの列だった。辞書はキーを持つオブジェクトの集合である。キーとオブジェクトはコロン(:)で区切る。これらをコンマで区切って並べ、{}でくるむ。キーは定数を使う。
a = { '春'|'あけぼの', '夏'|'よる', '秋'|'ゆうぐれ', '冬'|'つとめて' } print(a['夏'])
辞書はキーによるアクセスを行う。上の例は、実行すると「よる」を出力する。
リストと辞書は、作成時の記号が異なる。リストは、辞書は{}である。しかし、アクセス時にはいずれもを使う。