アンテナコンセントにダミー抵抗をつけてアンテナレベルを測定してみた
使用していない壁面のテレビコンセントを終端し、アンテナレベルが変わるかどうかを簡易測定してみた。
条件
- 壁面テレビコンセント : TVで使用1、空き3
- ダミー抵抗 : 二幸電気興業 FWTN-5P
- TV : SONY X8500B
- 測定方法
テレビのアンテナレベル表示機能を使用したレベル測定。10秒程度の表示の中で、ピークの値を採用した。
終端なしの状態で測定後、空いている3つのTVコンセントを終端し、同様に測定した。 - 結果
全体的に改善傾向がみられた。数は少ないがレベルが下がるものもあった。
青が終端前、赤が終端後。
購入したダミー抵抗はこれ
普段は平気だけど天気が悪い日にテレビにブロックノイズが乗るなど、微妙に信号レベルが足りていない場合は手間をかけずに改善できるかも。安いし。ブースターの代わりになるほどの劇的な改善は見込めない。(そりゃそうだ)
vim-lspのSystemverilogを試してみた
概要
最近流行りのLSP(Language Server Protocol)を導入してみました。 Systemverilogはニッチな言語なので、導入記事無かったので。。。 違うところは指摘してほしいです。
ただ、定義ジャンプとか非対応!って言われるので、何とか対応したいところです。わからん。
vim-plugの導入
deinも使ってみましたが、導入説明の記事でvim-plugを使っているのと、 使ってみて使いやすかったので、鞍替えです。
githubのサイトを見ながら導入します。
上記の説明にあるWindows (PowerShell)をコピペすると、必要なファイルが~\vimfiles\autoloadに落ちてきます。コマンドプロンプトではなく、PowerShellで行ってください。Shift+右クリックで起動できますが、出ない場合はスタートでpowershellで検索してください。
あとは、vimrcの中に、
call plug#begin() call plug#end()
と書き、beginとendの中に管理したいプラグインのアドレスを入れれば準備完了です。次回起動時に、:PlugInstallと打つと自動でインストールされます。
vim-lspの導入
これに関しては、mattnさんの記事を見ながらやるといいと思います。
私が分かりづらかったところだけ補足します。
文章の中ほどに
その為、新しい Language Server を導入する度に以下の様な設定が増えていき、設定ファイルがどんどん増えてしまっていました。それが vim-lsp-settings の導入により、その殆どを消し去る事ができました。以下が僕の ~/.vim/_config/200-lsp.vim です。
とありますが、これはvimrcをプラグインの設定ごとに分割しているのだと思われます。vimrcの分割に関しては wakame.hatenablog.jp こちらが分かりやすいです。
分割しない場合はvimrcにそのまま記載すればよいでしょう。最終的に出来上がったvimrcはこうなりました。
" Plugin "--------------------------------------------- call plug#begin() " vim-lsp Plug 'prabirshrestha/async.vim' Plug 'prabirshrestha/asyncomplete.vim' Plug 'prabirshrestha/asyncomplete-lsp.vim' Plug 'prabirshrestha/vim-lsp' Plug 'mattn/vim-lsp-settings' "Plug 'mattn/vim-lsp-icons' call plug#end() "LSP Config "------------------------------- if empty(globpath(&rtp, 'autoload/lsp.vim')) finish endif function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal signcolumn=yes nmap <buffer> gd <plug>(lsp-definition) nmap <buffer> <f2> <plug>(lsp-rename) inoremap <expr> <cr> pumvisible() ? "\<c-y>\<cr>" : "\<cr>" endfunction augroup lsp_install au! autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() augroup END command! LspDebug let lsp_log_verbose=1 | let lsp_log_file = expand('~/lsp.log') let g:lsp_diagnostics_enabled = 1 let g:lsp_diagnostics_echo_cursor = 1 let g:asyncomplete_auto_popup = 1 let g:asyncomplete_auto_completeopt = 0 let g:asyncomplete_popup_delay = 200 let g:lsp_text_edit_enabled = 1
LSP Config以下の内容はよくわからないのでmattnさんの記事そのままです。
iconに関しては鬱陶しい必要ないのでコメントアウトしています。
この状態でgvimを起動し、:PlugInstallを行うと一通りのプラグインがインストールされます。
次に.svファイルを開き、なすがままに:LspInstallServerを実行すると完了です。
svlintの設定をする
vim-lspではSystemverilogのリンター?にsvlintを使用しています。ただ、デフォルトではレガシーな現場で使うには適さないルールが多く有効になっています。また、プロジェクト毎にルールが変わる場合もあるでしょう。必要なルールのみ有効にします。
以下のページを見ながら、.svlint.tomlを作成、プロジェクトルートに置きます。windowsの場合、リリースページからのダウンロードで実行ファイルを落とし、svlint.exeのフォルダでコマンドを実行するとよいでしょう。
ここまでやってやっと使い物になりそうな感じです。
VUnitのテストを上位階層で一気に流す
ユニットテストをやりつつ、リリース前に全てのテストが通らないとリリース出来ないようにしたいなと思い、VUnitのスクリプトを弄りました。
最上位のrun_all_tests.pyを流すと、新たにワーキングディレクトリを作り、下位ディレクトリのrun.pyを探してまとめて流してくれます。
Systemverilogで流すときに、
from vunit.verilog import Vunit
としなければならない所を忘れていて盛大にハマりました。。。
まずは通常のrun.pyを修正します。スクリプトとして外部から呼び出した場合と、メインで呼び出した場合で処理を分けます。
from os.path import join, dirname from vunit.verilog import VUnit def create_test_suite(prj): root = dirname(__file__) src_path = join(dirname(__file__), "path_your_files") tb_work_lib = prj.add_library("unique_lib_name") tb_work_lib.add_source_files(join(src_path, "*.sv")) tb_work_lib.add_source_files(join(root, "*.sv")) tb_work_lib.set_sim_option("modelsim.vsim_flags",["-novopt"]) if __name__ == '__main__': prj = VUnit.from_argv() create_test_suite(prj) prj.main()
次に、上の階層のスクリプトを書きます。下の階層のrun.pyを探して実行します。
from os.path import join, dirname # from vunit import VUnit # VHDL from vunit.verilog import VUnit # Verilog from glob import glob import imp def create_test_suites(prj): root = dirname(__file__) run_scripts = glob(join(root, "*", "run.py")) for run_script in run_scripts: file_handle, path_name, description = imp.find_module("run", [dirname(run_script)]) run = imp.load_module("run", file_handle, path_name, description) run.create_test_suite(prj) file_handle.close() prj = VUnit.from_argv() create_test_suites(prj) prj.main()
これでテストレポートもまとめて吐いてくれるし、テストが増えても上位階層は変更せずにすみます。
previmでmarkdownのプレビューを行う際にタイミングチャートを表示する
プレビューイメージ
使える書き方
問題点
- asciidocのプレビューを無効化しているので、asciidocのプレビューができない
- ブラウザを閉じている状態でプレビューを行うと固まる
コード
githubでprevimをforkして変更を加えています。 github.com
概要
今までタイミングチャートをexcelやvisioで作成していましたが、メンテナンス性の悪さ、履歴や管理のしにくさにより限界を感じ、テキストベースで管理できないか検討した際、tchart-coffeeとWaveDromの二つのツールを見つけました。 どちらもjavascriptベースなので、previmに移植し、タイミングチャートを書けるようにしました。
PyverilogをWindowsで動かしてみた
概要
- PATHを通せばexample通りで問題ない
- Pythonの環境構築をAnacondaのインストールで行ったので、その際にどうするかの覚書
- spiderから実行する方法はわかりませんでした
環境構築
Anacondaのインストール
PythonをWindowsで使えるようにする際、ライブラリ関係をいろいろ入れるのが大変だと思ったので、 計算ライブラリ等いろいろ同梱されているらしいAnacondaを入れました。
以下のページのDownload for Windowsよりダウンロードします。 PyGraphvisを使用する場合は2.x系じゃないと動かないらしい。 インストール時にPATHを通すか聞かれるが、not recommendedらしいのでチェックは入れなかった。
Pyverilogの入手
GitHub上にありますので、適当なフォルダにCloneするかDownloadしてくだい。
icaros verilog (iverilog) の入手
フリーのverilog simulatorです。 vimやatom,vscodeのプラグインで使用されているので、入れておいて損はないでしょう。
コマンドプロンプトでpyverilogを使用してverilogの構文解析をしてみる
先ほど言った通り、iverilogやPythonにPATHが通っていないので とりあえず一時的にPATHを通します。 コマンドプロンプトを起動し、以下のコマンドを打ちます。 インストールしたパスや、Anacondaのバージョンが違う場合は適宜書き換えてください。
set PATH=%PATH%;C:\iverilog\bin;C:\Users*****\Anaconda3
この状態で、
python pyverilog\examples\example_parser.py test.v
を実行すると、想定の出力が得られました。 Anacondaに付属しているspiderで動かそうと思ったのですが、iverilogの動かし方がわからなかったので諦めました。
Helixのfirmwareをraspberry piで焼く
0から始めるHelix、いやラズパイは動く前提なので一から始めるだな。。。
上から順番にやっていけば焼けます。 windowsが都合により使えない場合参考にしてください。
gitインストール
# sudo apt-get install git
gitは元々入ってるかも。
qmk_firmwareの取得
githubからクローンします。
適当なディレクトリ作成。例えば、
# mkdir ~/work/helix
以下のコマンドを入力。
# cd ~/work/helix
# git clone https://github.com/qmk/qmk_firmware
プログラム群のインストール
qmkの公式ドキュメント
https://docs.qmk.fm/getting_started_build_tools.html
のLinuxの項を参照しながらやりました。依存関係をまとめてインストールしてくれる.shファイルがあります。 (私はそれを使わず、後述の手動apt-getでやりました)
qmk_firmwareフォルダで
# sudo util/install_dependencies.sh
実行するとgrub?が走ります。よく分かりません。
下記がインストールされます(はず)
build-essential
unzip
zip
gcc-avr
binutils-avr
avr-libc
dfu-programmer
dfu-util
gcc-arm-none-eabi
binutils-arm-none-eabi
libnewlib-arm-none-eabi
git
apt-getでやる場合は手動ですべて入れて下さい。
書き込みに使用するavrdudeをインストール
# sudo apt-get install avrdude
FirmのBuild
githubからクローンしてきたqmk_firmwareフォルダで
# make helix:default
と打つと、用意されているdefaultのキーマップのファームが出来上がります。 親切。
Firmのフラッシュ
上記の同フォルダにて、
# make helix:default:avrdude
を実行すると、ターミナルに
# Detectiong USB port, reset your controller now...
と表示されるので、リセットボタンを押します。あとは待っていれば書き込みが終わるはずです。
以上、おめでとうございます。両手に同じファームを書いたらキーボード完成です。
右手用を正常に動作させるにはssrsケーブルで左手用と繋がないと意図した動作にならないので注意。
ここからはキーマップカスタマイズです。
Key Mapping , LED設定変更
ベースとなるdefaultをコピーします。
今回作るキーマップをmap0とすると、ターミナルに打つコマンドは、
# cd ~/work/helix/qmk_firmware/keyboards/helix/rev2/keymaps
# cp -r default map0
これでファイルがコピーされるので、コピーしたフォルダに移動
# cd map0
以下を修正。
keymap.c
rules.mk
修正が終わったら同様にビルドと書き込みをします。コマンドがちょっと変わります。
# cd ~/work/helix/qmk_firmware
# make helix:map0
# make helix:map0:avrdude
以上!