peeeanuts

ほぼほぼ忘備録

アンテナコンセントにダミー抵抗をつけてアンテナレベルを測定してみた

使用していない壁面のテレビコンセントを終端し、アンテナレベルが変わるかどうかを簡易測定してみた。

条件

  • 壁面テレビコンセント : TVで使用1、空き3
  • ダミー抵抗 : 二幸電気興業 FWTN-5P
  • TV : SONY X8500B
  • 測定方法
     テレビのアンテナレベル表示機能を使用したレベル測定。10秒程度の表示の中で、ピークの値を採用した。
     終端なしの状態で測定後、空いている3つのTVコンセントを終端し、同様に測定した。
  • 結果
     全体的に改善傾向がみられた。数は少ないがレベルが下がるものもあった。

f:id:babe_mt:20200611222514p:plain
アンテナレベル

青が終端前、赤が終端後。

購入したダミー抵抗はこれ

普段は平気だけど天気が悪い日にテレビにブロックノイズが乗るなど、微妙に信号レベルが足りていない場合は手間をかけずに改善できるかも。安いし。ブースターの代わりになるほどの劇的な改善は見込めない。(そりゃそうだ)

vim-lspのSystemverilogを試してみた

概要

最近流行りのLSP(Language Server Protocol)を導入してみました。 Systemverilogはニッチな言語なので、導入記事無かったので。。。 違うところは指摘してほしいです。

windowsgvimを対象にしています。

ただ、定義ジャンプとか非対応!って言われるので、何とか対応したいところです。わからん。

vim-plugの導入

deinも使ってみましたが、導入説明の記事でvim-plugを使っているのと、 使ってみて使いやすかったので、鞍替えです。

githubのサイトを見ながら導入します。

github.com

上記の説明にあるWindows (PowerShell)をコピペすると、必要なファイルが~\vimfiles\autoloadに落ちてきます。コマンドプロンプトではなく、PowerShellで行ってください。Shift+右クリックで起動できますが、出ない場合はスタートでpowershellで検索してください。

あとは、vimrcの中に、

call plug#begin()

call plug#end()

と書き、beginとendの中に管理したいプラグインのアドレスを入れれば準備完了です。次回起動時に、:PlugInstallと打つと自動でインストールされます。

vim-lspの導入

これに関しては、mattnさんの記事を見ながらやるといいと思います。

mattn.kaoriya.net

私が分かりづらかったところだけ補足します。

文章の中ほどに

その為、新しい 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のフォルダでコマンドを実行するとよいでしょう。

qiita.com

ここまでやってやっと使い物になりそうな感じです。

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のプレビューを行う際にタイミングチャートを表示する

プレビューイメージ

f:id:babe_mt:20190114101107p:plain
タイミングチャートプレビュー

使える書き方

問題点

  • asciidocのプレビューを無効化しているので、asciidocのプレビューができない
  • ブラウザを閉じている状態でプレビューを行うと固まる

コード

githubでprevimをforkして変更を加えています。 github.com

概要

今までタイミングチャートをexcelvisioで作成していましたが、メンテナンス性の悪さ、履歴や管理のしにくさにより限界を感じ、テキストベースで管理できないか検討した際、tchart-coffeeとWaveDromの二つのツールを見つけました。 どちらもjavascriptベースなので、previmに移植し、タイミングチャートを書けるようにしました。

PyverilogをWindowsで動かしてみた

概要

  • PATHを通せばexample通りで問題ない
  • Pythonの環境構築をAnacondaのインストールで行ったので、その際にどうするかの覚書
  • spiderから実行する方法はわかりませんでした

環境構築

Anacondaのインストール

PythonWindowsで使えるようにする際、ライブラリ関係をいろいろ入れるのが大変だと思ったので、 計算ライブラリ等いろいろ同梱されているらしいAnacondaを入れました。

以下のページのDownload for Windowsよりダウンロードします。 PyGraphvisを使用する場合は2.x系じゃないと動かないらしい。 インストール時にPATHを通すか聞かれるが、not recommendedらしいのでチェックは入れなかった。

www.anaconda.com

Pyverilogの入手

GitHub上にありますので、適当なフォルダにCloneするかDownloadしてくだい。

github.com

icaros verilog (iverilog) の入手

フリーのverilog simulatorです。 vimatom,vscodeプラグインで使用されているので、入れておいて損はないでしょう。

http://bleyer.org/icarus/

コマンドプロンプトで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

gcc

unzip

wget

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

以上!