忍者ブログ

NOROMA CLUB -日記-

2022年06月26日  大山崎でぶらぶら

新大阪から山崎まで行って、山崎のあたりでぶらぶらしてみました。
山の方へ登ってみようかと思っていたのですが、
いざ目の前にすると思った以上の坂道だったので、入口ですぐに諦めました(笑)

阪急とJRの交差するところで少しだけ撮影です。
阪急の特急はスピードも出ているし、踏切もないので、
いつの間にかやって来て通り過ぎてしまします。


ここだとJRも見れますし。
タイミング良く交差してくれればいいんですが、なかなかそんなにうまくはいかない。


近くのJR踏切。
意外と障害物がかわせてインカーブで狙えますね。


阪急の大山崎駅で待っていると、「京とれいん」が通過していきました。

拍手[0回]

PR

2022年06月26日  宮原の201系

ふらっと新大阪へ行ってみたので、
宮原総合運転所(網干総合車両所・宮原支所らしいですが)に行ってみました。
大和路線とおおさか東線の運用から外れた201系と、いつもの「サロンカーなにわ」です。
223系と221系も疎開しているようですが、これも余っているのか、一時的なものなのか。

昔は「サロンカーなにわ」以外にも、「あすか」とか、
「トワイライトエクスプレス」の予備車両とか、
その他12系・14系・24系とかいろいろ居ましたが、すっかり変わってしまいました。

と思ったら、12系客車は別のところにいました。
近くでエンジン音が聞こえていたので、たぶん12系の発電エンジンが動いていたみたい。

拍手[0回]


2022年05月21日  Pythonで高位合成

PythonのプログラムからVerilogのRTLに変換できる高位合成環境が
あるようなので試しに使ってみました。

以下は、いろいろメモです。

polyphonyをインストールする。
% pip3 install polyphony

高位合成実行。
% polyphony -vm -vd fact.py
で、Verilogファイルが生成できました。

結果的にはすごく簡単なのですが、参考にしたWebページのとおりにやっても
うまく動かなかったりで、途中過程は意外と苦労しました。。。

ちなみに、変換前後のコードは最後の方に貼り付けておきます。
可読性はあまり良くないですが、一応それらしい回路が出力されているようです。


あと、「Icarus Verilog」という、OSSのVerilogシミュレータも入れてみました。

Icarus Verilogをインストールする。
sudo apt install iverilog
sudo apt install gtkwave

SIM実行
iverilog -o sim -s test test.v polyphony_out.v
./sim

波形確認
gtkwave test.vcd  &
でGUIが立ち上がるので、適当に操作して波形表示

ちなみに、今回はUbuntu(Jetson Nano)で試していますが、
Windows版もこちらにあるようです(試していませんが)。

ひとまず簡単なプログラムであれば、Verilogに変換できることはわかったのですが、
深堀できていないので、使い物になるのかどうかはまだよくわかりません。

とりあえずNumPy とかの便利なライブラリは使えないようです(コンパイルでエラーになるので)。
あとは、ネットで検索しても、polyphonyについて詳しく説明しているページがあまりなさそうで、
polyphony公式のGitHubのサンプルプログラムを見ながら試していくしかなさそうな感じですかね。


以下、階乗計算プログラムの変換前後のコード例です。


Pythonプログラム
from polyphony import testbench
def fact(x):
    y = 1
    for i in range(1, x+1):
        y = y * i
    return y
@testbench
def test():
    for i in range(0,10):
        fact(i)
test()

Verilog RTL(本体)
module fact
  (
    input wire clk,
    input wire rst,
    input wire fact_ready,
    input wire fact_accept,
    output reg fact_valid,
    input wire signed [31:0] fact_in_x,
    output reg signed [31:0] fact_out_0
  );
  //localparams
  localparam fact_b1_INIT = 0;
  localparam fact_b1_S0 = 1;
  localparam fact_b1_S1 = 2;
  localparam fact_forelse5_FINISH = 3;
  localparam fact_L1_fortest2_S0 = 4;
  localparam fact_L1_forbody3_S0 = 5;
  localparam fact_L1_forbody3_S1 = 6;
  
  //signals: 
  wire c71;
  reg        [2:0] fact_state;
  wire signed [31:0] i3;
  wire signed [31:0] t65;
  wire signed [31:0] y3;
  reg signed [31:0] i2;
  reg signed [31:0] x;
  reg signed [31:0] y2;
  //combinations: 
  assign c71 = (i2 < t65);
  assign i3 = (i2 + 1);
  assign t65 = (x + 1);
  assign y3 = (y2 * i2);
  
  always @(posedge clk) begin
    if (rst) begin
      fact_out_0 <= 0;
      i2 <= 0;
      x <= 0;
      y2 <= 0;
      fact_state <= fact_b1_INIT;
    end else begin //if (rst)
      case(fact_state)
      fact_b1_INIT: begin
        fact_valid <= 0;
        if (fact_ready == 1) begin
          x <= fact_in_x;
          i2 <= 1;
          y2 <= 1;
          fact_state <= fact_b1_S1;
        end
      end
      fact_b1_S1: begin
        /* t65 <= (x + 1); */
        fact_state <= fact_L1_fortest2_S0;
      end
      fact_L1_fortest2_S0: begin
        /* c71 <= (i2 < t65); */
        if (c71) begin
          /* y3 <= (y2 * i2); */
          /* i3 <= (i2 + 1); */
          i2 <= i3;
          y2 <= y3;
          fact_state <= fact_L1_fortest2_S0;
        end else begin
          fact_valid <= 1;
          if (fact_accept == 1) begin
            fact_state <= fact_b1_INIT;
          end
          fact_out_0 <= y2;
        end
      end
      endcase
    end
  end
  
endmodule

Verilog RTL(テストベンチ)
module test
  (
    
  );
  //localparams
  localparam CLK_PERIOD = 10;
  localparam CLK_HALF_PERIOD = 5;
  localparam INITIAL_RESET_SPAN = 100;
  localparam test_b1_INIT = 0;
  localparam test_b1_S1 = 1;
  localparam test_forelse5_S0 = 2;
  localparam test_forelse5_FINISH = 3;
  localparam test_L1_fortest2_S0 = 4;
  localparam test_L1_forbody3_S0 = 5;
  localparam test_L1_forbody3_S1 = 6;
  localparam test_L1_forbody3_S2 = 7;
  localparam test_L1_forbody3_S3 = 8;
  localparam test_L1_forbody3_S4 = 9;
  localparam test_L1_forbody3_S5 = 10;
  localparam test_L1_forbody3_S6 = 11;
  localparam test_L1_forbody3_S7 = 12;
  
  //signals: 
  wire c69;
  wire fact_0_valid;
  reg clk;
  reg fact_0_accept;
  reg fact_0_ready;
  reg rst;
  reg        [3:0] test_state;
  reg signed [31:0] i2;
  reg signed [31:0] i3;
  //signals: in_x
  reg        [31:0] fact_0_in_x;
  //signals: out_0
  wire        [31:0] fact_0_out_0;
  //combinations: 
  assign c69 = (i2 < 10);
  //sub modules
  //fact_0 instance
  fact fact_0(
    .clk(clk),
    .rst(rst),
    .fact_ready(fact_0_ready),
    .fact_accept(fact_0_accept),
    .fact_valid(fact_0_valid),
    .fact_in_x(fact_0_in_x),
    .fact_out_0(fact_0_out_0)
  );
  
  
  initial begin
    $monitor("%5t:fact_0_in_x=%4d, fact_0_out_0=%4d", $time, fact_0_in_x, fact_0_out_0);
    $dumpfile("test.vcd");
    $dumpvars(0, test);
  end
  initial begin
    clk = 0;
    #CLK_HALF_PERIOD
    forever #CLK_HALF_PERIOD clk = ~clk;
  end
  initial begin
    rst <= 1;
    #INITIAL_RESET_SPAN
    rst <= 0;
  end
  
  always @(posedge clk) begin
    if (rst) begin
      fact_0_accept <= 0;
      fact_0_ready <= 0;
      i2 <= 0;
      i3 <= 0;
      test_state <= test_b1_INIT;
    end else begin //if (rst)
      case(test_state)
      test_b1_INIT: begin
        i2 <= 0;
        test_state <= test_L1_fortest2_S0;
      end
      test_forelse5_FINISH: begin
        $display("%5t:finish", $time);
        $finish();
      end
      test_L1_fortest2_S0: begin
        /* c69 <= (i2 < 10); */
        if (c69) begin
          fact_0_ready <= 1;
          fact_0_in_x <= i2;
          test_state <= test_L1_forbody3_S1;
        end else begin
          test_state <= test_forelse5_FINISH;
        end
      end
      test_L1_forbody3_S1: begin
        fact_0_ready <= 0;
        test_state <= test_L1_forbody3_S2;
      end
      test_L1_forbody3_S2: begin
        if (fact_0_valid == 1) begin
          fact_0_accept <= 1;
          test_state <= test_L1_forbody3_S4;
        end
      end
      test_L1_forbody3_S4: begin
        fact_0_accept <= 0;
        test_state <= test_L1_forbody3_S5;
      end
      test_L1_forbody3_S5: begin
        i3 <= (i2 + 1);
        test_state <= test_L1_forbody3_S6;
      end
      test_L1_forbody3_S6: begin
        i2 <= i3;
        test_state <= test_L1_fortest2_S0;
      end
      endcase
    end
  end
  
endmodule

拍手[0回]


2022年05月19日  新大阪駅 特急ラッシュ

最近毎朝見かける光景ですが、新大阪駅の朝の特急ラッシュの風景です。
たまには写真を撮ってみました。

まずは7:41頃に「こうのとり」と「はるか」が同時入線です。
同時を狙っているわけではないとは思いますので、
日によっては多少ずれるのですが、タイミング良くやって来るとなんか気持ちいいいです。

そのあと2分ぐらいで「サンダーバード」も到着です。



さらに隣のホームには関空行きの「はるか」もやって来て、
左から271系「はるか」、281系「はるか」、683系「サンダーバード」、287系「こうのとり」
と、特急4列車が勢ぞろいです。
さすがに4本一緒に狙うのは難しくて、どうやっても人か柱に邪魔されてしまいますが。

拍手[0回]


2022年05月04日  神戸港ぶらぶら

神鉄のあとは、高速神戸からハーバーランドへ。

川崎重工に潜水艦が2隻いました。
潜水艦の見分け方なんてわからないので、艦名もわからないですが。

キリン柄のクレーン車と、こいのぼり。


対岸には銀河丸。
一時期、日本丸と海王丸もずっと神戸を拠点に活動していたようですが、
最近は各地に出かけるようになったみたいですね。

拍手[0回]


2022年05月04日  神戸電鉄復刻塗装

新開地で停車していた列車は、昔のカラーリングの復刻塗装でした。
存在しているのは知っていましたが、初めて見かけました。
意外と全然違和感なかったので、一瞬気付きませんでしたが(笑)


湊川隧道の近くで撮影してみました。
普通に街中なのに急勾配を登っていくところが楽しいです。

拍手[0回]


2022年05月04日  湊川隧道

ふらっと神戸まで出かけて、湊川隧道に行ってみました。
道路脇にある入り口は、位置的に違和感があったのですが、
水路跡とかではなく、旧隧道への見学ルートの入り口だったみたい。


毎月1回、公開日には中に入れるみたいです。
というか、数か月前から機会を狙っているんですが、
予定やら天候やら体調やらの都合でなかなか機会が合わない・・・。

上流側の本当の入り口はこちら。
人口的な深い谷に、大きなトンネルが口を開けています。

丘を越えて下流側まで歩いてみました。
下流側の方が立派ですね。
階段があって、下まで降りていけるようになっていました。
トンネルの高さは10mぐらいあるんだとか。
下に降りると巨大さをさらに感じることができます。

拍手[0回]


2022年04月29日  AstroAI DM6000AR

Amazonでデジタルマルチメーターを買ってみました。
「AstroAI DM6000AR」です。
某ストリートジャンカー協会の影響もありつつ、前々から気にはなっていましたが、
Amazonのセールで安くなっていたので(\3800ぐらいが、\2800ぐらいでした)、
なんとなく発注してみました。

数日前には届いていたのですが、急ぎで必要なものでもなかったのでようやく開封です。
大型のディスプレイが見やすくていい感じです。
モード選択以外にもボタンがいろいろあるので、いろいろ設定を変えれるようです。
なにに使えるのか、まだ全然使いこなせていませんが・・・(笑)
あと、設定を変えるたびにビープ音が鳴るみたいです。
消音モードがあればいいのですが、どうもそういう設定もないみたい。

ちなみに手持ちのデジタルマルチメーター3台です。
左側が、今回買ってみた「AstroAI DM6000AR」。

真ん中が、1年ぐらい前にシリコンハウスで\500だったので買ってみた「CUSTOM C-05」。
定価は¥12,800らしいですが、なんか作りが安っぽいのと、
ケーブルを挿すところがすぐに割れてしまい、ときどき接触不良にになるという、
テスターなのに信用できないという致命的な状態(笑)

右側は、10年ぐらい前に買った気がする「kaise DMM KU-11」。
ホームセンターで\2000~3000ぐらいだった気がしますが、
実際はこれでもなにも不自由はなかったんですが・・・。

拍手[0回]


2022年04月22日  四季織 常盤松

久しぶりに東急ハンズに立ち寄って、万年筆用のインクを衝動買いしてしまいました。
何気なくインクコーナーを見ていて、くすんだ緑色系がいいなあ、と思ってしまい、
パイロットの「色彩雫」とかとも迷いつつ、「四季織 常盤松」を選んでみました。


インクコーナーに行くと、ホントに沼にハマりそうです。。。
価格的には複数本買っちゃいそうになりますが、
消費量を考えると1本だけで我慢です。

普段は、なんとなく万年筆3本を使っていて、
今は全部「Pelikan 4001 Blue Black」を入れているのですが、
どれか1本は「四季織 常盤松」に入れ替えようかと。

拍手[0回]


2022年04月09日  FRONTIER KB-E3S

すでに何台目なのかわからない、キーボード購入シリーズです(笑)

会社で使っている E-YOOSO K-620(茶軸)の使い心地が、
ずっと慣れないというか、なんか気持ち悪いというか。
本体の剛性が弱いんだと思いますが、キーを叩いた時の音が耳障りというか。

やっぱりキーボードは実際に触ってみないと好みがわからないので、
日本橋に行って、いくつか店を回ってみました。
数千円台だとメカニカルキーボードってあんまりないですね。
メンブレンキーボードでも、5千円ぐらい出せば作りがしっかりしてるので、
別にそっちでもいいかなとも思ったのですが。

そんな中で、以前からちょっと気になっていたFRONTIERのKB-E3Sです。
\5800とメカニカルの中ではリーズナブルで、銀軸らしいですが、
以前に店頭で試してみた感じだと打ち心地は良さそうだったので、
他に目ぼしいのもなかったのでこれに決めました。

ちなみに、これもやっぱり派手にいろいろ光ってくれます(笑)


実はGAMDIASの「HERMES S1」と同一形状のOEM品らしいのですが、
HERMESの方は改行キーが横長のモデルしか見かけなかった気がします。

パッケージはバルク品かと思うぐらいにシンプルです(笑)
USBケーブルが着脱式でないのは仕方ないのですが、
それにしてもものすごく細いのが耐久性的にちょっと不安。

あと、店で試したときは音が気にならなかったのですが、
家で使ってみると、やっぱりちょっと気になりますね。
E-YOOSOのような不快な音ではないので、今のところ大丈夫かな。
重量はそんなにないですが、金属パネルのおかげなのか、剛性はそこそこあるようです。

あとは、実際にもっと使ってみないとわからないですね。
会社での使い道はプログラミングがメインになると思うので、
日本語を打つのとはまたちょっと印象が違うでしょうし。

拍手[0回]