diff --git a/docs/firmware/clockhub/clockhub.md b/docs/firmware/clockhub/clockhub.md
index 2b73876..7cc7887 100644
--- a/docs/firmware/clockhub/clockhub.md
+++ b/docs/firmware/clockhub/clockhub.md
@@ -15,7 +15,7 @@ Mikumari Clock Hub (MikuClockHub)は上流から時刻同期を受け、更に16
- Number of clock port: 16
-- Number of inputs: 65
+- Number of inputs: 64
- Timing measurements: Both edges
- TDC precision: 1ns
- Double hit resolution: ~8ns
@@ -35,6 +35,8 @@ Mikumari Clock Hub (MikuClockHub)は上流から時刻同期を受け、更に16
|Version|Date|Changes|
|:----:|:----|:----|
|v2.5|2024.6.9|事実上の初期版|
+|v2.6|2025.1.6| - Updating LACCP (v2.1) supporting the frame flag distribution.
- Introducing gated scaler.
- Introducing IO manager block arranging input/output paths to the NIM IO.
- Deprecating the extra 129th TDC input from NIM.
- Deprecating DIP2 function.
- Changing what the LED lights indicate.|
+
# Functions
@@ -42,7 +44,7 @@ Mikumari Clock Hub (MikuClockHub)は上流から時刻同期を受け、更に16
[図](#BL-DIAGRAM)はMikumari-ClockHubの簡易ブロックダイアグラムです。
CRVもしくは前面MIKUMARIポートでクロック信号を受信し、CDD-OPTメザニンカードを用いて最大16台のリーフモジュールを時刻同期する事が出来ます。
-加えて、65ch文のStr-LRTDCを内蔵しており、main inputとNIM-INからからの信号を測定する事が出来ます。
+加えて、64ch文のStr-LRTDCを内蔵しており、main inputからの信号を測定する事が出来ます。
入力信号はStr-LRTDCと同様にスケーラーブロックにも接続されています。
Str-LRTDCの機能とスケーラー機能についてはStr-LRTDCのページを参照してください。
@@ -59,21 +61,21 @@ Str-LRTDCの機能とスケーラー機能についてはStr-LRTDCのページ
[図](#PORT-MAP)はTDC入力チャンネル番号とMIKUMARIのポート番号を示しています。
16番が受信用のMIKUMARIポートで、0番から15番までがクロック信号の送信側です。
-### LED and DIP switch
+### LED and DIP switch (2025.01.06)
1-3番が点灯していればモジュールとして正常に動作しています。
|LED #||Comment|
|:----:|:----|:----|
-|1| PLL locked| 全ての内部クロック信号が正常に出力されている状態です。 |
-|2| MIKUMARI (16) link up| MIKUMARIポートの16番がリンクアップしている状態です。 |
-|3| Ready for DAQ| 時刻同期が完了し、DAQを走らせられる状態である事を示します。 |
-|4| DAQ is running| データ読み出し中である事を示します。 |
+|1| DAQ is running| データ読み出し中である事を示します。 |
+|2| Root mode| ROOT modeでモジュールが起動していると点灯します。 |
+|3| MIKUMARI (16) link up| MIKUMARIポートの16番がリンクアップしている状態です。 |
+|4| PLL locked| 全ての内部クロック信号が正常に出力されている状態です。 |
|DIP #||Comment|
|:----:|:----|:----|
|1| SiTCP IP setting | 0: デフォルトIPを使用します
1: ユーザー設定のIPを使用します (要ライセンス)。|
-|2| NIMOUT setting | 0: NIMOUT-1からハートビート信号が出力されます
1: NIMOUT-1からLACCPがトリガー信号が出力されます|
+|2| Not in use | |
|3| Not in use | |
|4| Not in use | |
@@ -86,6 +88,7 @@ Str-LRTDCには6個のローカルバスモジュールが存在します。
|:----|:----|
|Mikumari Utility |0x0000'0000 - 0x0FFF'0000|
|Streaming TDC |0x1000'0000 - 0x1FFF'0000|
+|IO Manager |0x2000'0000 - 0x2FFF'0000|
|Scaler |0x8000'0000 - 0x8FFF'0000|
|CDCE62002 Controller |0xB000'0000 - 0xBFFF'0000|
|Self Diagnosis System |0xC000'0000 - 0xCFFF'0000|
@@ -100,4 +103,44 @@ Str-LRTDCには6個のローカルバスモジュールが存在します。
## Scaler
Str-LRTDCと同様のため、Str-LRTDCの説明を参照してください。
-レジスタアドレスも全く同じです。
\ No newline at end of file
+レジスタアドレスも全く同じです。
+
+
+## IO Manager
+
+IO ManagerはAMANEQのNIM IOとFPGA内部の信号等の接続関係を管理するモジュールです。
+NIMポートから入力された信号をどの内部信号へ接続するか、また内部信号をどのNIMポートから出力するかをSiTCPを通じて変更します。
+
+|Register name|Address|Read/Write|Bit width|Comment|
+|:----|:----|:----:|:----:|:----|
+|kFrameFlag1In | 0x20000000| W/R|2| Setting the NIM-IN port to the internal frame flag-1 signal. It is valid when the module is the root mode. (default 0x0)|
+|kFrameFlag2In | 0x20100000| W/R|2| Setting the NIM-IN port to the internal frame flag-2 signal. It is valid when the module is the root mode. (default (0x1))|
+|kTriggerIn | 0x20200000| W/R|2| Setting the NIM-IN port to the internal trigger in signal. (default (0x3))|
+|kScrResetIn | 0x20300000| W/R|2| Setting the NIM-IN port to the internal scaler reset signal. This signal will be distributed to other modules through MIKUMARI. (default (0x3))|
+| | | | | |
+|kSelOutSig1 | 0x21000000| W/R|3| Selecting the internal signal to output from the NIM-OUT port 1. |
+|kSelOutSig2 | 0x22000000| W/R|3| Selecting the internal signal to output from the NIM-OUT port 2. |
+
+アドレス値が`0x20X0'0000`のレジスタはNIM-INポートをどの内部信号へ接続するかを決定します。
+各レジスタに対して設定可能な値は以下の通りです。
+
+|Register value|Comment|
+|:----:|:----|
+|0x0| Connecting the NIM-IN port 1 to the corresponding internal signal.|
+|0x1| Connecting the NIM-IN port 2 to the corresponding internal signal.|
+|0x2| Not in use |
+|0x3| Connecting GND to the corresponding internal signal. |
+
+アドレス値が`0x2X00'0000`のレジスタはどの内部信号をNIM-OUTポートへ接続するかを決定します。
+各レジスタに対して設定可能な値は以下の通りです。
+
+|Register value|Comment|
+|:----:|:----|
+|0x0| Connecting the heartbeat signal.|
+|0x1| Connecting the TCP connection establish.|
+|0x2| Connecting the trigger signal from LACCP.|
+|0x3| Connecting the frame flag-1.|
+|0x4| Connecting the frame flag-2.|
+|0x5| Connecting the logic of 1|
+|0x6| Connecting the logic of 1|
+|0x7| Connecting the logic of 1|
\ No newline at end of file
diff --git a/docs/firmware/clockhub/port-map.png b/docs/firmware/clockhub/port-map.png
index e7c1626..338dd32 100644
Binary files a/docs/firmware/clockhub/port-map.png and b/docs/firmware/clockhub/port-map.png differ
diff --git a/docs/firmware/clockroot/clockroot.md b/docs/firmware/clockroot/clockroot.md
index bc29b54..0be8c01 100644
--- a/docs/firmware/clockroot/clockroot.md
+++ b/docs/firmware/clockroot/clockroot.md
@@ -35,6 +35,7 @@ Mikumari Clock Root (MikuClockRoot)は17台の下流モジュールを同期す
|Version|Date|Changes|
|:----:|:----|:----|
|v2.5|2024.6.9|事実上の初期版|
+|v2.6|2025.1.6| - Updating LACCP (v2.1) supporting the frame flag distribution.
- Introducing gated scaler.
- Introducing IO manager block arranging input/output paths to the NIM IO.|
## Functions
@@ -78,13 +79,14 @@ Str-LRTDCの機能とスケーラー機能についてはStr-LRTDCのページ
## Local bus modules
-Str-LRTDCには6個のローカルバスモジュールが存在します。
+Str-LRTDCには7個のローカルバスモジュールが存在します。
以下がローカルバスアドレスのマップです。
|Local Module|Address range|
|:----|:----|
|Mikumari Utility |0x0000'0000 - 0x0FFF'0000|
|Streaming TDC |0x1000'0000 - 0x1FFF'0000|
+|IO Manager |0x2000'0000 - 0x2FFF'0000|
|Scaler |0x8000'0000 - 0x8FFF'0000|
|CDCE62002 Controller |0xB000'0000 - 0xBFFF'0000|
|Self Diagnosis System |0xC000'0000 - 0xCFFF'0000|
@@ -99,4 +101,43 @@ Str-LRTDCには6個のローカルバスモジュールが存在します。
## Scaler
Str-LRTDCと同様のため、Str-LRTDCの説明を参照してください。
-レジスタアドレスも全く同じです。
\ No newline at end of file
+レジスタアドレスも全く同じです。
+
+## IO Manager
+
+IO ManagerはAMANEQのNIM IOとFPGA内部の信号等の接続関係を管理するモジュールです。
+NIMポートから入力された信号をどの内部信号へ接続するか、また内部信号をどのNIMポートから出力するかをSiTCPを通じて変更します。
+
+|Register name|Address|Read/Write|Bit width|Comment|
+|:----|:----|:----:|:----:|:----|
+|kFrameFlag1In | 0x20000000| W/R|2| Setting the NIM-IN port to the internal frame flag-1 signal. (default 0x0)|
+|kFrameFlag2In | 0x20100000| W/R|2| Setting the NIM-IN port to the internal frame flag-2 signal. (default (0x1))|
+|kTriggerIn | 0x20200000| W/R|2| Setting the NIM-IN port to the internal trigger in signal. (default (0x3))|
+|kScrResetIn | 0x20300000| W/R|2| Setting the NIM-IN port to the internal scaler reset signal. This signal will be distributed to other modules through MIKUMARI. (default (0x3))|
+| | | | | |
+|kSelOutSig1 | 0x21000000| W/R|3| Selecting the internal signal to output from the NIM-OUT port 1. |
+|kSelOutSig2 | 0x22000000| W/R|3| Selecting the internal signal to output from the NIM-OUT port 2. |
+
+アドレス値が`0x20X0'0000`のレジスタはNIM-INポートをどの内部信号へ接続するかを決定します。
+各レジスタに対して設定可能な値は以下の通りです。
+
+|Register value|Comment|
+|:----:|:----|
+|0x0| Connecting the NIM-IN port 1 to the corresponding internal signal.|
+|0x1| Connecting the NIM-IN port 2 to the corresponding internal signal.|
+|0x2| Not in use |
+|0x3| Connecting GND to the corresponding internal signal. |
+
+アドレス値が`0x2X00'0000`のレジスタはどの内部信号をNIM-OUTポートへ接続するかを決定します。
+各レジスタに対して設定可能な値は以下の通りです。
+
+|Register value|Comment|
+|:----:|:----|
+|0x0| Connecting the heartbeat signal.|
+|0x1| Connecting the TCP connection establish.|
+|0x2| Connecting the logic of 1|
+|0x3| Connecting the logic of 1|
+|0x4| Connecting the logic of 1|
+|0x5| Connecting the logic of 1|
+|0x6| Connecting the logic of 1|
+|0x7| Connecting the logic of 1|
\ No newline at end of file
diff --git a/docs/firmware/clockroot/port-map.png b/docs/firmware/clockroot/port-map.png
index 1066c64..f341a65 100644
Binary files a/docs/firmware/clockroot/port-map.png and b/docs/firmware/clockroot/port-map.png differ
diff --git a/docs/firmware/overview/overview.md b/docs/firmware/overview/overview.md
index 25de2be..93c2bcc 100644
--- a/docs/firmware/overview/overview.md
+++ b/docs/firmware/overview/overview.md
@@ -114,7 +114,7 @@ CECE62002は多数の設定項目があるためこれらの読み書きのシ
-### MIKUMARI Util (MUTIL)
+### MIKUMARI Util (MUTIL) (2025.01.06)
|Register name|Address|Read/Write|Bit width|Comment|
|:----|:----|:----:|:----:|:----|
@@ -131,6 +131,7 @@ CECE62002は多数の設定項目があるためこれらの読み書きのシ
|kAddrLaccpFineOffset|0x00A00000|R|16|LACCPが算出したLACCP fine offsetを取得します。(LACCPセカンダリ側のみ有効)|
|kAddrHbfState|0x00B00000|W/R|1|ハートビートフレーム状態を設定します。1でDAQ running、0でDAQ idleです。そのクロック分配ネットワークのrootモジュールでのみ有効。|
|kAddrRstOverMiku|0x00C00000|W|32|下流モジュールに対して[MIKUMARIリセット](#reset-signals)を発行する。1でリセット発行。|
+|kAddrClockRootMode|0x00D00000|R|1|Mikumari Clock Hub moduleでは、ROOTモードで起動している場合1を返します。TDCなどのleaf moduleではstandalone modeで起動している場合1を返します。|
|kAddrRegIndex|0x01000000|W/R|6|いくつかのレジスタにおいて読み書きを行う対象のポート番号を指定します。|
|kAddrNumLinks|0x02000000|R|6|そのファームウェアが備えているMIKUMARIリンクの数を取得します。|
diff --git a/docs/firmware/strhrtdc/port-map.png b/docs/firmware/strhrtdc/port-map.png
index 4aaf242..a1a5458 100644
Binary files a/docs/firmware/strhrtdc/port-map.png and b/docs/firmware/strhrtdc/port-map.png differ
diff --git a/docs/firmware/strhrtdc/strhrtdc.md b/docs/firmware/strhrtdc/strhrtdc.md
index 3b8a25d..d3afbe5 100644
--- a/docs/firmware/strhrtdc/strhrtdc.md
+++ b/docs/firmware/strhrtdc/strhrtdc.md
@@ -35,8 +35,10 @@ Streaming high-resolution TDC (Str-HRTDC)は20ps精度の連続読み出しTDC
|:----:|:----|:----|
| AMANEQ |||
|v2.4|2024.6.4|事実上の初期版|
+|v2.5|2025.1.6| - Updating LACCP (v2.1) supporting the frame flag distribution.
- Introducing gated scaler. |
| Mezzanine |||
|v2.4|2024.6.4|事実上の初期版|
+|v2.5|2025.1.6| - Updating LACCP (v2.1) supporting the frame flag distribution.
- Introducing gated scaler.
- Introducing IO manager block arranging input/output paths to the NIM IO.
- Deprecating DIP2 function. |
## Functions
@@ -71,7 +73,7 @@ Scaler機能についてもStr-LRTDCと同様ですが、システムインフ
[図](#PORT-MAP)はTDC入力チャンネル番号とMIKUMARIのポート番号を示しています。
MIKUMARIのポートは、0番がupper mezzanine、1番がlower mezzanine、2番が受信用のポートにアサインされています。
-### LED and DIP switch
+### LED and DIP switch (2025.01.06)
MIKUMARIシステムを利用している場合、1-3番がすべて点灯していれば正常です。
スタンドアロンの場合、1番と3番が点灯していれば正常です。
@@ -94,7 +96,7 @@ Lower slotにだけメザニンカードを搭載すると動作しません。
|1| SiTCP IP setting | 0: デフォルトIPを使用します
1: ユーザー設定のIPを使用します (要ライセンス)。|
|2| Standalone mode | 0: MIKUMARIシステムを使用します
1: ローカル発振器を使用しスタンドアロンモードになります|
|3| Lower Mzn absent | 0: 2枚ともメザニンカードを搭載している場合
1: Upper mezzanine slowのみ使用している場合|
-|4| NIMOUT setting | 0: NIMOUT-1からハートビート信号が出力されます
1: NIMOUT-1からLACCPがトリガー信号が出力されます|
+|4| Not in use | |
| Mezzanine |||
|1| Not in use | |
|2| Not in use | |
@@ -127,6 +129,7 @@ Str-LRTDC Baseには8個のローカルバスモジュールが存在します
|DAQ Controller |0x2000'0000 - 0x2FFF'0000|
|BusBridgePrimary upper |0x3000'0000 - 0x3FFF'0000|
|BusBridgePrimary lower |0x4000'0000 - 0x4FFF'0000|
+|IO Manager |0x5000'0000 - 0x5FFF'0000|
|Scaler |0x8000'0000 - 0x8FFF'0000|
|CDCE62002 Controller |0xB000'0000 - 0xBFFF'0000|
|Self Diagnosis System |0xC000'0000 - 0xCFFF'0000|
@@ -313,7 +316,9 @@ Str-LRTDCと同様です。
| | | | | Same as for Str-LRTDC |
| | | | | Mezzanine |
|kAddrScrReset | 0x8000| W|1| Reset signals
0x1: Local reset
0x2: Global reset
0x4: FIFO reset|
-|kAddrLatchCnt | 0x8010| R|1| Send latch request|
+|kAddrLatchCnt0 | 0x8010| R|1| Send latch request to the free-run scaler unit|
+|kAddrLatchCnt1 | 0x8011| R|1| Send latch request to the gated scaler 1|
+|kAddrLatchCnt2 | 0x8012| R|1| Send latch request to the gated scaler 2|
|kAddrNumCh | 0x8020| R|8| Number of words of scaler data block including system information (unit: words)|
|kAddrStatus | 0x8030| R|8| Scaler unit status|
|kAddrReadFIFO | 0x8100| R|-| Address to read data from FIFO|
@@ -326,6 +331,7 @@ Str-LRTDCと同様です。
- FIFO resetはアクセス先のFIFOの中身をリセットします。
- LatchCnt
- このアドレスへ読み出しアクセスをするとラッチリクエストになります。
+ - アドレスによってどのスケーラユニットへラッチリクエストを送信するか決まります。
- NumCh
- スケーラーデータブロックのワード数はファームウェアによって異なるので、何ワード読み出したらよいか知るためのレジスタです。読むべきワード数が得られます。
- Status
@@ -333,6 +339,7 @@ Str-LRTDCと同様です。
- others: Reserved
- ReadFIFO
- 1-byteずつデータをFIFOから読み出すためのアドレスです。
+ - - 3種類のスケーラユニットでReadFIFOを共有しています。ラッチリクエストを送信したユニットのデータがFIFOには入っています。
## Mikumari Utility
@@ -378,4 +385,43 @@ DAQ Controllerはmezzanine card側のDDR transmitterとAMANEQ側のDDR receiver
|kAddrCtrlReg | 0x1000 | W/R|1| Enable transmitter test mode |
|kAddrExtraPath | 0x1010 | W/R|1| Calibrate the LUT for tapped-delay line with the clock signal |
+## IO Manager
+
+IO ManagerはAMANEQのNIM IOとFPGA内部の信号等の接続関係を管理するモジュールです。
+NIMポートから入力された信号をどの内部信号へ接続するか、また内部信号をどのNIMポートから出力するかをSiTCPを通じて変更します。
+
+|Register name|Address|Read/Write|Bit width|Comment|
+|:----|:----|:----:|:----:|:----|
+|kFrameFlag1In | 0x50000000| W/R|2| Setting the NIM-IN port to the internal frame flag-1 signal. It is valid when the module is the standalone mode. (default 0x0)|
+|kFrameFlag2In | 0x50100000| W/R|2| Setting the NIM-IN port to the internal frame flag-2 signal. It is valid when the module is the standalone mode. (default (0x1))|
+|kTriggerIn | 0x50200000| W/R|2| Setting the NIM-IN port to the internal trigger in signal. (default (0x3))|
+|kScrResetIn | 0x50300000| W/R|2| Setting the NIM-IN port to the internal scaler reset signal. This signal will be distributed to the mezzanine cards through MIKUMARI. (default (0x3))|
+| | | | | |
+|kSelOutSig1 | 0x21000000| W/R|3| Selecting the internal signal to output from the NIM-OUT port 1. |
+|kSelOutSig2 | 0x22000000| W/R|3| Selecting the internal signal to output from the NIM-OUT port 2. |
+
+アドレス値が`0x20X0'0000`のレジスタはNIM-INポートをどの内部信号へ接続するかを決定します。
+各レジスタに対して設定可能な値は以下の通りです。
+
+|Register value|Comment|
+|:----:|:----|
+|0x0| Connecting the NIM-IN port 1 to the corresponding internal signal.|
+|0x1| Connecting the NIM-IN port 2 to the corresponding internal signal.|
+|0x2| Not in use |
+|0x3| Connecting GND to the corresponding internal signal. |
+
+アドレス値が`0x2X00'0000`のレジスタはどの内部信号をNIM-OUTポートへ接続するかを決定します。
+各レジスタに対して設定可能な値は以下の通りです。
+
+|Register value|Comment|
+|:----:|:----|
+|0x0| Connecting the heartbeat signal.|
+|0x1| Connecting the TCP connection establish.|
+|0x2| Connecting the trigger signal from LACCP.|
+|0x3| Connecting the frame flag-1.|
+|0x4| Connecting the frame flag-2.|
+|0x5| Connecting the logic of 1|
+|0x6| Connecting the logic of 1|
+|0x7| Connecting the logic of 1|
+
diff --git a/docs/firmware/strlrtdc/port-map.png b/docs/firmware/strlrtdc/port-map.png
index c014cfa..c3706ce 100644
Binary files a/docs/firmware/strlrtdc/port-map.png and b/docs/firmware/strlrtdc/port-map.png differ
diff --git a/docs/firmware/strlrtdc/strlrtdc.md b/docs/firmware/strlrtdc/strlrtdc.md
index c53f3ce..179c73b 100644
--- a/docs/firmware/strlrtdc/strlrtdc.md
+++ b/docs/firmware/strlrtdc/strlrtdc.md
@@ -2,7 +2,7 @@
## Overview
-Streaming low-resolution TDC (Str-LRTDC)は129ch入力の1ns精度連続読み出しTDCです。
+Streaming low-resolution TDC (Str-LRTDC)は128ch入力の1ns精度連続読み出しTDCです。
[Github repository](https://github.com/AMANEQ-official/StrLrTdc)
@@ -37,7 +37,7 @@ Streaming low-resolution TDC (Str-LRTDC)は129ch入力の1ns精度連続読み
[図](#BL-DIAGRAM)はStr-LRTDCの簡易ブロックダイアグラムです。
-Main input, メザニンスロット, NIMIN-1を入力として利用し、最大128ch入力を受け付けます。
+Main inputとメザニンスロットを入力として利用し、最大128ch入力を受け付けます。
AMANEQ本体のみで64ch入力が可能であり、128chまで拡張する場合はDCRv2メザニンカードが必要です。
これらの入力信号は連続読み出しTDC (Str-TDC)ブロックとスケーラーブロックに接続されています。
Str-TDCブロックでは1ns精度で信号のリーディングとトレーリングエッジのタイミングを測定し、内部で2つのエッジのペアリングを行いTOTを計算します。
@@ -60,7 +60,7 @@ MIKUMARIシステムを用いずにスタンドアロンで動作させるとき
[図](#PORT-MAP)はTDC入力チャンネル番号とMIKUMARIのポート番号を示しています。
MIKUMARIのポートはセカンダリが0番にアサインされています。
-### LED and DIP switch
+### LED and DIP switch (2025.01.06)
MIKUMARIシステムを利用している場合、1-3番がすべて点灯していれば正常です。
スタンドアロンの場合、1番と3番が点灯していれば正常です。
@@ -193,6 +193,15 @@ SPADI-Aで開発しているNestDAQの実装では、FEEからデータがない
DIPスイッチの設定によりスタンドアロンモードで動いている場合は、フレームステートは常にONです。
TCP接続状態だけでDAQ状態が決定されます。
+### Frame flags (2025.01.06)
+
+LACCPがハートビートフレーム単位で外部信号(レベル入力)をサンプリングして、その結果をheartbeat frame delimiterのフラグ領域に格納します。
+Frame flagsによってTDCが動作を変える事はありません。あくまで状態の記録としてデリミターワード中にフラグビットとして残ります。
+想定上の使用方法はゲート信号の記録です。
+また、frame flagsは後述のgated scaler駆動のためにも使用します。
+MIKUMARIで同期を受けている場合は上流モジュールから送られてきたフラグ情報が、standalone modeの場合はNIM入力からの信号入力の結果がframe flagsとして使用されます。
+Synchronizationの章も合わせて参照してください。
+
### Buffer overflow
DAQ状態がrunningになるとStreaming TDCは即座にデータ送信をし始めるので、ソフト側ではTCP接続の確立後は常に読み出しを行っている事が必要です。
@@ -388,6 +397,11 @@ Input throttling type-2はチャンネル毎に働くため、8-bit channelの
1st delimiter wordの16-bit flagsは該当ハートビートフレームにおけるDAQのステータスフラグを示します。
以下に各ビットの意味をまとめます。
+**2025.01.06 追記**
+
+Frame flag 1/2はMikumari Clock Root moduleが送信した各フレームの状態フラグです。
+Standalone modeの場合自身のNIM入力からの信号入力の結果がここに格納されます。
+
|Bit|Flag|Comment|
|:----:|:----|:----|
|16th bit|Reserve| |
@@ -404,8 +418,8 @@ Input throttling type-2はチャンネル毎に働くため、8-bit channelの
|5th bit|HBF throttling|This frame does not contain the TDC data because of the HBF throttling.|
|4th bit|Reserve| |
|3rd bit|Reserve| |
-|2nd bit|Reserve| |
-|1st bit|Reserve| |
+|2nd bit|Frame flag 2| Indicating the frame flag 2 condition in the current heartbeat frame.|
+|1st bit|Frame flag 1| Indicating the frame flag 1 condition in the current heartbeat frame.|
16-bit LACCP fine offsetはLACCPが導出したfine offset値であり、16-bit符号付き整数です。
LSBの時間精度は0.9765625 (1/1.024) psであり、Str-HRTDCのビット精度と同一です。
@@ -434,7 +448,6 @@ PCから情報をここへ書き込んでおくと、解析の時にデータベ
|kTdcMaskMainD | 0x1010'0000| W/R|32|Channel mask for 32-63ch (default: 0x0)|
|kTdcMaskMznU | 0x1020'0000| W/R|32|Channel mask for 64-95ch (default: 0x0)|
|kTdcMaskMznD | 0x1030'0000| W/R|32|Channel mask for 96-127ch (default: 0x0)|
-|kTdcMaskEx | 0x10E0'0000| W/R|32|Channel mask for 128-159ch (default: 0x0)|
| | | | | |
|kEnBypass | 0x1040'0000| W/R|3|Enable bypass for 2-us delay buffer and paring unit. (default: 0x0)
1st-bit: Enable bypass for 2-us delay buffer
2nd-bit: Enable bypass for paring unit
3rd-bit: Disable the LACCP fine offset correction. If disabling it, non-zero value appears in the LACCP fine offset region in 1st delimiter word.|
| | | | | |
@@ -482,6 +495,12 @@ RBCP経由でラッチリクエストを出すと、コマンドが届いたタ
FIFOから読み出しを行わずに再度ラッチリクエストを発行するとデータがクラッシュします。
前回の読み出しが成功したか定かでないときはFIFOリセットを発行してからラッチリクエストを送ってください。
+### Gated scaler (2025.01.6)
+
+Frame flag bits 1/2の状態に依存して動作するgated scaler が2つ実装されました。
+それぞれflag bitが1の間だけカウントアップします。
+元々実装されていたscaler unitと合わせて合計3種類のスケーラーが存在しており、各スケーラーは独立に数を数えています。
+
### Data structure
スケーラーデータワード長は32-bitです。
@@ -494,6 +513,15 @@ FIFOから読み出しを行わずに再度ラッチリクエストを発行す
- Channel-2 scaler value
- ...
+**2025.01.06 追記**
+
+**System informationは3種類のスケーラユニットで共有しています。**
+
+FPGAが返すデータブロックにはどのスケーラユニットのデータであるかを示すヘッダが存在しません。
+スケーラ読み出しはRBCPによってソフト的にトリガーされるので、読み出しを行ったソフトがどのユニットを読み出したのか知っているはずです。
+**どのユニットのデータであるかを明示したい場合はソフト的にヘッダを付与してください。**
+Software sectionで紹介する```read_scr```プログラムは先頭に64-bit分のソフトヘッダを付与します。
+
**Contents of system information**
|Word number|Content|Comment|
@@ -510,8 +538,8 @@ FIFOから読み出しを行わずに再度ラッチリクエストを発行す
|10th|Mikumari error number| The number of communication error happened in the MIKUMARI link|
|11th|Trigger request| The number of trigger inputs|
|12th|Trigger rejected| The number of rejected trigger inputs|
-|13th|Reserve| |
-|14th|Reserve| |
+|13th|Frame flag-1 time| Time while the frame flag 1 is on|
+|14th|Frame flag-2 time| Time while the frame flag 2 is on|
|15th|Reserve| |
|16th|Reserve| |
|17th|Reserve| |
@@ -520,7 +548,7 @@ FIFOから読み出しを行わずに再度ラッチリクエストを発行す
先頭2ワードがラッチリクエスト到達時刻を示しています。
この値を頼りにして差分を取り、レート計算を行ってください。
-Real time, daq run time, throttling timeにおける1-bitの時間単位は1 heartbeat periodです。
+Real time, daq run time, throttling time, frame flag timeにおける1-bitの時間単位は1 heartbeat periodです。
積算時間が1 heartbeat長に満たない間はカウントは増えません。
MIKUMARIの通信エラー数は電源投入からリンク確立前の間に多少増える事があります。
@@ -536,7 +564,9 @@ Str-LRTDCではこの欄は0です。
|Register name|Address|Read/Write|Bit width|Comment|
|:----|:----|:----:|:----:|:----|
|kAddrScrReset | 0x80000000| W|1| Reset signals
0x1: Local reset
0x2: Global reset
0x4: FIFO reset|
-|kAddrLatchCnt | 0x80100000| R|1| Send latch request|
+|kAddrLatchCnt0 | 0x80100000| R|1| Send latch request to the free-run scaler unit|
+|kAddrLatchCnt1 | 0x80110000| R|1| Send latch request to the gated scaler 1|
+|kAddrLatchCnt2 | 0x80120000| R|1| Send latch request to the gated scaler 2|
|kAddrNumCh | 0x80200000| R|8| Number of words of scaler data block including system information (unit: words)|
|kAddrStatus | 0x80300000| R|8| Scaler unit status|
|kAddrReadFIFO | 0x81000000| R|-| Address to read data from FIFO|
@@ -549,10 +579,50 @@ Str-LRTDCではこの欄は0です。
- FIFO resetはアクセス先のFIFOの中身をリセットします。
- LatchCnt
- このアドレスへ読み出しアクセスをするとラッチリクエストになります。
+ - アドレスによってどのスケーラユニットへラッチリクエストを送信するか決まります。
- NumCh
- スケーラーデータブロックのワード数はファームウェアによって異なるので、何ワード読み出したらよいか知るためのレジスタです。読むべきワード数が得られます。
- Status
- 1st-bit: FIFO empty
- others: Reserved
- ReadFIFO
- - 1-byteずつデータをFIFOから読み出すためのアドレスです。
\ No newline at end of file
+ - 1-byteずつデータをFIFOから読み出すためのアドレスです。
+ - 3種類のスケーラユニットでReadFIFOを共有しています。ラッチリクエストを送信したユニットのデータがFIFOには入っています。
+
+## IO Manager (2025.01.06)
+
+IO ManagerはAMANEQのNIM IOとFPGA内部の信号等の接続関係を管理するモジュールです。
+NIMポートから入力された信号をどの内部信号へ接続するか、また内部信号をどのNIMポートから出力するかをSiTCPを通じて変更します。
+
+|Register name|Address|Read/Write|Bit width|Comment|
+|:----|:----|:----:|:----:|:----|
+|kFrameFlag1In | 0x20000000| W/R|2| Setting the NIM-IN port to the internal frame flag-1 signal. It is valid when the module is the standalone mode. (default 0x0)|
+|kFrameFlag2In | 0x20100000| W/R|2| Setting the NIM-IN port to the internal frame flag-2 signal. It is valid when the module is the standalone mode. (default (0x1))|
+|kTriggerIn | 0x20200000| W/R|2| Setting the NIM-IN port to the internal trigger in signal. It is valid when the module is the standalone mode. (default (0x3))|
+| | | | | |
+|kSelOutSig1 | 0x21000000| W/R|3| Selecting the internal signal to output from the NIM-OUT port 1. |
+|kSelOutSig2 | 0x22000000| W/R|3| Selecting the internal signal to output from the NIM-OUT port 2. |
+
+アドレス値が`0x20X0'0000`のレジスタはNIM-INポートをどの内部信号へ接続するかを決定します。
+各レジスタに対して設定可能な値は以下の通りです。
+
+|Register value|Comment|
+|:----:|:----|
+|0x0| Connecting the NIM-IN port 1 to the corresponding internal signal.|
+|0x1| Connecting the NIM-IN port 2 to the corresponding internal signal.|
+|0x2| Not in use |
+|0x3| Connecting GND to the corresponding internal signal. |
+
+アドレス値が`0x2X00'0000`のレジスタはどの内部信号をNIM-OUTポートへ接続するかを決定します。
+各レジスタに対して設定可能な値は以下の通りです。
+
+|Register value|Comment|
+|:----:|:----|
+|0x0| Connecting the heartbeat signal.|
+|0x1| Connecting the TCP connection establish.|
+|0x2| Connecting the trigger signal from LACCP.|
+|0x3| Connecting the frame flag-1.|
+|0x4| Connecting the frame flag-2.|
+|0x5| Connecting the logic of 1|
+|0x6| Connecting the logic of 1|
+|0x7| Connecting the logic of 1|
diff --git a/docs/index.md b/docs/index.md
index b8b7be7..607184a 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -12,7 +12,7 @@ The basic design is based on the hadron universal logic (HUL) module. About HUL,
**2025.1.6**
-* Descriptions for firmware
+* Updating descriptions for firmware, software, and synchronization
**2024.11.28**
diff --git a/docs/software/software.md b/docs/software/software.md
index 15e492c..f6217af 100644
--- a/docs/software/software.md
+++ b/docs/software/software.md
@@ -111,21 +111,36 @@ FPGA内部の多くのローカルバスモジュールがリセットされる
MCSからSPIフラッシュに書き込むためのバイナリファイルを作成します(MCSはテキストファイル)。`flash_memory_programmer`内ではバイナリ変換を同時に行っているので、このプログラムはデバッグ時以外に使うことは無いと思います。
Vivadoが生成するとBINファイルと一致するかどうかは調べていません。誰か調べてください。
-#### read_scr
+#### read_scr (2025.01.06)
スケーラーを読み出し、その結果をバイナリデータファイルへ保存する実行体です。
読み出しバイト数の取得、FIFOが空である事の確認(およびFIFOリセット)、ラッチリクエストの送信、FIFO読み出し、ファイル書き出し、の一連のプロセスを実行します。
-以下の例では指定したIPアドレスのボードから読み出した結果をscaler.datへ保存します。引数の数が2つだと上書きモード、3つだと追記モードで動作します。追記モードでは既にファイルが存在する時、前のデータを消さずに追記します。
+以下の例では指定したIPアドレスのボードからgated scaler 1を読み出した結果をscaler.datへ保存します。引数の数が3つだと上書きモード、4つだと追記モードで動作します。追記モードでは既にファイルが存在する時、前のデータを消さずに追記します。
+Scaler unitへ渡すべき引数についてはusageで確認してください。
```shell
-read_scr 192.168.10.16 scaler.dat (Overwrite mode)
-read_scr 192.168.10.16 scaler.dat 1 (Append mode)
+ [IP] [File] [Scaler unit]
+read_scr 192.168.10.16 scaler.dat 1 (Overwrite mode)
+read_scr 192.168.10.16 scaler.dat 1 append (Append mode)
```
繰り返しスケーラー読み出しをする場合、この実行体をシェルスクリプトで何度も呼び出してもあまり高い周波数で読めません。
プログラムを実行するオーバーヘッドがかさんだり、プログラム内で毎回読み出しバイト数を確認していたりするためです。
高速に何度も読み出したい場合、この実行体のソースコードを参考にして自分でプログラムを書いてください。
+**2025.01.06 追記**
+
+このバージョンからfree-run scaler, gated scaler1, 及び2を指定するための引数が増えて、合計3つの引数が最低必要です。
+FPGAはどのスケーラユニットのデータであるかを示すヘッダを返さないので、このプログラムはソフト的に64-bit (32-bit x2)のヘッダワードを付与します。
+
+- 1st header: Magic
+ - 0xff04'0000: free-run scaler data
+ - 0xff04'0001: gated scaler-1 data
+ - 0xff04'0002: gated scaler-2 data
+- 2nd header: Size
+ - The number of words (32-bit/word) excluding the software header
+
+
#### read_sem
SEMにアクセスしてSEUを修正した回数、修正不可能な状態になっていないかの確認を行います。
diff --git a/docs/synchronization/sync.md b/docs/synchronization/sync.md
index cb9459c..3524fa5 100644
--- a/docs/synchronization/sync.md
+++ b/docs/synchronization/sync.md
@@ -45,7 +45,7 @@ MIKUMARI protocolにはフレームを用いたデータ通信の機能が存在
## LACCP
LACCPの仕事は時刻を定義し、それをroot moduleへ合わせることです。
-時刻定義はハートビートカウンターと呼ばれる16-bitカウンターを元にして行われ、カウンター値をタイムスタンプとしてDAQデータに付与します。
+時刻定義はハートビートカウンターと呼ばれる16-bitカウンターを元にして行われ、カウンター値をタイムスタンプとしてDAQデータに付与します次の更新でこの機能は廃止される予定です
そのため、各データが持つタイムスタンプ長は16-bitです。
ハートビートカウンターはシステムクロック信号で駆動されるフリーランカウンタです。125 MHzのクロックで駆動した場合、1カウント幅8 nsで一周に約524 usかかります。
ハートビートカウンターがキャリーオーバーする際に、ハートビート信号と言う周期的な信号を発生させます。
diff --git a/figures/figures.pptx b/figures/figures.pptx
index 4671139..23ef8c4 100644
Binary files a/figures/figures.pptx and b/figures/figures.pptx differ