#始めに
久しぶりにTang Primerを使ってみようと、環境設定からやってみました。すると多少はまったので、文章にしておいておこうと思い、書きました。IDEの立ち上げと、確認のために、UARTのループバックテストを動かしてみます。
####2021/8/12変更
- Tang Primerの綴りを間違えていました。恥ずかしい・・・。
- IDEのダウンロードページが移動していたのでURLを更新しました。
- ライセンスが2020/03で切れていたので、ライセンスファイルを変更しました。
#参考ページ
Windows10で署名なしドライバ をインストールする方法
#準備物
- Tang Primer
- Windows10 PC
- USB-UART変換器
#IDEのインストール
Tang PrimerのIDEはIDEダウンロードページからダウンロードします。ページには、いくつかのバージョンがありますが、ダウンロードできないものがほとんどです。以下の2つのファイルをダウンロードしてください。
- TD1812_win.exe
- Anlogic_202003.lic
TD1812_win.exeの方をクリックすると、インストールが始まります。いろいろ中国語で聞かれますが、適当に押しているとインストールが完了します。
これでは、ライセンスが古いと怒られるので、Anlogic_20220130.licをAnlogic.licにリネームした上で、
C:\Anlogic\TD4.3.815\license
に上書きコピーをしてください。
次に、書き込みのためのドライバをインストールします。
まず、正式な方法を書きます。
Tang PrimerをIDEをインストールしたPCに接続します。すると、デバイスマネージャを開くと、「ユニバーサルシリアルバス」の項目の下に「USB-JTAG-Cable」ができます。これを右クリックして、ドライバの更新を選びます。ここで「コンピュータを参照してドライバーソフトウェアを検索」を選択します。パスに
C:\Anlogic\TD4.3.815\driver\win8_10_64
を入れてそのドライバをインストールします。デバイスマネージャを開くと、ユニバーサルシリアルバスコントローラの下に「Anlogic usb cable v0.1」というドライバがインストールされます。ただ、筆者の場合は、ドライバに警告マークがつき、署名がおかしいといわれます。この状態では、IDEのダウンローダからTang Premierが認識されずに、ビットストリームの書き込みが一切できません。
このような場合になったら、無署名のドライバインストールと同じ方法をとるしかありません。一度ドライバを削除して、「Windows10で署名なしドライバ をインストールする方法」に従って、無署名のドライバーインストールをする必要があります。うまくいくと、警告マークのないドライバとなります。
UARTループバックでテスト
環境のテストのために、UARTループバックテストを動かしてみます。
まず、筆者のレポジトリからUARTテストのコードをダウンロードします。このディレクトリのうち、constraintsとsrc2つのフォルダの中のファイルをIDEのPCに入れてください。IDEを立ち上げ、Project→New Projectで新プロジェクトを作ります。Project NameとProject Pathはお好みで、Device FamilyはEG4、Device NameはEG4S20BG256を選択してください。Hierarchyを右クリック、Add Sourcesで、先ほど用意した.vファイルと制約ファイルを読み込みます。pll.vが無いと出ますので、PLLの設定をします。tools→IP GeneratorでCreate a new IP coreを選択します。Fileのところに「pll」と打ち込みOKを押すと、IPの一覧が出てきます。この中のPhase Locked Loop - PLLの下のPLLという項目を選びます。続くPLLの設定では、input frequency: 24MHz、Bandwidth setting Mediam、Use C0 clock : 48MHz
これでPLLが出来上がります。
あとは、緑色のRunボタンを押せば、合成が始まります。
合成が終わったら、Downloadを選択します。一番上の欄にFPGAの型番が選択されていることを確認してください。No hardwareになっていたら、ケーブル等何かの要因でFPGAが認識されていません。次にAddで合成の結果を選択します。File Selectionに欄が追加されますので、それを選択すると、Runボタンが有効になります。ここで、ModeをJTAGからPROGRAM FLASHに変更してください。これでRunを押すと書き込みが開始します。
書き込みができたら、動作チェックをしてみます。FPGAのピンと、USB-UART変換器のピンを3本接続します。FPGAは、
B15 : tx
B16 : rx
を使っております。
Gnd,Tx,Rxを接続してください。お約束ですが、txはrx,rxはtxに接続してください。
できたら、FPGAに電源を入れて、PCでteratermを立ち上げてください。(無ければインストールしてください。)teratermの新しい接続で、シリアルを選択してください。シリアルが出ない場合は、USB-UART変換器が認識されていないので、ドライバの確認をしてください。
スピードは9600bpsなので、設定してください。キーボードで打つと、キャラクターが一度FPGAまで送信され、ループバックして、画面に表示されています。このとき、FPGAで1キャラクタ受け付ける度にLEDの表示が変化することが確認できると思います。
#ボーレートの変更
ボーレートや、動作周波数は設定変更が必要です。設定には動作クロック周波数と、ボーレート2つの数値を使用します。今回は自分で作るものの都合で動作クロック48MHz、ボーレート9600bpsになっております。
動作周波数clockfreq(MHz)とボーレートbaudrate(bps)の2つの数字から以下の式で算出できます。
TERM = (clockfreq/baudrate) * 1000 * 1000
HALF = TERM / 2
これらの数値をuart_if.vに設定していただければ、お好みのクロック周波数、ボーレートに変更できると思います。
前述の48MHz,9600bpsだと、
TERM = (48/9600) * 1000 * 1000 = 5000
HALF = 5000 / 2 = 2500
という数字になります。
#最後に
最初はTang Nanoでいくつか論理を組んでいたのですが、回路規模が溢れてしまい、Tang Primerを使うことになりました。同じTangシリーズなのにFPGAは全く関連が無いので、IDEから入れ直しなのはなかなかなものです。今回は他でUARTを使う必要が出て、組んでみたのですが、他のFPGAでも使えそうなので、公開することにしました。お役に立てればと思います。