From b4b466f4bf123bd0dea28f4d88f25d2274981393 Mon Sep 17 00:00:00 2001 From: OutisLi Date: Wed, 6 Mar 2024 23:45:39 +0800 Subject: [PATCH] deploy --- 404.html | 20 + ...1.07-Verilog\350\257\255\346\263\225.html" | 94 ++++ ...\347\241\200\350\257\255\346\263\225.html" | 107 +++++ ...\346\224\257\350\257\255\345\217\245.html" | 153 ++++++ ...\345\200\274\350\241\250\347\244\272.html" | 117 +++++ .../2023.11.15-Vivado.html" | 116 +++++ ...\345\241\236\350\265\213\345\200\274.html" | 102 ++++ ...\346\215\256\347\261\273\345\236\213.html" | 176 +++++++ ...\350\241\250\350\276\276\345\274\217.html" | 206 +++++++++ Chip/Chip/2024.02.21-Chisel.html | 98 ++++ .../2024.02.21-1 Introduction to Scala.html | 238 ++++++++++ .../2024.02.23-2.1 First Chisel Module.html | 209 +++++++++ .../2024.02.24-2.2 Combinational Logic.html | 266 +++++++++++ .../2024.02.25-2.3 Control Flow.html | 229 +++++++++ .../2024.02.26-2.4 Sequential Logic.html | 241 ++++++++++ .../2024.02.28-2.5 FIR Filter.html | 135 ++++++ .../2024.02.29-2.6 More on ChiselTest.html | 132 ++++++ .../2024.03.01-3.1 Generators Parameters.html | 353 ++++++++++++++ ...2024.03.03-3.2 Generators Collections.html | 237 ++++++++++ ...3.3 Interlude Chisel Standard Library.html | 434 ++++++++++++++++++ ...2024.03.05-3.4 Higher-Order Functions.html | 161 +++++++ ...\350\212\257\350\256\241\345\210\222.html" | 94 ++++ ...\344\271\240\351\230\266\346\256\265.html" | 90 ++++ Chip/index.html | 90 ++++ ...211 abab666d7cbf48d2b1656f11166d33f2.html" | 270 +++++++++++ ...221 6b922d49986f4faf85bc9106cd12c5ab.html" | 94 ++++ ...246 c6649929175d46038db921b552f2a235.html" | 189 ++++++++ ...204 9db6d046b0954b45b96ca749922a2ece.html" | 175 +++++++ LeetCode/index.html | 90 ++++ about/index.html | 90 ++++ assets/css/0.styles.9501ef99.css | 1 + .../fonts/MathJax_AMS-Regular.07173fb7.woff | Bin 0 -> 40808 bytes .../fonts/MathJax_Fraktur-Bold.bc421258.woff | Bin 0 -> 22340 bytes .../MathJax_Fraktur-Regular.b80e08d5.woff | Bin 0 -> 21480 bytes assets/fonts/MathJax_Main-Bold.c9423d5d.woff | Bin 0 -> 34464 bytes .../fonts/MathJax_Main-Italic.7e83626b.woff | Bin 0 -> 20832 bytes .../fonts/MathJax_Main-Regular.9995de47.woff | Bin 0 -> 34160 bytes .../MathJax_Math-BoldItalic.77dbcee3.woff | Bin 0 -> 19776 bytes .../fonts/MathJax_Math-Italic.5589d1a8.woff | Bin 0 -> 19360 bytes .../MathJax_SansSerif-Bold.07281897.woff | Bin 0 -> 15944 bytes .../MathJax_SansSerif-Italic.3d580bd5.woff | Bin 0 -> 14628 bytes .../MathJax_SansSerif-Regular.bc3af04f.woff | Bin 0 -> 12660 bytes .../MathJax_Script-Regular.4c74e33b.woff | Bin 0 -> 11852 bytes .../MathJax_Typewriter-Regular.72815766.woff | Bin 0 -> 17604 bytes assets/img/4-inputSort.a02239ea.png | Bin 0 -> 152216 bytes assets/img/Arbiter.0f715328.png | Bin 0 -> 45563 bytes assets/img/FIR.5888a130.jpeg | Bin 0 -> 64884 bytes assets/img/FSM.a8105ac5.png | Bin 0 -> 26749 bytes assets/img/ShiftRegister.c44a0985.svg | 61 +++ assets/img/good.png | Bin 0 -> 22988 bytes assets/img/search.83621669.svg | 1 + assets/img/wenhao.png | Bin 0 -> 31495 bytes assets/js/1.8c21c587.js | 1 + assets/js/10.306e6bb6.js | 1 + assets/js/11.5fb1d80a.js | 1 + assets/js/12.7789f086.js | 1 + assets/js/13.d5c72367.js | 1 + assets/js/14.68eb8b29.js | 1 + assets/js/15.f2b6f50f.js | 1 + assets/js/16.4d3cdc66.js | 1 + assets/js/17.73cfca4f.js | 1 + assets/js/18.fb229398.js | 1 + assets/js/19.9f389a20.js | 1 + assets/js/2.2363d9f4.js | 1 + assets/js/20.39d588d5.js | 1 + assets/js/21.7572c603.js | 1 + assets/js/22.cf5663a8.js | 1 + assets/js/23.517330f8.js | 1 + assets/js/24.35ab16b4.js | 1 + assets/js/25.a76443c0.js | 1 + assets/js/26.6721ecdd.js | 1 + assets/js/27.d3bbbdbb.js | 1 + assets/js/28.e8e7e576.js | 1 + assets/js/29.4d16912e.js | 1 + assets/js/3.34faa58e.js | 1 + assets/js/30.9af0e416.js | 1 + assets/js/31.fe73f524.js | 1 + assets/js/32.b1be8e96.js | 1 + assets/js/33.6e59f7d5.js | 1 + assets/js/34.e04871e3.js | 1 + assets/js/35.fca16eca.js | 1 + assets/js/36.1a40f8d9.js | 1 + assets/js/37.e4e44929.js | 1 + assets/js/38.6f3191d1.js | 1 + assets/js/39.bfa70ce2.js | 1 + assets/js/4.bf48efb2.js | 1 + assets/js/40.dc8e2b87.js | 1 + assets/js/41.3133f986.js | 1 + assets/js/42.be5554aa.js | 1 + assets/js/43.65548e10.js | 1 + assets/js/44.9ddffe77.js | 1 + assets/js/45.0e5a3890.js | 1 + assets/js/46.432b8545.js | 1 + assets/js/47.2cf6c2de.js | 1 + assets/js/48.d772ece1.js | 1 + assets/js/49.c4474539.js | 1 + assets/js/5.89fa5293.js | 1 + assets/js/50.481f57bc.js | 1 + assets/js/51.cedde56b.js | 1 + assets/js/52.4621fe38.js | 1 + assets/js/6.983e3923.js | 1 + assets/js/7.a85c5b80.js | 1 + assets/js/app.af1cb6a5.js | 16 + assets/js/vendors~docsearch.9b93fcb7.js | 3 + index.html | 98 ++++ test.html | 90 ++++ 106 files changed, 5326 insertions(+) create mode 100644 404.html create mode 100644 "Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225.html" create mode 100644 "Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/1.Verilog \345\237\272\347\241\200\350\257\255\346\263\225.html" create mode 100644 "Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/10.Verilog \345\244\232\350\267\257\345\210\206\346\224\257\350\257\255\345\217\245.html" create mode 100644 "Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2.Verilog \346\225\260\345\200\274\350\241\250\347\244\272.html" create mode 100644 "Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2023.11.15-Vivado.html" create mode 100644 "Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2023.11.16-\351\230\273\345\241\236\344\270\216\351\235\236\351\230\273\345\241\236\350\265\213\345\200\274.html" create mode 100644 "Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/3.Verilog \346\225\260\346\215\256\347\261\273\345\236\213.html" create mode 100644 "Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/4.Verilog \350\241\250\350\276\276\345\274\217.html" create mode 100644 Chip/Chip/2024.02.21-Chisel.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.02.21-1 Introduction to Scala.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1 First Chisel Module.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2 Combinational Logic.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3 Control Flow.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4 Sequential Logic.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5 FIR Filter.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6 More on ChiselTest.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1 Generators Parameters.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2 Generators Collections.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3 Interlude Chisel Standard Library.html create mode 100644 Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4 Higher-Order Functions.html create mode 100644 "Chip/Chip/\344\270\200\347\224\237\344\270\200\350\212\257\350\256\241\345\210\222.html" create mode 100644 "Chip/Chip/\344\270\200\347\224\237\344\270\200\350\212\257\350\256\241\345\210\222/\351\242\204\345\255\246\344\271\240\351\230\266\346\256\265.html" create mode 100644 Chip/index.html create mode 100644 "LeetCode/LeetCode/2024 02 22-752 \346\211\223\345\274\200\350\275\254\347\233\230\351\224\201\357\274\210BFS\357\274\211 abab666d7cbf48d2b1656f11166d33f2.html" create mode 100644 "LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab.html" create mode 100644 "LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-104 \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\346\267\261\345\272\246 c6649929175d46038db921b552f2a235.html" create mode 100644 "LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-543 \344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204 9db6d046b0954b45b96ca749922a2ece.html" create mode 100644 LeetCode/index.html create mode 100644 about/index.html create mode 100644 assets/css/0.styles.9501ef99.css create mode 100644 assets/fonts/MathJax_AMS-Regular.07173fb7.woff create mode 100644 assets/fonts/MathJax_Fraktur-Bold.bc421258.woff create mode 100644 assets/fonts/MathJax_Fraktur-Regular.b80e08d5.woff create mode 100644 assets/fonts/MathJax_Main-Bold.c9423d5d.woff create mode 100644 assets/fonts/MathJax_Main-Italic.7e83626b.woff create mode 100644 assets/fonts/MathJax_Main-Regular.9995de47.woff create mode 100644 assets/fonts/MathJax_Math-BoldItalic.77dbcee3.woff create mode 100644 assets/fonts/MathJax_Math-Italic.5589d1a8.woff create mode 100644 assets/fonts/MathJax_SansSerif-Bold.07281897.woff create mode 100644 assets/fonts/MathJax_SansSerif-Italic.3d580bd5.woff create mode 100644 assets/fonts/MathJax_SansSerif-Regular.bc3af04f.woff create mode 100644 assets/fonts/MathJax_Script-Regular.4c74e33b.woff create mode 100644 assets/fonts/MathJax_Typewriter-Regular.72815766.woff create mode 100644 assets/img/4-inputSort.a02239ea.png create mode 100644 assets/img/Arbiter.0f715328.png create mode 100644 assets/img/FIR.5888a130.jpeg create mode 100644 assets/img/FSM.a8105ac5.png create mode 100644 assets/img/ShiftRegister.c44a0985.svg create mode 100644 assets/img/good.png create mode 100644 assets/img/search.83621669.svg create mode 100644 assets/img/wenhao.png create mode 100644 assets/js/1.8c21c587.js create mode 100644 assets/js/10.306e6bb6.js create mode 100644 assets/js/11.5fb1d80a.js create mode 100644 assets/js/12.7789f086.js create mode 100644 assets/js/13.d5c72367.js create mode 100644 assets/js/14.68eb8b29.js create mode 100644 assets/js/15.f2b6f50f.js create mode 100644 assets/js/16.4d3cdc66.js create mode 100644 assets/js/17.73cfca4f.js create mode 100644 assets/js/18.fb229398.js create mode 100644 assets/js/19.9f389a20.js create mode 100644 assets/js/2.2363d9f4.js create mode 100644 assets/js/20.39d588d5.js create mode 100644 assets/js/21.7572c603.js create mode 100644 assets/js/22.cf5663a8.js create mode 100644 assets/js/23.517330f8.js create mode 100644 assets/js/24.35ab16b4.js create mode 100644 assets/js/25.a76443c0.js create mode 100644 assets/js/26.6721ecdd.js create mode 100644 assets/js/27.d3bbbdbb.js create mode 100644 assets/js/28.e8e7e576.js create mode 100644 assets/js/29.4d16912e.js create mode 100644 assets/js/3.34faa58e.js create mode 100644 assets/js/30.9af0e416.js create mode 100644 assets/js/31.fe73f524.js create mode 100644 assets/js/32.b1be8e96.js create mode 100644 assets/js/33.6e59f7d5.js create mode 100644 assets/js/34.e04871e3.js create mode 100644 assets/js/35.fca16eca.js create mode 100644 assets/js/36.1a40f8d9.js create mode 100644 assets/js/37.e4e44929.js create mode 100644 assets/js/38.6f3191d1.js create mode 100644 assets/js/39.bfa70ce2.js create mode 100644 assets/js/4.bf48efb2.js create mode 100644 assets/js/40.dc8e2b87.js create mode 100644 assets/js/41.3133f986.js create mode 100644 assets/js/42.be5554aa.js create mode 100644 assets/js/43.65548e10.js create mode 100644 assets/js/44.9ddffe77.js create mode 100644 assets/js/45.0e5a3890.js create mode 100644 assets/js/46.432b8545.js create mode 100644 assets/js/47.2cf6c2de.js create mode 100644 assets/js/48.d772ece1.js create mode 100644 assets/js/49.c4474539.js create mode 100644 assets/js/5.89fa5293.js create mode 100644 assets/js/50.481f57bc.js create mode 100644 assets/js/51.cedde56b.js create mode 100644 assets/js/52.4621fe38.js create mode 100644 assets/js/6.983e3923.js create mode 100644 assets/js/7.a85c5b80.js create mode 100644 assets/js/app.af1cb6a5.js create mode 100644 assets/js/vendors~docsearch.9b93fcb7.js create mode 100644 index.html create mode 100644 test.html diff --git a/404.html b/404.html new file mode 100644 index 0000000..9cba9aa --- /dev/null +++ b/404.html @@ -0,0 +1,20 @@ + + + + + + Hello World --from OutisLi + + + + + + + + +

404

There's nothing here.
+ Take me home. +
+ + + diff --git "a/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225.html" "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225.html" new file mode 100644 index 0000000..c7ab94d --- /dev/null +++ "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225.html" @@ -0,0 +1,94 @@ + + + + + + 2023.11.07-Verilog语法 | Hello World --from OutisLi + + + + + + + + +
+ + + diff --git "a/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/1.Verilog \345\237\272\347\241\200\350\257\255\346\263\225.html" "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/1.Verilog \345\237\272\347\241\200\350\257\255\346\263\225.html" new file mode 100644 index 0000000..d34276a --- /dev/null +++ "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/1.Verilog \345\237\272\347\241\200\350\257\255\346\263\225.html" @@ -0,0 +1,107 @@ + + + + + + 1. Verilog 基础语法 | Hello World --from OutisLi + + + + + + + + +

# 1. Verilog 基础语法

# 格式

Verilog 是区分大小写的。

格式自由,可以在一行内编写,也可跨多行编写。

每个语句必须以分号为结束符。空白符(换行、制表、空格)都没有实际的意义,在编译阶段可忽略。例如下面两中编程方式都是等效的。

# 不换行(不推荐)

**wire** [1:0]  results ;**assign** results = (a == 1'b0) ? 2'b01(b==1'b0) ? 2'b102'b11 ;
+

# 换行(推荐)

**wire** [1:0]  results ;
+**assign**      results = (a == 1'b0) ? 2'b01(b==1'b0) ? 2'b102'b11 ;
+

# 注释

Verilog 中有 2 种注释方式:

用 // 进行单行注释:

reg [3:0] counter ;  // A definition of counter register
+

用**/* */**进行跨行注释:

wire [11:0]  addr ;
+/*
+Next are notes with multiple lines.
+Codes here cannot be compiled.
+*/
+assign   addr = 12'b0 ;
+

# 标识符与关键字

标识符(identifier)可以是任意一组字母、数字、$ 符号和 _(下划线)符号的合,但标识符的第一个字符必须是字母或者下划线,不能以数字或者美元符开始。

另外,标识符是区分大小写的。

关键字是 Verilog 中预留的用于定义语言结构的特殊标识符。

Verilog 中关键字全部为小写。

# 实例

**reg** [3:0] counter ; *//reg 为关键字, counter 为标识符*
+**input** clk; *//input 为关键字,clk 为标识符*
+**input** CLK; *//CLK 与 clk是 2 个不同的标识符*
+
+ + + diff --git "a/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/10.Verilog \345\244\232\350\267\257\345\210\206\346\224\257\350\257\255\345\217\245.html" "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/10.Verilog \345\244\232\350\267\257\345\210\206\346\224\257\350\257\255\345\217\245.html" new file mode 100644 index 0000000..9db0c5c --- /dev/null +++ "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/10.Verilog \345\244\232\350\267\257\345\210\206\346\224\257\350\257\255\345\217\245.html" @@ -0,0 +1,153 @@ + + + + + + 10. Verilog 多路分支语句 | Hello World --from OutisLi + + + + + + + + +

# 10. Verilog 多路分支语句

# 关键词:case,选择器

case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。

# case 语句

case 语句格式如下:

case(case_expr)
+    condition1     :             true_statement1 ;
+    condition2     :             true_statement2 ;
+    ……
+    default        :             default_statement ;
+endcase
+

case 语句执行时,如果 condition1 为真,则执行 true_statement1 ; 如果 condition1 为假,condition2 为真,则执行 true_statement2;依次类推。如果各个 condition 都不为真,则执行 default_statement 语句。

default 语句是可选的,且在一个 case 语句中不能有多个 default 语句。

条件选项可以有多个,不仅限于 condition1、condition2 等,而且这些条件选项不要求互斥。虽然这些条件选项是并发比较的,但执行效果是谁在前且条件为真谁被执行。

ture_statement1 等执行语句可以是一条语句,也可以是多条。如果是多条执行语句,则需要用 begin 与 end 关键字进行说明。

# case 语句支持嵌套使用。

下面用 case 语句代替 if 语句实现了一个 4 路选择器的功能。仿真结果与 testbench 可参考条件语句 (opens new window)一章,两者完全一致。

# 实例

**module** mux4to1(
+    **input** [1:0]     sel ,
+    **input** [1:0]     p0 ,
+    **input** [1:0]     p1 ,
+    **input** [1:0]     p2 ,
+    **input** [1:0]     p3 ,
+    **output** [1:0]    sout);
+ 
+    **reg** [1:0]     sout_t ;
+    **always** @(*)
+        **case**(sel)
+            2'b00:   **begin**      
+                    sout_t = p0 ;
+                **end**
+            2'b01:       sout_t = p1 ;
+            2'b10:       sout_t = p2 ;
+            **default**:     sout_t = p3 ;
+        **endcase**
+    **assign** sout = sout_t ;
+ **endmodule**
+

case 语句中的条件选项表单式不必都是常量,也可以是 x 值或 z 值。

当多个条件选项下需要执行相同的语句时,多个条件选项可以用逗号分开,放在同一个语句块的候选项中。

# 例如,对 4 路选择器的 case 语句进行扩展,举例如下:

**case**(sel)
+    2'b00:   sout_t = p0 ;
+    2'b01:   sout_t = p1 ;
+    2'b10:   sout_t = p2 ;
+    2'b11:     sout_t = p3 ;
+    2'bx0, 2'bx1, 2'bxz, 2'bxx, 2'b0x, 2'b1x, 2'bzx :
+        sout_t = 2'bxx ;
+    2'bz0, 2'bz1, 2'bzz, 2'b0z, 2'b1z :
+        sout_t = 2'bzz ;
+    **default**:  $display("Unexpected input control!!!");**endcase**
+

# casex/casez 语句

casex、 casez 语句是 case 语句的变形,用来表示条件选项中的无关项。

casex 用 "x" 来表示无关值,casez 用问号 "?" 来表示无关值。

两者的实现的功能是完全一致的,语法与 case 语句也完全一致。

  1. 在case语句中,敏感表达式中与各项值之间的比较是一种全等比较,每一位都相同才认为匹配。
  2. 在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。
  3. 在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。

Untitled

# 例如用 casez 语句来实现一个 4bit 控制端的 4 路选择选择器。

**module** mux4to1(
+    **input** [3:0]     sel ,
+    **input** [1:0]     p0 ,
+    **input** [1:0]     p1 ,
+    **input** [1:0]     p2 ,
+    **input** [1:0]     p3 ,
+    **output** [1:0]    sout);
+ 
+    **reg** [1:0]     sout_t ;
+    **always** @(*)
+        **casez**(sel)
+            4'b???1:     sout_t = p0 ;
+            4'b??1?:     sout_t = p1 ;
+            4'b?1??:     sout_t = p2 ;
+            4'b1???:     sout_t = p3 ;  
+        **default**:         sout_t = 2'b0 ;
+    **endcase**
+    **assign**      sout = sout_t ;
+ **endmodule**
+
+ + + diff --git "a/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2.Verilog \346\225\260\345\200\274\350\241\250\347\244\272.html" "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2.Verilog \346\225\260\345\200\274\350\241\250\347\244\272.html" new file mode 100644 index 0000000..de265af --- /dev/null +++ "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2.Verilog \346\225\260\345\200\274\350\241\250\347\244\272.html" @@ -0,0 +1,117 @@ + + + + + + 2. Verilog 数值表示 | Hello World --from OutisLi + + + + + + + + +

# 2. Verilog 数值表示

# 数值种类

Verilog HDL 有下列四种基本的值来表示硬件电路中的电平逻辑:

  • 0:逻辑 0 或 "假"
  • 1:逻辑 1 或 "真"
  • x 或 X:未知
  • z 或 Z:高阻

x 意味着信号数值的不确定,即在实际电路里,信号可能为 1,也可能为 0。

z 意味着信号处于高阻状态,常见于信号(input, reg)没有驱动时的逻辑结果。例如一个 pad 的 input 呈现高阻状态时,其逻辑值和上下拉的状态有关系。上拉则逻辑值为 1,下拉则为 0 。

# 整数数值表示方法

数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。

# 指明位宽:

4'b1011         *// 4bit 数值*
+32'h3022_c0de   *// 32bit 的数值    一个16进制的数需要4bit来表示*
+

其中,下划线 _ 是为了增强代码的可读性。

# 不指明位宽:

一般直接写数字时,默认为十进制表示,例如下面的 3 种写法是等效的:

counter = 'd100; *//一般会根据编译器自动分频位宽,常见的为32bit*
+counter = 100;
+counter = 32'h64;
+

# 负数表示

通常在表示位宽的数字前面加一个减号来表示负数。例如:

-6'd15
+-15
+
  • 15 在 5 位二进制中的形式为 5'b10001, 在 6 位二进制中的形式为 6'b11_0001。

需要注意的是,减号放在基数和数字之间是非法的,例如下面的表示方法是错误的:

4'd-2 //非法说明
+

# 实数表示方法

实数表示方法主要有两种方式:

# 十进制:

30.123
+6.0
+3.0
+0.001
+

# 科学计数法:

1.2e4         //大小为12000
+1_0001e4      //大小为100010000
+1E-3          //大小为0.001
+

# 字符串表示方法

字符串是由双引号包起来的字符队列。字符串不能多行书写,即字符串中不能包含回车符。Verilog 将字符串当做一系列的单字节 ASCII 字符队列。例如,为存储字符串 "www.runoob.com", 需要 14*8bit 的存储单元。例如:

**reg** [0: 14*8-1]   str ;
+**initial** **begin**    
+			str = "www.runoob.com";
+**end**
+
+ + + diff --git "a/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2023.11.15-Vivado.html" "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2023.11.15-Vivado.html" new file mode 100644 index 0000000..1193a75 --- /dev/null +++ "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2023.11.15-Vivado.html" @@ -0,0 +1,116 @@ + + + + + + 2023.11.15-Vivado | Hello World --from OutisLi + + + + + + + + +

# 2023.11.15-Vivado

# 1. RTL Schematic & Synthesis Schematic

在 Vivado 或类似的 FPGA 开发环境中,您会遇到 RTL (Register Transfer Level) 分析中的 Schematic 和 Synthesis 过程中的 Schematic。它们虽然看起来相似,但代表了不同阶段的电路设计和功能。

  1. RTL Analysis Schematic:

    • 这个 Schematic 是您用硬件描述语言(如 Verilog)编写的代码的直接可视化表示。
    • 它展示了代码中定义的模块、它们的互联以及信号流。
    • RTL Schematic 重点在于逻辑功能的实现,而不是实际硬件如何实现这些功能。它更多地表示逻辑结构而非物理结构。
    • 这是设计验证的早期阶段,您可以在这里检查逻辑错误或结构问题。

    Untitled

  2. Synthesis Schematic:

    • 经过综合后的 Schematic 是将 RTL 设计转换为实际 FPGA 内部资源(如查找表(LUTs)、寄存器和逻辑单元)的表示。
    • 这个过程涉及优化、逻辑最小化、资源分配和时序分析。
    • Synthesis Schematic 展示了设计如何映射到 FPGA 的实际硬件上,包括使用的具体资源和连接。
    • 这是设计流程的后期阶段,您可以在这里优化性能、资源使用和满足时序要求。

    Untitled

总结来说,RTL Schematic 关注于逻辑设计的表示,而 Synthesis Schematic 则关注于该设计在 FPGA 上的物理实现。理解两者的区别对于 FPGA 开发至关重要,因为这影响着您如何优化设计以及解决可能出现的问题。

# 2. Project汇总中的LUT,FF,IO,BUFG

在 Vivado 或类似的 FPGA 设计项目中,您会遇到几个关键的资源指标,如 LUT、FF、IO 和 BUFG。这些指标是 FPGA 设计和资源利用的重要部分。下面是每个术语的简要解释:

  1. LUT (Look-Up Table): +
    • LUT 是 FPGA 中实现逻辑功能的基本单元。
    • 它本质上是一个可编程的真值表,可以配置为执行各种逻辑操作(如 AND、OR、NOT、XOR 等)。
    • LUT 的大小和数量是 FPGA 性能和复杂性的关键决定因素。在设计中,LUT 的使用量通常是衡量设计复杂度的一个重要指标。
  2. FF (Flip-Flop): +
    • FF 是用于存储数据的基本存储元件,通常用于实现寄存器、计数器等。
    • 在 FPGA 中,FF 通常与 LUT 配对使用,以实现存储和逻辑功能的组合。
    • FF 的数量通常表明了设计中的数据存储需求和时序复杂度。
  3. IO (Input/Output Ports): +
    • 这些是 FPGA 与外界通信的端口,包括输入端口和输出端口。
    • IO 的数量和类型(如单端或差分)取决于 FPGA 的物理特性和您的设计需求。
    • 在设计中,您需要确保 FPGA 有足够的 IO 端口来满足您的外部连接需求。
  4. BUFG (Buffered Global Clock): +
    • BUFG 是一种专用的时钟缓冲器,用于分配全局时钟信号。
    • 在复杂的 FPGA 设计中,确保时钟信号的稳定和同步是非常重要的。BUFG 能够在整个芯片上稳定地分配时钟信号。
    • BUFG 的使用和配置对于实现有效的时钟管理和避免时钟偏移非常关键。

理解这些资源对于 FPGA 设计至关重要,因为它们直接影响您的设计能否在特定的 FPGA 上实现,以及该设计的性能和效率。在 Vivado 的项目汇总中,这些参数帮助您评估设计对 FPGA 资源的利用情况。

# 3. FPGA的组成构造

FPGA (Field-Programmable Gate Array) 是一种高度灵活的可编程硬件,它由多个不同的元件构成,共同实现复杂的数字逻辑功能。以下是 FPGA 内部主要组成部分的概述:

  1. 查找表 (LUTs): +
    • 如您所述,LUTs 是 FPGA 的核心,用于实现基本的逻辑功能。它们通过存储预定义的输出值来模拟逻辑门的行为。
    • LUTs 可以通过编程来实现简单的逻辑操作(如 AND、OR、NOT)或更复杂的组合逻辑。
  2. 多路选择器 (MUXes): +
    • 虽然在传统的逻辑电路中,MUXes 是通过逻辑门实现的,但在 FPGA 中,它们通常与 LUTs 结合或独立实现。
    • MUXes 在 FPGA 设计中用于根据控制信号选择不同的输入路径,这对于创建复杂的数据路径和逻辑结构至关重要。
  3. 触发器 (Flip-Flops): +
    • Flip-Flops 用于存储信息,是实现时序逻辑的关键元件。它们通常与 LUTs 配对,以构成可存储状态的逻辑单元。
  4. 编程互联资源 (Programmable Interconnects): +
    • 这些是连接 FPGA 内部不同部件的路径。它们可以被编程以形成任何所需的逻辑网络,从而将 LUTs、Flip-Flops 和其他资源连接起来。
  5. 输入/输出块 (I/O Blocks): +
    • 这些块连接 FPGA 和外部世界,提供数据输入和输出功能。它们可以配置为不同类型的接口(如单端或差分)。
  6. 专用硬件资源: +
    • 许多 FPGA 还包含专用的硬件资源,如 DSP (数字信号处理) 块、内存控制器、时钟管理模块(如 PLLs 和 BUFGs),以及其他特定功能块。
  7. 存储资源: +
    • 包括 RAM 块 (Block RAM) 或更小的存储单元,用于数据存储和缓冲。

FPGA 的关键优势在于其高度可编程性和灵活性。设计师可以通过编程定义 LUTs、MUXes、Flip-Flops 以及互连的配置和组合方式,从而在没有物理改动硬件的情况下实现几乎任何数字逻辑设计。这种灵活性使得 FPGA 在快速原型制作、定制硬件加速和可重配置系统中非常有价值。

FPGA (Field-Programmable Gate Array) 是一种高度灵活的可编程硬件,它由多个不同的元件构成,共同实现复杂的数字逻辑功能。以下是 FPGA 内部主要组成部分的概述:

  1. 查找表 (LUTs): +
    • 如您所述,LUTs 是 FPGA 的核心,用于实现基本的逻辑功能。它们通过存储预定义的输出值来模拟逻辑门的行为。
    • LUTs 可以通过编程来实现简单的逻辑操作(如 AND、OR、NOT)或更复杂的组合逻辑。
  2. 多路选择器 (MUXes): +
    • 虽然在传统的逻辑电路中,MUXes 是通过逻辑门实现的,但在 FPGA 中,它们通常与 LUTs 结合或独立实现。
    • MUXes 在 FPGA 设计中用于根据控制信号选择不同的输入路径,这对于创建复杂的数据路径和逻辑结构至关重要。
  3. 触发器 (Flip-Flops): +
    • Flip-Flops 用于存储信息,是实现时序逻辑的关键元件。它们通常与 LUTs 配对,以构成可存储状态的逻辑单元。
  4. 编程互联资源 (Programmable Interconnects): +
    • 这些是连接 FPGA 内部不同部件的路径。它们可以被编程以形成任何所需的逻辑网络,从而将 LUTs、Flip-Flops 和其他资源连接起来。
  5. 输入/输出块 (I/O Blocks): +
    • 这些块连接 FPGA 和外部世界,提供数据输入和输出功能。它们可以配置为不同类型的接口(如单端或差分)。
  6. 专用硬件资源: +
    • 许多 FPGA 还包含专用的硬件资源,如 DSP (数字信号处理) 块、内存控制器、时钟管理模块(如 PLLs 和 BUFGs),以及其他特定功能块。
  7. 存储资源: +
    • 包括 RAM 块 (Block RAM) 或更小的存储单元,用于数据存储和缓冲。

FPGA 的关键优势在于其高度可编程性和灵活性。设计师可以通过编程定义 LUTs、MUXes、Flip-Flops 以及互连的配置和组合方式,从而在没有物理改动硬件的情况下实现几乎任何数字逻辑设计。这种灵活性使得 FPGA 在快速原型制作、定制硬件加速和可重配置系统中非常有价值。

+ + + diff --git "a/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2023.11.16-\351\230\273\345\241\236\344\270\216\351\235\236\351\230\273\345\241\236\350\265\213\345\200\274.html" "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2023.11.16-\351\230\273\345\241\236\344\270\216\351\235\236\351\230\273\345\241\236\350\265\213\345\200\274.html" new file mode 100644 index 0000000..f1bc0fb --- /dev/null +++ "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/2023.11.16-\351\230\273\345\241\236\344\270\216\351\235\236\351\230\273\345\241\236\350\265\213\345\200\274.html" @@ -0,0 +1,102 @@ + + + + + + 2023.11.16-阻塞与非阻塞赋值 | Hello World --from OutisLi + + + + + + + + +

# 2023.11.16-阻塞与非阻塞赋值

Untitled

Untitled

组合逻辑电路使用阻塞赋值

时序逻辑电路使用非阻塞赋值

在 Verilog 中,阻塞赋值(Blocking Assignment)和非阻塞赋值(Non-Blocking Assignment)是两种不同的信号赋值方法,它们在时序逻辑的模拟和硬件描述语言(HDL)代码的编写中有着重要的区别。

# 阻塞赋值(Blocking Assignment)

  • 使用符号 = 进行赋值。
  • 阻塞赋值在执行时会“阻塞”代码的进一步执行,直到赋值完成。
  • 在执行下一条语句之前,当前语句必须完成其操作。
  • 在组合逻辑设计中常用,但在时序逻辑中使用可能会导致问题,因为它们可能会引起模拟时序和硬件时序的不一致。

举例

a = b;
+c = a;
+

在这个例子中,c = a; 会等待 a = b; 完成后才执行。

# 非阻塞赋值(Non-Blocking Assignment)

  • 使用符号 <= 进行赋值。
  • 非阻塞赋值允许代码的后续部分在赋值完成之前继续执行。
  • 这意味着所有非阻塞赋值都是并行发生的(或看起来如此),这更接近于硬件的实际行为。
  • 在时序逻辑,特别是在描述触发器(如寄存器)的行为时非常重要和常用。

举例

a <= b;
+c <= a;
+

在这个例子中,c <= a; 不会等待 a <= b; 的完成。ac 的赋值看似同时发生。

在一个always块中,不同地方对同一个变量的赋值会被同时执行,最终结果是变量变成最后一次赋值的结果(前面的操作被覆盖)

+ + + diff --git "a/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/3.Verilog \346\225\260\346\215\256\347\261\273\345\236\213.html" "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/3.Verilog \346\225\260\346\215\256\347\261\273\345\236\213.html" new file mode 100644 index 0000000..f14055f --- /dev/null +++ "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/3.Verilog \346\225\260\346\215\256\347\261\273\345\236\213.html" @@ -0,0 +1,176 @@ + + + + + + 3. Verilog 数据类型 | Hello World --from OutisLi + + + + + + + + +

# 3. Verilog 数据类型

Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。

# 线网(wire)

wire 类型表示硬件单元之间的物理连线,由其连接的器件输出端连续驱动。如果没有驱动元件连接到 wire 型变量,缺省值一般为 "Z"。举例如下:

**wire**   interrupt;
+**wire**   flag1, flag2;
+**wire**   gnd = 1'b0;
+

线网型还有其他数据类型,包括 wand,wor,wri,triand,trior,trireg 等。这些数据类型用的频率不是很高,这里不做介绍。

# 寄存器(reg)

寄存器(reg)用来表示存储单元,它会保持数据原有的值,直到被改写。声明举例如下:

**reg**    clk_temp;
+**reg**    flag1, flag2;
+

例如在 always 块中,寄存器可能被综合成边沿触发器,在组合逻辑中可能被综合成 wire 型变量。寄存器不需要驱动源,也不一定需要时钟信号。在仿真时,寄存器的值可在任意时刻通过赋值操作进行改写。例如:

**reg** rstn ;
+**initial** **begin**    
+		rstn = 1'b0;
+    #100;
+    rstn = 1'b1;
+**end**
+

# 向量

当位宽大于 1 时,wire 或 reg 即可声明为向量的形式。例如:

**reg** [3:0]      counter ;    *//声明4bit位宽的寄存器counter*
+**wire** [32-1:0]  gpio_data;   *//声明32bit位宽的线型变量gpio_data*
+**wire** [8:2]     addr ;       *//声明7bit位宽的线型变量addr,位宽范围为8:2*
+**reg** [0:31]     data ;       *//声明32bit位宽的寄存器变量data, 最高有效位为0*
+

对于上面的向量,我们可以指定某一位或若干相邻位,作为其他逻辑使用。例如:

**wire** [9:0]     data_low = data[0:9] ;addr_temp[3:2] = addr[8:7] + 1'b1 ;
+

Verilog 支持可变的向量域选择,例如:

**reg** [31:0]     data1 ;
+**reg** [7:0]      byte1 [3:0];
+**integer** j ;
+**always**@* **begin**
+    **for** (j=0; j<=3;j=j+1) **begin**
+        byte1[j] = data1[(j+1)*8-1 : j*8];
+        *//把data1[7:0]…data1[31:24]依次赋值给byte1[0][7:0]…byte[3][7:0]*
+    **end
+end**
+

Verilog 还支持指定 bit 位后固定位宽的向量域选择访问。

  • [bit+: width] : 从起始 bit 位开始递增,位宽为 width。
  • [bit-: width] : 从起始 bit 位开始递减,位宽为 width。
*//下面 2 种赋值是等效的*
+A = data1[31-: 8] ;
+A = data1[31:24] ;
+*//下面 2 种赋值是等效的*
+B = data1[0+ : 8] ;
+B = data1[0:7] ;
+

对信号重新进行组合成新的向量时,需要借助大括号。例如:

**wire** [31:0]    temp1, temp2 ;
+**assign** temp1 = {byte1[0][7:0], data1[31:8]};  *//数据拼接*
+**assign** temp2 = {32{1'b0}};  *//赋值32位的数值0*
+

# 整数,实数,时间寄存器变量

整数,实数,时间等数据类型实际也属于寄存器类型。

# 整数(integer)

整数类型用关键字 integer 来声明。声明时不用指明位宽,位宽和编译器有关,一般为32 bit。reg 型变量为无符号数,而 integer 型变量为有符号数。例如:

**reg** [31:0]      data1 ;
+**reg** [3:0]       byte1 [7:0]; *//数组变量,后续介绍*
+**integer** j ;  *//整型变量,用来辅助生成数字电路*
+**always**@* **begin**
+    **for** (j=0; j<=3;j=j+1) **begin**
+        byte1[j] = data1[(j+1)*8-1 : j*8];
+        *//把data1[7:0]…data1[31:24]依次赋值给byte1[0][7:0]…byte[3][7:0]*
+        **end
+end**
+

此例中,integer 信号 j 作为辅助信号,将 data1 的数据依次赋值给数组 byte1。综合后实际电路里并没有 j 这个信号,j 只是辅助生成相应的硬件电路。

# 实数(real)

实数用关键字 real 来声明,可用十进制或科学计数法来表示。实数声明不能带有范围,默认值为 0。如果将一个实数赋值给一个整数,则只有实数的整数部分会赋值给整数。例如:

**real**        data1 ;
+**integer**     temp ;
+**initial** **begin**
+    data1 = 2e3 ;
+    data1 = 3.75 ;
+**end**
+
+**initial** **begin**
+    temp = data1 ; *//temp 值的大小为3*
+**end**
+

# 时间(time)

Verilog 使用特殊的时间寄存器 time 型变量,对仿真时间进行保存。其宽度一般为 64 bit,通过调用系统函数 $time 获取当前仿真时间。例如:

**time**       current_time ;
+**initial** **begin**
+       #100 ;
+       current_time = $time ; *//current_time 的大小为 100*
+**end**
+

# 数组

在 Verilog 中允许声明 reg, wire, integer, time, real 及其向量类型的数组。

数组维数没有限制。线网数组也可以用于连接实例模块的端口。数组中的每个元素都可以作为一个标量或者向量,以同样的方式来使用,形如:数组名[下标]。对于多维数组来讲,用户需要说明其每一维的索引。例如:

**integer**          flag [7:0] ; *//8个整数组成的数组*
+**reg**  [3:0]       counter [3:0] ; *//由4个4bit计数器组成的数组*
+**wire** [7:0]       addr_bus [3:0] ; *//由4个8bit wire型变量组成的数组*
+**wire**             data_bit[7:0][5:0] ; *//声明1bit wire型变量的二维数组*
+**reg** [31:0]       data_4d[11:0][3:0][3:0][255:0] ; *//声明4维的32bit数据变量数组*
+

下面显示了对数组元素的赋值操作:

flag [1]   = 32'd0 ; *//将flag数组中第二个元素赋值为32bit的0值*
+counter[3] = 4'hF ;  *//将数组counter中第4个元素的值赋值为4bit 十六进制数F,等效于counter[3][3:0] = 4'hF,即可省略宽度;*
+**assign** addr_bus[0]        = 8'b0 ; *//将数组addr_bus中第一个元素的值赋值为0*
+**assign** data_bit[0][1]     = 1'b1;  *//将数组data_bit的第1行第2列的元素赋值为1,这里不能省略第二个访问标号,即 assign data_bit[0] = 1'b1; 是非法的。*
+data_4d[0][0][0][0][15:0] = 15'd3 ;  *//将数组data_4d中标号为[0][0][0][0]的寄存器单元的15~0bit赋值为3*
+

虽然数组与向量的访问方式在一定程度上类似,但不要将向量和数组混淆。向量是一个单独的元件,位宽为 n;数组由多个元件组成,其中每个元件的位宽为 n 或 1。它们在结构的定义上就有所区别。

# 存储器

存储器变量就是一种寄存器数组,可用来描述 RAM 或 ROM 的行为。例如:

**reg**               membit[0:255] ;  *//256bit的1bit存储器*
+**reg**  [7:0]        mem[0:1023] ;    *//1Kbyte存储器,位宽8bit*
+mem[511] = 8'b0 ;                  *//令第512个8bit的存储单元值为0*
+

# 参数

参数用来表示常量,用关键字 parameter 声明,只能赋值一次。例如:

**parameter**      data_width = 10'd32 ;
+**parameter**      i=1, j=2, k=3 ;
+**parameter**      mem_size = data_width * 10 ;
+

但是,通过实例化的方式,可以更改参数在模块中的值。此部分以后会介绍。

局部参数用 localparam 来声明,其作用和用法与 parameter 相同,区别在于它的值不能被改变。所以当参数只在本模块中调用时,可用 localparam 来说明。

# 字符串

字符串保存在 reg 类型的变量中,每个字符占用一个字节(8bit)。因此寄存器变量的宽度应该足够大,以保证不会溢出。

字符串不能多行书写,即字符串中不能包含回车符。如果寄存器变量的宽度大于字符串的大小,则使用 0 来填充左边的空余位;如果寄存器变量的宽度小于字符串大小,则会截去字符串左边多余的数据。例如,为存储字符串 "run.runoob.com", 需要 14*8bit 的存储单元:

**reg** [0: 14*8-1]       str ;
+**initial** **begin**
+    str = "run.runoob.com";
+**end**
+

有一些特殊字符在显示字符串中有特殊意义,例如换行符,制表符等。如果需要在字符串中显示这些特殊的字符,则需要在前面加前缀转义字符 ** 。例如下表所示:

转义字符 显示字符
\n 换行
\t 制表符
%% %
\ \
" "
\ooo 1到3个8进制数字字符

其实,在 SystemVerilog(主要用于 Verilog 仿真的编程语言)语言中,已经可以直接用关键字 string 来表示字符串变量类型,这为 Verilog 的仿真带来了极大的便利。有兴趣的学者可以简单学习下 SystemVerilog。

+ + + diff --git "a/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/4.Verilog \350\241\250\350\276\276\345\274\217.html" "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/4.Verilog \350\241\250\350\276\276\345\274\217.html" new file mode 100644 index 0000000..05c6708 --- /dev/null +++ "b/Chip/Chip/2023.11.07-Verilog\350\257\255\346\263\225/4.Verilog \350\241\250\350\276\276\345\274\217.html" @@ -0,0 +1,206 @@ + + + + + + 4. Verilog 表达式 | Hello World --from OutisLi + + + + + + + + +

# 4. Verilog 表达式

# 表达式

表达式由操作符和操作数构成,其目的是根据操作符的意义得到一个计算结果。表达式可以在出现数值的任何地方使用。例如:

# 实例

a^b ;          *//a与b进行异或操作*
+address[9:0] + 10'b1 ;  *//地址累加*
+flag1 && flag2 ;  *//逻辑与操作*
+

# 操作数

操作数可以是任意的数据类型,只是某些特定的语法结构要求使用特定类型的操作数。

操作数可以为常数,整数,实数,线网,寄存器,时间,位选,域选,存储器及函数调用等。

# 实例

**module** test;
+*//实数*
+**real** a, b, c;
+c = a + b ;
+*//寄存器*
+**reg**  [3:0]       cprmu_1, cprmu_2 ;
+**always** @(**posedge** clk) **begin**
+        cprmu_2 = cprmu_1 ^ cprmu_2 ;
+**end**
+         
+*//函数*
+**reg**  flag1 ;
+flag = calculate_result(A, B);
+ *//非法操作数*
+**reg** [3:0]         res;
+**wire** [3:0]        temp;
+**always**@ (***begin**
+    res    = cprmu_2 – cprmu_1 ;
+    *//temp = cprmu_2 – cprmu_1 ; //不合法,always块里赋值对象不能是wire型*
+**end
+endmodule**
+

# 操作符

Verilog 中提供了大约 9 种操作符,分别是算术、关系、等价、逻辑、按位、归约、移位、拼接、条件操作符。

大部分操作符与 C 语言中类似。同类型操作符之间,除条件操作符从右往左关联,其余操作符都是自左向右关联。圆括号内表达式优先执行。例如下面每组的 2 种写法都是等价的。

//自右向左关联,两种写法等价
+A+B-C ;
+(A+B)-C ;
+
+//自右向左关联,两种写法等价,结果为 B、D 或 F
+A ? B : C ? D : F ;
+A ? B : (C ? D : F) ;
+
+//自右向左关联,两种写法不等价
+(A ? B : C) ? D : F ;  //结果 D 或 F
+A ? B : C ? D : F ; //结果为 B、D 或 F
+

不同操作符之间,优先级是不同的。下表列出了操作符优先级从高至低的排列顺序。当没有圆括号时,Verilog 会根据操作符优先级对表达式进行计算。为了避免由操作符优先级导致的计算混乱,在不确定优先级时,建议用圆括号将表达式区分开来。

操作符 操作符号 优先级
单目运算 + - ! ~ 最高
乘、除、取模 * / %
加减 + -
移位 <<  >>
关系 <  <=  >  >=
等价 ==  !=  ===  !===
归约 & ~&
^ ~^
~
逻辑 &&
条件 ?: 最低

# 算术操作符

算术操作符包括单目操作符和双目操作符。

双目操作符对 2 个操作数进行算术运算,包括乘(*)、除(/)、加(+)、减(-)、求幂(**)、取模(%)。

# 实例

**reg** [3:0]  a, b;**reg** [4:0]  c ;
+a = 4'b0010 ;
+b = 4'b1001 ;
+c = a+b;        *//结果为c=b'b1011*
+c = a/b;          *//结果为c=4,取整*
+

如果操作数某一位为 X,则计算结果也会全部出现 X。例如:

# 实例

b = 4'b100x ;
+c = a+b ;       *//结果为c=4'bxxxx*
+

对变量进行声明时,要根据变量的操作符对变量的位宽进行合理声明,不要让结果溢出。上述例子中,相加的 2 个变量位宽为 4bit,那么结果寄存器变量位宽最少为 5bit。否则,高位将被截断,导致结果高位丢失。无符号数乘法时,结果变量位宽应该为 2 个操作数位宽之和。

# 实例

**reg** [3:0]        mula ;**reg** [1:0]        mulb;**reg** [5:0]        res ;
+mula = 4'he   ;
+mulb = 2'h3   ;
+res  = mula * mulb ; *//结果为res=6'h2a, 数据结果没有丢失位数*
+
  • 和 - 也可以作为单目操作符来使用,表示操作数的正负性。此类操作符优先级最高。
-4  //表示负4
++3  //表示正3
+

负数表示时,可以直接在十进制数字前面增加一个减号 -,也可以指定位宽。因为负数使用二进制补码来表示,不指定位宽来表示负数,编译器在转换时,会自动分配位宽,从而导致意想不到的结果。例如:

# 实例

mula = -4'd4 ;
+mulb = 2 ;
+res = mula * mulb ;      *//计算结果为res=-6'd8, 即res=6'h38,正常*
+res = mula * (-'d4) ;    *//(4的32次幂-4) * 2, 结果异常*
+

# 关系操作符

关系操作符有大于(>),小于(<),大于等于(>=),小于等于(<=)。

关系操作符的正常结果有 2 种,真(1)或假(0)。

如果操作数中有一位为 x 或 z,则关系表达式的结果为 x。

# 实例

A = 4 ;
+B = 3 ;
+X = 3'b1xx ;
+   
+A > B     *//为真*
+A <= B    *//为假*
+A >= Z    *//为X,不确定*
+

# 等价操作符

等价操作符包括逻辑相等(==),逻辑不等(!=),全等(===),非全等(!==)。

等价操作符的正常结果有 2 种:为真(1)或假(0)。

逻辑相等/不等操作符不能比较 x 或 z,当操作数包含一个 x 或 z,则结果为不确定值。

全等比较时,如果按位比较有相同的 x 或 z,返回结果也可以为 1,即全等比较可比较 x 或 z。所以,全等比较的结果一定不包含 x。举例如下:

# 实例

A = 4 ;
+B = 8'h04 ;
+C = 4'bxxxx ;
+D = 4'hx ;
+A == B        *//为真*
+A == (B + 1)  *//为假*
+A == C        *//为X,不确定*
+A === C       *//为假,返回值为0*
+C === D       *//为真,返回值为1*
+

# 逻辑操作符

逻辑操作符主要有 3 个:&&(逻辑与), ||(逻辑或),!(逻辑非)。

逻辑操作符的计算结果是一个 1 bit 的值,0 表示假,1 表示真,x 表示不确定。

如果一个操作数不为 0,它等价于逻辑 1;如果一个操作数等于 0,它等价于逻辑 0。如果它任意一位为 x 或 z,它等价于 x。

如果任意一个操作数包含 x,逻辑操作符运算结果不一定为 x。

逻辑操作符的操作数可以为变量,也可以为表达式。例如:

# 实例

A = 3;
+B = 0;
+C = 2'b1x ;
+   
+A && B    *//     为假*
+A || B    *//     为真*! A       *//     为假*! B       *//     为真*
+A && C    *//     为X,不确定*
+A || C    *//     为真,因为A为真*(A==2) && (! B)  *//为真,此时第一个操作数为表达式*
+

# 按位操作符

按位操作符包括:取反(~),与(&),或(|),异或(^),同或(~^)。

按位操作符对 2 个操作数的每 1 bit 数据进行按位操作。

如果 2 个操作数位宽不相等,则用 0 向左扩展补充较短的操作数。

取反操作符只有一个操作数,它对操作数的每 1 bit 数据进行取反操作。

下图给出了按位操作符的逻辑规则。

| &(与) | 0 | 1 | x | | |(或) | 0 | 1 | x | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | +| 0 | 0 | 0 | 0 | | 0 | 0 | 1 | x | +| 1 | 0 | 1 | x | | 1 | 1 | 1 | 1 | +| x | 0 | x | x | | x | x | 1 | x |

^(异或) 0 1 x ~^(同或) 0 1 x
0 0 1 x 0 1 0 x
1 1 0 x 1 0 1 x
x x x x x x x x

# 实例

A = 4'b0101 ;
+B = 4'b1001 ;
+C = 4'bx010 ;
+~A        *//4'b1010*
+A & B     *//4'b0001*
+A | B     *//4'b1101*
+A^B       *//4'b1100*
+A ~^ B    *//4'b0011*
+B | C     *//4'b1011*
+B&C       *//4'bx000*
+

# 归约操作符

归约操作符包括:归约与(&),归约与非(~&),归约或(|),归约或非(~|),归约异或(^),归约同或(~^)。

归约操作符只有一个操作数,它对这个向量操作数逐位进行操作,最终产生一个 1bit 结果。

逻辑操作符、按位操作符和归约操作符都使用相同的符号表示,因此有时候容易混淆。区分这些操作符的关键是分清操作数的数目,和计算结果的规则。

A = 4'b1010 ;
+&A ;      //结果为 1 & 0 & 1 & 0 = 1'b0,可用来判断变量A是否全1
+~|A ;     //结果为 ~(1 | 0 | 1 | 0) = 1'b0, 可用来判断变量A是否为全0
+^A ;      //结果为 1 ^ 0 ^ 1 ^ 0 = 1'b0
+

# 移位操作符

移位操作符包括左移(<<),右移(>>),算术左移(<<<),算术右移(>>>)。

移位操作符是双目操作符,两个操作数分别表示要进行移位的向量信号(操作符左侧)与移动的位数(操作符右侧)。

算术左移和逻辑左移时,右边低位会补 0。

逻辑右移时,左边高位会补 0;而算术右移时,左边高位会补充符号位,以保证数据缩小后值的正确性。

# 实例

A = 4'b1100 ;
+B = 4'b0010 ;
+A = A >> 2 ;        *//结果为 4'b0011*
+A = A << 1;         *//结果为 4'b1000*
+A = A <<< 1 ;       *//结果为 4'b1000*
+C = B + (A>>>2);    *//结果为 2 + (-4/4) = 1, 4'b0001*
+

# 拼接操作符

拼接操作符用大括号 {,} 来表示,用于将多个操作数(向量)拼接成新的操作数(向量),信号间用逗号隔开。

拼接符操作数必须指定位宽,常数的话也需要指定位宽。例如:

# 实例

A = 4'b1010 ;
+B = 1'b1 ;
+Y1 = {B, A[3:2], A[0], 4'h3 };  *//结果为Y1='b1100_0011*
+Y2 = {4{B}, 3'd4};  *//结果为 Y2=7'b111_1100*
+Y3 = {32{1'b0}};  *//结果为 Y3=32h0,常用作寄存器初始化时匹配位宽的赋初值*
+

# 条件操作符

条件表达式有 3 个操作符,结构描述如下:

condition_expression ? true_expression : false_expression
+

计算时,如果 condition_expression 为真(逻辑值为 1),则运算结果为 true_expression;如果 condition_expression 为假(逻辑值为 0),则计算结果为 false_expression。

assign hsel    = (addr[9:8] == 2'b0) ? hsel_p1 : hsel_p2 ;
+//当信号 addr 高 2bit 为 0 时,hsel 赋值为 hsel_p1; 否则,将 hsel_p2 赋值给 hsel。
+

其实,条件表达式类似于 2 路(或多路)选择器,其描述方式完全可以用 if-else 语句代替。

当然条件操作符也能进行嵌套,完成一个多次选择的逻辑。例如:

# 实例

**assign**   hsel = (addr[9:8] == 2'b00) ? hsel_p1 :
+                (addr[9:8] == 2'b01) ? hsel_p2 :
+                (addr[9:8] == 2'b10) ? hsel_p3 :
+                (addr[9:8] == 2'b11) ? hsel_p4 ;
+
+ + + diff --git a/Chip/Chip/2024.02.21-Chisel.html b/Chip/Chip/2024.02.21-Chisel.html new file mode 100644 index 0000000..47a71bb --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel.html @@ -0,0 +1,98 @@ + + + + + + 2024.02.21-Chisel | Hello World --from OutisLi + + + + + + + + +
+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.02.21-1 Introduction to Scala.html b/Chip/Chip/2024.02.21-Chisel/2024.02.21-1 Introduction to Scala.html new file mode 100644 index 0000000..7bda03b --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.02.21-1 Introduction to Scala.html @@ -0,0 +1,238 @@ + + + + + + 2024.02.21-1. Introduction to Scala | Hello World --from OutisLi + + + + + + + + +

# 2024.02.21-1. Introduction to Scala

# Variables and Constants - var and val

var numberOfKittens = 6
+val kittensPerHouse = 101
+val alphabet = "abcdefghijklmnopqrstuvwxyz"
+var done = false
+
+/*
+numberOfKittens: Int = 6
+kittensPerHouse: Int = 101
+alphabet: String = "abcdefghijklmnopqrstuvwxyz"
+done: Boolean = false
+*/
+

变量使用var声明,常量则使用val

# Conditionals

if (done) {
+    println("we are done")
+}
+else if (numberOfKittens < kittensPerHouse) {
+    println("more kittens!")
+    numberOfKittens += 1
+}
+else {
+    done = true
+}
+

类似于C++,如果只有一行,可以省略大括号

val likelyCharactersSet = if (alphabet.length == 26)
+    "english"
+else 
+    "not english"
+
+println(likelyCharactersSet)
+// likelyCharactersSet: String = "english"
+

if这一串的返回值又所选择的分支的最后一行确定

# Methods (Functions)

// Simple scaling function with an input argument, e.g., times2(3) returns 6
+// Curly braces can be omitted for short one-line functions.
+def times2(x: Int): Int = 2 * x
+
+// More complicated function
+def distance(x: Int, y: Int, returnPositive: Boolean): Int = {
+    val xy = x * y
+    if (returnPositive) xy.abs else -xy.abs
+}
+

# Overloading Functions

// Overloaded function
+def times2(x: Int): Int = 2 * x
+def times2(x: String): Int = 2 * x.toInt
+
+times2(5)   // 10
+times2("7")   // 14
+

# Recursive and Nested Functions

def asciiTriangle(rows: Int) {
+    
+    // This is cute: multiplying "X" makes a string with many copies of "X"
+    // Unit means no return value
+    def printRow(columns: Int): Unit = println("X" * columns)
+    
+    if(rows > 0) {
+        printRow(rows)
+        asciiTriangle(rows - 1) // Here is the recursive call
+    }
+}
+
+// printRow(1) // This would not work, since we're calling printRow outside its scope
+asciiTriangle(6)
+
+// Output:
+XXXXXX
+XXXXX
+XXXX
+XXX
+XX
+X
+

# Named Parameters and Parameter Defaults

Consider the following method definition.

def myMethod(count: Int, wrap: Boolean, wrapValue: Int= 24): Unit= { ... }
+

When calling the method, you will often see the parameter names along with the passed-in values.

myMethod(count= 10, wrap= false, wrapValue= 23)
+

Using named parameters, you can even call the function with a different ordering.

myMethod(wrapValue= 23, wrap= false, count= 10)
+

For frequently called methods, the parameter ordering may be obvious. But for less common methods and, in particular, boolean arguments, including the names with calls can make your code a lot more readable. If methods have a long list of arguments of the same type, using names also decreases the chance of error. Parameters to class definitions also use this named argument scheme (they are actually just the parameters to the constructor method for the class).

When certain parameters have default values (that don't need to be overridden), callers only have to pass (by name) specific arguments that do not use defaults. Notice that the parameter  wrapValue has a default value of 24. Therefore, this will work as if 24 had been passed in.

myMethod(wrap= false, count= 10)
+

# Lists

val x = 7
+val y = 14
+val list1 = List(1, 2, 3)
+val list2 = x :: y :: y :: Nil       // An alternate notation for assembling a list
+                                     // Nil就是一个空的List[Nothing],即一个可以封装任何类型元素但又没有元素的容器
+
+val list3 = list1 ++ list2           // Appends the second list to the first list
+val m = list2.length
+val s = list2.size
+
+val headOfList = list1.head          // Gets the first element of the list
+val restOfList = list1.tail          // Get a new list with first element removed
+
+val third = list1(2)                 // Gets the third element of a list (0-indexed)
+
+// Output:
+x: Int = 7
+y: Int = 14
+list1: List[Int] = List(1, 2, 3)
+list2: List[Int] = List(7, 14, 14)
+list3: List[Int] = List(1, 2, 3, 7, 14, 14)
+m: Int = 3
+s: Int = 3
+headOfList: Int = 1
+restOfList: List[Int] = List(2, 3)
+third: Int = 3
+

# for Statement

for (i <- 0 to 7) { print(i + " ") } // include 7
+println()
+
+i <- 0 until 7 // exclude 7
+i <- 0 to 10 by 2
+

print 用于连续输出不换行,而 println 用于输出后换行。

<- 是用在for循环构造中的一个操作符,表示从一个集合中逐一取出元素

# Packages and Imports

  • package 用于定义一个命名空间,它可以包含类、对象和特质(traits),以及其他包。包主要用于组织和管理代码,防止命名冲突,并提供访问控制。
  • class 是定义数据结构及其行为的蓝图。它可以包含数据成员(属性)和方法。类用于实例化对象,每个对象都可以拥有不同的属性值。

**import语句可以用来引入包、类、对象,甚至是特定的方法或属性。这意味着你可以使用import**来引用几乎任何你需要的代码实体。以下是一些例子:

  • 引入一个包中的所有成员:import scala.collection.mutable._,这里的**_相当于Java中的``,表示引入mutable**包下的所有成员。
  • 引入一个特定的类:import scala.collection.mutable.ListBuffer,这表示只引入**ListBuffer**类。
  • 引入一个包中的多个类:import scala.collection.mutable.{ArrayBuffer, LinkedList},这表示同时引入**ArrayBufferLinkedList**两个类。
  • 引入一个对象中的特定成员:import java.lang.System.{out => stdout},这里还演示了将**System.out重命名为stdout**,以便在代码中使用简化的名称。
// 从chisel3.iotesters包中引入特定的几个类:ChiselFlatSpec、Driver、和PeekPokeTester
+import chisel3.iotesters.{ChiselFlatSpec, Driver, PeekPokeTester}
+

# Class

// WrapCounter counts up to a max value based on a bit size
+class WrapCounter(counterBits: Int) {
+
+  val max: Long = (1 << counterBits) - 1
+  var counter = 0L
+    
+  def inc(): Long = {
+    counter = counter + 1
+    if (counter > max) {
+        counter = 0
+    }
+    counter
+  }
+  println(s"counter created with max value $max")
+}
+
  • class WrapCounter -- This is the definition of WrapCounter.

  • (counterBits: Int) -- Creating a WrapCounter requires an integer parameter, nicely named to suggest it is the bit width of the counter.

  • Braces ({}) delimit a block of code. Most classes use a code block to define variables, constants, and methods (functions).

  • val max: Long = -- the class contains a member variable max, declared as type Long and initialized as the class is created.

  • (1 << counterBits) - 1 computes the maximum value that can be contained in counterBits bits. Since max was created with val it cannot be changed.

  • A variable counter is created and initialized to 0L. The L says that 0 is a long value; thus, counter is inferred to be Long.

  • max and counter are commonly called member variables of the class.

  • A class method inc is defined which takes no arguments and returns a Long value.

  • The body of the method inc is a code block that has:

    • counter = counter + 1 increments counter.
    • if (counter > max) { counter = 0 } tests if the counter is greater than the max value and sets it back to zero if it is.
    • counter -- The last line of the code block is important. +
      • Any value expressed as the last line of a code block is considered to be the return value of that code block. The return value can be used or ignored by the calling statement.
      • This applies quite generally; for example, since an if then else statement defines its true and false clauses with code blocks, it can return a value i.e., val result = if (10 * 10 > 90) "greater" else "lesser" would create a val with the value "greater".
    • So in this case the function inc returns the value of counter.
  • println(s"counter created with max value $max") prints a string to standard output. Because the println is directly in the defining code block, it is part of the class initialization code and is run, i.e. prints out the string, every time an instance of this class is created.

  • The string printed in this case is an interpolated string.

    • The leading s in front of the first double quote identifies this as an interpolated string.
    • An interpolated string is processed at run time.
    • The $max is replaced with the value of max.
    • If the $ is followed by a code block, arbitrary Scala can be in that code block. +
      • For example, println(s"doubled max is ${max + max}").
      • The return value of this code block will be inserted in place of ${...}.
      • If the return value is not a string, it will be converted to one; virtually every class or type in scala has an implicit conversion to a string defined).
    • You should generally avoid printing something every time an instance of a class is created to avoid flooding standard output, unless you're debugging.

    # Creating an Instance of a Class

    val x = new WrapCounter(2)
    +x.inc() // Increments the counter
    +
    +// Member variables of the instance x are visible to the outside, unless they are declared private
    +if(x.counter == x.max) {              
    +    println("counter is about to wrap")
    +}
    +
    +x inc() // Scala allows the dots to be omitted; this can be useful for making embedded DSL's look more natural
    +

    有时候实例化类时不需要使用**new关键字,这通常是因为该类定义了一个或多个apply方法。apply方法可以在类的伴生对象(companion object)中定义,允许你直接通过类名加括号的方式创建类的实例,而不需要显式地使用new关键字。这种方式提供了一种更简洁的语法来创建对象,同时也可以在apply**方法内部执行初始化操作或参数处理,为对象创建提供更多的灵活性和控制。

    例如,假设有一个名为**Person的类及其伴生对象,伴生对象中定义了apply**方法:

    class Person(val name: String)
    +
    +object Person {
    +  def apply(name: String): Person = new Person(name)
    +}
    +

    在这个例子中,可以通过调用**Person伴生对象的apply方法来创建Person类的实例,而不需要使用new**关键字:

    val person = Person("Alice")  // 相当于调用 Person.apply("Alice")
    +

    这里,**Person("Alice")实际上调用的是伴生对象中的apply方法,该方法内部使用new关键字创建了Person**类的实例。这种方式使得代码看起来更简洁,同时保留了通过构造函数创建对象的灵活性。

# Code Blocks

Code blocks are delimited by braces. A block can contain zero or more lines of Scala code. The last line of Scala code becomes the return value (which may be ignored) of the code block. A code block with no lines would return a special null-like object called Unit. Code blocks are used throughout Scala: they are the bodies of class definitions, they form function and method definitions, they are the clauses of if statements, and they are the bodies of for and many other Scala operators.

# Parameterized Code Blocks

Code blocks can take parameters. In the case of class and method definitions, these parameters look like those in most conventional programming languages. In the example below, c and s are parameters of the code blocks.

// A one-line code block doesn't need to be enclosed in {}
+def add1(c: Int): Int = c + 1
+
+class RepeatString(s: String) {
+    val repeatedString = s + s
+}
+

IMPORTANT: There is another way in which code blocks may be parameterized. Here is an example.

val intList = List(1, 2, 3)
+val stringList = intList.map { i =>
+    i.toString
+}
+

使用**map方法对intList中的每个元素应用一个函数,该函数将整数转换为其对应的字符串表示。具体来说,map方法遍历intList中的每个元素(用i表示),并对每个元素执行i.toString**操作,将其转换为字符串。This type of code block is called an anonymous function, and more details on anonymous functions are provided in a later module.

+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1 First Chisel Module.html b/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1 First Chisel Module.html new file mode 100644 index 0000000..4847a29 --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1 First Chisel Module.html @@ -0,0 +1,209 @@ + + + + + + 2024.02.23-2.1 First Chisel Module | Hello World --from OutisLi + + + + + + + + +

# 2024.02.23-2.1 First Chisel Module

# Setup

val path = System.getProperty("user.dir") + "/source/load-ivy.sc"
+interp.load.module(ammonite.ops.Path(java.nio.file.FileSystems.getDefault().getPath(path)))
+import chisel3._
+import chisel3.util._
+import chisel3.tester._
+import chisel3.tester.RawTester.test
+import dotvisualizer._
+

这两句代码在使用Chisel(一种硬件描述语言)时,涉及到Ammonite脚本的动态加载。第一句定义了一个**path变量,它通过获取系统属性"user.dir"(当前用户目录)并附加上"/source/load-ivy.sc"路径,用于指定一个Scala脚本文件的位置。第二句使用Ammonite的interp.load.module**方法动态加载这个指定路径下的Scala脚本文件。

动态加载脚本在使用Chisel编写代码时可以有多个用途,如:

  1. 引入依赖:动态加载**load-ivy.sc**脚本可以用来引入或更新Ammonite会话中的Ivy依赖,确保代码运行时有必要的库支持。
  2. 执行初始化代码:可以在脚本中执行必要的初始化操作,为后续的Chisel硬件设计代码执行设置适当的环境或参数。
  3. 灵活性和模块化:通过动态加载脚本,可以根据需要灵活地加载和卸载模块,使代码结构更加模块化,便于管理和维护。
  • import chisel3._:基础的Chisel功能,包括定义硬件组件的基本构建块。
  • import chisel3.util._:提供了一些实用工具和额外的硬件构建块,比如计数器、移位寄存器等。
  • import chisel3.tester._:提供了测试Chisel硬件设计的工具和框架。
  • import chisel3.tester.RawTester.test:是**chisel3.tester**中的一个具体的测试功能,用于执行硬件测试。

# Example Module

class Passthrough extends Module {
+  val io = IO(new Bundle {
+    val in = Input(UInt(4.W))
+    val out = Output(UInt(4.W))
+  })
+  io.out := io.in
+}
+
+// with parameter
+class PassthroughGenerator(width: Int) extends Module { 
+  val io = IO(new Bundle {
+    val in = Input(UInt(width.W))
+    val out = Output(UInt(width.W))
+  })
+  io.out := io.in
+}
+
class Passthrough extends Module {
+

我们声明一个叫做Passthrough的新模块。Module是Chisel内置的一个类,所有硬件模块都必须扩展它

val io = IO(...)
+

我们在一个特殊的**io变量中声明所有的输入和输出端口。它必须被命名为io,并且是一个IO对象或实例,这需要形如IO(_instantiated_bundle_)**的东西

在Chisel中,ioinout被声明为val(不可变引用)而不是**var(可变引用),因为它们代表硬件模块的接口。在硬件设计中,接口的结构(例如信号的数量、类型和方向)在编译时确定且不会改变。虽然信号的值在模拟过程中会变化,但信号的定义(即接口)是固定的。使用val**声明这些接口强调了它们是不变的结构,而信号值的变化则通过信号之间的连接和赋值来体现,这与软件编程中变量的概念有所不同。

new Bundle {
+    val in = Input(...)
+    val out = Output(...)
+}
+

我们声明了一个新的硬件结构类型(Bundle),它包含了一些命名的信号**inout**,分别具有输入和输出的方向。

在Chisel中,Bundle是一种用于定义一组相关信号的类,类似于Verilog中的module内部信号或VHDL中的record。它允许开发者将多个信号组合成一个单一的复合类型,这样可以更方便地管理和传递数据结构。每个**Bundle内的信号可以有不同的类型和方向(如输入Input、输出Output**),使其成为定义模块接口和内部数据结构的强大工具。

UInt(4.W)
+

我们声明了信号的硬件类型。在这个案例中,它是宽度为4的无符号整数。

io.out := io.in
+

我们将我们的输入端口连接到我们的输出端口,这样**io.in驱动io.out。注意,:=操作符是一个*Chisel***操作符,它表示右手边的信号驱动左手边的信号。它是一个有方向的操作符。

硬件构建语言(HCLs)的一个整洁之处在于我们可以使用底层的编程语言作为脚本语言。例如,在声明我们的Chisel模块之后,我们接着使用Scala调用Chisel编译器将Chisel的**Passthrough翻译成Verilog的Passthrough。这个过程被称为*精炼***。

# Generate Verilog

println(getVerilog(new Passthrough))
+
module Passthrough(
+  input        clock,
+  input        reset,
+  input  [3:0] io_in,
+  output [3:0] io_out
+);
+  assign io_out = io_in; // @[cmd2.sc 6:10]
+endmodule
+

# Generate Firrtl

println(getFirrtl(new Passthrough))
+
circuit Passthrough :
+  module Passthrough :
+    input clock : Clock
+    input reset : UInt<1>
+    output io : { flip in : UInt<4>, out : UInt<4>}
+
+    io.out <= io.in @[cmd2.sc 6:10]
+

# Example Tester

// Scala Code: `test` runs the unit test. 
+// test takes a user Module and has a code block that applies pokes and expects to the 
+// circuit under test (c)
+test(new Passthrough()) { c =>
+    c.io.in.poke(0.U)     // Set our input to value 0
+    c.io.out.expect(0.U)  // Assert that the output correctly has 0
+    c.io.in.poke(1.U)     // Set our input to value 1
+    c.io.out.expect(1.U)  // Assert that the output correctly has 1
+    c.io.in.poke(2.U)     // Set our input to value 2
+    c.io.out.expect(2.U)  // Assert that the output correctly has 2
+}
+println("SUCCESS!!") // Scala Code: if we get here, our tests passed!
+
+// Test with width 10
+test(new PassthroughGenerator(10)) { c =>
+    c.io.in.poke(0.U(10.W))     // Set our input to value 0
+    c.io.out.expect(0.U(10.W))  // Assert that the output correctly has 0
+    c.io.in.poke(1.U(10.W))     // Set our input to value 1
+    c.io.out.expect(1.U(10.W))  // Assert that the output correctly has 1
+    c.io.in.poke(2.U(10.W))     // Set our input to value 2
+		c.io.out.expect(2.U(10.W))  // Assert that the output correctly has 2
+}
+
  • c.io.in.poke(0.U):设置模块的输入**in**为0。
  • c.io.out.expect(0.U):检查模块的输出**out**是否为0,确保电路按预期工作。
  • 接下来,代码以相同的方式测试输入值1和2,分别使用**poke方法设置输入值,并用expect**方法验证输出值。

在Scala中,可以直接在函数调用后跟一个代码块,这是因为Scala支持高阶函数,即可以接受函数作为参数的函数。在这个例子中,**test函数接受两个参数:一个是Passthrough模块的实例,另一个是一个匿名函数(或称为代码块),这个匿名函数以c作为参数进行操作。这种语法使得代码更加简洁易读,允许直接在调用函数时定义行为逻辑,非常适合进行单元测试等场景。当一个函数的最后一个参数是函数类型时,可以使用特殊的语法糖允许将这个函数参数写在方法调用的外部。这种语法不仅使得代码更加清晰,而且在使用匿名函数或代码块作为参数时尤其有用,因为它允许代码块在视觉上更为突出,从而提高了代码的可读性。这就是为什么test(new Passthrough())**后面可以直接跟一个代码块的原因。

c =>是一个函数字面量(匿名函数)的语法,用于定义一个函数。这里,c是函数的参数,=>后面跟着的是函数体。在这个上下文中,c代表传递给测试代码块的模块实例(如Passthrough模块实例),然后在代码块内部,你可以使用c来访问和操作这个实例的输入和输出端口。在Scala的函数字面量中,参数类型通常是通过上下文推断出来的,不需要显式声明。在test(new Passthrough()) { c => ... }这段代码中,c是由test函数根据其参数类型推断出的Passthrough模块实例。也就是说,当你写c =>时,c的类型(在这个例子中是Passthrough模块实例)是由test函数的定义确定的,根据这个函数期望的参数类型。这就是为什么可以直接使用c来访问Passthrough实例的成员,如c.io.inc.io.out,而不需要额外的类型声明。

Note that the `poke` and `expect` use chisel hardware literal notation. Both operations expect literals of the correct type.
+If `poke`ing a `UInt()` you must supply a `UInt` literal (example: `c.io.in.poke(10.U)`, likewise if the input is a `Bool()` the `poke` would expect either `true.B` or `false.B`.
+

# Appendix: A Note on "printf" Debugging

class PrintingModule extends Module {
+    val io = IO(new Bundle {
+        val in = Input(UInt(4.W))
+        val out = Output(UInt(4.W))
+    })
+    io.out := io.in
+
+    printf("Print during simulation: Input is %d\n", io.in)
+    // chisel printf has its own string interpolator too
+    printf(p"Print during simulation: IO is $io\n")
+
+    println(s"Print during generation: Input is ${io.in}")
+// s用于一般的Scala字符串插值,而p专门为Chisel设计,用于更方便地在仿真中打印硬件信号和对象
+}
+
+test(new PrintingModule ) { c =>
+    c.io.in.poke(3.U)
+    c.io.out.expect(3.U)
+    c.clock.step(5) // circuit will print
+    
+    println(s"Print during testing: Input is ${c.io.in.peek()}")
+}
+
Elaborating design...
+Print during generation: Input is UInt<4>(IO in unelaborated PrintingModule)
+Done elaborating.
+Print during simulation: Input is   3
+Print during simulation: IO is AnonymousBundle(in ->   3, out ->   3)
+Print during simulation: Input is   3
+Print during simulation: IO is AnonymousBundle(in ->   3, out ->   3)
+Print during simulation: Input is   3
+Print during simulation: IO is AnonymousBundle(in ->   3, out ->   3)
+Print during simulation: Input is   3
+Print during simulation: IO is AnonymousBundle(in ->   3, out ->   3)
+Print during simulation: Input is   3
+Print during simulation: IO is AnonymousBundle(in ->   3, out ->   3)
+Print during testing: Input is UInt<4>(3)
+Print during simulation: Input is   0
+Print during simulation: IO is AnonymousBundle(in ->   0, out ->   0)
+test PrintingModule Success: 0 tests passed in 7 cycles in 0.003471 seconds 2016.88 Hz
+

这段代码定义了一个**PrintingModule类,它扩展了Chisel的Module**,用于演示在不同阶段打印信息:

  1. 模块定义中的printf语句:这些在仿真时每个时钟周期都会打印。**printf("Print during simulation: Input is %d\n", io.in)会打印输入信号的值,而printf(p"Print during simulation: IO is $io\n")会打印io**对象的信息。这些仅在仿真(运行时)生效。
  2. 模块定义中的println语句:这句话在模块的生成阶段打印,即代码编译时,打印到终端或控制台。它不会在仿真时打印,因为它是Scala的打印语句,不是Chisel的。
  3. 测试块中的println语句:这在Scala测试环境中执行,用于打印测试时的信息。如**println(s"Print during testing: Input is ${c.io.in.peek()}")**将在测试过程中打印输入信号的当前值。
  • **c.io.in.poke(3.U)**设置输入为3。
  • **c.io.out.expect(3.U)**期望输出为3,这个测试会通过,因为输出应该与输入相同。
  • **c.clock.step(5)推进仿真时钟5个周期,这期间printf**语句会打印信息。
  1. 最后的Print during simulation: Input is 0 是因为被重置回到默认状态
  2. 7 周期则是因为测试中执行了**c.clock.step(5)**,推进了5个时钟周期,加上测试开始前后的各1个周期

综上,**println用于代码生成阶段和测试代码中,打印到Scala的执行环境;printf**用于仿真阶段,打印到仿真的输出中。

+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2 Combinational Logic.html b/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2 Combinational Logic.html new file mode 100644 index 0000000..c70f81a --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2 Combinational Logic.html @@ -0,0 +1,266 @@ + + + + + + 2024.02.24-2.2 Combinational Logic | Hello World --from OutisLi + + + + + + + + +

# 2024.02.24-2.2 Combinational Logic

# Common Operators

class MyModule extends Module {
+  val io = IO(new Bundle {
+    val in  = Input(UInt(4.W))
+    val out = Output(UInt(4.W))
+  })
+	
+	// Scala expression
+  val two  = 1 + 1
+  println(two)
+	// Chisel expression
+  val utwo = 1.U + 1.U
+  println(utwo)
+	// incorrect
+	val twotwo = 1.U + 1
+  
+  io.out := io.in
+}
+
class MyOperators extends Module {
+  val io = IO(new Bundle {
+    val in      = Input(UInt(4.W))
+    val out_add = Output(UInt(4.W))
+    val out_sub = Output(UInt(4.W))
+    val out_mul = Output(UInt(4.W))
+  })
+
+  io.out_add := 1.U + 4.U
+  io.out_sub := 2.U - 1.U
+  io.out_mul := 4.U * 2.U
+}
+
+// 没有参数时可以省略小括号
+test(new MyOperators) {c =>
+  c.io.out_add.expect(5.U)
+  c.io.out_sub.expect(1.U)
+  c.io.out_mul.expect(8.U)
+}
+

# Mux and Concatenation

class MyOperatorsTwo extends Module {
+  val io = IO(new Bundle {
+    val in      = Input(UInt(4.W))
+    val out_mux = Output(UInt(4.W))
+    val out_cat = Output(UInt(4.W))
+  })
+
+  val s = true.B
+  io.out_mux := Mux(s, 3.U, 0.U) // should return 3.U, since s is true
+  io.out_cat := Cat(2.U, 1.U)    // concatenates 2 (b10) with 1 (b1) to give 5 (101)
+}
+
+println(getVerilog(new MyOperatorsTwo))
+
+test(new MyOperatorsTwo) { c =>
+  c.io.out_mux.expect(3.U)
+  c.io.out_cat.expect(5.U)
+}
+

The Mux operates like a traditional ternary operator, with the order (select, value if true, value if false)

The Cat ordering is MSB then LSB (where B refers to bit or bits), and only takes two arguments.

# MAC: multiply accumulate function

class MAC extends Module {
+  val io = IO(new Bundle {
+    val in_a = Input(UInt(4.W))
+    val in_b = Input(UInt(4.W))
+    val in_c = Input(UInt(4.W))
+    val out  = Output(UInt(8.W))
+  })
+
+  io.out := (io.in_a * io.in_b) + io.in_c
+}
+
+test(new MAC) { c =>
+  val cycles = 100
+  import scala.util.Random
+  for (i <- 0 until cycles) {
+    val in_a = Random.nextInt(16)
+    val in_b = Random.nextInt(16)
+    val in_c = Random.nextInt(16)
+    c.io.in_a.poke(in_a.U)
+    c.io.in_b.poke(in_b.U)
+    c.io.in_c.poke(in_c.U)
+    c.io.out.expect((in_a * in_b + in_c).U)
+  }
+}
+

# Arbiter

The following circuit arbitrates data coming from a FIFO into two parallel processing units. The FIFO and processing elements (PEs) communicate with ready-valid interfaces. Construct the arbiter to send data to whichever PE is ready to receive data, prioritizing PE0 if both are ready to receive data. Remember that the arbiter should tell the FIFO that it's ready to receive data when at least one of the PEs can receive data. Also, wait for a PE to assert that it's ready before asserting that the data are valid. You will likely need binary operators to complete this exercise.

Untitled

class Arbiter extends Module {
+  val io = IO(new Bundle {
+    // FIFO
+    val fifo_valid = Input(Bool())
+    val fifo_ready = Output(Bool())
+    val fifo_data  = Input(UInt(16.W))
+    
+    // PE0
+    val pe0_valid  = Output(Bool())
+    val pe0_ready  = Input(Bool())
+    val pe0_data   = Output(UInt(16.W))
+    
+    // PE1
+    val pe1_valid  = Output(Bool())
+    val pe1_ready  = Input(Bool())
+    val pe1_data   = Output(UInt(16.W))
+  })
+
+  io.fifo_ready := io.pe0_ready || io.pe1_ready
+  io.pe0_valid  := io.fifo_valid && io.pe0_ready
+  io.pe1_valid  := io.fifo_valid && !io.pe0_ready && io.pe1_ready
+  io.pe0_data   := io.fifo_data
+  io.pe1_data   := io.fifo_data
+}
+
+test(new Arbiter) { c =>
+  import scala.util.Random
+  val data = Random.nextInt(65536)
+  c.io.fifo_data.poke(data.U)
+  
+  for (i <- 0 until 8) {
+    c.io.fifo_valid.poke((((i >> 0) % 2) != 0).B)
+    c.io.pe0_ready.poke((((i >> 1) % 2) != 0).B)
+    c.io.pe1_ready.poke((((i >> 2) % 2) != 0).B)
+
+    c.io.fifo_ready.expect((i > 1).B)
+    c.io.pe0_valid.expect((i == 3 || i == 7).B)
+    c.io.pe1_valid.expect((i == 5).B)
+    
+    if (i == 3 || i ==7) {
+      c.io.pe0_data.expect((data).U)
+    } else if (i == 5) {
+      c.io.pe1_data.expect((data).U)
+    }
+  }
+}
+println("SUCCESS!!")
+

数据线(如**io.pe0_data** 和 io.pe1_data)通常会持续地带有它们可能需要使用的数据信号(本例中为**io.fifo_data)。但是,这些数据是否被“接收”或“采用”通常由valid**信号来控制。

测试代码设计用来验证**Arbiter模块的行为。测试通过随机生成一个数据,然后使用不同的组合的fifo_validpe0_readype1_ready**信号来模拟不同的工作情况。

  • **c.io.fifo_data.poke(data.U)**模拟从FIFO发送的数据。
  • 循环**for (i <- 0 until 8)**遍历8种不同的信号组合状态。
  • c.io.fifo_valid.poke,**c.io.pe0_ready.pokec.io.pe1_ready.poke根据i**的不同值模拟不同的信号状态,使用位操作来确定每个信号是否应该被激活。
  • c.io.fifo_ready.expect,**c.io.pe0_valid.expectc.io.pe1_valid.expect**是对仲裁器预期行为的断言检查。
  • 如果**i的值表示PE0或PE1应该接收数据(如i == 3 || i == 7是PE0,i == 5是PE1),则使用expect断言来检查io.pe0_dataio.pe1_data**与FIFO的数据相同。

# Parameterized Adder

class ParameterizedAdder(saturate: Boolean) extends Module {
+  val io = IO(new Bundle {
+    val in_a = Input(UInt(4.W))
+    val in_b = Input(UInt(4.W))
+    val out  = Output(UInt(4.W))
+  })
+  val sum = io.in_a +& io.in_b
+  if(saturate){
+    io.out := Mux(sum>15.U,15.U,sum)
+  }else{
+    io.out := sum
+  }
+}
+
+for (saturate <- Seq(true, false)) {
+  test(new ParameterizedAdder(saturate)) { c =>
+    // 100 random tests
+    val cycles = 100
+    import scala.util.Random
+    import scala.math.min
+    for (i <- 0 until cycles) {
+      val in_a = Random.nextInt(16)
+      val in_b = Random.nextInt(16)
+      c.io.in_a.poke(in_a.U)
+      c.io.in_b.poke(in_b.U)
+      if (saturate) {
+        c.io.out.expect(min(in_a + in_b, 15).U)
+      } else {
+        c.io.out.expect(((in_a + in_b) % 16).U)
+      }
+    }
+    
+    // ensure we test saturation vs. truncation
+    c.io.in_a.poke(15.U)
+    c.io.in_b.poke(15.U)
+    if (saturate) {
+      c.io.out.expect(15.U)
+    } else {
+      c.io.out.expect(14.U)
+    }
+  }
+}
+println("SUCCESS!!")
+

在Chisel中,+&是一个用于加法的运算符,它会考虑输入的进位,得到一个比最大输入位宽更宽的结果。如果输入是4位UInt,标准加法结果**io.in_a + io.in_b会是4位,可能会截断超出的位。而+&加法会产生一个5位的结果,这可以用于在必要时实现饱和加法逻辑。连接一个4位的UInt线到一个5位的UInt**线(一个4.W的量等于5.W的量),默认会截断最高位(MSB)。这样,你可以用这个方法来轻松实现非饱和加法器,只保留5位和的低4位。

+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3 Control Flow.html b/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3 Control Flow.html new file mode 100644 index 0000000..53eafb1 --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3 Control Flow.html @@ -0,0 +1,229 @@ + + + + + + 2024.02.25-2.3 Control Flow | Hello World --from OutisLi + + + + + + + + +

# 2024.02.25-2.3 Control Flow

# Last Connect Semantics

class LastConnect extends Module {
+  val io = IO(new Bundle {
+    val in = Input(UInt(4.W))
+    val out = Output(UInt(4.W))
+  })
+  io.out := 1.U
+  io.out := 2.U
+  io.out := 3.U
+  io.out := 4.U
+}
+
+//  Test LastConnect
+test(new LastConnect) { c => c.io.out.expect(4.U) }
+

当有多个值被赋值给一个量时,最后的那个生效

# when, elsewhen, and otherwise

when(someBooleanCondition) {
+  // things to do when true
+}.elsewhen(someOtherBooleanCondition) {
+  // things to do on this condition
+}.otherwise {
+  // things to do if none of th boolean conditions are true
+}
+

when是一种特殊的构造,它用于硬件生成。它类似于软件编程中的if语句,但是在硬件描述中,when会生成实际的硬件逻辑,如多路复用器。而标准的if语句通常用于生成时(编译时)的控制流,并不直接生成硬件。if语句在Scala(因此在Chisel的生成时)可以有返回值,可以用于赋值或者作为表达式的一部分。相比之下,when是一种专门为硬件设计提供的控制结构,用于生成条件硬件逻辑,如多路复用器或条件赋值,但它不返回值。因此,当你需要根据输入信号在运行时动态地选择硬件行为时,你会使用when。而当你在编译时根据某些条件生成不同的硬件模块时,你会使用**if**。

在Scala中,**==用于基本类型和对象的相等性比较,而在Chisel中(一个建立在Scala之上的硬件构建语言),===用于硬件信号之间的相等性比较。这是因为Chisel需要区分硬件操作和Scala的软件操作,===在Chisel中被定义为生成硬件电路中的等于比较逻辑。而在Scala的if语句中,==**仍然用于比较两个值是否相等。这种区分确保了代码的清晰性,以及硬件设计中逻辑正确性的维护。因此,在when中使用===来生成判断相等的硬件电路

# The Wire Construct

Wire是一种基本的硬件构造类型,用于创建一个可以在模块内部读取和写入的信号。它主要用于表示组合逻辑或暂存数据,允许在硬件描述中定义中间变量或内部连接。使用Wire时,需要指定信号的数据类型,如UIntSInt等。Wire类型的变量在定义时不持有初始值,需要在逻辑中显式赋值。在使用过程中,可以根据需要多次对其赋值,但在每个时钟周期结束时,Wire仅保留最后一次赋值的结果。val myWire = Wire(UInt(32.W))

List(1, 2, 3, 4).permutations.foreach { case i0 :: i1 :: i2 :: i3 :: Nil =>
+    println(s"Sorting $i0 $i1 $i2 $i3")}
+List(1, 2, 3, 4).permutations.foreach { case i0 :: i1 :: i2 :: _ :: Nil =>
+  println(s"Sorting $i0 $i1 $i2")}
+

使用Scala的集合和模式匹配功能来遍历**List(1, 2, 3, 4)的所有排列组合。List(1, 2, 3, 4).permutations生成一个包含所有可能排列的列表的迭代器。foreach**循环遍历这些排列。

在**foreach的代码块中,case i0 :: i1 :: i2 :: i3 :: Nil =>是一个模式匹配表达式,用于解构每个排列列表。这个表达式匹配一个包含四个元素的列表,将这四个元素分别绑定到变量i0i1i2i3Nil**在这里表示列表的末尾,确保列表只有这四个元素。这种方式允许直接访问每个排列中的元素,然后可以将它们打印出来或用于其他逻辑操作。

# Exercise: Polynomial

class Polynomial extends Module {
+  val io = IO(new Bundle {
+    val select = Input(UInt(2.W))
+    val x = Input(SInt(32.W))
+    val fOfX = Output(SInt(32.W))
+  })
+    
+  val result = Wire(SInt(32.W))  
+  val square = Wire(SInt(32.W))  
+  
+  square := io.x * io.x
+  when(io.select === 0.U){
+    result := square - 2.S * io.x + 1.S
+  }.elsewhen(io.select === 1.U) {
+    result := 2.S * square + 6.S * io.x + 3.S
+  }.otherwise {
+    result := 4.S * square - 10.S * io.x - 5.S
+  }
+
+  io.fOfX := result  
+}
+
+// Test Polynomial
+test(new Polynomial) { c =>
+  for(x <- 0 to 20) {
+    for(select <- 0 to 2) {
+      c.io.select.poke(select.U)
+      c.io.x.poke(x.S)
+      c.io.fOfX.expect(poly(select, x).S)
+    }
+  }
+}
+

# Exercise: Finite State Machine

Grad students pass through four states in their career: Idle, Coding, Writing, and Graduating. These states transition based off three inputs: Coffee, Ideas they come up with, and Pressure from their advisor to make progress. Once they Graduate, they return to the Idle state. The FSM diagram below shows these states and transitions. Any unlabelled transition (i.e. when there are no inputs) returns a grad student to the Idle state instead of staying in the current state. The input precedence is coffee > idea > pressure, so when in the Idle state and receiving both coffee and pressure, a graduate student will move to the Coding state.

Untitled

检查逻辑:

// state map
+def states = Map("idle" -> 0, "coding" -> 1, "writing" -> 2, "grad" -> 3)
+
+// life is full of question marks
+def gradLife (state: Int, coffee: Boolean, idea: Boolean, pressure: Boolean): Int = {
+  var nextState = states("idle")
+  if(state == states("idle")){
+    if(coffee) nextState = states("coding")
+    else if(idea) nextState = states("idle")
+    else if(pressure) nextState = states("writing")
+    else nextState = states("idle")
+  }else if(state == states("coding")){
+    if(coffee) nextState = states("coding")
+    else if(idea) nextState = states("writing")
+    else if(pressure) nextState = states("writing")
+    else nextState = states("idle")
+  }else if(state == states("writing")){
+    if(coffee) nextState = states("writing")
+    else if(idea) nextState = states("writing")
+    else if(pressure) nextState = states("grad")
+    else nextState = states("idle")
+  }
+  nextState
+}
+
+// some sanity checks
+(0 until states.size).foreach{ state => assert(gradLife(state, false, false, false) == states("idle")) }
+assert(gradLife(states("writing"), true, false, true) == states("writing"))
+assert(gradLife(states("idle"), true, true, true) == states("coding"))
+assert(gradLife(states("idle"), false, true, true) == states("idle"))
+assert(gradLife(states("grad"), false, false, false) == states("idle"))
+

Chisel:

class GradLife extends Module {
+  val io = IO(new Bundle {
+    val state = Input(UInt(2.W))
+    val coffee = Input(Bool())
+    val idea = Input(Bool())
+    val pressure = Input(Bool())
+    val nextState = Output(UInt(2.W))
+  })
+    
+  val idle :: coding :: writing :: grad :: Nil = Enum(4)
+  
+  when(io.state === idle){
+    when(io.coffee) {io.nextState := coding}
+    .elsewhen(io.idea) {io.nextState := idle}
+    .elsewhen(io.pressure) {io.nextState := writing}
+    .otherwise {io.nextState := idle}
+  } .elsewhen (io.state === coding) {
+    when      (io.coffee) { io.nextState := coding } 
+    .elsewhen (io.idea || io.pressure) { io.nextState := writing }
+    .otherwise {io.nextState := idle}
+  } .elsewhen (io.state === writing) {
+    when      (io.coffee || io.idea) { io.nextState := writing }
+    .elsewhen (io.pressure) { io.nextState := grad }
+    .otherwise {io.nextState := idle}
+  }.otherwise {io.nextState := idle}
+}
+
+// Test
+test(new GradLife) { c =>
+  // verify that the hardware matches the golden model
+  for (state <- 0 to 3) {
+    for (coffee <- List(true, false)) {
+      for (idea <- List(true, false)) {
+        for (pressure <- List(true, false)) {
+          c.io.state.poke(state.U)
+          c.io.coffee.poke(coffee.B)
+          c.io.idea.poke(idea.B)
+          c.io.pressure.poke(pressure.B)
+          c.io.nextState.expect(gradLife(state, coffee, idea, pressure).U)
+        }
+      }
+    }
+  }
+}
+
+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4 Sequential Logic.html b/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4 Sequential Logic.html new file mode 100644 index 0000000..ed2701c --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4 Sequential Logic.html @@ -0,0 +1,241 @@ + + + + + + 2024.02.26-2.4 Sequential Logic | Hello World --from OutisLi + + + + + + + + +

# 2024.02.26-2.4 Sequential Logic

# Registers

A Reg holds its output value until the rising edge of its clock, at which time it takes on the value of its input.

class RegisterModule extends Module {
+  val io = IO(new Bundle {
+    val in  = Input(UInt(12.W))
+    val out = Output(UInt(12.W))
+  })
+  
+	// val register : UInt = Reg(UInt(12.W))
+  val register = Reg(UInt(12.W))
+  register := io.in + 1.U
+  io.out := register
+}
+
+test(new RegisterModule) { c =>
+  for (i <- 0 until 100) {
+    c.io.in.poke(i.U)
+    c.clock.step(1)
+    c.io.out.expect((i + 1).U)
+  }
+}
+println("SUCCESS!!")
+

Notice: One important note is that Chisel distinguishes between types (like UInt) and hardware nodes (like the literal 2.U, or the output of myReg).

// legal because a Reg needs a data type as a model
+val myReg = Reg(UInt(2.W))
+// error because `2.U` is already a hardware node and can't be used as a model
+val myReg = Reg(2.U)
+

# RegInit

The register in RegisterModule was initialized to random data for simulation. Unless otherwised specified, registers do not have a reset value (or a reset). The way to create a register that resets to a given value is with RegInit.

// The first argument is a type node that specified the datatype and its width.
+// The second argument is a hardware node that specified the reset value, in this case 0.
+val myReg = RegInit(UInt(12.W), 0.U)
+
+// It is a hardware node that specifies the reset value, but normally `0.U`.
+val myReg = RegInit(0.U(12.W))
+

RegInit 不仅初始化,也创建了这个reg,因此不需要先创建再init

class RegInitModule extends Module {
+  val io = IO(new Bundle {
+    val in  = Input(UInt(12.W))
+    val out = Output(UInt(12.W))
+  })
+  
+  val register = RegInit(0.U(12.W))
+  register := io.in + 1.U
+  io.out := register
+}
+

# RegNext

RegNext 在 Chisel 中是一个用于创建寄存器并在下一个时钟周期将输入信号的值传递给该寄存器的便捷方法。它简化了寄存器的声明和初始化,使得您可以轻松地创建一个将当前输入信号的值保存到下一个时钟周期的寄存器。使用**RegNext**时,可以指定一个初始值,如果不指定,则寄存器在复位时的值是未定义的

在 Chisel 中使用 RegNext 的基本语法如下:

val myReg = RegNext(inputSignal, initValue)
+
  • inputSignal 是你希望在下一个时钟周期传递给寄存器的信号。
  • initValue 是可选参数,用于指定寄存器在复位时的初始值。如果不提供初始值,寄存器在复位时的值是未定义的。

# Shift Register

Untitled

class MyShiftRegister(val init: Int = 1) extends Module {
+  val io = IO(new Bundle {
+    val in  = Input(Bool())
+    val out = Output(UInt(4.W))
+  })
+
+  val state = RegInit(UInt(4.W), init.U)
+  val stateTemp = (state << 1.U) + io.in.asUInt
+  state := stateTemp
+  io.out := state
+}
+
+test(new MyShiftRegister()) { c =>
+  var state = c.init
+  for (i <- 0 until 10) {
+    // poke in LSB of i (i % 2)
+    c.io.in.poke(((i % 2) != 0).B)
+    // update expected state
+    state = ((state * 2) + (i % 2)) & 0xf
+    c.clock.step(1)
+    c.io.out.expect(state.U)
+  }
+}
+println("SUCCESS!!")
+

# Parameterized Shift Register

// n is the output width (number of delays - 1)
+// init state to init
+class MyOptionalShiftRegister(val n: Int, val init: BigInt = 1) extends Module {
+  val io = IO(new Bundle {
+    val en  = Input(Bool())
+    val in  = Input(Bool())
+    val out = Output(UInt(n.W))
+  })
+
+  val state = RegInit(init.U(n.W))
+
+  when(io.en){
+    state := state << 1 | io.in
+  }
+  io.out := state
+}
+
+// test different depths
+for (i <- Seq(3, 4, 8, 24, 65)) {
+  println(s"Testing n=$i")
+  test(new MyOptionalShiftRegister(n = i)) { c =>
+    val inSeq = Seq(0, 1, 1, 1, 0, 1, 1, 0, 0, 1)
+    var state = c.init
+    var i = 0
+    c.io.en.poke(true.B)
+    while (i < 10 * c.n) {
+      // poke in repeated inSeq
+      val toPoke = inSeq(i % inSeq.length)
+      c.io.in.poke((toPoke != 0).B)
+      // update expected state
+      state = ((state * 2) + toPoke) & BigInt("1"*c.n, 2)
+      c.clock.step(1)
+      c.io.out.expect(state.U)
+
+      i += 1
+    }
+  }
+}
+println("SUCCESS!!")
+

Notice: Chisel中变量被声明为常量val,因此一个变量只能被赋值一次,因为这表示硬件电路连接,但是会根据输入等的不同而具有不同的值。因此不能多次给一个变量赋值,如果需要,可以把中间值重新命名为一个val来调用

# Appendix: Explicit clock and reset

Chisel模块默认使用隐式的时钟和复位信号,每个内部创建的寄存器都会使用这些默认信号。在某些情况下,你可能需要覆盖这种默认行为,比如使用生成时钟或复位信号的黑盒,或者设计多时钟系统。Chisel提供了**withClock() {}withReset() {}withClockAndReset() {}等构造来处理这些情况,允许分别或同时覆盖时钟和复位。需要注意的是,至本教程编写时,复位信号总是同步的并且是Bool类型。时钟在Chisel中有其自身的类型(Clock),并且应该相应声明。Bool类型可以通过调用asClock()转换为Clock类型,但需要确保这样做是合理的。同时,chisel-testers**目前对多时钟设计的支持并不完全。

# Example: Multi-Clock Module

// we need to import multi-clock features
+import chisel3.experimental.{withClock, withReset, withClockAndReset}
+
+class ClockExamples extends Module {
+  val io = IO(new Bundle {
+    val in = Input(UInt(10.W))
+    val alternateReset    = Input(Bool())
+    val alternateClock    = Input(Clock())
+    val outImplicit       = Output(UInt())
+    val outAlternateReset = Output(UInt())
+    val outAlternateClock = Output(UInt())
+    val outAlternateBoth  = Output(UInt())
+  })
+
+  val imp = RegInit(0.U(10.W))
+  imp := io.in
+  io.outImplicit := imp
+
+  withReset(io.alternateReset) {
+    // everything in this scope with have alternateReset as the reset
+    val altRst = RegInit(0.U(10.W))
+    altRst := io.in
+    io.outAlternateReset := altRst
+  }
+
+  withClock(io.alternateClock) {
+    val altClk = RegInit(0.U(10.W))
+    altClk := io.in
+    io.outAlternateClock := altClk
+  }
+
+  withClockAndReset(io.alternateClock, io.alternateReset) {
+    val alt = RegInit(0.U(10.W))
+    alt := io.in
+    io.outAlternateBoth := alt
+  }
+}
+
+println(getVerilog(new ClockExamples))
+

通过**import chisel3.experimental.{withClock, withReset, withClockAndReset}引入了多时钟特性。ClockExamples模块定义了一个10位宽的输入io.in,以及替代的复位和时钟信号io.alternateResetio.alternateClock**。模块输出了四种不同情况下的寄存器值:使用默认时钟和复位、只替换复位、只替换时钟、同时替换时钟和复位。

  1. withReset(io.alternateReset) {...}块定义了一个新的作用域,其中所有寄存器的复位信号被替换为io.alternateReset。在这个作用域内,**altRst寄存器在被替代复位信号复位时初始化为0,并在每个时钟周期将io.in**的值赋给它。
  2. withClock(io.alternateClock) {...}块定义了另一个作用域,其中所有寄存器的时钟信号被替换为io.alternateClock。在这个作用域内,**altClk寄存器在被替代时钟信号驱动时初始化为0,并在每个时钟周期将io.in**的值赋给它。
  3. withClockAndReset(io.alternateClock, io.alternateReset) {...}块同时替换了寄存器的时钟和复位信号为io.alternateClockio.alternateReset。在这个作用域内,**alt寄存器同时被替代的时钟和复位信号控制,初始化为0,并在每个时钟周期将io.in**的值赋给它。
+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5 FIR Filter.html b/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5 FIR Filter.html new file mode 100644 index 0000000..7beeac8 --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5 FIR Filter.html @@ -0,0 +1,135 @@ + + + + + + 2024.02.28-2.5 FIR Filter | Hello World --from OutisLi + + + + + + + + +

# 2024.02.28-2.5 FIR Filter

Untitled

class My4ElementFir(b0: Int, b1: Int, b2: Int, b3: Int) extends Module {
+  val io = IO(new Bundle {
+    val in = Input(UInt(8.W))
+    val out = Output(UInt(8.W))
+  })
+
+  val reg_1 = RegInit(0.U(8.W))
+  val reg_2 = RegInit(0.U(8.W))
+  val reg_3 = RegInit(0.U(8.W))
+  
+  reg_1 := io.in
+  reg_2 := reg_1
+  reg_3 := reg_2
+
+	// 或者使用RegNext来一并定义初始化及赋值
+	val reg_1 = RegNext(io.in, 0.U)
+	val reg_2 = RegNext(reg_1, 0.U)
+	val reg_3 = RegNext(reg_2, 0.U)
+  
+  io.out := b0.U(8.W) * io.in + b1.U(8.W) * reg_1 + b2.U(8.W) * reg_2 + b3.U(8.W) * reg_3
+}
+

# FIR Filter Generator

一个有限脉冲响应(FIR)滤波器生成器。生成器的**length参数决定了滤波器的抽头数目,即滤波器的长度。这个生成器有三个输入:in(滤波器的输入信号)、valid(一个布尔值,表示输入是否有效)和consts(一个向量,包含所有抽头的系数)。还有一个输出out**,即滤波器的输出。

  • **taps**是一个序列,包含输入和一系列寄存器,用于实现滤波器的延迟线。
  • 当**valid**信号为真时,序列中的每个元素(除了第一个)被更新为前一个元素的值。
  • 输出**out**是抽头值和对应系数乘积之和。

这个结构允许滤波器动态处理不同长度的输入,通过改变**consts**向量的内容来改变滤波器的特性。

class MyManyDynamicElementVecFir(length: Int) extends Module {
+  val io = IO(new Bundle {
+    val in = Input(UInt(8.W))
+    val valid = Input(Bool())
+    val out = Output(UInt(8.W))
+    val consts = Input(Vec(length, UInt(8.W)))
+  })
+  
+  // Such concision! You'll learn what all this means later.
+  val taps = Seq(io.in) ++ Seq.fill(io.consts.length - 1)(RegInit(0.U(8.W)))
+  taps.zip(taps.tail).foreach { case (a, b) => when (io.valid) { b := a } }
+
+  io.out := taps.zip(io.consts).map { case (a, b) => a * b }.reduce(_ + _)
+}
+
+visualize(() => new MyManyDynamicElementVecFir(4))
+
  1. val io = IO(new Bundle {...})定义了模块的接口,包括8位宽的输入in,一个有效信号**valid,8位宽输出out,和长度为length的系数向量consts**。

  2. **val taps = Seq(io.in) ++ Seq.fill(io.consts.length - 1)(RegInit(0.U(8.W)))这行代码在FIR滤波器实现中创建了一个名为taps的序列,用于存储当前和之前的输入值,从而实现数据的时间序列延迟。首先,它将输入信号io.in作为序列的第一个元素。随后,使用++操作符将io.in与一个新的序列连接起来,后者通过Seq.fill(io.consts.length - 1)(RegInit(0.U(8.W)))创建,其中包含length - 1个初始化为0的8位寄存器。这样,taps序列就包含了一个输入信号和length - 1个延迟寄存器,总共length个元素,每个元素对应滤波器的一个抽头。在Chisel中,虽然io.in不是寄存器,但taps序列可以包含不同类型的元素,因为在Chisel里,所有这些都被视为Data类型的子类,可以被综合为硬件。在这个上下文中,io.in**是直接的输入信号,而后续元素是寄存器类型,但它们共同构成了一个序列,用于表示滤波器的不同时间点上的信号值。这种混合类型的序列是可行的,并可以在Chisel生成的硬件中正确表达相应的逻辑。

  3. **taps.zip(taps.tail).foreach { case (a, b) => when (io.valid) { b := a } }在输入valid为真时,将taps**序列中每个元素的值传递到下一个元素,实现数据在寄存器间的移动。

    zip是一个方法,它将两个集合中对应位置的元素组成一对,生成一个新的集合。在这里,taps.zip(taps.tail)的作用是将taps列表中的每个元素与其后面的元素配对。tail是一个方法,返回除第一个元素外的列表所有元素。例如,如果taps[in, reg1, reg2, reg3],那么**taps.tail就是[reg1, reg2, reg3]taps.zip(taps.tail)的结果将是[(in, reg1), (reg1, reg2), (reg2, reg3)]。这样,foreach就可以遍历这些配对,根据valid**信号更新寄存器的值,实现数据的逐级传递。

    case (a, b) =>是模式匹配的语法,用于解构元组,将zip操作生成的元素对分别赋值给a(当前元素)和**b**(下一个元素)。

  4. io.out := taps.zip(io.consts).map { case (a, b) => a * b }.reduce(_ + _)计算输出out,即将每个延迟元素与其对应的系数相乘,并将所有乘积求和得到最终结果。

    在这段代码中,**mapreduce**是Scala中的集合操作方法:

    • map:对集合中的每个元素应用一个函数。这里**map { case (a, b) => a * b }对每对(a, b)应用乘法操作,a来自tapsb来自io.consts**,分别代表寄存器中的数据和滤波器的系数。
    • reduce:对集合中的元素应用一个二元操作,逐步将集合减少为单一结果。这里的**reduce(_ + _)**将所有乘法结果相加,得到最终的滤波输出。

    不使用**foreach是因为foreach仅用于执行操作而不返回结果,而这里的目的是计算经过滤波器后的输出值,需要通过mapreduce**聚合计算结果。

+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6 More on ChiselTest.html b/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6 More on ChiselTest.html new file mode 100644 index 0000000..6b439b2 --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6 More on ChiselTest.html @@ -0,0 +1,132 @@ + + + + + + 2024.02.29-2.6 More on ChiselTest | Hello World --from OutisLi + + + + + + + + +

# 2024.02.29-2.6 More on ChiselTest

iotesters ChiselTest
poke poke(c.io.in1, 6) c.io.in1.poke(6.U)
peek peek(c.io.out1) c.io.out1.peek()
expect expect(c.io.out1, 6) c.io.out1.expect(6.U)
step step(1) c.clock.step(1)
initiate Driver.execute(...) { c => test(...) { c =>

# Modules with Decoupled Interfaces

class QueueModule[T <: Data](ioType: T, entries: Int) extends MultiIOModule {
+  val in = IO(Flipped(Decoupled(ioType)))
+  val out = IO(Decoupled(ioType))
+  out <> Queue(in, entries)
+}
+
  1. class QueueModule[T <: Data](ioType: T, entries: Int) extends MultiIOModule 定义了一个泛型队列模块,其中**T <: Data表示TData类型或其子类型。ioType是队列中数据的类型,entries**是队列的大小。
  2. Decoupled(ioType)是一个Chisel提供的高级接口,自动包含了valid、**bitsready信号。validbits组合用于传输有效数据,而ready信号用于流量控制。当你声明一个Decoupled**接口时,这些信号都会被自动创建。
  3. IO(Flipped(Decoupled(ioType))) 创建了一个输入端口,**Flipped意味着通常的输入输出方向被反转(即原本是输出的validbits成为输入,原本是输入的ready成为输出),Decoupled**表示它是一个可以被反压的接口。
  4. out <> Queue(in, entries) 将输出端口**out连接到一个新建的Queue实例,Queue(in, entries)创建了一个队列,其中in是输入端口,entries是队列大小。<>是连接操作符,表示双向连接。确保了数据可以从in流向队列,经过处理后,再从队列流向out**。

# EnqueueNow and expectDequeueNow

**EnqueueNowexpectDequeueNow是用于测试队列行为的方法。EnqueueNow用于立即将数据入队,而不需要等待队列准备好。expectDequeueNow**用于立即从队列中出队数据,并验证其值是否符合预期。这两个方法都是在基于队列的测试中非常有用,使得测试代码可以直接控制和验证队列中数据的流动。这样,测试者可以确保队列正确地处理了入队和出队操作,并且数据的传输符合设计的预期。

test(new QueueModule(UInt(9.W), entries = 200)) { c =>
+    // Example testsequence showing the use and behavior of Queue
+    c.in.initSource()
+    c.in.setSourceClock(c.clock)
+    c.out.initSink()
+    c.out.setSinkClock(c.clock)
+    
+    val testVector = Seq.tabulate(200){ i => i.U }
+
+    testVector.zip(testVector).foreach { case (in, out) =>
+      c.in.enqueueNow(in)
+      c.out.expectDequeueNow(out)
+    }
+}
+

There is some required boiler plate initSource, setSourceClock, etc that is necessary to ensure that the ready and valid fields are all initialized correctly at the beginning of the test.

# EnqueueSeq and DequeueSeq

EnqueueSeq 允许你一次性将一个序列的元素批量入队,这对于测试需要连续多个数据处理的场景特别有用。DequeueSeq, 相应地,用于一次性从队列中出队多个元素,并验证这些元素是否符合预期的序列。enqueueSeq must finish before the expectDequeueSeq can begin. This example would fail if the testVector's size is made larger than the queue depth, because the queue would fill up and not be able to complete the enqueueSeq.

# Fork and Join

**forkjoin用于创建并发测试,允许同时执行多个操作或测试场景。使用fork可以启动一个并发的测试过程,这个过程可以与主测试流程同时运行。可以在fork后使用多个测试命令定义并发执行的操作。随后,join**用于等待所有并发启动的测试过程完成。这样,你可以在一个测试中执行多个并行操作,例如同时对多个模块输入不同的信号,或者同时观察多个输出。这在需要模拟复杂交互或并行处理时特别有用。

test(new QueueModule(UInt(9.W), entries = 200)) { c =>
+    // Example testsequence showing the use and behavior of Queue
+    c.in.initSource()
+    c.in.setSourceClock(c.clock)
+    c.out.initSink()
+    c.out.setSinkClock(c.clock)
+    
+    val testVector = Seq.tabulate(300){ i => i.U }
+
+    fork {
+        c.in.enqueueSeq(testVector)
+    }.fork {
+        c.out.expectDequeueSeq(testVector)
+    }.join()
+}
+

虽然**fork启动了两个并发过程,似乎表明c.in.enqueueSeq(testVector)c.out.expectDequeueSeq(testVector)应该同时执行,但实际上,它们在逻辑上是有先后顺序的。enqueueSeq首先向队列中填充数据,而expectDequeueSeq则等待这些数据从队列中出现并验证它们。在ChiselTest中,fork创建的并发线程会同时开始执行,但是expectDequeueSeq**自然会在等待有数据可以出队之后才开始验证,确保了数据的正确流向和测试的逻辑顺序。

+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1 Generators Parameters.html b/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1 Generators Parameters.html new file mode 100644 index 0000000..dbeb3fc --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1 Generators Parameters.html @@ -0,0 +1,353 @@ + + + + + + 2024.03.01-3.1 Generators: Parameters | Hello World --from OutisLi + + + + + + + + +

# 2024.03.01-3.1 Generators: Parameters

# Parameter Passing

# Example: Parameterized Scala Object

class ParameterizedScalaObject(param1: Int, param2: String) {
+  println(s"I have parameters: param1 = $param1 and param2 = $param2")
+}
+val obj1 = new ParameterizedScalaObject(4,     "Hello")
+val obj2 = new ParameterizedScalaObject(4 + 2, "World")
+

# Example: Parameterized Chisel Object

class ParameterizedWidthAdder(in0Width: Int, in1Width: Int, sumWidth: Int) extends Module {
+  require(in0Width >= 0)
+  require(in1Width >= 0)
+  require(sumWidth >= 0)
+  val io = IO(new Bundle {
+    val in0 = Input(UInt(in0Width.W))
+    val in1 = Input(UInt(in1Width.W))
+    val sum = Output(UInt(sumWidth.W))
+  })
+  // a +& b includes the carry, a + b does not
+  io.sum := io.in0 +& io.in1
+}
+
+println(getVerilog(new ParameterizedWidthAdder(1, 4, 6)))
+

The above code block has some require(...) statements. These are pre-elaboration assertions, which are useful when your generator only works with certain parameterizations or when some parameterizations are mutually exclusive or nonsensical. The above code block checks that widths are non-negative.

# Example: Parameterized 4-input Sort

Untitled

/** Sort4 sorts its 4 inputs to its 4 outputs */
+class Sort4(ascending: Boolean) extends Module {
+  val io = IO(new Bundle {
+    val in0 = Input(UInt(16.W))
+    val in1 = Input(UInt(16.W))
+    val in2 = Input(UInt(16.W))
+    val in3 = Input(UInt(16.W))
+    val out0 = Output(UInt(16.W))
+    val out1 = Output(UInt(16.W))
+    val out2 = Output(UInt(16.W))
+    val out3 = Output(UInt(16.W))
+  })
+    
+  // this comparison funtion decides < or > based on the module's parameterization
+  def comp(l: UInt, r: UInt): Bool = {
+      if (ascending) {
+        l < r
+      } else {
+        l > r
+    }
+  }
+
+  val row10 = Wire(UInt(16.W))
+  val row11 = Wire(UInt(16.W))
+  val row12 = Wire(UInt(16.W))
+  val row13 = Wire(UInt(16.W))
+
+  when(comp(io.in0, io.in1)) {
+    row10 := io.in0            // preserve first two elements
+    row11 := io.in1
+  }.otherwise {
+    row10 := io.in1            // swap first two elements
+    row11 := io.in0
+  }
+
+  when(comp(io.in2, io.in3)) {
+    row12 := io.in2            // preserve last two elements
+    row13 := io.in3
+  }.otherwise {
+    row12 := io.in3            // swap last two elements
+    row13 := io.in2
+  }
+
+  val row21 = Wire(UInt(16.W))
+  val row22 = Wire(UInt(16.W))
+
+  when(comp(row11, row12)) {
+    row21 := row11            // preserve middle 2 elements
+    row22 := row12
+  }.otherwise {
+    row21 := row12            // swap middle two elements
+    row22 := row11
+  }
+
+  val row20 = Wire(UInt(16.W))
+  val row23 = Wire(UInt(16.W))
+  when(comp(row10, row13)) {
+    row20 := row10            // preserve the first and the forth elements
+    row23 := row13
+  }.otherwise {
+    row20 := row13            // swap the first and the forth elements
+    row23 := row10
+  }
+
+  when(comp(row20, row21)) {
+    io.out0 := row20            // preserve first two elements
+    io.out1 := row21
+  }.otherwise {
+    io.out0 := row21            // swap first two elements
+    io.out1 := row20
+  }
+
+  when(comp(row22, row23)) {
+    io.out2 := row22            // preserve first two elements
+    io.out3 := row23
+  }.otherwise {
+    io.out2 := row23            // swap first two elements
+    io.out3 := row22
+  }
+}
+

# Option and Defualt Arguments

val map = Map("a" -> 1)
+val a = map.get("a")
+println(a)
+val b = map.get("b")
+println(b)
+

在Scala中,Map.get(key)方法返回一个Option类型:如果键存在,则返回Some(value);如果键不存在,则返回**None。在您的例子中,map.get("a")返回Some(1),因为"a"是映射中的一个键,值为1。然而,map.get("b")返回None,因为"b"不是映射中的键。SomeNone**用于Scala中以安全且表达性的方式处理值的存在或缺失,避免空指针异常。

val some = Some(1)
+val none = None
+println(some.get)          // Returns 1
+// println(none.get)       // Errors!
+println(some.getOrElse(2)) // Returns 1
+println(none.getOrElse(2)) // Returns 2
+

getOrElse是一个常用于Option类型的方法,它允许你为Option可能不包含值(即为None)的情况提供一个默认值。getOrElse接受一个参数,这个参数是当OptionNone时将返回的值。如果OptionSome,则**getOrElse会返回包裹在Some**中的值。

# Options for Parameters with Defaults

class DelayBy1(resetValue: Option[UInt] = None) extends Module {
+    val io = IO(new Bundle {
+        val in  = Input( UInt(16.W))
+        val out = Output(UInt(16.W))
+    })
+    val reg = if (resetValue.isDefined) { // resetValue = Some(number)
+        RegInit(resetValue.get)
+    } else { //resetValue = None
+        Reg(UInt())
+    }
+    reg := io.in
+    io.out := reg
+}
+
+println(getVerilog(new DelayBy1))
+println(getVerilog(new DelayBy1(Some(3.U))))
+

resetValue 默认初始化为 Option[UInt] = NoneReg(UInt()) 可以从上下文中自动推断,不过最好还是指定位宽

// 还可以用match来实现ifelse
+class DelayBy1(resetValue: Option[UInt] = None) extends Module {
+  val io = IO(new Bundle {
+    val in  = Input( UInt(16.W))
+    val out = Output(UInt(16.W))
+  })
+  val reg = resetValue match {
+    case Some(r) => RegInit(r)
+    case None    => Reg(UInt())
+  }
+  reg := io.in
+  io.out := reg
+}
+

# Match/Case Statements

Scala中的匹配概念在Chisel中被广泛使用,是每个Chisel程序员必须理解的基础知识。Scala提供的match操作符支持以下功能:

  • 用于检测多种情况的简单测试,类似于C语言中的switch语句。
  • 对值的复杂组合进行测试。
  • 根据变量的类型采取行动,当变量类型未知或未完全指定时,例如: +
    • 从异构列表中取变量,如**val mixedList = List(1, "string", false)**。
    • 变量已知属于一个超类,但不确定是哪个具体的子类。
  • 使用正则表达式提取字符串的子串。

# Example: Value Matching

// y is an integer variable defined somewhere else in the code
+val y = 7
+/// ...
+val x = y match {
+  case 0 => "zero" // One common syntax, preferred if fits in one line
+  case 1 =>        // Another common syntax, preferred if does not fit in one line.
+      "one"        // Note the code block continues until the next case
+  case 2 => {      // Another syntax, but curly braces are not required
+      "two"
+  }
+  case _ => "many" // _ is a wildcard that matches all values
+}
+println("y is " + x) // out: y is many
+

y 为7,不匹配,因此采用默认值

  • 每个跟在**=>操作符后面的代码块都会继续执行,直到它到达match的结束大括号或下一个case**语句。
  • **match会按照case语句的顺序进行搜索,一旦匹配到一个case语句,就不会再对其他case**语句进行检查。
  • 使用下划线**_**作为通配符,来处理任何未找到匹配的值。

# Example: Multiple Value Matching

def animalType(biggerThanBreadBox: Boolean, meanAsCanBe: Boolean): String = {
+  (biggerThanBreadBox, meanAsCanBe) match {
+    case (true, true) => "wolverine"
+    case (true, false) => "elephant"
+    case (false, true) => "shrew"
+    case (false, false) => "puppy"
+  }
+}
+println(animalType(true, true)) // wolverine
+

# Example: Type Matching

val sequence = Seq("a", 1, 0.0)
+sequence.foreach { x =>
+  x match {
+    case s: String => println(s"$x is a String")
+    case s: Int    => println(s"$x is an Int")
+    case s: Double => println(s"$x is a Double")
+    case _ => println(s"$x is an unknown type!")
+  }
+}
+

Seq是Scala集合中的一个接口,它代表序列,而ListSeq的一个具体实现。在这个例子中,可以直接用List("a", 1, 0.0)来代替Seq("a", 1, 0.0),而不会影响**foreachmatch**语句的行为。

# Example: Multiple Type Matching

If you want to match on whether a value has one of many types, use the following syntax. Note that you must use an _ when matching.

val sequence = Seq("a", 1, 0.0)
+sequence.foreach { x =>
+  x match {
+    case _: Int | _: Double => println(s"$x is a number!")
+    case _ => println(s"$x is an unknown type!")
+  }
+}
+

# Example: Type Matching and Erasure

类型匹配在Scala中有一些限制。由于Scala运行在JVM上,而JVM不保持多态类型信息,因此你不能在运行时基于它们进行匹配(因为这些类型信息已被擦除)。注意下面的例子始终匹配第一个case语句,因为**[String][Int][Double]这些多态类型在运行时被擦除了,case语句实际上只是在匹配Seq**。

val sequence = Seq(Seq("a"), Seq(1), Seq(0.0))
+sequence.foreach { x =>
+  x match {
+    case s: Seq[String] => println(s"$x is a String")
+    case s: Seq[Int]    => println(s"$x is an Int")
+    case s: Seq[Double] => println(s"$x is a Double")
+  }
+}
+

在Scala中,类型擦除指的是JVM在运行时不保留泛型的具体类型信息。因此,当你对**Seq[String]Seq[Int]Seq[Double]进行模式匹配时,JVM实际上无法区分这些Seq的元素类型,因为泛型信息[String][Int][Double]已经被擦除,只留下了基础的Seq类型。所以,这些case语句在运行时都被视为对Seq类型的匹配,而无法区分具体是哪种Seq。因此,匹配总是成功于第一个case,无论其实际参数是什么类型的Seq。这就是为什么在运行时你看到的行为似乎是它总是匹配Seq**的原因。

# IOs with Optional Fields

有时我们希望IO端口能够根据需要选择性地包含或排除。例如,在调试时可能需要查看一些内部状态,但在生成器用于系统时希望将其隐藏。或者,你的生成器可能有一些输入在某些情况下不需要连接,因为存在合理的默认值。

# Example: Optional IO with Option

示例中展示了一个可选地接收进位信号的一位加法器。如果包含进位,**io.carryIn将是Some[UInt]类型并包含在IO束中;如果不包含进位,io.carryIn将是None**类型并从IO束中排除。

class HalfFullAdder(val hasCarry: Boolean) extends Module {
+  val io = IO(new Bundle {
+    val a = Input(UInt(1.W))
+    val b = Input(UInt(1.W))
+    val carryIn = if (hasCarry) Some(Input(UInt(1.W))) else None
+    val s = Output(UInt(1.W))
+    val carryOut = Output(UInt(1.W))
+  })
+  val sum = io.a +& io.b +& io.carryIn.getOrElse(0.U)
+  io.s := sum(0)
+  io.carryOut := sum(1)
+}
+

# Example: Optional IO with Zero-Width Wires

class HalfFullAdder(val hasCarry: Boolean) extends Module {
+  val io = IO(new Bundle {
+    val a = Input(UInt(1.W))
+    val b = Input(UInt(1.W))
+    val carryIn = Input(if (hasCarry) UInt(1.W) else UInt(0.W))
+    val s = Output(UInt(1.W))
+    val carryOut = Output(UInt(1.W))
+  })
+  val sum = io.a +& io.b +& io.carryIn
+  io.s := sum(0)
+  io.carryOut := sum(1)
+}
+

也可以用一个0宽度的wire来代替None。An IO with width zero is pruned from the emitted Verilog, and anything that tries to use the value of a zero-width wire gets a constant zero.

# Implicits

为了减少大量重复的模板代码,Scala引入了*隐式(implicits)*的概念,允许编译器为你自动进行一些语法简化。由于很多操作是在背后进行,隐式使用可能显得很神奇。

# Implicit Arguments

隐式参数的一个常见用途是当你的代码在深层的函数调用中需要访问某个顶层变量时,可以使用隐式参数自动传递这个变量,而不是手动在每个函数调用中传递它。

# Example: Implicit Cats

object CatDog {
+  implicit val numberOfCats: Int = 3
+  //implicit val numberOfDogs: Int = 5
+
+  def tooManyCats(nDogs: Int)(implicit nCats: Int): Boolean = nCats > nDogs
+    
+  val imp = tooManyCats(2)    // Argument passed implicitly!
+  val exp = tooManyCats(2)(1) // Argument passed explicitly!
+}
+CatDog.imp
+CatDog.exp
+

首先,我们定义了一个隐式值**numberOfCats。在给定的作用域中,同一类型的隐式值只能有一个。然后,我们定义了一个函数,它接受两个参数列表;第一个是任何显式参数,第二个是任何隐式参数。当我们调用tooManyCats**时,我们可以省略第二个隐式参数列表(让编译器为我们找到它),或者显式提供一个参数(这个参数可以与隐式值不同)。

隐式参数可能失败的情况包括:

  • 在一个作用域中定义了给定类型的两个或多个隐式值
  • 如果编译器找不到调用函数所需的隐式值

**object定义了一个单例对象,它是一个类的单一实例。与class不同,当你定义一个object时,Scala会自动为你创建这个类的一个实例。你不需要使用new关键字来创建它的实例。在这个例子中,CatDog是一个单例对象,可以直接访问其成员,无需创建实例。这在定义工具方法或当你需要一个全局唯一的实体时非常有用,比如这里的numberOfCats隐式值和tooManyCats**方法。

# Example: Implicit Logging

sealed trait Verbosity
+implicit case object Silent extends Verbosity
+case object Verbose extends Verbosity
+
+class ParameterizedWidthAdder(in0Width: Int, in1Width: Int, sumWidth: Int)(implicit verbosity: Verbosity)
+extends Module {
+  def log(msg: => String): Unit = verbosity match {
+    case Silent =>
+    case Verbose => println(msg)
+  }
+  require(in0Width >= 0)
+  log(s"in0Width of $in0Width OK")
+  require(in1Width >= 0)
+  log(s"in1Width of $in1Width OK")
+  require(sumWidth >= 0)
+  log(s"sumWidth of $sumWidth OK")
+  val io = IO(new Bundle {
+    val in0 = Input(UInt(in0Width.W))
+    val in1 = Input(UInt(in1Width.W))
+    val sum = Output(UInt(sumWidth.W))
+  })
+  log("Made IO")
+	// 对于结果位宽自然容纳进位的情况,直接使用+也是可行的。
+  io.sum := io.in0 + io.in1
+  log("Assigned output")
+}
+
+println(getVerilog(new ParameterizedWidthAdder(1, 4, 5)))
+println(getVerilog(new ParameterizedWidthAdder(1, 4, 5)(Verbose)))
+
  1. 定义了一个名为**Verbosity的密封特质(sealed trait)和两个实现这个特质的对象。sealed trait Verbosity表示Verbosity是一个可以被继承的类型,但所有继承它的类必须定义在同一个文件中,这有助于实现模式匹配的完整性检查。implicit case object Silent extends Verbosity定义了一个隐式的单例对象Silent,它是Verbosity的一个实现,可以在需要Verbosity类型的隐式参数时自动使用。case object Verbose extends Verbosity定义了另一个名为Verbose的单例对象,也是Verbosity的实现。case object**通常用于代表不可变、无状态的值或单例定义.
  2. msg: => String这样的参数定义使用了名为“call-by-name”的参数传递机制。这种机制意味着,只有在函数内部实际使用到msg时,传入的字符串表达式才会被计算。这对于条件日志记录来说非常有用,因为它允许延迟计算日志消息直到确实需要打印消息时。例如,如果verbositySilent,则**msg**根本不会被计算,这样就避免了不必要的性能开销。

# Implicit Conversions

隐式函数(也称为隐式转换)用于减少模板代码。更具体地说,它们用于自动将一个Scala对象转换为另一个对象。

# Example: Implicit Conversion

在下面的例子中,我们有两个类,AnimalHumanAnimal有一个species字段,但Human没有。然而,通过实现一个隐式转换,我们可以在Human上调用species方法。这意味着即使Human类原本不包含species字段,通过隐式转换,我们也可以像访问自己的属性一样访问species,就好像这个属性是**Human**类的一部分一样。

class Animal(val name: String, val species: String)
+class Human(val name: String)
+implicit def human2animal(h: Human): Animal = new Animal(h.name, "Homo sapiens")
+val me = new Human("Adam")
+println(me.species)
+
+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2 Generators Collections.html b/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2 Generators Collections.html new file mode 100644 index 0000000..e246810 --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2 Generators Collections.html @@ -0,0 +1,237 @@ + + + + + + 2024.03.03-3.2 Generators: Collections | Hello World --from OutisLi + + + + + + + + +

# 2024.03.03-3.2 Generators: Collections

# Generators and Collections

# FIR Golden Model

/**
+  * A naive implementation of an FIR filter with an arbitrary number of taps.
+  */
+class ScalaFirFilter(taps: Seq[Int]) {
+  var pseudoRegisters = List.fill(taps.length)(0)
+
+  def poke(value: Int): Int = {
+    pseudoRegisters = value :: pseudoRegisters.take(taps.length - 1)
+    var accumulator = 0
+    for(i <- taps.indices) {
+      accumulator += taps(i) * pseudoRegisters(i)
+    }
+    accumulator
+  }
+}
+

# Seq

当**taps变为Seq[Int]时,意味着类的用户可以在构造类时传递任意长度的Int**序列。

# 寄存器

使用**var pseudoRegisters = List.fill(taps.length)(0)创建了一个List,用于存储前几个周期的值。选择List**是因为其添加元素到头部和移除最后一个元素的语法非常简单。理论上可以使用Scala集合家族中的任何成员。这个列表被初始化为全零。

# Poke

我们的类添加了一个poke函数/方法,模拟将新输入放入过滤器并循环时钟。

# 更新寄存器

**pseudoRegisters = value :: pseudoRegisters.take(taps.length - 1)首先使用列表的take方法保留除最后一个元素外的所有元素,然后使用::列表连接操作符将value**添加到缩减版列表的头部。

# 计算输出

一个简单的for循环和累加器用于求和列表中每个元素与其对应抽头系数的乘积。仅含**accumulator**的行将该值作为函数结果返回。

# Test circuit using the golden model

为了避免使用繁杂的手动验证,这里使用Golden Model来生成期望的值,并与Chisel的结果对比

val goldenModel = new ScalaFirFilter(Seq(1, 1, 1, 1))
+
+test(new My4ElementFir(1, 1, 1, 1)) { c =>
+    for(i <- 0 until 100) {
+        val input = scala.util.Random.nextInt(8)
+
+        val goldenModelResult = goldenModel.poke(input)
+
+        c.io.in.poke(input.U)
+
+        c.io.out.expect(goldenModelResult.U, s"i $i, input $input, gm $goldenModelResult, ${c.io.out.peek().litValue}")
+
+        c.clock.step(1)
+    }
+
+}
+

注意:这里软件上的Golden Model没有考虑位宽,而硬件则与位宽有很大关系。这里只考虑了8以内,即3bit的数,因此不存在这个问题

# Example: Parameterized FIR Generator

class MyManyElementFir(consts: Seq[Int], bitWidth: Int) extends Module {
+  val io = IO(new Bundle {
+    val in = Input(UInt(bitWidth.W))
+    val out = Output(UInt(bitWidth.W))
+  })
+
+  val regs = mutable.ArrayBuffer[UInt]()
+  for(i <- 0 until consts.length) {
+      if(i == 0) regs += io.in
+      else       regs += RegNext(regs(i - 1), 0.U)
+  }
+  
+  val muls = mutable.ArrayBuffer[UInt]()
+  for(i <- 0 until consts.length) {
+      muls += regs(i) * consts(i).U
+  }
+
+  val scan = mutable.ArrayBuffer[UInt]()
+  for(i <- 0 until consts.length) {
+      if(i == 0) scan += muls(i)
+      else scan += muls(i) + scan(i - 1)
+  }
+
+  io.out := scan.last
+}
+
  1. val regs = mutable.ArrayBuffer[UInt]()声明了一个名为regs的不可变变量,它被初始化为一个可变的ArrayBuffer,其中包含**UInt类型的元素。ArrayBuffer是一个可变的序列,允许在序列两端高效地添加或删除元素,适用于需要动态修改元素的场景。在这里,regs可以被用来存储和更新UInt类型的数据,但由于使用了valregs本身的引用是不可变的,尽管它指向的ArrayBuffer**内容是可变的。
  2. **regs += io.in这行代码的意思是将io.in这个UInt信号添加到regs这个ArrayBuffer中。这里没有直接的数值相加操作,而是将io.in这个元素添加(追加)到regs这个列表的末尾。regs是一个容器,可以逐个添加元素,即使一开始regs是空的。这行代码的作用是初始化regs列表的第一个元素,后续元素则在循环中通过RegNext**添加。
  3. regs作为一个ArrayBuffer,可以包含不同类型的**UInt元素。在这种情况下,io.in是一个Input(UInt)类型,而RegNext(regs(i - 1), 0.U)生成的是一个Reg(UInt)类型。尽管io.in和通过RegNext创建的寄存器在硬件层面扮演不同的角色(一个是输入信号,另一个是寄存器),但它们都是UInt类型,可以存储在同一个ArrayBuffer**中。在Chisel生成的硬件逻辑中,这将创建一个信号和寄存器链,其中信号和寄存器可以互相连接。
  4. 使用**scan数组缓存逐步累加的结果而不是直接对muls求和,是为了展示在每一步如何逐渐累积计算的中间值。这种方法在某些复杂的FIR滤波器设计中可以提供更多的灵活性,比如在需要逐个访问累加过程中的中间结果时。尽管在这个特定例子中,只需要最终的累加结果,直接对muls求和看似更直接,但展开累加过程可以帮助理解和调试滤波器的行为,尤其是在更复杂或参数化的设计中。然而,如果目标只是获取最终的累加和,直接使用muls.reduce(_ + _)**确实会更简洁高效。

# Test a bunch of different sized FIR filters

def r(): Int = {
+  scala.util.Random.nextInt(1024)
+}
+
+/**
+  * run a test comparing software and hardware filters
+  * run for at least twice as many samples as taps
+  */
+def runOneTest(taps: Seq[Int]) {
+    val goldenModel = new ScalaFirFilter(taps)
+
+    test(new MyManyElementFir(taps, 32)) { c =>
+        for(i <- 0 until 2 * taps.length) {
+            val input = r()
+
+            val goldenModelResult = goldenModel.poke(input)
+
+            c.io.in.poke(input.U)
+
+            c.io.out.expect(goldenModelResult.U, s"i $i, input $input, gm $goldenModelResult, ${c.io.out.peek().litValue}")
+
+            c.clock.step(1)
+        }
+    }
+}
+
+for(tapSize <- 2 until 100 by 10) {
+    val taps = Seq.fill(tapSize)(r())  // create a sequence of random coefficients
+
+    runOneTest(taps)
+}
+
  1. 在Chisel测试中,c.clock.step(1)通常放在对输出进行期望检查(expect)之后,因为我们希望在提供输入后推进仿真一个时钟周期,然后在下一个时钟边沿检查输出。这样可以确保寄存器已经更新到了因输入变化而触发的新状态。
  2. 字符串**s"i $i, input $input, gm $goldenModelResult, ${c.io.out.peek().litValue}"是Scala的字符串插值,用于构造包含变量值的字符串。这里它构建了一个描述当前测试状态的字符串,包括迭代次数i,当前输入input,金标准模型goldenModel的结果goldenModelResult,以及从待测试模块的输出c.io.out**中提取的值。这对于调试和理解测试失败的上下文非常有用。

# Hardware Collections

# Example: Add run-time configurable taps to our FIR

在FIR生成器的IO中添加了一个额外的**consts向量,允许在电路生成后从外部改变系数。这是通过Chisel集合类型Vec实现的。Vec支持许多Scala集合方法,但只能包含Chisel硬件元素。仅在普通Scala集合无法满足需求的情况下使用Vec**,主要是以下两种情况:1. 在Bundle中需要元素集合,通常是作为IO使用的Bundle。2. 需要通过硬件部分的索引访问集合(如寄存器文件)。

原因在于**Vec能够创建一组硬件元素的集合,而这些硬件元素可以在生成的硬件电路中被索引和操作。相反,普通的Scala集合,如ListSeq,仅仅在Scala软件环境中存在,它们不能直接映射到硬件电路中。因此,当定义硬件模块的IO接口或需要在硬件级别按索引访问元素时,应该使用Vec**。

class MyManyDynamicElementVecFir(length: Int) extends Module {
+  val io = IO(new Bundle {
+    val in = Input(UInt(8.W))
+    val out = Output(UInt(8.W))
+    val consts = Input(Vec(length, UInt(8.W)))
+  })
+
+  // Reference solution
+  val regs = RegInit(VecInit(Seq.fill(length)(0.U(8.W))))
+  for(i <- 0 until length) {
+      if(i == 0) regs(i) := io.in
+      else       regs(i) := regs(i - 1)
+  }
+  
+  val muls = Wire(Vec(length, UInt(8.W)))
+  for(i <- 0 until length) {
+      if(i == 0) muls(i) := io.in * io.consts(i)
+      else       muls(i) := regs(i - 1) * io.consts(i)
+  }
+
+  val scan = Wire(Vec(length, UInt(8.W)))
+  for(i <- 0 until length) {
+      if(i == 0) scan(i) := muls(i)
+      else scan(i) := muls(i) + scan(i - 1)
+  }
+
+  io.out := scan(length - 1)
+}
+
  1. VecInit用于创建一个Vec,这是Chisel中的一种集合类型,专门用于存储硬件元素。Seq.fill(length - 1)(0.U(8.W))生成一个长度为length - 1,每个元素初始化为8位宽的0的序列。VecInit将这个序列转换成一个Vec,以便在硬件设计中使用。**RegInit则将这个Vec**初始化为寄存器,使得其值在复位时为指定的初始值。这种方式常用于定义具有多个初始相同值的寄存器数组。

  2. Wire(Vec(length, UInt(8.W))) 用于创建一个具有 length 元素的向量,每个元素是 8 位无符号整数。这是在硬件描述语言中创建信号数组的标准方法,允许这些信号在生成的硬件电路中被实例化。

    相比之下,mutable.ArrayBuffer[UInt]() 是 Scala 的一个集合类型,主要用于软件程序中的数据存储和处理。在 Chisel 的上下文中,你不能直接将 ArrayBuffer 用作硬件信号的容器,因为 ArrayBuffer 是一个可变的、仅在 Scala 软件执行环境中存在的数据结构,它不会被合成到硬件中。

    简单来说:

    • Wire(Vec(length, UInt(8.W))) 在 Chisel 中创建一个硬件向量,这个向量可以在生成的硬件电路中存在并携带信号。
    • mutable.ArrayBuffer[UInt]() 创建一个仅在 Scala 软件执行时存在的内存数组,它不能直接用于硬件设计。

    所以,在你的代码中使用 Wire(Vec(length, UInt(8.W))) 是为了定义一个可以在硬件层面操作和传递信号的向量,这对于硬件设计至关重要。

    # Example: 32-bit RISC-V Processor

    Register file: An array of registers that can be read from or written to via a number of read or write ports. Each port consists of an address and data field.

    class RegisterFile(readPorts: Int) extends Module {
    +    require(readPorts >= 0)
    +    val io = IO(new Bundle {
    +        val wen   = Input(Bool())
    +        val waddr = Input(UInt(5.W))
    +        val wdata = Input(UInt(32.W))
    +        val raddr = Input(Vec(readPorts, UInt(5.W)))
    +        val rdata = Output(Vec(readPorts, UInt(32.W)))
    +    })
    +    
    +    // A Register of a vector of UInts
    +    val reg = RegInit(VecInit(Seq.fill(32)(0.U(32.W))))
    +
    +    when(io.wen){
    +        reg(io.waddr) := io.wdata
    +    }
    +    for(i <- 0 until readPorts){
    +        when(io.raddr(i) === 0.U){
    +            io.rdata(i) := 0.U
    +        }.otherwise{
    +            io.rdata(i) := reg(io.raddr(i))
    +        }
    +    }
    +}
    +

    readPorts 表示寄存器文件的读端口数量。这个数量决定了在任何给定的时钟周期内,可以同时读取多少个独立寄存器的数据。每个读端口由其自己的读取地址(raddr)和读取数据(rdata)组成。在这种设置中,你可以在一个时钟周期内并行读取多个寄存器的值,而不是一次只能读取一个,这对于增加处理器的数据吞吐量非常有用。

    具体到代码:

    • readPorts:定义了有多少个并行的读端口可用于同时读取寄存器文件中的数据。
    • io.raddr:一个向量,包含了每个读端口对应的读取地址。每个读端口都可以独立地从寄存器文件中选择一个寄存器进行读取。
    • io.rdata:一个向量,用于输出每个读端口读取到的寄存器值。每个端口根据对应的**raddr读取寄存器文件中的数据,并将其放置在rdata**的相应位置。
+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3 Interlude Chisel Standard Library.html b/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3 Interlude Chisel Standard Library.html new file mode 100644 index 0000000..dff36d8 --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3 Interlude Chisel Standard Library.html @@ -0,0 +1,434 @@ + + + + + + 2024.03.04-3.3 Interlude: Chisel Standard Library | Hello World --from OutisLi + + + + + + + + +

# 2024.03.04-3.3 Interlude: Chisel Standard Library

# Decoupled: A Standard Ready-Valid Interface

在 Chisel 中,DecoupledIO 是一种标准的准备就绪(ready-valid)接口,广泛用于不同模块间的数据传输,提供了一种带有流控制的通信机制。使用 DecoupledIO 可以有效地处理数据传输的同步问题,特别是在生产者(source)和消费者(sink)速率不匹配时,确保数据的正确传输与接收。

# 组件

DecoupledIO 接口由以下三个主要部分组成:

  1. valid(有效) - 这是一个输出信号(从数据源角度看),用于表明当前的数据是有效的,可以被读取。当数据源有数据准备好发送时,它会将 valid 信号置为高电平。
  2. ready(准备就绪) - 这是一个输入信号(从数据源角度看),用于表明目标模块(接收端)准备好接收数据。当接收端可以接收新的数据时,它会将 ready 信号置为高电平。
  3. bits(数据位) - 这个信号承载了要传输的实际数据。数据的宽度和类型可以是任意的,从简单的 UIntBool 到复杂的用户定义 Bundle

# 数据传输

DecoupledIO 接口中,数据传输在以下条件下发生:

  • 数据源设置 valid 为高电平,表示其有数据要发送。
  • 接收端设置 ready 为高电平,表示其准备好接收数据。

当且仅当同一时钟周期内 validready 同时为高电平时,数据才会被传输。这允许在接收端或发送端任一端控制数据流,实现背压(backpressure)机制:

  • 如果接收端未准备好接收(ready 为低),即使发送端有数据发送(valid 为高),数据也不会被传输。
  • 如果发送端没有数据要发送(valid 为低),即使接收端准备好了(ready 为高),也不会有数据传输。

# 使用场景

DecoupledIO 非常适用于生产者和消费者速率不一致的情况,如:

  • 在 FIFO 队列的实现中,确保数据不会在缓冲区满时被写入,或在缓冲区空时被读出。
  • 在处理器设计中,用于不同执行单元间的数据传输,确保在数据未准备好或处理单元未准备好时不发生数据传输。

# 代码示例

以下是如何在 Chisel 中创建一个 DecoupledIO 接口的简单示例:

val data = UInt(8.W) // 定义数据宽度
+val decoupledData = Decoupled(data) // 创建 DecoupledIO 接口
+

这里,decoupledData 将是一个拥有 validreadybits 字段的 DecoupledIO Bundle,可用于模块间的数据传输。

# Queue

test(new Module {
+    // Example circuit using a Queue
+    val io = IO(new Bundle {
+      val in = Flipped(Decoupled(UInt(8.W)))
+      val out = Decoupled(UInt(8.W))
+    })
+    val queue = Queue(io.in, 2)  // 2-element queue
+    io.out <> queue
+  }) { c =>
+    c.io.out.ready.poke(false.B)
+    c.io.in.valid.poke(true.B)  // Enqueue an element
+    c.io.in.bits.poke(42.U)
+    println(s"Starting:")
+    println(s"\tio.in: ready=${c.io.in.ready.peek().litValue}")
+    println(s"\tio.out: valid=${c.io.out.valid.peek().litValue}, bits=${c.io.out.bits.peek().litValue}")
+    c.clock.step(1)
+
+    c.io.in.valid.poke(true.B)  // Enqueue another element
+    c.io.in.bits.poke(43.U)
+    // What do you think io.out.valid and io.out.bits will be?
+    println(s"After first enqueue:")
+    println(s"\tio.in: ready=${c.io.in.ready.peek().litValue}")
+    println(s"\tio.out: valid=${c.io.out.valid.peek().litValue}, bits=${c.io.out.bits.peek().litValue}")
+    c.clock.step(1)
+
+    c.io.in.valid.poke(true.B)  // Read a element, attempt to enqueue
+    c.io.in.bits.poke(44.U)
+    c.io.out.ready.poke(true.B)
+    // What do you think io.in.ready will be, and will this enqueue succeed, and what will be read?
+    println(s"On first read:")
+    println(s"\tio.in: ready=${c.io.in.ready.peek().litValue}")
+    println(s"\tio.out: valid=${c.io.out.valid.peek().litValue}, bits=${c.io.out.bits.peek().litValue}")
+    c.clock.step(1)
+
+    c.io.in.valid.poke(false.B)  // Read elements out
+    c.io.out.ready.poke(true.B)
+    // What do you think will be read here?
+    println(s"On second read:")
+    println(s"\tio.in: ready=${c.io.in.ready.peek().litValue}")
+    println(s"\tio.out: valid=${c.io.out.valid.peek().litValue}, bits=${c.io.out.bits.peek().litValue}")
+    c.clock.step(1)
+
+    // Will a third read produce anything?
+    println(s"On third read:")
+    println(s"\tio.in: ready=${c.io.in.ready.peek().litValue}")
+    println(s"\tio.out: valid=${c.io.out.valid.peek().litValue}, bits=${c.io.out.bits.peek().litValue}")
+    c.clock.step(1)
+}
+
Starting:
+	io.in: ready=1
+	io.out: valid=0, bits=0
+After first enqueue:
+	io.in: ready=1
+	io.out: valid=1, bits=42
+On first read:
+	io.in: ready=0
+	io.out: valid=1, bits=42
+On second read:
+	io.in: ready=1
+	io.out: valid=1, bits=43
+On third read:
+	io.in: ready=1
+	io.out: valid=0, bits=42
+
  1. **val in = Flipped(Decoupled(UInt(8.W)))** 这里的**Flipped**表示是**Input**,因为**Decoupled**默认是**Output**

  2. **val queue = Queue(io.in, 2)** 连接 io.in 到队列的输入端: 这意味着 io.in 上发生的任何事情(比如信号变化)都会直接影响到队列。具体来说,当您在测试代码中设置 io.in.validio.in.bits,您实际上是在向队列的入队端提供数据。

  3. io.out <> queue 时,你实际上是在将模块的输出接口 io.out 和队列 queue 的出队接口双向连接。

    具体来说,对于 DecoupledIO 接口:

    • io.out.valid 会连接到 queue.io.deq.valid
    • io.out.bits 会连接到 queue.io.deq.bits
    • queue.io.deq.ready 会连接到 io.out.ready

    这种连接方式确保了数据可以从 queue 的出队端传输到模块的输出 io.out,同时允许 io.out 控制背压(通过 ready 信号)以及 queue 报告其状态(通过 valid 信号)。

  • 开始时:

    • 首先,输出端 io.out.ready 被设为 false,表示消费者还没准备好接收数据。
    • 输入端 io.in.valid 被设为 true,并通过 io.in.bits 提供了值 42,尝试将其入队。
    • 打印的输出显示,初始时,io.in.ready 应该为 true(队列未满,可以接收数据),而 io.out.valid 应该为 false(数据尚未出队到输出端)。
  • 首次入队后:

    • 程序尝试将另一个值 43 入队,并再次检查状态。
    • 由于队列不满,第二个值应该成功入队。io.in.ready 仍然为 true,表明还可以接收更多数据。
    • io.out.valid 被设置为 true 并且 io.out.bits 被更新为 42,因为队列内部确实有一个元素(42)准备好了并且尝试发送。即使 io.out.readyfalseio.out.validio.out.bits 仍然会反映队列出口处的数据状态。
    • 尽管 io.out.validtrue 并且 io.out.bits 显示了数据(42),但由于 io.out.readyfalse,这次数据传输并不会真正完成。换句话说,42 在逻辑上是"准备发送"的,但由于缺乏接收准备就绪的确认(即 io.out.readyfalse),它实际上并没有"被接收"。
  • 首次读取尝试:

    • 程序尝试同时进行读取(将 io.out.ready 设为 true)和入队(值 44)。
    • 由于此时输出准备好接收数据,第一个入队的值(42)应该会被传递到 io.outio.out.valid 应变为 trueio.out.bits 应显示 42。
    • io.in.ready0。这是因为队列(queue)此时已经满了。
  • 第二次读取:

    • 这时不再有新数据入队,但 io.out 准备好读取数据。
    • 应该能读取到之前入队的第二个值 43,io.out.valid 应为 trueio.out.bits 应显示 43。
  • 第三次读取尝试:

    • 在这一步,尽管 io.out 依然准备好接收数据,但队列应该已经空了。
    • 因此,io.out.valid 应该变回 false,表示没有更多数据可读。
    • 不过为什么是42?

    注:

    1. peek() 函数用于查看信号的当前值,而 .litValue 用于获取这个值作为一个 Scala 的字面量(literal)。因此,c.io.in.ready.peek().litValue 表示查看 c.io.in.ready 信号的当前值,并获取其字面量值。
    2. 必须要**c.clock.step(1)**以后才会有输出

# Arbiter

一个 Arbiter 是用于解决多个请求源争用单一资源的组件。它的基本功能是在多个输入信号中选择一个进行输出,基于某种特定的优先级或策略。在处理多个并发请求访问同一资源(例如,总线或共享内存)时,仲裁器确保每个时刻只有一个选定的请求被服务,同时遵循公平性或优先级规则,避免资源冲突或死锁。

  1. Arbiter:这是一个静态优先级仲裁器,它总是优先选择索引较低的生产者。如果有多个请求同时到达,Arbiter 会根据请求信号的索引顺序来决定优先权,索引较小的请求者会获得优先服务。这意味着如果较低索引的请求者持续有请求,它将持续获得资源,而更高索引的请求者则需要等待。

    示例代码如下:

    test(new Module {
    +    // Example circuit using a priority arbiter
    +    val io = IO(new Bundle {
    +      val in = Flipped(Vec(2, Decoupled(UInt(8.W))))
    +      val out = Decoupled(UInt(8.W))
    +    })
    +    // Arbiter doesn't have a convenience constructor, so it's built like any Module
    +    val arbiter = Module(new Arbiter(UInt(8.W), 2))  // 2 to 1 Priority Arbiter
    +    arbiter.io.in <> io.in
    +    io.out <> arbiter.io.out
    +  }) { c =>
    +    c.io.in(0).valid.poke(false.B)
    +    c.io.in(1).valid.poke(false.B)
    +    c.io.out.ready.poke(false.B)
    +    println(s"Start:")
    +    println(s"\tin(0).ready=${c.io.in(0).ready.peek().litValue}, in(1).ready=${c.io.in(1).ready.peek().litValue}")
    +    println(s"\tout.valid=${c.io.out.valid.peek().litValue}, out.bits=${c.io.out.bits.peek().litValue}")
    +    c.io.in(1).valid.poke(true.B)  // Valid input 1
    +    c.io.in(1).bits.poke(42.U)
    +    c.io.out.ready.poke(true.B)
    +    // What do you think the output will be?
    +    println(s"valid input 1:")
    +    println(s"\tin(0).ready=${c.io.in(0).ready.peek().litValue}, in(1).ready=${c.io.in(1).ready.peek().litValue}")
    +    println(s"\tout.valid=${c.io.out.valid.peek().litValue}, out.bits=${c.io.out.bits.peek().litValue}")
    +    c.io.in(0).valid.poke(true.B)  // Valid inputs 0 and 1
    +    c.io.in(0).bits.poke(43.U)
    +    // What do you think the output will be? Which inputs will be ready?
    +    println(s"valid inputs 0 and 1:")
    +    println(s"\tin(0).ready=${c.io.in(0).ready.peek().litValue}, in(1).ready=${c.io.in(1).ready.peek().litValue}")
    +    println(s"\tout.valid=${c.io.out.valid.peek().litValue}, out.bits=${c.io.out.bits.peek().litValue}")
    +    c.io.in(1).valid.poke(false.B)  // Valid input 0
    +    // What do you think the output will be?
    +    println(s"valid input 0:")
    +    println(s"\tin(0).ready=${c.io.in(0).ready.peek().litValue}, in(1).ready=${c.io.in(1).ready.peek().litValue}")
    +    println(s"\tout.valid=${c.io.out.valid.peek().litValue}, out.bits=${c.io.out.bits.peek().litValue}")
    +}
    +
    Start:
    +  in(0).ready=0, in(1).ready=0
    +  out.valid=0, out.bits=0
    +valid input 1:
    +  in(0).ready=1, in(1).ready=1
    +  out.valid=1, out.bits=42
    +valid inputs 0 and 1:
    +  in(0).ready=1, in(1).ready=0
    +  out.valid=1, out.bits=43
    +valid input 0:
    +  in(0).ready=1, in(1).ready=0
    +  out.valid=1, out.bits=43
    +
    1. 初始状态检查:

      • 首先,测试确认在没有任何有效输入 (io.in(0).validio.in(1).valid 都为 false) 时,输出 (io.out.valid) 也应为 false,表示没有数据通过仲裁器。
    2. 激活第二个输入:

      • 然后,测试激活 io.in(1)(即索引为 1 的输入),同时保持 io.out.readytrue,这模拟了接收端准备好接收数据的情况。预期 io.in(1) 的数据应该通过到 io.out

      • 两个输入的 ready 信号都是 1。这是因为 Arbiter 的行为是基于它可以传递数据的能力。让我们分解这个情况:

        当只有 io.in(1) 有效时

        • in(0).ready=1:这意味着 Arbiter 仲裁器准备好从 io.in(0) 接收数据,尽管此时 io.in(0) 没有数据(不是有效的)。ready 信号为 1 表示如果 io.in(0) 有数据,Arbiter 准备好接收它。
        • in(1).ready=1:同时,Arbiter 也表示准备好接收 io.in(1) 的数据,因为它是有效的。在这种情况下,由于 io.out.ready 被设置为 trueArbiter 知道输出端已经准备好接收数据,所以它将 io.in(1)ready 也置为 1

      这里的关键是 ready 信号表示的是接收能力而非当前的数据有效性。即使 io.in(0) 当前没有标记为有效,Arbiter 也表明它准备好从该输入接收数据,这就是为什么在 io.in(1) 有效时,io.in(0).ready 也会是 1

    3. 同时激活两个输入:

      • 接下来,测试同时激活两个输入,即 io.in(0)io.in(1) 都设置为有效。由于 Arbiter 的静态优先级策略,预期 io.in(0) 的数据(即优先级更高的输入)会被传递到 io.out
      • 当两个输入 io.in(0)io.in(1) 都被设置为有效时,Arbiter 会根据其内部逻辑来选择一个输入。对于普通的 Arbiter,它将优先选择索引较低的输入,即 io.in(0)
      • 由于 io.in(0) 被选中,io.in(1)ready 信号将会被置为 false,而 io.in(0).ready 会是 true,表示 Arbiter 准备接受 io.in(0) 的数据。
      • 在此情况下,即使您设置了 io.in(1).bits,这个数据也不会被 Arbiter 选择,因为 io.in(0) 有更高的优先级。
    4. 只激活第一个输入:

      • 最后,测试只激活 io.in(0)。即使之前 io.in(1) 被激活过,在这一步中只有 io.in(0) 有效,所以只有它的数据应该被传递到 io.out
  2. RRArbiter:这是一个循环(round-robin)仲裁器,它按照循环的顺序为请求者提供服务,确保了长期的公平性。当一个请求被服务后,RRArbiter 会记住最后被服务的请求,并在下一个服务周期中优先考虑下一个请求者。这样可以确保即使在高负载下,所有请求者也能获得均等的服务机会。

    示例代码如下:

    val rrArbiter = Module(new RRArbiter(UInt(8.W), 2))
    +rrArbiter.io.in(0) <> producer0
    +rrArbiter.io.in(1) <> producer1
    +consumer <> rrArbiter.io.out
    +

注:Ariter 是组合电路,不需要step(1)

# Misc Function Blocks

# Bitwise Utilities

# PopCount

PopCount returns the number of high (1) bits in the input as a **UInt**.

test(new Module {
+    // Example circuit using PopCount
+    val io = IO(new Bundle {
+      val in = Input(UInt(8.W))
+      val out = Output(UInt(8.W))
+    })
+    io.out := PopCount(io.in)
+  }) { c =>
+    // Integer.parseInt is used create an Integer from a binary specification
+    c.io.in.poke(**Integer.parseInt**("00000000", 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+
+    c.io.in.poke(Integer.parseInt("00001111", 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+
+    c.io.in.poke(Integer.parseInt("11001010", 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+
+    c.io.in.poke(Integer.parseInt("11111111", 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+
+}
+
in=0b0, out=0
+in=0b1111, out=4
+in=0b11001010, out=4
+in=0b11111111, out=8
+

# Reverse

Reverse returns the bit-reversed input

test(new Module {
+    // Example circuit using Reverse
+    val io = IO(new Bundle {
+      val in = Input(UInt(8.W))
+      val out = Output(UInt(8.W))
+    })
+    io.out := Reverse(io.in)
+  }) { c =>
+    // Integer.parseInt is used create an Integer from a binary specification
+    c.io.in.poke(Integer.parseInt("01010101", 2).U)
+    println(s"in=0b${**c.io.in.peek().litValue.toInt.toBinaryString**}, out=0b${c.io.out.peek().litValue.toInt.toBinaryString}")
+
+    c.io.in.poke(Integer.parseInt("00001111", 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=0b${c.io.out.peek().litValue.toInt.toBinaryString}")
+
+    c.io.in.poke(Integer.parseInt("11110000", 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=0b${c.io.out.peek().litValue.toInt.toBinaryString}")
+
+    c.io.in.poke(Integer.parseInt("11001010", 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=0b${c.io.out.peek().litValue.toInt.toBinaryString}")
+}
+
in=0b1010101, out=0b10101010
+in=0b1111, out=0b11110000
+in=0b11110000, out=0b1111
+in=0b11001010, out=0b1010011
+

# OneHot encoding utilities

# UIntToOH

UInt to OneHot

test(new Module {
+    // Example circuit using UIntToOH
+    val io = IO(new Bundle {
+      val in = Input(UInt(4.W))
+      val out = Output(UInt(16.W))
+    })
+    io.out := UIntToOH(io.in)
+  }) { c =>
+    c.io.in.poke(0.U)
+    println(s"in=${c.io.in.peek().litValue}, out=0b${c.io.out.peek().litValue.toInt.toBinaryString}")
+
+    c.io.in.poke(1.U)
+    println(s"in=${c.io.in.peek().litValue}, out=0b${c.io.out.peek().litValue.toInt.toBinaryString}")
+
+    c.io.in.poke(8.U)
+    println(s"in=${c.io.in.peek().litValue}, out=0b${c.io.out.peek().litValue.toInt.toBinaryString}")
+
+    c.io.in.poke(15.U)
+    println(s"in=${c.io.in.peek().litValue}, out=0b${c.io.out.peek().litValue.toInt.toBinaryString}")
+}
+
+in=0, out=0b1
+in=1, out=0b10
+in=8, out=0b100000000
+in=15, out=0b1000000000000000
+

# OHToUInt

OneHot to UInt

test(new Module {
+    // Example circuit using OHToUInt
+    val io = IO(new Bundle {
+      val in = Input(UInt(16.W))
+      val out = Output(UInt(4.W))
+    })
+    io.out := OHToUInt(io.in)
+}) { c =>
+    c.io.in.poke(Integer.parseInt("0000 0000 0000 0001".replace(" ", ""), 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+
+    c.io.in.poke(Integer.parseInt("0000 0000 1000 0000".replace(" ", ""), 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+
+    c.io.in.poke(Integer.parseInt("1000 0000 0000 0001".replace(" ", ""), 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+
+    // Some invalid inputs:
+    // None high
+    c.io.in.poke(Integer.parseInt("0000 0000 0000 0000".replace(" ", ""), 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+
+    // Multiple high
+    c.io.in.poke(Integer.parseInt("0001 0100 0010 0000".replace(" ", ""), 2).U)
+    println(s"in=0b${c.io.in.peek().litValue.toInt.toBinaryString}, out=${c.io.out.peek().litValue}")
+}
+
+in=0b1, out=0
+in=0b10000000, out=7
+in=0b1000000000000001, out=15
+in=0b0, out=0
+in=0b1010000100000, out=15
+

# MUX

# **PriorityMux**

Outputs the value associated with the lowest-index asserted select signal.

test(new Module {
+    // Example circuit using PriorityMux
+    val io = IO(new Bundle {
+      val in_sels = Input(Vec(2, Bool()))
+      val in_bits = Input(Vec(2, UInt(8.W)))
+      val out = Output(UInt(8.W))
+    })
+    io.out := PriorityMux(io.in_sels, io.in_bits)
+  }) { c =>
+    c.io.in_bits(0).poke(10.U)
+    c.io.in_bits(1).poke(20.U)
+
+    // Select higher index only
+    c.io.in_sels(0).poke(false.B)
+    c.io.in_sels(1).poke(true.B)
+    println(s"in_sels=${c.io.in_sels(0).peek().litValue}, out=${c.io.out.peek().litValue}")
+
+    // Select both - arbitration needed
+    c.io.in_sels(0).poke(true.B)
+    c.io.in_sels(1).poke(true.B)
+    println(s"in_sels=${c.io.in_sels(0).peek().litValue}, out=${c.io.out.peek().litValue}")
+
+    // Select lower index only
+    c.io.in_sels(0).poke(true.B)
+    c.io.in_sels(1).poke(false.B)
+    println(s"in_sels=${c.io.in_sels(0).peek().litValue}, out=${c.io.out.peek().litValue}")
+}
+
+in_sels=0, out=20
+in_sels=1, out=10
+in_sels=1, out=10
+

PriorityMux 会根据 in_sels 中的布尔值,从左到右(即从索引 0 开始)检查哪个输入是选中的,并输出第一个选中输入对应的 in_bits 值。因此,同时使 in_sels(0)in_sels(1)true 时,由于 in_sels(0) 的优先级更高,io.out 应该输出 in_bits(0) 的值,即 10.U

# OneHot Mux: **Mux1H**

An **Mux1H** provides an efficient implementation when it is guaranteed that exactly one of the select signals will be high. Behavior is undefined if the assumption is not true.

test(new Module {
+    // Example circuit using Mux1H
+    val io = IO(new Bundle {
+      val in_sels = Input(Vec(2, Bool()))
+      val in_bits = Input(Vec(2, UInt(8.W)))
+      val out = Output(UInt(8.W))
+    })
+    io.out := Mux1H(io.in_sels, io.in_bits)
+  }) { c =>
+    c.io.in_bits(0).poke(10.U)
+    c.io.in_bits(1).poke(20.U)
+
+    // Select index 1
+    c.io.in_sels(0).poke(false.B)
+    c.io.in_sels(1).poke(true.B)
+    println(s"in_sels=${c.io.in_sels(0).peek().litValue}, out=${c.io.out.peek().litValue}")
+
+    // Select index 0
+    c.io.in_sels(0).poke(true.B)
+    c.io.in_sels(1).poke(false.B)
+    println(s"in_sels=${c.io.in_sels(0).peek().litValue}, out=${c.io.out.peek().litValue}")
+
+    // Select none (invalid)
+    c.io.in_sels(0).poke(false.B)
+    c.io.in_sels(1).poke(false.B)
+    println(s"in_sels=${c.io.in_sels(0).peek().litValue}, out=${c.io.out.peek().litValue}")
+
+    // Select both (invalid)
+    c.io.in_sels(0).poke(true.B)
+    c.io.in_sels(1).poke(true.B)
+    println(s"in_sels=${c.io.in_sels(0).peek().litValue}, out=${c.io.out.peek().litValue}")
+}
+
+in_sels=0, out=20
+in_sels=1, out=10
+in_sels=0, out=0
+in_sels=1, out=30
+

# **Counter**

A counter that can be incremented once every cycle, up to some specified limit, at which point it overflows. Note that it is not a Module, and its value is accessible.

test(new Module {
+  // Example circuit with two counters
+  val io = IO(new Bundle {
+    val count = Input(Bool())
+    val out = Output(UInt(2.W))
+    val totalCycles = Output(UInt(32.W))  // Assuming 32-bit is enough for cycle count
+  })
+
+  // Counter for controlled increments
+  val controlledCounter = Counter(3)  // 3-count Counter (outputs range [0...2])
+  when(io.count) {
+    controlledCounter.inc()
+  }
+  io.out := controlledCounter.value
+
+  // Counter for total cycles, counting up to (2^32)-1
+  val totalCycleCounter = Counter(math.pow(2, 32).toInt)
+  totalCycleCounter.inc()  // Increment every cycle
+  io.totalCycles := totalCycleCounter.value
+}) { c =>
+  c.io.count.poke(true.B)
+  println(s"start: controlled counter value=${c.io.out.peek().litValue}, total cycles=${c.io.totalCycles.peek().litValue}")
+
+  c.clock.step(1)
+  println(s"step 1: controlled counter value=${c.io.out.peek().litValue}, total cycles=${c.io.totalCycles.peek().litValue}")
+
+  c.clock.step(1)
+  println(s"step 2: controlled counter value=${c.io.out.peek().litValue}, total cycles=${c.io.totalCycles.peek().litValue}")
+
+  c.io.count.poke(false.B)
+  c.clock.step(1)
+  println(s"step without increment: controlled counter value=${c.io.out.peek().litValue}, total cycles=${c.io.totalCycles.peek().litValue}")
+
+  c.io.count.poke(true.B)
+  c.clock.step(1)
+  println(s"step again: controlled counter value=${c.io.out.peek().litValue}, total cycles=${c.io.totalCycles.peek().litValue}")
+}
+
+start: controlled counter value=0, total cycles=0
+step 1: controlled counter value=1, total cycles=1
+step 2: controlled counter value=2, total cycles=2
+step without increment: controlled counter value=2, total cycles=3
+step again: controlled counter value=0, total cycles=4
+

在 Chisel 中创建一个计数器时,如果您传递的参数是 n,那么计数器能够表示的计数范围是从0到 n-1。所以,当您使用 Counter(n) 时,计数器的实际最大计数值是 n-1。

+ + + diff --git a/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4 Higher-Order Functions.html b/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4 Higher-Order Functions.html new file mode 100644 index 0000000..6862efc --- /dev/null +++ b/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4 Higher-Order Functions.html @@ -0,0 +1,161 @@ + + + + + + 2024.03.05-3.4 Higher-Order Functions | Hello World --from OutisLi + + + + + + + + +

# 2024.03.05-3.4 Higher-Order Functions

# A Tale of Two FIRs

From the last module, we had the convolution part of the FIR filter written like this:

val muls = Wire(Vec(length, UInt(8.W)))
+for(i <- 0 until length) {
+  if(i == 0) muls(i) := io.in * io.consts(i)
+  else       muls(i) := regs(i - 1) * io.consts(i)
+}
+
+val scan = Wire(Vec(length, UInt(8.W)))
+for(i <- 0 until length) {
+  if(i == 0) scan(i) := muls(i)
+  else scan(i) := muls(i) + scan(i - 1)
+}
+
+io.out := scan(length - 1)
+

As a recap, the idea is to multiply each element of **io.in** with the corresponding element of **io.consts**, and store it in **muls**. Then, the elements in **muls** are accumulated into **scan**, with **scan(0) = muls(0)**, **scan(1) = scan(0) + muls(1) = muls(0) + muls(1)**, and in general **scan(n) = scan(n-1) + muls(n) = muls(0) + ... + muls(n-1) + muls(n)**. The last element in **scan** (equal to the sum of all **muls**) is assigned to **io.out**.

However, it's very verbose for what might be considered quite a simple operation. In fact, all that could be written in one line:

io.out := (taps zip io.consts).map { case (a, b) => a * b }.reduce(_ + _)
+
  • 假设 taps 是所有样本的列表,其中 taps(0) = io.intaps(1) = regs(0) 等等。
  • (taps zip io.consts) 将两个列表 tapsio.consts 合并成一个列表,其中每个元素是一个元组,这个元组包含了在相应位置的输入元素。具体来说,它的值将是 [(taps(0), io.consts(0)), (taps(1), io.consts(1)), ..., (taps(n), io.consts(n))]。记住,在 Scala 中点号是可选的,所以这等同于 (taps.zip(io.consts))
  • .map { case (a, b) => a * b } 对列表中的元素应用一个匿名函数(接收两个元素的元组并返回它们的乘积),并返回结果。在这个情况下,结果等价于在冗长示例中的 muls,其值为 [taps(0) * io.consts(0), taps(1) * io.consts(1), ..., taps(n) * io.consts(n)]
  • 最后,.reduce(_ + _) 同样应用一个函数(元素的加法)到列表的元素上。然而,它接收两个参数:第一个是当前的累加值,第二个是列表元素(在第一次迭代中,它只是将前两个元素相加)。这些由括号中的两个下划线表示。那么结果,假设是从左到右的遍历,将会是 (((muls(0) + muls(1)) + muls(2)) + ...) + muls(n),更深层次括号内的结果先被计算。这就是卷积的输出结果。

# Functions as Arguments

Formally, functions like **map** and **reduce** are called higher-order functions : they are functions that take functions as arguments. As it turns out (and hopefully, as you can see from the above example), these are very powerful constructs that encapsulate a general computational pattern, allowing you to concentrate on the application logic instead of flow control, and resulting in very concise code.

  • 对于每个参数只引用一次的函数,您可以使用下划线(_)来引用每个参数。在上面的例子中,reduce 函数接受两个参数,可以被指定为 _ + _。虽然这很方便,但它受制于一组额外的复杂规则,所以如果不起作用,您可以尝试:
  • 明确指定输入参数列表。reduce 可以被明确写成 (a, b) => a + b,通用形式是把参数列表放在括号里,后面跟着 =>,然后是引用这些参数的函数体。
  • 当需要解包元组时,使用 case 语句,如 case (a, b) => a * b。这接收一个参数,一个两个元素的元组,并将其解包到变量 ab 中,然后可以在函数体中使用它们。

# Practice in Scala

Scala 集合 API 中的主要类,如**List**。这些高阶函数是这些 API 的一部分。实际上,上面的示例使用了**List**上的**map****reduce** API。在这一节中,我们将通过示例和练习熟悉这些方法。在这些示例中,我们将对 Scala 数字(**Int**)操作,以简化和明确表示,但因为 Chisel 运算符的行为类似,所以这些概念应该是通用的。

# Example: map

List[A].map 有类型签名 map[B](f: (A) ⇒ B): List[B]。现在,将类型 A 和 B 视为 IntUInt,意味着它们可以是软件或硬件类型。它接受一个类型为 (f: (A) ⇒ B) 的参数,或者一个接受类型为 A(与输入列表的元素类型相同)的一个参数并返回类型为 B 的值的函数。map 然后返回一个新的类型为 B(参数函数的返回类型)的列表。

println(List(1, 2, 3, 4).map(x => x + 1))  // explicit argument list in function
+println(List(1, 2, 3, 4).map(_ + 1))  // equivalent to the above, but implicit arguments
+println(List(1, 2, 3, 4).map(_.toString + "a"))  // the output element type can be different from the input element type
+
+println(List((1, 5), (2, 6), (3, 7), (4, 8)).map { case (x, y) => x*y })  // this unpacks a tuple, note use of curly braces
+
+// Related: Scala has a syntax for constructing lists of sequential numbers
+println(0 to 10)  // to is inclusive , the end point is part of the result
+println(0 until 10)  // until is exclusive at the end, the end point is not part of the result
+
+// Those largely behave like lists, and can be useful for generating indices:
+val myList = List("a", "b", "c", "d")
+println((0 until 4).map(myList(_)))
+
+// output:
+List(2, 3, 4, 5)
+List(2, 3, 4, 5)
+List(1a, 2a, 3a, 4a)
+List(5, 12, 21, 32)
+Range 0 to 10
+Range 0 until 10
+Vector(a, b, c, d)
+

# Example: **zipWithIndex**

**List.zipWithIndex** has type signature **zipWithIndex: List[(A, Int)]**. It takes no arguments, but returns a list where each element is a tuple of the original elements, and the index (with the first one being zero). So **List("a", "b", "c", "d").zipWithIndex** would return **List(("a", 0), ("b", 1), ("c", 2), ("d", 3))**

println(List(1, 2, 3, 4).zipWithIndex)  // note indices start at zero
+println(List("a", "b", "c", "d").zipWithIndex)
+println(List(("a", "b"), ("c", "d"), ("e", "f"), ("g", "h")).zipWithIndex)  // tuples nest
+
+// output:
+List((1,0), (2,1), (3,2), (4,3))
+List((a,0), (b,1), (c,2), (d,3))
+List(((a,b),0), ((c,d),1), ((e,f),2), ((g,h),3))
+

# Example: **reduce**

List[A].map has type signature similar to reduce(op: (A, A) ⇒ A): A. (it's actually more lenient, A only has to be a supertype of the List type, but we're not going to deal with that syntax here)

println(List(1, 2, 3, 4).reduce((a, b) => a + b))  // returns the sum of all the elements
+println(List(1, 2, 3, 4).reduce(_ * _))  // returns the product of all the elements
+println(List(1, 2, 3, 4).map(_ + 1).reduce(_ + _))  // you can chain reduce onto the result of a map
+println(List(1, 2, 3, 4).map(_*2).reduce(_*_))  // returns the product of the double of the elements of the input list.
+
+// output:
+10
+24
+14
+384
+
+// Important note: reduce will fail with an empty list
+println(List[Int]().reduce(_ * _))
+

# Example: **fold**

**List[A].fold** is very similar to reduce, except that you can specify the initial accumulation value. It has type signature similar to **fold(z: A)(op: (A, A) ⇒ A): A**. (like **reduce**, the type of **A** is also more lenient). Notably, it takes two argument lists, the first (**z**) is the initial value, and the second is the accumulation function. Unlike **reduce**, it will not fail with an empty list, instead returning the initial value directly.

println(List(1, 2, 3, 4).fold(0)(_ + _))  // equivalent to the sum using reduce
+println(List(1, 2, 3, 4).fold(1)(_ + _))  // like above, but accumulation starts at 1
+println(List().fold(1)(_ + _))  // unlike reduce, does not fail on an empty input
+println(List(1, 2, 3, 4).fold(2)(_*_))  // returns the double the product of the elements of the input list
+
+// output:
+10
+11
+1
+48
+
+ + + diff --git "a/Chip/Chip/\344\270\200\347\224\237\344\270\200\350\212\257\350\256\241\345\210\222.html" "b/Chip/Chip/\344\270\200\347\224\237\344\270\200\350\212\257\350\256\241\345\210\222.html" new file mode 100644 index 0000000..547aaf9 --- /dev/null +++ "b/Chip/Chip/\344\270\200\347\224\237\344\270\200\350\212\257\350\256\241\345\210\222.html" @@ -0,0 +1,94 @@ + + + + + + 一生一芯计划 | Hello World --from OutisLi + + + + + + + + +
+ + + diff --git "a/Chip/Chip/\344\270\200\347\224\237\344\270\200\350\212\257\350\256\241\345\210\222/\351\242\204\345\255\246\344\271\240\351\230\266\346\256\265.html" "b/Chip/Chip/\344\270\200\347\224\237\344\270\200\350\212\257\350\256\241\345\210\222/\351\242\204\345\255\246\344\271\240\351\230\266\346\256\265.html" new file mode 100644 index 0000000..898643a --- /dev/null +++ "b/Chip/Chip/\344\270\200\347\224\237\344\270\200\350\212\257\350\256\241\345\210\222/\351\242\204\345\255\246\344\271\240\351\230\266\346\256\265.html" @@ -0,0 +1,90 @@ + + + + + + 预学习阶段 | Hello World --from OutisLi + + + + + + + + +
+ + + diff --git a/Chip/index.html b/Chip/index.html new file mode 100644 index 0000000..a97665f --- /dev/null +++ b/Chip/index.html @@ -0,0 +1,90 @@ + + + + + + SoC Design | Hello World --from OutisLi + + + + + + + + +
+ + + diff --git "a/LeetCode/LeetCode/2024 02 22-752 \346\211\223\345\274\200\350\275\254\347\233\230\351\224\201\357\274\210BFS\357\274\211 abab666d7cbf48d2b1656f11166d33f2.html" "b/LeetCode/LeetCode/2024 02 22-752 \346\211\223\345\274\200\350\275\254\347\233\230\351\224\201\357\274\210BFS\357\274\211 abab666d7cbf48d2b1656f11166d33f2.html" new file mode 100644 index 0000000..64d7ded --- /dev/null +++ "b/LeetCode/LeetCode/2024 02 22-752 \346\211\223\345\274\200\350\275\254\347\233\230\351\224\201\357\274\210BFS\357\274\211 abab666d7cbf48d2b1656f11166d33f2.html" @@ -0,0 +1,270 @@ + + + + + + 2024.02.22-752.打开转盘锁(BFS) | Hello World --from OutisLi + + + + + + + + +

# 2024.02.22-752.打开转盘锁(BFS)

/*
+ * @lc app=leetcode.cn id=752 lang=cpp
+ *
+ * [752] 打开转盘锁
+ *
+ * https://leetcode.cn/problems/open-the-lock/description/
+ *
+ * algorithms
+ * Medium (52.77%)
+ * Likes:    653
+ * Dislikes: 0
+ * Total Accepted:    128.3K
+ * Total Submissions: 243.1K
+ * Testcase Example:  '["0201","0101","0102","1212","2002"]\n"0202"'
+ *
+ * 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8',
+ * '9' 。每个拨轮可以自由旋转:例如把 '9' 变为 '0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。
+ *
+ * 锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。
+ *
+ * 列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。
+ *
+ * 字符串 target 代表可以解锁的数字,你需要给出解锁需要的最小旋转次数,如果无论如何不能解锁,返回 -1 。
+ *
+ *
+ *
+ * 示例 1:
+ *
+ *
+ * 输入:deadends = ["0201","0101","0102","1212","2002"], target = "0202"
+ * 输出:6
+ * 解释:
+ * 可能的移动序列为 "0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202"。
+ * 注意 "0000" -> "0001" -> "0002" -> "0102" -> "0202" 这样的序列是不能解锁的,
+ * 因为当拨动到 "0102" 时这个锁就会被锁定。
+ *
+ *
+ * 示例 2:
+ *
+ *
+ * 输入: deadends = ["8888"], target = "0009"
+ * 输出:1
+ * 解释:把最后一位反向旋转一次即可 "0000" -> "0009"。
+ *
+ *
+ * 示例 3:
+ *
+ *
+ * 输入: deadends = ["8887","8889","8878","8898","8788","8988","7888","9888"],
+ * target = "8888"
+ * 输出:-1
+ * 解释:无法旋转到目标数字且不被锁定。
+ *
+ *
+ *
+ *
+ * 提示:
+ *
+ *
+ * 1 <= deadends.length <= 500
+ * deadends[i].length == 4
+ * target.length == 4
+ * target 不在 deadends 之中
+ * target 和 deadends[i] 仅由若干位数字组成
+ *
+ *
+ */
+
class Solution
+{
+public:
+    int openLock(vector<string> &deadends, string target)
+    {
+        int num = 0;
+        queue<string> q;
+        set<string> visited(deadends.begin(), deadends.end());
+        if (visited.find("0000") != visited.end())
+            return -1;
+        q.push("0000");
+        visited.insert("0000");
+        while (!q.empty())
+        {
+            int ssize = q.size();
+            for (int i = 0; i < ssize; i++)
+            {
+                string str = q.front();
+                q.pop();
+                // if (visited.find(str) != visited.end())
+                //     continue;
+                if (str == target)
+                    return num;
+                for (int j = 0; j < 4; j++)
+                {
+                    string up = turnUp(str, j);
+                    string down = turnDown(str, j);
+                    if (visited.find(up) == visited.end())
+                    {
+                        q.push(up);
+                        visited.insert(up);
+                    }
+                    if (visited.find(down) == visited.end())
+                    {
+                        q.push(down);
+                        visited.insert(down);
+                    }
+                }
+            }
+            num++;
+        }
+        return -1;
+    }
+    string turnUp(string str, int index)
+    {
+        char old = str[index];
+        char nnew = (old != '9') ? (old + 1) : '0';
+        string newString = str;
+        newString[index] = nnew;
+        return newString;
+    }
+    string turnDown(string str, int index)
+    {
+        char old = str[index];
+        char nnew = (old != '0') ? (old - 1) : '9';
+        string newString = str;
+        newString[index] = nnew;
+        return newString;
+    }
+};
+

# Hint:

  1. 修改string的某一个字符直接使用[]索引修改即可
  2. 字符’0‘到’1‘直接加一
  3. **deadends**中的字符串以及已经访问过的字符串应该在尝试加入队列之前就被过滤掉,以防止它们被进一步处理。而不是从队列中拿出来的时候检查是不是在visited
  4. 起始的“0000”也要检查
  5. 使用双向BFS可以加快速度,但是queue修改为set,如下:
int openLock(vector<string> &deadends, string target)
+    {
+        unordered_set<string> dead(deadends.begin(), deadends.end());
+        unordered_set<string> begin, end, *set1, *set2;
+
+        if (dead.find("0000") != dead.end() || dead.find(target) != dead.end())
+            return -1;
+
+        int step = 0;
+        begin.insert("0000");
+        end.insert(target);
+
+        while (!begin.empty() && !end.empty())
+        {
+            // 优化搜索,总是从较小的集合开始扩展
+            if (begin.size() > end.size())
+            {
+                set1 = &end;
+                set2 = &begin;
+            }
+            else
+            {
+                set1 = &begin;
+                set2 = &end;
+            }
+            unordered_set<string> temp;
+            for (auto it = set1->begin(); it != set1->end(); ++it)
+            {
+                string str = *it;
+                if (set2->find(str) != set2->end())
+                    return step;
+                if (dead.find(str) != dead.end())
+                    continue;
+                dead.insert(str); // 标记为已访问
+                for (int j = 0; j < 4; ++j)
+                {
+                    string up = turnUp(str, j);
+                    string down = turnDown(str, j);
+                    if (dead.find(up) == dead.end())
+                        temp.insert(up);
+                    if (dead.find(down) == dead.end())
+                        temp.insert(down);
+                }
+            }
+            step++;
+            *set1 = temp; // 更新当前正在扩展的集合
+        }
+        return -1; // 如果没有找到有效路径
+    }
+
  1. 创建一个临时集合(temp)的原因是在每一轮搜索中,我们需要更新当前层次的节点。由于在遍历当前层次的节点时不能直接修改正在遍历的集合(这会影响迭代器的有效性),因此我们先将新发现的节点存储在一个临时集合中。在当前层次的所有节点都遍历完毕后,我们再用这个临时集合来更新主集合,为下一轮搜索做准备。
+ + + diff --git "a/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab.html" "b/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab.html" new file mode 100644 index 0000000..dd32ed9 --- /dev/null +++ "b/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab.html" @@ -0,0 +1,94 @@ + + + + + + 2024.03.05-二叉树 | Hello World --from OutisLi + + + + + + + + +
+ + + diff --git "a/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-104 \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\346\267\261\345\272\246 c6649929175d46038db921b552f2a235.html" "b/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-104 \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\346\267\261\345\272\246 c6649929175d46038db921b552f2a235.html" new file mode 100644 index 0000000..a744ddb --- /dev/null +++ "b/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-104 \344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\345\244\247\346\267\261\345\272\246 c6649929175d46038db921b552f2a235.html" @@ -0,0 +1,189 @@ + + + + + + 2024.03.05-104.二叉树的最大深度 | Hello World --from OutisLi + + + + + + + + +

# 2024.03.05-104.二叉树的最大深度

/*
+ * @lc app=leetcode.cn id=104 lang=cpp
+ *
+ * [104] 二叉树的最大深度
+ *
+ * https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/
+ *
+ * algorithms
+ * Easy (77.10%)
+ * Likes:    1786
+ * Dislikes: 0
+ * Total Accepted:    1.2M
+ * Total Submissions: 1.6M
+ * Testcase Example:  '[3,9,20,null,null,15,7]'
+ *
+ * 给定一个二叉树 root ,返回其最大深度。
+ *
+ * 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
+ *
+ *
+ *
+ * 示例 1:
+ *
+ *
+ *
+ *
+ *
+ *
+ * 输入:root = [3,9,20,null,null,15,7]
+ * 输出:3
+ *
+ *
+ * 示例 2:
+ *
+ *
+ * 输入:root = [1,null,2]
+ * 输出:2
+ *
+ *
+ *
+ *
+ * 提示:
+ *
+ *
+ * 树中节点的数量在 [0, 10^4] 区间内。
+ * -100 <= Node.val <= 100
+ *
+ *
+ */
+
+// @lc code=start
+/**
+ * Definition for a binary tree node.
+ * struct TreeNode {
+ *     int val;
+ *     TreeNode *left;
+ *     TreeNode *right;
+ *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
+ *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
+ *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
+ * };
+ */
+// @lc code=end
+
  1. 递归:分解成左右子树
class Solution
+{
+public:
+    int res;
+    int maxDepth(TreeNode *root)
+    {
+        if (root == nullptr)
+            return 0;
+        int tempLeft = maxDepth(root->left);
+        int tempRight = maxDepth(root->right);
+        return res = max(tempLeft, tempRight) + 1;
+    }
+};
+
  1. 遍历:进入节点(前序)加深度,离开节点(后序)减深度,叶子结点处更新结果
class Solution {
+public:
+    int res, temp;
+    int maxDepth(TreeNode* root) {
+        traverse(root);
+        return res;
+    }
+private:
+    void traverse(TreeNode* node){
+        if(node == nullptr){
+            res = max(res,temp);
+            return;
+        }
+        temp++;
+        traverse(node->left);
+        traverse(node->right);
+        temp--;
+    }
+};
+
+ + + diff --git "a/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-543 \344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204 9db6d046b0954b45b96ca749922a2ece.html" "b/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-543 \344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204 9db6d046b0954b45b96ca749922a2ece.html" new file mode 100644 index 0000000..f02643b --- /dev/null +++ "b/LeetCode/LeetCode/2024 03 05-\344\272\214\345\217\211\346\240\221 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-543 \344\272\214\345\217\211\346\240\221\347\232\204\347\233\264\345\276\204 9db6d046b0954b45b96ca749922a2ece.html" @@ -0,0 +1,175 @@ + + + + + + 2024.03.05-543.二叉树的直径 | Hello World --from OutisLi + + + + + + + + +

# 2024.03.05-543.二叉树的直径

/*
+ * @lc app=leetcode.cn id=543 lang=cpp
+ *
+ * [543] 二叉树的直径
+ *
+ * https://leetcode.cn/problems/diameter-of-binary-tree/description/
+ *
+ * algorithms
+ * Easy (59.72%)
+ * Likes:    1495
+ * Dislikes: 0
+ * Total Accepted:    387.9K
+ * Total Submissions: 649.5K
+ * Testcase Example:  '[1,2,3,4,5]'
+ *
+ * 给你一棵二叉树的根节点,返回该树的 直径 。
+ * 
+ * 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
+ * 
+ * 两节点之间路径的 长度 由它们之间边数表示。
+ * 
+ * 
+ * 
+ * 示例 1:
+ * 
+ * 
+ * 输入:root = [1,2,3,4,5]
+ * 输出:3
+ * 解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
+ * 
+ * 
+ * 示例 2:
+ * 
+ * 
+ * 输入:root = [1,2]
+ * 输出:1
+ * 
+ * 
+ * 
+ * 
+ * 提示:
+ * 
+ * 
+ * 树中节点数目在范围 [1, 10^4] 内
+ * -100 <= Node.val <= 100
+ * 
+ * 
+ */
+
+// @lc code=start
+/**
+ * Definition for a binary tree node.
+ * struct TreeNode {
+ *     int val;
+ *     TreeNode *left;
+ *     TreeNode *right;
+ *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
+ *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
+ *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
+ * };
+ */
+class Solution {
+public:
+    int res = 0;
+    int diameterOfBinaryTree(TreeNode* root) {
+        traverse(root,res);
+        return res;
+    }
+    // cal the maxDepth
+    int traverse(TreeNode* node,int& res){
+        if(node == nullptr){
+            return 0;
+        }
+        int leftMax = traverse(node->left,res);
+        int rightMax = traverse(node->right,res);
+        int nodeMax = max(leftMax,rightMax)+1;
+        res = max(res,leftMax+rightMax);
+        return nodeMax;
+    }
+};
+// @lc code=end
+
+ + + diff --git a/LeetCode/index.html b/LeetCode/index.html new file mode 100644 index 0000000..02ccaf6 --- /dev/null +++ b/LeetCode/index.html @@ -0,0 +1,90 @@ + + + + + + LeetCode | Hello World --from OutisLi + + + + + + + + +
+ + + diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..748cb53 --- /dev/null +++ b/about/index.html @@ -0,0 +1,90 @@ + + + + + + Helloworld | Hello World --from OutisLi + + + + + + + + +
+ + + diff --git a/assets/css/0.styles.9501ef99.css b/assets/css/0.styles.9501ef99.css new file mode 100644 index 0000000..db4460f --- /dev/null +++ b/assets/css/0.styles.9501ef99.css @@ -0,0 +1 @@ +code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#3eaf7c}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;-webkit-user-select:none;user-select:none;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#nprogress{pointer-events:none}#nprogress .bar{background:#3eaf7c;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #3eaf7c,0 0 5px #3eaf7c;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#3eaf7c transparent transparent #3eaf7c;border-style:solid;border-width:2px;border-radius:50%;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}mjx-math{display:inline-block;text-align:left;line-height:0;text-indent:0;font-style:normal;font-weight:400;font-size:100%;font-size-adjust:none;letter-spacing:normal;word-wrap:normal;word-spacing:normal;white-space:nowrap;direction:ltr;padding:1px 0}mjx-container[jax=CHTML][display=true]{display:block;text-align:center;margin:1em 0}mjx-container[jax=CHTML][display=true] mjx-math{padding:0}mjx-container[jax=CHTML][justify=left]{text-align:left}mjx-container[jax=CHTML][justify=right]{text-align:right}mjx-mrow{display:inline-block;text-align:left}mjx-container [space="1"]{margin-left:.111em}mjx-container [space="2"]{margin-left:.167em}mjx-container [space="3"]{margin-left:.222em}mjx-container [space="4"]{margin-left:.278em}mjx-container [space="5"]{margin-left:.333em}mjx-container [rspace="1"]{margin-right:.111em}mjx-container [rspace="2"]{margin-right:.167em}mjx-container [rspace="3"]{margin-right:.222em}mjx-container [rspace="4"]{margin-right:.278em}mjx-container [rspace="5"]{margin-right:.333em}mjx-container [size=s]{font-size:70.7%}mjx-container [size=ss]{font-size:50%}mjx-container [size=Tn]{font-size:60%}mjx-container [size=sm]{font-size:85%}mjx-container [size=lg]{font-size:120%}mjx-container [size=Lg]{font-size:144%}mjx-container [size=LG]{font-size:173%}mjx-container [size=hg]{font-size:207%}mjx-container [size=HG]{font-size:249%}mjx-container [width=full]{width:100%}mjx-box{display:inline-block}mjx-block{display:block}mjx-itable{display:inline-table}mjx-row{display:table-row}mjx-row>*{display:table-cell}mjx-merror,mjx-mstyle,mjx-mtext{display:inline-block}mjx-merror{color:red;background-color:#ff0}mjx-mphantom{visibility:hidden}mjx-inferredMrow,mjx-mi,mjx-mo{display:inline-block;text-align:left}mjx-stretchy-h{display:inline-table;width:100%}mjx-stretchy-h>mjx-beg,mjx-stretchy-h>mjx-end{display:table-cell;width:0}mjx-stretchy-h>mjx-ext{display:table-cell;overflow:hidden;width:100%}mjx-stretchy-h>mjx-ext>mjx-c{transform:scalex(500);margin-right:-2em}mjx-stretchy-h>mjx-ext>mjx-c:before{padding:.001em 0}mjx-stretchy-h>mjx-beg>mjx-c{margin-right:-.1em}mjx-stretchy-h>mjx-end>mjx-c{margin-left:-.1em}mjx-stretchy-v{display:inline-block}mjx-stretchy-v>*{display:block}mjx-stretchy-v>mjx-beg{height:0}mjx-stretchy-v>mjx-end>mjx-c{display:block}mjx-stretchy-v>*>mjx-c{transform:scale(1);transform-origin:left center;overflow:hidden}mjx-stretchy-v>mjx-ext{display:block;height:100%;box-sizing:border-box;border:0 solid transparent;overflow:hidden}mjx-stretchy-v>mjx-ext>mjx-c{transform:scaleY(500) translateY(.1em);overflow:visible}mjx-mark{display:inline-block;height:0}mjx-mn,mjx-mpadded,mjx-ms,mjx-mspace{display:inline-block;text-align:left}mjx-menclose,mjx-rbox{display:inline-block;position:relative}mjx-menclose{text-align:left}mjx-menclose>mjx-dstrike{top:0;transform-origin:top left}mjx-menclose>mjx-dstrike,mjx-menclose>mjx-ustrike{display:inline-block;left:0;position:absolute;border-top:.067em solid}mjx-menclose>mjx-ustrike{bottom:0;transform-origin:bottom left}mjx-menclose>mjx-hstrike{border-top:.067em solid;position:absolute;left:0;right:0;bottom:50%;transform:translateY(.034em)}mjx-menclose>mjx-vstrike{border-left:.067em solid;position:absolute;top:0;bottom:0;right:50%;transform:translateX(.034em)}mjx-menclose>mjx-rbox{border:.067em solid;border-radius:.267em}mjx-menclose>mjx-cbox,mjx-menclose>mjx-rbox{position:absolute;top:0;bottom:0;right:0;left:0}mjx-menclose>mjx-cbox{border:.067em solid;border-radius:50%}mjx-menclose>mjx-arrow{position:absolute;left:0;bottom:50%;height:0;width:0}mjx-menclose>mjx-arrow>*{display:block;position:absolute;transform-origin:bottom;border-left:.268em solid;border-right:0;box-sizing:border-box}mjx-menclose>mjx-arrow>mjx-aline{left:0;top:-.034em;right:.201em;height:0;border-top:.067em solid;border-left:0}mjx-menclose>mjx-arrow[double]>mjx-aline{left:.201em;height:0}mjx-menclose>mjx-arrow>mjx-rthead{transform:skewX(.464rad);right:0;bottom:-1px;border-bottom:1px solid transparent;border-top:.134em solid transparent}mjx-menclose>mjx-arrow>mjx-rbhead{transform:skewX(-.464rad);transform-origin:top;right:0;top:-1px;border-top:1px solid transparent;border-bottom:.134em solid transparent}mjx-menclose>mjx-arrow>mjx-lthead{transform:skewX(-.464rad);left:0;bottom:-1px;border-left:0;border-right:.268em solid;border-bottom:1px solid transparent;border-top:.134em solid transparent}mjx-menclose>mjx-arrow>mjx-lbhead{transform:skewX(.464rad);transform-origin:top;left:0;top:-1px;border-left:0;border-right:.268em solid;border-top:1px solid transparent;border-bottom:.134em solid transparent}mjx-menclose>dbox{position:absolute;top:0;bottom:0;left:-.3em;width:.6em;border:.067em solid;border-radius:50%;-webkit-clip-path:inset(0 0 0 .3em);clip-path:inset(0 0 0 .3em);box-sizing:border-box}mjx-mfrac{text-align:left}mjx-frac,mjx-mfrac{display:inline-block}mjx-frac{vertical-align:.17em;padding:0 .22em}mjx-frac[type=d]{vertical-align:.04em}mjx-frac[delims]{padding:0 .1em}mjx-frac[atop]{padding:0 .12em}mjx-frac[atop][delims]{padding:0}mjx-dtable{display:inline-table;width:100%}mjx-dtable>*{font-size:2000%}mjx-dbox{display:block;font-size:5%}mjx-den,mjx-num{display:block;text-align:center}mjx-mfrac[bevelled]>mjx-den,mjx-mfrac[bevelled]>mjx-num{display:inline-block}mjx-den[align=right],mjx-num[align=right]{text-align:right}mjx-den[align=left],mjx-num[align=left]{text-align:left}mjx-nstrut{display:inline-block;height:.054em;width:0;vertical-align:-.054em}mjx-nstrut[type=d]{height:.217em;vertical-align:-.217em}mjx-dstrut{display:inline-block;height:.505em;width:0}mjx-dstrut[type=d]{height:.726em}mjx-line{display:block;box-sizing:border-box;min-height:1px;height:.06em;border-top:.06em solid;margin:.06em -.1em;overflow:hidden}mjx-line[type=d]{margin:.18em -.1em}mjx-msqrt{text-align:left}mjx-msqrt,mjx-root{display:inline-block}mjx-root{white-space:nowrap}mjx-surd{vertical-align:top}mjx-sqrt,mjx-surd{display:inline-block}mjx-sqrt{padding-top:.07em}mjx-sqrt>mjx-box{border-top:.07em solid}mjx-sqrt.mjx-tall>mjx-box{padding-left:.3em;margin-left:-.3em}mjx-mroot,mjx-msub,mjx-msubsup,mjx-msup{display:inline-block;text-align:left}mjx-script{display:inline-block;padding-right:.05em}mjx-script>*{display:block}mjx-munder{display:inline-block}mjx-munder,mjx-over{text-align:left}mjx-munder:not([limits=false]){display:inline-table}mjx-munder>mjx-row{text-align:left}mjx-under{padding-bottom:.1em}mjx-mover{display:inline-block;text-align:left}mjx-mover:not([limits=false]){padding-top:.1em}mjx-mover:not([limits=false])>*{display:block;text-align:left}mjx-munderover{display:inline-block;text-align:left}mjx-munderover:not([limits=false]){padding-top:.1em}mjx-munderover:not([limits=false])>*{display:block}mjx-mmultiscripts{display:inline-block;text-align:left}mjx-prescripts{display:inline-table;padding-left:.05em}mjx-scripts{display:inline-table;padding-right:.05em}mjx-prescripts>mjx-row>mjx-cell{text-align:right}mjx-mfenced{display:inline-block;text-align:left}mjx-mtable{display:inline-block;text-align:center;vertical-align:.25em;position:relative;box-sizing:border-box}mjx-labels{position:absolute;left:0;top:0}mjx-table{display:inline-block}mjx-table>mjx-itable{vertical-align:middle;text-align:left;box-sizing:border-box}mjx-labels>mjx-itable{position:absolute;top:0}mjx-mtable[justify=left]{text-align:left}mjx-mtable[justify=right]{text-align:right}mjx-mtable[justify=left][side=left]{padding-right:0!important}mjx-mtable[justify=left][side=right]{padding-left:0!important}mjx-mtable[justify=right][side=left]{padding-right:0!important}mjx-mtable[justify=right][side=right]{padding-left:0!important}mjx-mtable[align]{vertical-align:baseline}mjx-mtable[align=top]>mjx-table{vertical-align:top}mjx-mtable[align=bottom]>mjx-table{vertical-align:bottom}mjx-mtable[align=baseline]>mjx-table,mjx-mtable[align=center]>mjx-table{vertical-align:middle}mjx-mtr{display:table-row;text-align:left}mjx-mtr[rowalign=top]>mjx-mtd{vertical-align:top}mjx-mtr[rowalign=center]>mjx-mtd{vertical-align:middle}mjx-mtr[rowalign=bottom]>mjx-mtd{vertical-align:bottom}mjx-mtr[rowalign=baseline]>mjx-mtd{vertical-align:baseline}mjx-mtr[rowalign=axis]>mjx-mtd{vertical-align:.25em}mjx-mlabeledtr{display:table-row;text-align:left}mjx-mlabeledtr[rowalign=top]>mjx-mtd{vertical-align:top}mjx-mlabeledtr[rowalign=center]>mjx-mtd{vertical-align:middle}mjx-mlabeledtr[rowalign=bottom]>mjx-mtd{vertical-align:bottom}mjx-mlabeledtr[rowalign=baseline]>mjx-mtd{vertical-align:baseline}mjx-mlabeledtr[rowalign=axis]>mjx-mtd{vertical-align:.25em}mjx-mtd{display:table-cell;text-align:center;padding:.215em .4em}mjx-mtd:first-child{padding-left:0}mjx-mtd:last-child{padding-right:0}mjx-mtable>*>mjx-itable>:first-child>mjx-mtd{padding-top:0}mjx-mtable>*>mjx-itable>:last-child>mjx-mtd{padding-bottom:0}mjx-tstrut{display:inline-block;height:1em;vertical-align:-.25em}mjx-labels[align=left]>mjx-mtr>mjx-mtd{text-align:left}mjx-labels[align=right]>mjx-mtr>mjx-mtd{text-align:right}mjx-mlabeledtr mjx-mtd[rowalign=top],mjx-mtr mjx-mtd[rowalign=top]{vertical-align:top}mjx-mlabeledtr mjx-mtd[rowalign=center],mjx-mtr mjx-mtd[rowalign=center]{vertical-align:middle}mjx-mlabeledtr mjx-mtd[rowalign=bottom],mjx-mtr mjx-mtd[rowalign=bottom]{vertical-align:bottom}mjx-mlabeledtr mjx-mtd[rowalign=baseline],mjx-mtr mjx-mtd[rowalign=baseline]{vertical-align:baseline}mjx-mlabeledtr mjx-mtd[rowalign=axis],mjx-mtr mjx-mtd[rowalign=axis]{vertical-align:.25em}mjx-maction{display:inline-block;text-align:left;position:relative}mjx-maction>mjx-tool{display:none;position:absolute;bottom:0;right:0;Width:0;height:0}mjx-tool>mjx-tip{display:inline-block;padding:.2em;border:1px solid #888;font-size:70%;background-color:#f8f8f8;color:#000;box-shadow:2px 2px 5px #aaa}mjx-maction[toggle]{cursor:pointer}mjx-status{display:block;position:fixed;left:1em;bottom:1em;min-width:25%;padding:.2em .4em;border:1px solid #888;font-size:90%;background-color:#f8f8f8;color:#000}mjx-mglyph{display:inline-block;text-align:left}mjx-mglyph>img{display:inline-block;border:0;padding:0}mjx-annotation,mjx-annotation-xml,mjx-semantics,mjx-TeXAtom{display:inline-block;text-align:left}mjx-c,mjx-c:before,mjx-utext{display:inline-block}mjx-utext{padding:.75em 0 .25em}mjx-measure-text{position:absolute;font-family:MJXZERO;white-space:nowrap;height:1px;width:1px;overflow:hidden}.MJX-TEX .mjx-n mjx-c{font-family:MJXZERO,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-i mjx-c{font-family:MJXZERO,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-b mjx-c{font-family:MJXZERO,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-b.mjx-i mjx-c{font-family:MJXZERO,MJXTEX-BI,MJXTEX-B,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-cal mjx-c{font-family:MJXZERO,MJXTEX-C,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-cal.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-C-B,MJXTEX-C,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c{font-family:MJXZERO,MJXTEX-A,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1}.MJX-TEX .mjx-fr mjx-c{font-family:MJXZERO,MJXTEX-FR,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-fr.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-FR-B,MJXTEX-FR,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-sc mjx-c{font-family:MJXZERO,MJXTEX-SC,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-sc.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-SC-B,MJXTEX-SC,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ss mjx-c{font-family:MJXZERO,MJXTEX-SS,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ss.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-SS-B,MJXTEX-SS,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ss.mjx-i mjx-c{font-family:MJXZERO,MJXTEX-SS-I,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ss.mjx-b.mjx-i mjx-c{font-family:MJXZERO,MJXTEX-SS-B,MJXTEX-SS-I,MJXTEX-BI,MJXTEX-B,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-ty mjx-c{font-family:MJXZERO,MJXTEX-T,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-var mjx-c{font-family:MJXZERO,MJXTEX-A,MJXTEX,MJXTEX-I,MJXTEX-S1}.MJX-TEX .mjx-os mjx-c{font-family:MJXZERO,MJXTEX-C,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-os.mjx-b mjx-c{font-family:MJXZERO,MJXTEX-C-B,MJXTEX-C,MJXTEX-B,MJXTEX-BI,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-mit mjx-c{font-family:MJXZERO,MJXTEX-MI,MJXTEX-I,MJXTEX,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-lop mjx-c{font-family:MJXZERO,MJXTEX-S2,MJXTEX-S1,MJXTEX,MJXTEX-I,MJXTEX-A}.MJX-TEX .mjx-sop mjx-c{font-family:MJXZERO,MJXTEX-S1,MJXTEX,MJXTEX-I,MJXTEX-A}.MJX-TEX .mjx-s3 mjx-c{font-family:MJXZERO,MJXTEX-S3,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX .mjx-s4 mjx-c{font-family:MJXZERO,MJXTEX-S4,MJXTEX,MJXTEX-I,MJXTEX-S1,MJXTEX-A}.MJX-TEX{font-family:MJXZERO}.MJX-TEX mjx-stretchy-h mjx-c,.MJX-TEX mjx-stretchy-v mjx-c{font-family:MJXZERO,MJXTEX-S1,MJXTEX-S4,MJXTEX,MJXTEX-A!important}@font-face{font-family:MJXZERO;src:url(data:font/otf;base64,T1RUTwALAIAAAwAwQ0ZGIA9zN9cAAAhgAAAArUZGVE12+H9qAAAJEAAAABxHREVGACoAHgAACSwAAAAgT1MvMkDE54cAAAEgAAAAYGNtYXAADfKiAAAG/AAAAUJoZWFkCdzO7wAAALwAAAA2aGhlYQBmAJgAAAD0AAAAJGhtdHgA+gAAAAAJTAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZeMFXGAAAAGAAAAFenBvc3T/hgAzAAAIQAAAACAAAQAAAAMAAO7o+YVfDzz1AAsD6AAAAADVXaFMAAAAANVe7L4AAAAAAAAAAAAAAAgAAgAAAAAAAAABAAAAZP+cAAAA+gAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQA+gGQAAUAAAKKArwAAACMAooCvAAAAeAAMQECAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAFBmRWQAwO/87/wAZP+cAAAAZABkIAAAAAAAAAAAAAAAACAAIAABAAAAFgEOAAEAAAAAAAAAKgAAAAEAAAAAAAEADAAqAAEAAAAAAAIABwA2AAEAAAAAAAMAIwA9AAEAAAAAAAQADAAqAAEAAAAAAAUACwBgAAEAAAAAAAYADAAqAAEAAAAAAA0A9QBrAAEAAAAAAA4AGgFgAAEAAAAAABAADAAqAAEAAAAAABEABwA2AAMAAQQJAAAAUgF6AAMAAQQJAAEAGAHMAAMAAQQJAAIADgHkAAMAAQQJAAMARgHyAAMAAQQJAAQAGAHMAAMAAQQJAAUAFgI4AAMAAQQJAAYAGAHMAAMAAQQJAA0B6gJOAAMAAQQJAA4ANAQ4AAMAAQQJABAAGAHMAAMAAQQJABEADgHkQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBNYXRoSmF4IENvbnNvcnRpdW0uTWF0aEpheF9aZXJvUmVndWxhckZvbnRGb3JnZSA6IE1hdGhKYXhfWmVybyA6IDctNi0yMDE3VmVyc2lvbiAxLjFDb3B5cmlnaHQgKGMpIDIwMTcsIFRoZSBNYXRoSmF4IENvbnNvcnRpdW0uICg8d3d3Lm1hdGhqYXgub3JnPiksCndpdGggUmVzZXJ2ZWQgRm9udCBOYW1lIE1hdGhKYXhfWmVyby4KClRoaXMgRm9udCBTb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMS4KVGhpcyBsaWNlbnNlIGF2YWlsYWJsZSB3aXRoIGEgRkFRIGF0OgpodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTGh0dHA6Ly9zY3JpcHRzLnNpbC5vcmcvT0ZMAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIAAyADAAMQA3ACAAVABoAGUAIABNAGEAdABoAEoAQQB4ACAAQwBvAG4AcwBvAHIAdABpAHUAbQBNAGEAdABoAEoAYQB4AF8AWgBlAHIAbwBSAGUAZwB1AGwAYQByAEYAbwBuAHQARgBvAHIAZwBlACAAOgAgAE0AYQB0AGgASgBhAHgAXwBaAGUAcgBvACAAOgAgADcALQA2AC0AMgAwADEANwBWAGUAcgBzAGkAbwBuACAAMQAuADEAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADcALAAgAFQAaABlACAATQBhAHQAaABKAGEAeAAgAEMAbwBuAHMAbwByAHQAaQB1AG0ALgAgACgAPAB3AHcAdwAuAG0AYQB0AGgAagBhAHgALgBvAHIAZwA+ACkALAAKAHcAaQB0AGgAIABSAGUAcwBlAHIAdgBlAGQAIABGAG8AbgB0ACAATgBhAG0AZQAgAE0AYQB0AGgASgBhAHgAXwBaAGUAcgBvAC4ACgAKAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4ACgBUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6AAoAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAA7/z//wAA7/z//xAFAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQBAAEBAQ1NYXRoSmF4X1plcm8AAQEBHfgcAPgdAfgeAvgeA/gYBIwMAfcTD673HhL3FhEABAEBCAs0QHVuaUVGRkMzLjBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIE1hdGhKYXggQ29uc29ydGl1bU1hdGhKYXhfWmVybwAAAAGHAAIBAQIDDg51ofhDnPdtjJmkBvtijQceoDlj/wwJiwwKvQq9Cx0AAATiFAAAAAAAAAEAAAAAzD2izwAAAADVXW5NAAAAANVdbk0AAQAAAAwAAAAUABwAAQABAAEAAQAEAAAAAQAAAAIAAAD6AAAAAAAA) format("opentype")}@font-face{font-family:MJXTEX;src:url(/Blog/assets/fonts/MathJax_Main-Regular.9995de47.woff) format("woff")}@font-face{font-family:MJXTEX-B;src:url(/Blog/assets/fonts/MathJax_Main-Bold.c9423d5d.woff) format("woff")}@font-face{font-family:MJXTEX-MI;src:url(/Blog/assets/fonts/MathJax_Main-Italic.7e83626b.woff) format("woff")}@font-face{font-family:MJXTEX-I;src:url(/Blog/assets/fonts/MathJax_Math-Italic.5589d1a8.woff) format("woff")}@font-face{font-family:MJXTEX-BI;src:url(/Blog/assets/fonts/MathJax_Math-BoldItalic.77dbcee3.woff) format("woff")}@font-face{font-family:MJXTEX-S1;src:url(data:font/woff;base64,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) format("woff")}@font-face{font-family:MJXTEX-S2;src:url(data:font/woff;base64,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) format("woff")}@font-face{font-family:MJXTEX-S3;src:url(data:font/woff;base64,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) format("woff")}@font-face{font-family:MJXTEX-S4;src:url(data:font/woff;base64,d09GRk9UVE8AABQcAAsAAAAAHMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAADg4AABHZr+S44UZGVE0AAA8YAAAAHAAAABxdKvsBR0RFRgAADzQAAAAdAAAAIABhAARPUy8yAAAPVAAAAE0AAABgPshXmGNtYXAAAA+kAAAAtQAAAcr935afaGVhZAAAEFwAAAAzAAAANgnZmDloaGVhAAAQkAAAACAAAAAkACAHYGhtdHgAABCwAAAAjwAAANCVFRBcbWF4cAAAEUAAAAAGAAAABgA0UABuYW1lAAARSAAAAr0AAAZvBAmpunBvc3QAABQIAAAAEwAAACD/hgAyeJx1Vwl8FOXZn2GPjLmkwiLqGCI1ylEkBDDkRwEDJBULVIkVq6gNENhASCAkhGyy2ew1uzPPzN6bZLMJIRzKGRKRD/jC8ZX78OBID8XPRcWf/moVtbTvJO8G+04m2GLbmf3Ns+/xPP/neZ9jnqEprZaiaXrEgsIK4zOFG18rKDYVTZmwqGhlZUlhOUUPoWgqUx5KyXNoee4QOU8j52tZ2c/iNDahlNX/QccOeeRelqKGskPcP2GpNHbohvuonylcDHUvNZIaRT1GTaCmUNOp2dQ86llqMfUqVUSVUOspE2Wl3JSXaqBaqW3UbupN6jD1f9RZ6l3q99SH1KfUn6lvKZn6ntbTKfRw+iH6F/QSupguqywtzszMzVTI5MysiuKS5UXLytYsLS9cXryssIRMZ03OnKaSHJXkqmT2AMkZJHNUMlcleSrJHyADwgmZpJIslUxWyRSVTFXJkyrJVokKm6vC5qqwuSperoqXq+LNHmDIzpumEoUhLzMzUyUKbN6kqZkqGRxlqWSyShQl8vLz56okTyX5c8rWVpcXrzRWpI9ZNjY9KzMzZ0JW5qTM9LlF64tXlqYXLCsuKl1W9LP0eaXLnviP3r5rcmFZ+ZrCEopcNHUPlUgNpX5OzaBmUkuoV2kXVUdZaDfN0wINtEhLtIf20j7aTwfoIB2iw3QD3Ug30RG6mY7SLXQrvYluozfT7fQWeiu9jd5Ov06/Qe+gd9K76N30Hnov3UFNUWJmNJVBvU6PJn6W6Ku0POQLzXuaK5qY5lstpR2mtWij2kPaHu03uhd0y3Rv63P0+fpO/Xn9B/q/JiQnPJzwZEKImclsYf58zwuJVOLyxK4kJuk3SXzSueT05LXJb6dMSslNeSllfYot3gxH5byj9FFyaY6OQOPknXic/mi8ykBm43kJqfHm1K3IijSaXoHFYwzg4T2WKB6KJk5E+c+gFTNQYAU6BnIiyPd0omPvo8DbaMXnKB+RHY1RyQMeBjwuLy8xJn0duIAXeH5taW017saf4vR4JfSnkB9Kj1ehbvxJS9X2MkkQhSCEgYnqJcnrJQJSt8q/IgrsYfXvGMDt4SImNAQ/fAPnnMcLP8NtB/BFiP8U4o8W4ouTcNsCvDAL52Cyw2xyc8AztoAQTvPrgxAUJZDE7W+0tKFu9ClKlyuhNxV6k3G6XIW70SemtnVv8KIgOsEBjF1vcQj2Ualy4OSJvv0nNKzWw+ovGNzc7RvsLY63KZYAD7URc5QoG/b5Ah5f3w02ySSFCAgBYqK1TaY0K9idnJNJxQtYPKqHTcrooVF7jwa1k6EBnevBFjKHLD34nP4HqJOs/pABBJHIl2x9CpyH8znCXBiiEIlAM0gCkc+Hbitwbh/DBeu9VjCBpRZq70Zy9Gh8rF4yIAt76xq2zEbn2KSDClQX+kZx6VgWZxigBRp1EBLA5q33r4+aG01NpTvqWl773aoeR0wIARoBKDzwu18IMY6Y8cNnL1ua1uysa6hp3NhcE2Ze3qE7t7P7rUPdZy53fBiIiYTlfkDk2UB4xZC3u/FQ24Hdl05ffGcfE/KKACEGGqHF6V8FlfW61aYKc/nGvMUv/rJsdn2ZYy1nFJzC44BPMkI8gzfp+A2uKs5UnjE/a0qBxSp4YANUiZ5G6ycFF7K2ZfhM3ippAyPViPEMHeBT4uOiM/TL1pc6Xjj8i7cLPlrKtNr2gI7Y+xWxFz3K6o8boBqEEPf1sx9hKozTRBvgNMASYA8oI3/Onpmn8ptqdq2Jmpmd5bsrujYaTasqVq+rMZesqatZlL9qpjNHUJk8A3xpgo1xTC6esXBexbrlJWU1dk4QoJqpANia1gxtYd2x7W/t6Oo8c6rrYssVb5OnWWoV/eI3gE6K8gKhKPDmJsRcuvXlWaYxDE5ohy3gtITHn82/tRExjjfFIkFeCOiE8I3g51vdza4mpvKzgmvZF8o3lUdXR5mqcA3Ug84C/IZRSrL2/U0+fZGu69UZ0hOVwTWkjSItLf+197zhkcTU/pCyzMoBdQMZDm5g+26rO1Ct/PN9clunpm81q79o4LlleDlexWKBwQG276hOkJagbQXo+iIUI38EkZmJx8/CE7avu4iGIU3/A7pzGB3DB0Eg0UsyIwIB0RP0+eTjbFIAAkLIFrSBHRycW8kKA4nOf80IErel6GBPnNL/sHbkTgwfZG8FyPrBwUUS5P/CKFM9+CBhnv3PNcKIjrDYaMAHZ8sUYSRrf0cH0X2a3vdZrc1QrSfJCQK5HA6HDUfwZTwxPvnX8Z1mPNqOR/N4JuSD6HdLwj7YBcwWaCOJ7ZdAhANwUPpCPL6pdwxKlG1oh/xwIOzxgQe8Lg+pdIMo8iSbYXTiHchY/72keLpJHmMT+gAPlyctlffXI9aJZgIaQ0SKTokXq6ACSmAFKS4M5yZI+R68sgHPacezLpAKOT4+DLnxkYAt4CBliqQmqZItSpUkyARVfoUA7WK1VQaRl1werqVi7+LGKvQCfgfR8WGdcXsDfthPrMJjoBBINElCGwk2ZhfsUwzzEI9dcqOV9WhOJXpqvrwBj5eHYTc64gg5AgRNdChlsV5f7xSsowbB5D+qJg4MTvaPNIQgCCK5AoFACEXQZTRRnvw7eWcEjQ6i0RIx9RIITg8vroUyYMrIgxeInQIsJUo58ax6/NCKuAMTbTHR2lJVvNhU4XLwbnAzdp/Qlpb6WN+JGI2uxjToav8Dhhir34+iMXxTn/rY5g2D8yNi8tfZZKJ/5A87RxrQzRiOkt3KwoCIaEzTd0KLomzvghibkPCDCDKPoneJGJiJnzLgaDa6SbaSBXk4StL0Lum732CEOofu1fLlZcWrp03Px0Ns+BFSGyYCzgAchFbljFthL5wkrpT8DHktnAM0T0TNQq2/azN68DJivrsS8Pp8ypkB8SfTkqBIT9bID7Bal8Hl0glu+A3gPEVilmCx4hlz8WiclOXgOE6JXVCSyQ42UWBA8HEBDumy/4gfasDzRAtkDejhUfXYDuotiQwJ4mpAXkDp8AUphX+ourzy3Vev5/0++zhjDkVCujOdx//3wIkLH3V+FfiOVPMvlI1ke7USoRuhEkrBqERoqmxAKZrepbd/YmhJILEYUqKEvKm8008siK3+ytLh6OD+R4jAFgGtBfQ0nBMkhvcLUADLwAJugVHM4wFPADwSxsJU0eqdH31ux3NHH7uW8+3zTIOzg1RuK+qhB08EnTeoHEbAiYCnQ/huu4hZVkDTlZ/VSaB+rGuSBs3pG2FwuYmIarLVriQROTPXtefPZ+8e22gMGH2/Fc1QIeIyBvA8WEjyyCkS7+2FVlU+ObYgoAz4nBzbB2v+tOos8+JHcy5NOsLU+01KEeZUrLs9SEwcB3gEjIcnRavvqba8fU8fevJybmwxE7GZbbpnVyxeUvj8/GkrxjoeJcHzBOB0wN7/4jSPgn5DbAyjGVfQaJR0I+Dz+UCNHtLhKD5gQHGCD+tis9BD9Wie0Ag3FC7C++8eVDUNGQTSlwlKS7MQ8NMCbhYjzqIq/OBczDw61+HiOKVMKnHGlANsS4tCg1/32ZGrl47F9p7e8YHvfRIlnw9gBP8dA73Vu2i/ptfUr1T07xNcQWfASk6fs7s4RujnoJ+Lz2N14/AT+GJTnS5g93NA0mXTm1sOMweuyxVs36JG0G0SRV8wyKR29d77rgalI86AhP71OsTGxyAtvi7yAWvQ0QLM5khk8ygxFDezun1yLavrgJAO2muaqkUXcMQ8q9vh5OwCjwkTJswMFvrLSX/wHZGaxuJ0QwsEA4GwKCEtuo5YeQyDhN710IqF3nIdJmNM5gXJEbYGa4CpMtduGAU2AtS3KE4ez4FNtyFi3px2x+gVZkMD+PzeICP//UeW4zOAz+i8dp+zAZRDks/vp3/Mcx5dTQh6Az5ogAaHz+5l8JfAuXUOt+Air8/4xwl32PEVQMl0NS42tOjbyOn5gr5Qc3uo4U9/QcNPoomhkNgIfmgCjyj5SBUiIcUoD0HifW4S8Q6oFxwwzTmtbOGK7JfnznlpKmM3g1E3IDeRtp41wDpYR7KB8whNJBu6uS77/9dcLjn1yp7yjuWbjD67SN6OTAv4/dBhj+he+nju1ezup9+avGscCRpy7iTXBUvNqEE916NrBjAGzbojU6/Mib3cWr/P1Go/Xfme+STpC/+poqoho6hYB8Xwsq8omBPN27XocE3jmp2WqC1c286FuKAAVUC+LgZly0b0sUH51iCpyJMO2s27OVttpc1qqVmzpsYyY36GEac4rIKF9FpMHalCvBIW69RbtbCRZPx7kdPtrcF9La0NTKz7ytUjHzPBCHToUuNaBcQ6Qp6GkuPT9KlxI9yk4ebNmxrQ3rz5uB4tedyg0P++0J85sDA4ndqXMrw3ZEhL1DTMSr4HkhOPJh5NSkvUf598H0ulDaM0yrfgr6g4PZ1oKZAPKE60S3W+Sq8tABKglQdQwzFGLv5SXjleh8IvImOhRBztC3m3Sg1SgPwN8B4X1HtvP4WKeVJ1b+fiEreLSZrmwFR1emlmJc56pdJSY68yg5PnAi9K9ZJyBrwXAC62MWjBSTShAxma2qXd0k4gN9/KX7IfMv+l6Lqxq/6EbY+z070fGNLNpm5CGZ032lHW4fbG5mBbBPykKEmkKWrmOvkQL7l9pDVyEbHPVOH5BfgJI76vbj1fwpeQhqdU2ijlB1+LjO+a2lHUUBBiSvyveX6rdPpCtcAkeUFCD45CXycgFoBLc8NGcf2dNkl9Rc4DXM/g3ATAY8VmH+8RXofXYQdsE33AJP0DWbiWLwAAAAAAAQAAAADMPaLPAAAAAMb5Mk8AAAAAyfQl4nicY2BkYGDgA2IJBhBgYmAEQmMgZgHzGAAGewBmAAAAeJxjYGFmZZzAwMrAwNTFtIeBgaEHQjM+YDBkZGJAAg0MDO8FGN68hfED0lxTGA4wKLz/zyD3/xFQQI5BToGBoT+OGapAAQgZAfVvD+kAAAB4nGNgYGBmgGAZBkYGEDgC5DGC+SwMK4C0GoMCkMUGJDUZ9BliGaoZahkWMB1jusPMrCSlzK28Vnm7+ssHjA9D3v///x+oXoFBA6guGkkdE1Adh/JsoLoXDxgeBrz/C1T48P+t/1f/r/rf+7/nf9Zf178Gf7nvfr3LcafyTsENBwUtuTsCJlD3EAEY2RgIKobJMzGDKRZizQYCVjZ2vPIcDJwkmIYb8EMoLhK0cPPAWAAKajPsAAAAeJxjYGRgYADi+gqdffH8Nl8ZuJlfAEUYrsau2gCjf0z8Lceex3YNyOVgYAKJAgBvnw2OAHicY2BkYGCQ+/+IgYE98cfE/y/Y8xhAIsjABACbyAaDeJxj+MVgxPCLgYFZguEtECuy/GOwYHJn5IXQDKzMagwTQBikhj3x/yf2RAZGBoYfE4F4IfMLhnymekZepnoGVhjNnM2ojMAM8kD6JIhmms1oj8AMDECaHUQzVzI2MFcyrILQyGyGVSwKDPlAu3uAOJ1FgWkfCDMe+v8CiL/B6QlArMPAAMIMKQwMACkWM+QAAABQAAA0AAB4nK1Uy07bQBQ9hgTUVIlgQRdsOptKUCXOQ2wICAmBIgWlIAiq2m6QcYZ4kONEthMDUtf9gn5A1S/oJ3TZRbvrF/QHuuyyx5OhkIpUom0se87cuXPuuffOBMAjqwAL418Rrwy2kMd7g2cwj48Gz+KJtWRwBktW1+AsHlpvDZ6j/bPBefyY/WpwAcvZjMELyGc3DF7EfPYlma3MA85e6CgptrCMNwbPcPcHg2exh08GZ/DU2jA4y1xeGzxH+zuD89Z365vBBaxlvhi8QD2PDV5EIdvEDvoY4BIhFLrwEENgBS5WOdZQ4bOOkkZVvgK7kIi0b8BZm56KloCjZC0FmhrbwE5/cBmqrheLFXdV1CqV9VKtUq2IXRmpbiDarpKBK4uiGbj0fgaHoT2m6eACJyRWuCLlGpec2NtzLk7a6kpyekRrF0P49Aw5ld2h7xA0mEhAjnQM6SF1ArYWXec7PULpd85GP4gb/bArRc2uiLqYUFD6FfEejFMYntMr1OXs63JWqbdKswwj1Q9E1a7+jyj3a3HxHk1OeTaR6MdGzyg910pt04ctxikiRw+lV4VWHenMR/x2aLnuncA+9/Z076bnbZMth2OuKfLc3t0mOiNKdD1SlrGHz9HVGUQm4pC4ozUIHUXq3U20OB6wWlJnfsPcmmBIa3B37+wJZZNxBVWN+Crdr1N+U9tNXRwdcRuHGsc8tTndrZh66ijziciWdnFAW8RYkea6rnSZyhtUOu3qFe+8e2JlM0kSu8ezc+5c2Dz2W6vFXKJiTxzJSIYj2RHphRD7Tk9OXgU7lzv2VDRebvfP4sQJpaDBV64MIm4cBh0ZitiTot1siYOBDMbOrbFDUdw66vaYzOwVzshRvnPqS6G1OKKxfSicuJ7z4nhQL5cjN1SDOLIj5aeiywcNZv5X5foT4T//L/0EiwZBpgAAAHicY2BmAIP/zQxGDFgAAChEAbgA) format("woff")}@font-face{font-family:MJXTEX-A;src:url(/Blog/assets/fonts/MathJax_AMS-Regular.07173fb7.woff) format("woff")}@font-face{font-family:MJXTEX-C;src:url(data:font/woff;base64,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) format("woff")}@font-face{font-family:MJXTEX-C-B;src:url(data:font/woff;base64,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) format("woff")}@font-face{font-family:MJXTEX-FR;src:url(/Blog/assets/fonts/MathJax_Fraktur-Regular.b80e08d5.woff) format("woff")}@font-face{font-family:MJXTEX-FR-B;src:url(/Blog/assets/fonts/MathJax_Fraktur-Bold.bc421258.woff) format("woff")}@font-face{font-family:MJXTEX-SS;src:url(/Blog/assets/fonts/MathJax_SansSerif-Regular.bc3af04f.woff) format("woff")}@font-face{font-family:MJXTEX-SS-B;src:url(/Blog/assets/fonts/MathJax_SansSerif-Bold.07281897.woff) format("woff")}@font-face{font-family:MJXTEX-SS-I;src:url(/Blog/assets/fonts/MathJax_SansSerif-Italic.3d580bd5.woff) format("woff")}@font-face{font-family:MJXTEX-SC;src:url(/Blog/assets/fonts/MathJax_Script-Regular.4c74e33b.woff) format("woff")}@font-face{font-family:MJXTEX-T;src:url(/Blog/assets/fonts/MathJax_Typewriter-Regular.72815766.woff) format("woff")}@font-face{font-family:MJXTEX-V;src:url(data:font/woff;base64,d09GRk9UVE8AAARwAAsAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAADKAAAAQkAAAElso6A7EZGVE0AAAQ0AAAAHAAAABx3J0njR0RFRgAABFAAAAAYAAAAHAAoAAJPUy8yAAABaAAAAEkAAABgd6mCHGNtYXAAAALcAAAANAAAAUIADSQ4aGVhZAAAAQgAAAA1AAAANgw5vZloaGVhAAABQAAAAB4AAAAkBKMBLmhtdHgAAARoAAAABgAAAAYCEQAAbWF4cAAAAWAAAAAGAAAABgACUABuYW1lAAABtAAAASYAAAIx/gQR3nBvc3QAAAMQAAAAFgAAACD/hgAzeNpjYGRgYADir0asH+L5bb4ycDO/AIowXJ28TRJCHzzLIMvEwnid6RSQy8HABBIFAFQsC7IAAAB42mNgZGBgOvXfgoGB8QsDEDBeZ2BkQAWMAGVAA9QAAAAAUAAAAgAAeNpjYGH8wviFgZWBgamLaQ8DA0MPhGZ8wGDIyAQUZWBjZoABRiBWgHEC0lxTGA4oTlKcxHTqvwVQ5SmGE1A1EKAAhIwAzIwNswAAAHjalZCxasMwEIZ/xU5KKXTM1EF0iqEJcZZAhkJxyRDIYoLX1BhhC2IryHJJxr5QX6YP0ico9OzckqRLDfJ9+u+/O0kA7vEJgdMX0DqxID1g7uEGc2YPj3hm9jHEG3Mfd3hnHnS6B+Hf0i7GB7PAA76Ye9T/m9nDK36YfTyJF+Y+hqJkHrR6ZPZHq/PCyVEWyNk0nMtNoeQ6dcUqPcjIVLWxTjclK9tEZc7YWOXNLrVLU7mlsbmSC3luGLPjbzVRttamkuEkRASDPY6w0MhRwEFihIyeSmKGKUJ6KIkNZRTFNVJyFFhRPNC+ra5Q09+SrtGgvPBskVBlRkrriYlzcu0oZ7Hsql0XLenthMXVlPMO44se//G2OUun1d1cSXebIPwFZj5mrgAAeNpjYGBgZoBgGQZGBhCwAfIYwXwWBgUgzQKEQL7ipP//IeS9fKhKBkY2BhhzxAIA+yMHZXjaY2BmAIP/zQxGQIqRAQ0AAChVAbkAAHjaY2RgYWJgZGQU900syfBKrIgPS00uyS/SDUpNL81JLAJJqf7gZ/ghw/hDlumHHPMPcZYeHsYVP2b8yP4Zx/rdln/295VC3x0EGVgYGblNvCISi4ryy4sy0zNKnPMLKsEMBY1kTQUjA0NzhZCMVAWoPQrO+XnF+UUlmaW52G1GFWVgYGBsZ2BiZGRK4fvB+9NLtLtuZu7Uao7fv9laW1vaupu6mya2TWrj+G7f9d2+m7WuITO3u7K7flrzlO7p3d39U6ctXL5w3qrZMyb193TP6J7cMaF5Akf5jJoFrYvap3f2t/d19LX3tnXXdzc3djdy8HXzcG3m2sq9mYdnKw/vjw4RAKc+clgAAAAAAAABAAAAAMw9os8AAAAA1VXxAgAAAADVk7YReNpjYGRgYOABYhEgZoRCFjCbAQADFgArAfQAAAAdAAA=) format("woff")}@font-face{font-family:MJXTEX-VB;src:url(data:font/woff;base64,d09GRk9UVE8AAARcAAsAAAAABjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAADGAAAAQcAAAEfGT6+mEZGVE0AAAQgAAAAHAAAABx3J0n8R0RFRgAABDwAAAAYAAAAHAAoAAJPUy8yAAABaAAAAEkAAABgd7yCRmNtYXAAAALMAAAANAAAAUIADSQ4aGVhZAAAAQgAAAA1AAAANgyFt9poaGVhAAABQAAAAB0AAAAkBPMBb2htdHgAAARUAAAABgAAAAYCYAAAbWF4cAAAAWAAAAAGAAAABgACUABuYW1lAAABtAAAARYAAAHs9k2y63Bvc3QAAAMAAAAAFgAAACD/hgAzeNpjYGRgYABiU6dQ9nh+m68M3MwvgCIMVydvM4bQu98xKDIxMskxXQaq42BgAokCABb+CfEAAAB42mNgZGBguvxfD0jaMwABkxwDIwMqYAQARfsCZwAAAAAAUAAAAgAAeNpjYGGyZ/zCwMrAwNTFtIeBgaEHQjM+YDBkZAKKMrAxM8AAIxArwDgBaa4pDAsUJylOYrr8Xw+o8jLDJagaCFAAQkYAiH0M8QAAAHjadY/NasJAFIW/mCgthW4K3XZWRReKcSNIKUXBheCmiFuRGJIUzchkBH2pPkGfpss+RW+SQaQ/AzPnuydn7p0At7zjUa+O7Jo97qSquUHAk2OfB14cBxeZJjesHLcq38cLrqV65c2xxyMfjhtc8enY55kvx8FFpsm913bcKv2J3p9MlqRWtaOOGvTDoVqksZqvbTpbH9VE54U2NjvsnLNaxpHVpjvW2025pzq3U22SWI3UH5FlbIpM5yrshUzQ7DlhyEhIsSjaRPJfigF9QoZCC/kSi85ZSyJlJnqUurydU8hpxM84sPuRWbGUm5E4ZabLWHTL5qzTqoOt1MgLyimjX5P+61K6RuZnVRclr+0RfgNnQFOYAAB42mNgYGBmgGAZBkYGELAB8hjBfBYGBSDNAoRAvuKk//8h5L18qEoGRjYGGHPEAgD7IwdleNpjYGYAg//NDEZAipEBDQAAKFUBuQAAeNpjZGBhYmBkZBTxTSzJ8EqsiA9LTS7JL9J1ys9JAYmr/uBn+CHD+EOW6Ycc8w9xlh4exjU/pv7Y9DOd9bs5/7zvC4S+WwkysDAycpu4hyYWFeWXF2WmZ5Q45xdUghkKGsmaCkYGhuYKIRmpClBLFJzz84rzi0oyS3OxWIsqxMDAwNjOwMTIyJTI9+2H1k8v0e666WWTGzj+sLHVtzS0dld210xtmtHG8d2h67tDd10ta21te1d3dXf1jNo53dO7+/rmzF6yZOmc1dPnTZ4yoXt+94zWybWTOfKnV89uWNI8p3VCeXdVd2NVdz0HXzcP12aurdybeXi28vD+6BD5kSEKAO9nb1wAAAAAAQAAAADMPaLPAAAAANVV8QIAAAAA1ZO2KnjaY2BkYGDgAWIRIGaEQhYwmwEAAxYAKwI/AAAAIQAA) format("woff")}.MJX-TEX mjx-stretchy-v[c="("] mjx-beg mjx-c:before{content:"\239B";width:.875em;padding:1.154em 0 .655em}.MJX-TEX mjx-stretchy-v[c="("] mjx-ext mjx-c:before{content:"\239C";width:.875em}.MJX-TEX mjx-stretchy-v[c="("] mjx-end mjx-c:before{content:"\239D";width:.875em;padding:1.165em 0 .644em}.MJX-TEX mjx-stretchy-v[c="("]>mjx-end{margin-top:-1.809em}.MJX-TEX mjx-stretchy-v[c="("]>mjx-ext{border-top-width:1.779em;border-bottom-width:1.779em}.MJX-TEX mjx-stretchy-v[c=")"] mjx-beg mjx-c:before{content:"\239E";width:.875em;padding:1.154em 0 .655em}.MJX-TEX mjx-stretchy-v[c=")"] mjx-ext mjx-c:before{content:"\239F";width:.875em}.MJX-TEX mjx-stretchy-v[c=")"] mjx-end mjx-c:before{content:"\23A0";width:.875em;padding:1.165em 0 .644em}.MJX-TEX mjx-stretchy-v[c=")"]>mjx-end{margin-top:-1.809em}.MJX-TEX mjx-stretchy-v[c=")"]>mjx-ext{border-top-width:1.779em;border-bottom-width:1.779em}.MJX-TEX .mjx-stretched mjx-c[c="-"]:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="-"] mjx-ext mjx-c:before{content:"\2212";padding:.583em 0 .082em}.MJX-TEX mjx-stretchy-h[c="="] mjx-ext mjx-c:before{content:"=";padding:.583em 0 .082em}.MJX-TEX mjx-stretchy-v[c="["] mjx-beg mjx-c:before{content:"\23A1";width:.771em;padding:1.154em 0 .645em .104em}.MJX-TEX mjx-stretchy-v[c="["] mjx-ext mjx-c:before{content:"\23A2";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="["] mjx-end mjx-c:before{content:"\23A3";width:.771em;padding:1.155em 0 .644em .104em}.MJX-TEX mjx-stretchy-v[c="["]>mjx-end{margin-top:-1.799em}.MJX-TEX mjx-stretchy-v[c="["]>mjx-ext{border-top-width:1.769em;border-bottom-width:1.769em}.MJX-TEX mjx-stretchy-v[c="]"] mjx-beg mjx-c:before{content:"\23A4";width:.771em;padding:1.154em 0 .645em .104em}.MJX-TEX mjx-stretchy-v[c="]"] mjx-ext mjx-c:before{content:"\23A5";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="]"] mjx-end mjx-c:before{content:"\23A6";width:.771em;padding:1.155em 0 .644em .104em}.MJX-TEX mjx-stretchy-v[c="]"]>mjx-end{margin-top:-1.799em}.MJX-TEX mjx-stretchy-v[c="]"]>mjx-ext{border-top-width:1.769em;border-bottom-width:1.769em}.MJX-TEX .mjx-stretched mjx-c[c="^"]:before{content:"\2C6"}.MJX-TEX .mjx-stretched mjx-c[c=_]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c=_] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX mjx-stretchy-v[c="{"] mjx-beg mjx-c:before{content:"\23A7";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="{"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="{"] mjx-end mjx-c:before{content:"\23A9";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="{"] mjx-mid mjx-c:before{content:"\23A8";width:.889em;padding:1.16em 0 .66em}.MJX-TEX mjx-stretchy-v[c="{"]>mjx-mid{margin-top:-.91em;margin-bottom:-.91em}.MJX-TEX mjx-stretchy-v[c="{"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="{"]>mjx-ext{height:50%;border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX mjx-stretchy-v[c="|"] mjx-ext mjx-c:before{content:"\2223";width:.305em;padding-left:0}.MJX-TEX mjx-stretchy-v[c="}"] mjx-beg mjx-c:before{content:"\23AB";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="}"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="}"] mjx-end mjx-c:before{content:"\23AD";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="}"] mjx-mid mjx-c:before{content:"\23AC";width:.889em;padding:1.16em 0 .66em}.MJX-TEX mjx-stretchy-v[c="}"]>mjx-mid{margin-top:-.91em;margin-bottom:-.91em}.MJX-TEX mjx-stretchy-v[c="}"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="}"]>mjx-ext{height:50%;border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX .mjx-stretched mjx-c[c="~"]:before{content:"\2DC"}.MJX-TEX mjx-stretchy-h[c=AF] mjx-ext mjx-c:before{content:"\AF";padding:.59em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2C9"]:before{content:"\AF"}.MJX-TEX mjx-stretchy-h[c="2C9"] mjx-ext mjx-c:before{content:"\AF";padding:.59em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="302"]:before{content:"\2C6"}.MJX-TEX .mjx-stretched mjx-c[c="303"]:before{content:"\2DC"}.MJX-TEX .mjx-stretched mjx-c[c="332"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="332"] mjx-ext mjx-c:before,.MJX-TEX mjx-stretchy-h[c="2013"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2014"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="2014"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2015"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="2015"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX mjx-stretchy-v[c="2016"] mjx-ext mjx-c:before{content:"\2225";width:.528em;padding-left:0}.MJX-TEX .mjx-stretched mjx-c[c="2017"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="2017"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="203E"]:before{content:"\AF"}.MJX-TEX mjx-stretchy-h[c="203E"] mjx-ext mjx-c:before{content:"\AF";padding:.59em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="20D7"]:before{content:"\2192"}.MJX-TEX mjx-stretchy-h[c="20D7"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="20D7"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="2190"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="2190"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-v[c="2191"] mjx-beg mjx-c:before{content:"\2191";width:.667em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="2191"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="2191"]>mjx-ext{border-top-width:.57em}.MJX-TEX mjx-stretchy-h[c="2192"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="2192"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-v[c="2193"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="2193"] mjx-end mjx-c:before{content:"\2193";width:.667em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="2193"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="2193"]>mjx-ext{border-bottom-width:.57em}.MJX-TEX mjx-stretchy-h[c="2194"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="2194"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="2194"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-v[c="2195"] mjx-beg mjx-c:before{content:"\2191";width:.667em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="2195"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="2195"] mjx-end mjx-c:before{content:"\2193";width:.667em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="2195"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="2195"]>mjx-ext{border-top-width:.57em;border-bottom-width:.57em}.MJX-TEX mjx-stretchy-h[c="219E"] mjx-beg mjx-c:before{content:"\219E";padding:.417em 0 0}.MJX-TEX mjx-stretchy-h[c="21A0"] mjx-ext mjx-c:before,.MJX-TEX mjx-stretchy-h[c="219E"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21A0"] mjx-end mjx-c:before{content:"\21A0";padding:.417em 0 0}.MJX-TEX mjx-stretchy-h[c="21A4"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="21A4"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21A4"] mjx-end mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-v[c="21A5"] mjx-beg mjx-c:before{content:"\2191";width:.771em;padding:.6em 0 0 .104em}.MJX-TEX mjx-stretchy-v[c="21A5"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="21A5"] mjx-end mjx-c:before{content:"\22A5";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="21A5"]>mjx-end{margin-top:-.668em}.MJX-TEX mjx-stretchy-v[c="21A5"]>mjx-ext{border-top-width:.57em;border-bottom-width:.638em}.MJX-TEX mjx-stretchy-h[c="21A6"] mjx-beg mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="21A6"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21A6"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-v[c="21A7"] mjx-beg mjx-c:before{content:"\22A4";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="21A7"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="21A7"] mjx-end mjx-c:before{content:"\2193";width:.771em;padding:.6em 0 0 .104em}.MJX-TEX mjx-stretchy-v[c="21A7"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="21A7"]>mjx-ext{border-top-width:.638em;border-bottom-width:.57em}.MJX-TEX mjx-stretchy-v[c="21B0"] mjx-beg mjx-c:before{content:"\21B0";width:.584em;padding:.722em 0 0 .084em}.MJX-TEX mjx-stretchy-v[c="21B0"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21B0"]>mjx-ext{border-top-width:.692em}.MJX-TEX mjx-stretchy-v[c="21B1"] mjx-beg mjx-c:before{content:"\21B1";width:.584em;padding:.722em 0 0 .084em}.MJX-TEX mjx-stretchy-v[c="21B1"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21B1"]>mjx-ext{border-top-width:.692em}.MJX-TEX mjx-stretchy-h[c="21BC"] mjx-beg mjx-c:before{content:"\21BC";padding:.511em 0 0}.MJX-TEX mjx-stretchy-h[c="21BC"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21BD"] mjx-beg mjx-c:before{content:"\21BD";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-h[c="21BD"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-v[c="21BE"] mjx-beg mjx-c:before{content:"\21BE";width:.542em;padding:.694em 0 .194em .125em}.MJX-TEX mjx-stretchy-v[c="21BE"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21BE"]>mjx-ext{border-top-width:.858em}.MJX-TEX mjx-stretchy-v[c="21BF"] mjx-beg mjx-c:before{content:"\21BF";width:.542em;padding:.694em 0 .194em .125em}.MJX-TEX mjx-stretchy-v[c="21BF"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21BF"]>mjx-ext{border-top-width:.858em}.MJX-TEX mjx-stretchy-h[c="21C0"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21C0"] mjx-end mjx-c:before{content:"\21C0";padding:.511em 0 0}.MJX-TEX mjx-stretchy-h[c="21C1"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="21C1"] mjx-end mjx-c:before{content:"\21C1";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-v[c="21C2"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21C2"] mjx-end mjx-c:before{content:"\21C2";width:.542em;padding:.694em 0 .194em .125em}.MJX-TEX mjx-stretchy-v[c="21C2"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="21C2"]>mjx-ext{border-bottom-width:.858em}.MJX-TEX mjx-stretchy-v[c="21C3"] mjx-ext mjx-c:before{content:"\23D0";width:.667em}.MJX-TEX mjx-stretchy-v[c="21C3"] mjx-end mjx-c:before{content:"\21C3";width:.542em;padding:.694em 0 .194em .125em}.MJX-TEX mjx-stretchy-v[c="21C3"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="21C3"]>mjx-ext{border-bottom-width:.858em}.MJX-TEX mjx-stretchy-h[c="21D0"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="21D0"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-v[c="21D1"] mjx-beg mjx-c:before{content:"\21D1";width:.778em;padding:.599em 0 0}.MJX-TEX mjx-stretchy-v[c="21D1"] mjx-ext mjx-c:before{content:"\2016";width:.778em}.MJX-TEX mjx-stretchy-v[c="21D1"]>mjx-ext{border-top-width:.569em}.MJX-TEX mjx-stretchy-h[c="21D2"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="21D2"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-v[c="21D3"] mjx-ext mjx-c:before{content:"\2016";width:.778em}.MJX-TEX mjx-stretchy-v[c="21D3"] mjx-end mjx-c:before{content:"\21D3";width:.778em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="21D3"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="21D3"]>mjx-ext{border-bottom-width:.57em}.MJX-TEX mjx-stretchy-h[c="21D4"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="21D4"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="21D4"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-v[c="21D5"] mjx-beg mjx-c:before{content:"\21D1";width:.778em;padding:.599em 0 0}.MJX-TEX mjx-stretchy-v[c="21D5"] mjx-ext mjx-c:before{content:"\2016";width:.778em}.MJX-TEX mjx-stretchy-v[c="21D5"] mjx-end mjx-c:before{content:"\21D3";width:.778em;padding:.6em 0 0}.MJX-TEX mjx-stretchy-v[c="21D5"]>mjx-end{margin-top:-.6em}.MJX-TEX mjx-stretchy-v[c="21D5"]>mjx-ext{border-top-width:.569em;border-bottom-width:.57em}.MJX-TEX mjx-stretchy-h[c="21DA"] mjx-beg mjx-c:before{content:"\21DA";padding:.611em 0 .111em}.MJX-TEX mjx-stretchy-h[c="21DA"] mjx-ext mjx-c:before,.MJX-TEX mjx-stretchy-h[c="21DB"] mjx-ext mjx-c:before{content:"\2261"}.MJX-TEX mjx-stretchy-h[c="21DB"] mjx-end mjx-c:before{content:"\21DB";padding:.611em 0 .111em}.MJX-TEX mjx-stretchy-h[c="2212"] mjx-ext mjx-c:before{content:"\2212";padding:.583em 0 .082em}.MJX-TEX .mjx-stretched mjx-c[c="2215"]:before{content:"/"}.MJX-TEX mjx-stretchy-v[c="221A"] mjx-beg mjx-c:before{content:"\E001";width:1.056em;padding:.605em 0 .014em}.MJX-TEX mjx-stretchy-v[c="221A"] mjx-ext mjx-c:before{content:"\E000";width:1.056em}.MJX-TEX mjx-stretchy-v[c="221A"] mjx-end mjx-c:before{content:"\23B7";width:1.056em;padding:.935em 0 .885em}.MJX-TEX mjx-stretchy-v[c="221A"]>mjx-end{margin-top:-1.82em}.MJX-TEX mjx-stretchy-v[c="221A"]>mjx-ext{border-top-width:.589em;border-bottom-width:1.79em}.MJX-TEX mjx-stretchy-v[c="2223"] mjx-ext mjx-c:before{content:"\2223";width:.305em;padding-left:0}.MJX-TEX mjx-stretchy-v[c="2225"] mjx-ext mjx-c:before{content:"\2225";width:.528em;padding-left:0}.MJX-TEX mjx-stretchy-v[c="2308"] mjx-beg mjx-c:before{content:"\23A1";width:.771em;padding:1.154em 0 .645em .104em}.MJX-TEX mjx-stretchy-v[c="2308"] mjx-ext mjx-c:before{content:"\23A2";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2308"]>mjx-ext{border-top-width:1.769em}.MJX-TEX mjx-stretchy-v[c="2309"] mjx-beg mjx-c:before{content:"\23A4";width:.771em;padding:1.154em 0 .645em .104em}.MJX-TEX mjx-stretchy-v[c="2309"] mjx-ext mjx-c:before{content:"\23A5";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2309"]>mjx-ext{border-top-width:1.769em}.MJX-TEX mjx-stretchy-v[c="230A"] mjx-ext mjx-c:before{content:"\23A2";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="230A"] mjx-end mjx-c:before{content:"\23A3";width:.771em;padding:1.155em 0 .644em .104em}.MJX-TEX mjx-stretchy-v[c="230A"]>mjx-end{margin-top:-1.799em}.MJX-TEX mjx-stretchy-v[c="230A"]>mjx-ext{border-bottom-width:1.769em}.MJX-TEX mjx-stretchy-v[c="230B"] mjx-ext mjx-c:before{content:"\23A5";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="230B"] mjx-end mjx-c:before{content:"\23A6";width:.771em;padding:1.155em 0 .644em .104em}.MJX-TEX mjx-stretchy-v[c="230B"]>mjx-end{margin-top:-1.799em}.MJX-TEX mjx-stretchy-v[c="230B"]>mjx-ext{border-bottom-width:1.769em}.MJX-TEX .mjx-stretched mjx-c[c="2312"]:before{content:"\23DC"}.MJX-TEX mjx-stretchy-h[c="2312"] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="2312"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="2312"] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX .mjx-stretched mjx-c[c="2322"]:before{content:"\23DC"}.MJX-TEX mjx-stretchy-h[c="2322"] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="2322"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="2322"] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX .mjx-stretched mjx-c[c="2323"]:before{content:"\23DD"}.MJX-TEX mjx-stretchy-h[c="2323"] mjx-beg mjx-c:before{content:"\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="2323"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="2323"] mjx-end mjx-c:before{content:"\E153";padding:.333em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2329"]:before{content:"\27E8"}.MJX-TEX .mjx-stretched mjx-c[c="232A"]:before{content:"\27E9"}.MJX-TEX mjx-stretchy-v[c="23AA"] mjx-beg mjx-c:before{content:"\23AA";width:.889em;padding:.29em 0 .015em}.MJX-TEX mjx-stretchy-v[c="23AA"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="23AA"] mjx-end mjx-c:before{content:"\23AA";width:.889em;padding:.29em 0 .015em}.MJX-TEX mjx-stretchy-v[c="23AA"]>mjx-end{margin-top:-.305em}.MJX-TEX mjx-stretchy-v[c="23AA"]>mjx-ext{border-top-width:.275em;border-bottom-width:.275em}.MJX-TEX .mjx-stretched mjx-c[c="23AF"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="23AF"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX mjx-stretchy-v[c="23B0"] mjx-beg mjx-c:before{content:"\23A7";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="23B0"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="23B0"] mjx-end mjx-c:before{content:"\23AD";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="23B0"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="23B0"]>mjx-ext{border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX mjx-stretchy-v[c="23B1"] mjx-beg mjx-c:before{content:"\23AB";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="23B1"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="23B1"] mjx-end mjx-c:before{content:"\23A9";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="23B1"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="23B1"]>mjx-ext{border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX mjx-stretchy-h[c="23B4"] mjx-beg mjx-c:before{content:"\250C";padding:.694em 0 0}.MJX-TEX mjx-stretchy-h[c="23B4"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="23B4"] mjx-end mjx-c:before{content:"\2510";padding:.694em 0 0}.MJX-TEX mjx-stretchy-h[c="23B5"] mjx-beg mjx-c:before{content:"\2514";padding:.366em 0 .022em}.MJX-TEX mjx-stretchy-h[c="23B5"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="23B5"] mjx-end mjx-c:before{content:"\2518";padding:.366em 0 .022em}.MJX-TEX mjx-stretchy-v[c="23D0"] mjx-ext mjx-c:before{content:"\2223";width:.305em;padding-left:0}.MJX-TEX mjx-stretchy-h[c="23DC"] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DC"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="23DC"] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DD"] mjx-beg mjx-c:before{content:"\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DD"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="23DD"] mjx-end mjx-c:before{content:"\E153";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DE"] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DE"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="23DE"] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DE"] mjx-mid mjx-c:before{content:"\E153\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DE"]>mjx-ext{width:50%}.MJX-TEX mjx-stretchy-h[c="23DF"] mjx-beg mjx-c:before{content:"\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DF"] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c="23DF"] mjx-end mjx-c:before{content:"\E153";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c="23DF"] mjx-mid mjx-c:before{content:"\E151\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c="23DF"]>mjx-ext{width:50%}.MJX-TEX mjx-stretchy-h[c="23E0"] mjx-beg mjx-c:before{content:"\2CA";padding:.699em 0 0}.MJX-TEX mjx-stretchy-h[c="23E0"] mjx-ext mjx-c:before{content:"\2C9"}.MJX-TEX mjx-stretchy-h[c="23E0"] mjx-end mjx-c:before,.MJX-TEX mjx-stretchy-h[c="23E1"] mjx-beg mjx-c:before{content:"\2CB";padding:.699em 0 0}.MJX-TEX mjx-stretchy-h[c="23E1"] mjx-ext mjx-c:before{content:"\2C9"}.MJX-TEX mjx-stretchy-h[c="23E1"] mjx-end mjx-c:before{content:"\2CA";padding:.699em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2500"]:before{content:"\2013"}.MJX-TEX mjx-stretchy-h[c="2500"] mjx-ext mjx-c:before{content:"\2013";padding:.285em 0 0}.MJX-TEX .mjx-stretched mjx-c[c="2758"]:before{content:"\2223"}.MJX-TEX mjx-stretchy-v[c="2758"] mjx-ext mjx-c:before{content:"\2223";width:.305em;padding-left:0}.MJX-TEX mjx-stretchy-v[c="27EE"] mjx-beg mjx-c:before{content:"\23A7";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="27EE"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="27EE"] mjx-end mjx-c:before{content:"\23A9";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="27EE"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="27EE"]>mjx-ext{border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX mjx-stretchy-v[c="27EF"] mjx-beg mjx-c:before{content:"\23AB";width:.889em;padding:.899em 0 .01em}.MJX-TEX mjx-stretchy-v[c="27EF"] mjx-ext mjx-c:before{content:"\23AA";width:.889em}.MJX-TEX mjx-stretchy-v[c="27EF"] mjx-end mjx-c:before{content:"\23AD";width:.889em;padding:.01em 0 .899em}.MJX-TEX mjx-stretchy-v[c="27EF"]>mjx-end{margin-top:-.909em}.MJX-TEX mjx-stretchy-v[c="27EF"]>mjx-ext{border-top-width:.879em;border-bottom-width:.879em}.MJX-TEX .mjx-stretched mjx-c[c="27F5"]:before{content:"\2190"}.MJX-TEX mjx-stretchy-h[c="27F5"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="27F5"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX .mjx-stretched mjx-c[c="27F6"]:before{content:"\2192"}.MJX-TEX mjx-stretchy-h[c="27F6"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="27F6"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX .mjx-stretched mjx-c[c="27F7"]:before{content:"\2194"}.MJX-TEX mjx-stretchy-h[c="27F7"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="27F7"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="27F7"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX .mjx-stretched mjx-c[c="27F8"]:before{content:"\21D0"}.MJX-TEX mjx-stretchy-h[c="27F8"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="27F8"] mjx-ext mjx-c:before{content:"="}.MJX-TEX .mjx-stretched mjx-c[c="27F9"]:before{content:"\21D2"}.MJX-TEX mjx-stretchy-h[c="27F9"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="27F9"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX .mjx-stretched mjx-c[c="27FA"]:before{content:"\21D4"}.MJX-TEX mjx-stretchy-h[c="27FA"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="27FA"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="27FA"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX .mjx-stretched mjx-c[c="27FB"]:before{content:"\21A4"}.MJX-TEX mjx-stretchy-h[c="27FB"] mjx-beg mjx-c:before{content:"\2190";padding:.511em 0 .011em}.MJX-TEX mjx-stretchy-h[c="27FB"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="27FB"] mjx-end mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX .mjx-stretched mjx-c[c="27FC"]:before{content:"\21A6"}.MJX-TEX mjx-stretchy-h[c="27FC"] mjx-beg mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="27FC"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="27FC"] mjx-end mjx-c:before{content:"\2192";padding:.511em 0 .011em}.MJX-TEX .mjx-stretched mjx-c[c="27FD"]:before{content:"\2906"}.MJX-TEX mjx-stretchy-h[c="27FD"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="27FD"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="27FD"] mjx-end mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX .mjx-stretched mjx-c[c="27FE"]:before{content:"\2907"}.MJX-TEX mjx-stretchy-h[c="27FE"] mjx-beg mjx-c:before{content:"\22A8";padding:.75em 0 .249em}.MJX-TEX mjx-stretchy-h[c="27FE"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="27FE"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="2906"] mjx-beg mjx-c:before{content:"\21D0";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="2906"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="2906"] mjx-end mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="2907"] mjx-beg mjx-c:before{content:"\22A8";padding:.75em 0 .249em}.MJX-TEX mjx-stretchy-h[c="2907"] mjx-ext mjx-c:before{content:"="}.MJX-TEX mjx-stretchy-h[c="2907"] mjx-end mjx-c:before{content:"\21D2";padding:.525em 0 .024em}.MJX-TEX mjx-stretchy-h[c="294E"] mjx-beg mjx-c:before{content:"\21BC";padding:.511em 0 0}.MJX-TEX mjx-stretchy-h[c="294E"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="294E"] mjx-end mjx-c:before{content:"\21C0";padding:.511em 0 0}.MJX-TEX mjx-stretchy-v[c="294F"] mjx-beg mjx-c:before{content:"\21BE";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="294F"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="294F"] mjx-end mjx-c:before{content:"\21C2";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="294F"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="294F"]>mjx-ext{border-top-width:.858em;border-bottom-width:.858em}.MJX-TEX mjx-stretchy-h[c="2950"] mjx-beg mjx-c:before{content:"\21BD";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-h[c="2950"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="2950"] mjx-end mjx-c:before{content:"\21C1";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-v[c="2951"] mjx-beg mjx-c:before{content:"\21BF";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="2951"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2951"] mjx-end mjx-c:before{content:"\21C3";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="2951"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="2951"]>mjx-ext{border-top-width:.858em;border-bottom-width:.858em}.MJX-TEX mjx-stretchy-h[c="295A"] mjx-beg mjx-c:before{content:"\21BC";padding:.511em 0 0}.MJX-TEX mjx-stretchy-h[c="295A"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="295A"] mjx-end mjx-c:before,.MJX-TEX mjx-stretchy-h[c="295B"] mjx-beg mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="295B"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="295B"] mjx-end mjx-c:before{content:"\21C0";padding:.511em 0 0}.MJX-TEX mjx-stretchy-v[c="295C"] mjx-beg mjx-c:before{content:"\21BE";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="295C"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="295C"] mjx-end mjx-c:before{content:"\22A5";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="295C"]>mjx-end{margin-top:-.668em}.MJX-TEX mjx-stretchy-v[c="295C"]>mjx-ext{border-top-width:.858em;border-bottom-width:.638em}.MJX-TEX mjx-stretchy-v[c="295D"] mjx-beg mjx-c:before{content:"\22A4";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="295D"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="295D"] mjx-end mjx-c:before{content:"\21C2";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="295D"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="295D"]>mjx-ext{border-top-width:.638em;border-bottom-width:.858em}.MJX-TEX mjx-stretchy-h[c="295E"] mjx-beg mjx-c:before{content:"\21BD";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-h[c="295E"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="295E"] mjx-end mjx-c:before,.MJX-TEX mjx-stretchy-h[c="295F"] mjx-beg mjx-c:before{content:"\2223";padding:.627em 0 .015em}.MJX-TEX mjx-stretchy-h[c="295F"] mjx-ext mjx-c:before{content:"\2212"}.MJX-TEX mjx-stretchy-h[c="295F"] mjx-end mjx-c:before{content:"\21C1";padding:.27em 0 .011em}.MJX-TEX mjx-stretchy-v[c="2960"] mjx-beg mjx-c:before{content:"\21BF";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="2960"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2960"] mjx-end mjx-c:before{content:"\22A5";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="2960"]>mjx-end{margin-top:-.668em}.MJX-TEX mjx-stretchy-v[c="2960"]>mjx-ext{border-top-width:.858em;border-bottom-width:.638em}.MJX-TEX mjx-stretchy-v[c="2961"] mjx-beg mjx-c:before{content:"\22A4";width:.827em;padding:.668em 0 0 .048em}.MJX-TEX mjx-stretchy-v[c="2961"] mjx-ext mjx-c:before{content:"\23D0";width:.771em;padding-left:.104em}.MJX-TEX mjx-stretchy-v[c="2961"] mjx-end mjx-c:before{content:"\21C3";width:.646em;padding:.694em 0 .194em .229em}.MJX-TEX mjx-stretchy-v[c="2961"]>mjx-end{margin-top:-.888em}.MJX-TEX mjx-stretchy-v[c="2961"]>mjx-ext{border-top-width:.638em;border-bottom-width:.858em}.MJX-TEX .mjx-stretched mjx-c[c="3008"]:before{content:"\27E8"}.MJX-TEX .mjx-stretched mjx-c[c="3009"]:before{content:"\27E9"}.MJX-TEX .mjx-stretched mjx-c[c=FE37]:before{content:"\23DE"}.MJX-TEX mjx-stretchy-h[c=FE37] mjx-beg mjx-c:before{content:"\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c=FE37] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c=FE37] mjx-end mjx-c:before{content:"\E151";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c=FE37] mjx-mid mjx-c:before{content:"\E153\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c=FE37]>mjx-ext{width:50%}.MJX-TEX .mjx-stretched mjx-c[c=FE38]:before{content:"\23DF"}.MJX-TEX mjx-stretchy-h[c=FE38] mjx-beg mjx-c:before{content:"\E152";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c=FE38] mjx-ext mjx-c:before{content:"\E154"}.MJX-TEX mjx-stretchy-h[c=FE38] mjx-end mjx-c:before{content:"\E153";padding:.333em 0 0}.MJX-TEX mjx-stretchy-h[c=FE38] mjx-mid mjx-c:before{content:"\E151\E150";padding:.12em 0 .213em}.MJX-TEX mjx-stretchy-h[c=FE38]>mjx-ext{width:50%}.MJX-TEX mjx-c[c=" "]:before{width:.25em;content:" "}.MJX-TEX mjx-c[c="!"]:before{width:.278em;padding:.716em 0 0;content:"!"}.MJX-TEX mjx-c[c="22"]:before{width:.5em;padding:.694em 0 0;content:"\22"}.MJX-TEX mjx-c[c="#"]:before{width:.833em;padding:.694em 0 .194em;content:"#"}.MJX-TEX mjx-c[c="$"]:before{width:.5em;padding:.75em 0 .056em;content:"$"}.MJX-TEX mjx-c[c="%"]:before{width:.833em;padding:.75em 0 .056em;content:"%"}.MJX-TEX mjx-c[c="&"]:before{width:.778em;padding:.716em 0 .022em;content:"&"}.MJX-TEX mjx-c[c="27"]:before{width:.278em;padding:.694em 0 0;content:"\27"}.MJX-TEX mjx-c[c="("]:before{width:.389em;padding:.75em 0 .25em;content:"("}.MJX-TEX mjx-c[c=")"]:before{width:.389em;padding:.75em 0 .25em;content:")"}.MJX-TEX mjx-c[c="*"]:before{width:.5em;padding:.75em 0 0;content:"*"}.MJX-TEX mjx-c[c="+"]:before{width:.778em;padding:.583em 0 .082em;content:"+"}.MJX-TEX mjx-c[c=","]:before{width:.278em;padding:.121em 0 .194em;content:","}.MJX-TEX mjx-c[c="-"]:before{width:.333em;padding:.252em 0 0;content:"-"}.MJX-TEX mjx-c[c="."]:before{width:.278em;padding:.12em 0 0;content:"."}.MJX-TEX mjx-c[c="/"]:before{width:.5em;padding:.75em 0 .25em;content:"/"}.MJX-TEX mjx-c[c="0"]:before{width:.5em;padding:.666em 0 .022em;content:"0"}.MJX-TEX mjx-c[c="1"]:before{width:.5em;padding:.666em 0 0;content:"1"}.MJX-TEX mjx-c[c="2"]:before{width:.5em;padding:.666em 0 0;content:"2"}.MJX-TEX mjx-c[c="3"]:before{width:.5em;padding:.665em 0 .022em;content:"3"}.MJX-TEX mjx-c[c="4"]:before{width:.5em;padding:.677em 0 0;content:"4"}.MJX-TEX mjx-c[c="5"]:before{width:.5em;padding:.666em 0 .022em;content:"5"}.MJX-TEX mjx-c[c="6"]:before{width:.5em;padding:.666em 0 .022em;content:"6"}.MJX-TEX mjx-c[c="7"]:before{width:.5em;padding:.676em 0 .022em;content:"7"}.MJX-TEX mjx-c[c="8"]:before{width:.5em;padding:.666em 0 .022em;content:"8"}.MJX-TEX mjx-c[c="9"]:before{width:.5em;padding:.666em 0 .022em;content:"9"}.MJX-TEX mjx-c[c=":"]:before{width:.278em;padding:.43em 0 0;content:":"}.MJX-TEX mjx-c[c=";"]:before{width:.278em;padding:.43em 0 .194em;content:";"}.MJX-TEX mjx-c[c="<"]:before{width:.778em;padding:.54em 0 .04em;content:"<"}.MJX-TEX mjx-c[c="="]:before{width:.778em;padding:.583em 0 .082em;content:"="}.MJX-TEX mjx-c[c=">"]:before{width:.778em;padding:.54em 0 .04em;content:">"}.MJX-TEX mjx-c[c="?"]:before{width:.472em;padding:.705em 0 0;content:"?"}.MJX-TEX mjx-c[c="@"]:before{width:.778em;padding:.705em 0 .011em;content:"@"}.MJX-TEX mjx-c[c=A]:before{width:.75em;padding:.716em 0 0;content:"A"}.MJX-TEX mjx-c[c=B]:before{width:.708em;padding:.683em 0 0;content:"B"}.MJX-TEX mjx-c[c=C]:before{width:.722em;padding:.705em 0 .021em;content:"C"}.MJX-TEX mjx-c[c=D]:before{width:.764em;padding:.683em 0 0;content:"D"}.MJX-TEX mjx-c[c=E]:before{width:.681em;padding:.68em 0 0;content:"E"}.MJX-TEX mjx-c[c=F]:before{width:.653em;padding:.68em 0 0;content:"F"}.MJX-TEX mjx-c[c=G]:before{width:.785em;padding:.705em 0 .022em;content:"G"}.MJX-TEX mjx-c[c=H]:before{width:.75em;padding:.683em 0 0;content:"H"}.MJX-TEX mjx-c[c=I]:before{width:.361em;padding:.683em 0 0;content:"I"}.MJX-TEX mjx-c[c=J]:before{width:.514em;padding:.683em 0 .022em;content:"J"}.MJX-TEX mjx-c[c=K]:before{width:.778em;padding:.683em 0 0;content:"K"}.MJX-TEX mjx-c[c=L]:before{width:.625em;padding:.683em 0 0;content:"L"}.MJX-TEX mjx-c[c=M]:before{width:.917em;padding:.683em 0 0;content:"M"}.MJX-TEX mjx-c[c=N]:before{width:.75em;padding:.683em 0 0;content:"N"}.MJX-TEX mjx-c[c=O]:before{width:.778em;padding:.705em 0 .022em;content:"O"}.MJX-TEX mjx-c[c=P]:before{width:.681em;padding:.683em 0 0;content:"P"}.MJX-TEX mjx-c[c=Q]:before{width:.778em;padding:.705em 0 .193em;content:"Q"}.MJX-TEX mjx-c[c=R]:before{width:.736em;padding:.683em 0 .022em;content:"R"}.MJX-TEX mjx-c[c=S]:before{width:.556em;padding:.705em 0 .022em;content:"S"}.MJX-TEX mjx-c[c=T]:before{width:.722em;padding:.677em 0 0;content:"T"}.MJX-TEX mjx-c[c=U]:before{width:.75em;padding:.683em 0 .022em;content:"U"}.MJX-TEX mjx-c[c=V]:before{width:.75em;padding:.683em 0 .022em;content:"V"}.MJX-TEX mjx-c[c=W]:before{width:1.028em;padding:.683em 0 .022em;content:"W"}.MJX-TEX mjx-c[c=X]:before{width:.75em;padding:.683em 0 0;content:"X"}.MJX-TEX mjx-c[c=Y]:before{width:.75em;padding:.683em 0 0;content:"Y"}.MJX-TEX mjx-c[c=Z]:before{width:.611em;padding:.683em 0 0;content:"Z"}.MJX-TEX mjx-c[c="["]:before{width:.278em;padding:.75em 0 .25em;content:"["}.MJX-TEX mjx-c[c="5C"]:before{width:.5em;padding:.75em 0 .25em;content:"\5C"}.MJX-TEX mjx-c[c="]"]:before{width:.278em;padding:.75em 0 .25em;content:"]"}.MJX-TEX mjx-c[c="^"]:before{width:.5em;padding:.694em 0 0;content:"^"}.MJX-TEX mjx-c[c=_]:before{width:.5em;padding:0 0 .062em;content:"_"}.MJX-TEX mjx-c[c="`"]:before{width:.5em;padding:.699em 0 0;content:"`"}.MJX-TEX mjx-c[c=a]:before{width:.5em;padding:.448em 0 .011em;content:"a"}.MJX-TEX mjx-c[c=b]:before{width:.556em;padding:.694em 0 .011em;content:"b"}.MJX-TEX mjx-c[c=c]:before{width:.444em;padding:.448em 0 .011em;content:"c"}.MJX-TEX mjx-c[c=d]:before{width:.556em;padding:.694em 0 .011em;content:"d"}.MJX-TEX mjx-c[c=e]:before{width:.444em;padding:.448em 0 .011em;content:"e"}.MJX-TEX mjx-c[c=f]:before{width:.306em;padding:.705em 0 0;content:"f"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c=f]:last-child:before{width:.372em}.MJX-TEX mjx-c[c=g]:before{width:.5em;padding:.453em 0 .206em;content:"g"}.MJX-TEX mjx-c[c=h]:before{width:.556em;padding:.694em 0 0;content:"h"}.MJX-TEX mjx-c[c=i]:before{width:.278em;padding:.669em 0 0;content:"i"}.MJX-TEX mjx-c[c=j]:before{width:.306em;padding:.669em 0 .205em;content:"j"}.MJX-TEX mjx-c[c=k]:before{width:.528em;padding:.694em 0 0;content:"k"}.MJX-TEX mjx-c[c=l]:before{width:.278em;padding:.694em 0 0;content:"l"}.MJX-TEX mjx-c[c=m]:before{width:.833em;padding:.442em 0 0;content:"m"}.MJX-TEX mjx-c[c=n]:before{width:.556em;padding:.442em 0 0;content:"n"}.MJX-TEX mjx-c[c=o]:before{width:.5em;padding:.448em 0 .01em;content:"o"}.MJX-TEX mjx-c[c=p]:before{width:.556em;padding:.442em 0 .194em;content:"p"}.MJX-TEX mjx-c[c=q]:before{width:.528em;padding:.442em 0 .194em;content:"q"}.MJX-TEX mjx-c[c=r]:before{width:.392em;padding:.442em 0 0;content:"r"}.MJX-TEX mjx-c[c=s]:before{width:.394em;padding:.448em 0 .011em;content:"s"}.MJX-TEX mjx-c[c=t]:before{width:.389em;padding:.615em 0 .01em;content:"t"}.MJX-TEX mjx-c[c=u]:before{width:.556em;padding:.442em 0 .011em;content:"u"}.MJX-TEX mjx-c[c=v]:before{width:.528em;padding:.431em 0 .011em;content:"v"}.MJX-TEX mjx-c[c=w]:before{width:.722em;padding:.431em 0 .011em;content:"w"}.MJX-TEX mjx-c[c=x]:before{width:.528em;padding:.431em 0 0;content:"x"}.MJX-TEX mjx-c[c=y]:before{width:.528em;padding:.431em 0 .204em;content:"y"}.MJX-TEX mjx-c[c=z]:before{width:.444em;padding:.431em 0 0;content:"z"}.MJX-TEX mjx-c[c="{"]:before{width:.5em;padding:.75em 0 .25em;content:"{"}.MJX-TEX mjx-c[c="|"]:before{width:.278em;padding:.75em 0 .249em;content:"|"}.MJX-TEX mjx-c[c="}"]:before{width:.5em;padding:.75em 0 .25em;content:"}"}.MJX-TEX mjx-c[c="~"]:before{width:.5em;padding:.318em 0 0;content:"~"}.MJX-TEX mjx-c[c=A0]:before{width:.25em;content:"\A0"}.MJX-TEX mjx-c[c=A3]:before{width:.769em;padding:.714em 0 .011em;content:"\A3";font-family:MJXZERO,MJXTEX-MI}.MJX-TEX mjx-c[c=A5]:before{width:.75em;padding:.683em 0 0;content:"\A5"}.MJX-TEX mjx-c[c=A8]:before{width:.5em;padding:.669em 0 0;content:"\A8"}.MJX-TEX mjx-c[c=AC]:before{width:.667em;padding:.356em 0 0;content:"\AC"}.MJX-TEX mjx-c[c=AE]:before{width:.947em;padding:.709em 0 .175em;content:"\AE"}.MJX-TEX mjx-c[c=AF]:before{width:.5em;padding:.59em 0 0;content:"\AF"}.MJX-TEX mjx-c[c=B0]:before{width:.5em;padding:.715em 0 0;content:"\B0"}.MJX-TEX mjx-c[c=B1]:before{width:.778em;padding:.666em 0 0;content:"\B1"}.MJX-TEX mjx-c[c=B4]:before{width:.5em;padding:.699em 0 0;content:"\B4"}.MJX-TEX mjx-c[c=B7]:before{width:.278em;padding:.31em 0 0;content:"\22C5"}.MJX-TEX mjx-c[c=D7]:before{width:.778em;padding:.491em 0 0;content:"\D7"}.MJX-TEX mjx-c[c=F0]:before{width:.556em;padding:.749em 0 .021em;content:"\F0"}.MJX-TEX mjx-c[c=F7]:before{width:.778em;padding:.537em 0 .036em;content:"\F7"}.MJX-TEX mjx-c[c="127"]:before{width:.54em;padding:.695em 0 .013em;content:"\127"}.MJX-TEX mjx-c[c="131"]:before{width:.278em;padding:.442em 0 0;content:"\131"}.MJX-TEX mjx-c[c="237"]:before{width:.306em;padding:.442em 0 .205em;content:"\237"}.MJX-TEX mjx-c[c="2B9"]:before{width:.275em;padding:.56em 0 0;content:"\2032"}.MJX-TEX mjx-c[c="2C6"]:before{width:.5em;padding:.694em 0 0;content:"\2C6"}.MJX-TEX mjx-c[c="2C7"]:before{width:.5em;padding:.644em 0 0;content:"\2C7"}.MJX-TEX mjx-c[c="2C9"]:before{width:.5em;padding:.59em 0 0;content:"\2C9"}.MJX-TEX mjx-c[c="2CA"]:before{width:.5em;padding:.699em 0 0;content:"\2CA"}.MJX-TEX mjx-c[c="2CB"]:before{width:.5em;padding:.699em 0 0;content:"\2CB"}.MJX-TEX mjx-c[c="2D8"]:before{width:.5em;padding:.694em 0 0;content:"\2D8"}.MJX-TEX mjx-c[c="2D9"]:before{width:.5em;padding:.669em 0 0;content:"\2D9"}.MJX-TEX mjx-c[c="2DA"]:before{width:.5em;padding:.715em 0 0;content:"\2DA"}.MJX-TEX mjx-c[c="2DC"]:before{width:.5em;padding:.668em 0 0;content:"\2DC"}.MJX-TEX mjx-c[c="300"]:before{width:0;padding:.699em 0 0;content:"\300"}.MJX-TEX mjx-c[c="301"]:before{width:0;padding:.699em 0 0;content:"\301"}.MJX-TEX mjx-c[c="302"]:before{width:0;padding:.694em 0 0;content:"\302"}.MJX-TEX mjx-c[c="303"]:before{width:0;padding:.668em 0 0;content:"\303"}.MJX-TEX mjx-c[c="304"]:before{width:0;padding:.59em 0 0;content:"\304"}.MJX-TEX mjx-c[c="306"]:before{width:0;padding:.694em 0 0;content:"\306"}.MJX-TEX mjx-c[c="307"]:before{width:0;padding:.669em 0 0;content:"\307"}.MJX-TEX mjx-c[c="308"]:before{width:0;padding:.669em 0 0;content:"\308"}.MJX-TEX mjx-c[c="30A"]:before{width:0;padding:.715em 0 0;content:"\30A"}.MJX-TEX mjx-c[c="30B"]:before{width:0;padding:.701em 0 0;content:"\30B"}.MJX-TEX mjx-c[c="30C"]:before{width:0;padding:.644em 0 0;content:"\30C"}.MJX-TEX mjx-c[c="338"]:before{width:0;padding:.716em 0 .215em;content:"\338"}.MJX-TEX mjx-c[c="391"]:before{width:.75em;padding:.716em 0 0;content:"A"}.MJX-TEX mjx-c[c="392"]:before{width:.708em;padding:.683em 0 0;content:"B"}.MJX-TEX mjx-c[c="393"]:before{width:.625em;padding:.68em 0 0;content:"\393"}.MJX-TEX mjx-c[c="394"]:before{width:.833em;padding:.716em 0 0;content:"\394"}.MJX-TEX mjx-c[c="395"]:before{width:.681em;padding:.68em 0 0;content:"E"}.MJX-TEX mjx-c[c="396"]:before{width:.611em;padding:.683em 0 0;content:"Z"}.MJX-TEX mjx-c[c="397"]:before{width:.75em;padding:.683em 0 0;content:"H"}.MJX-TEX mjx-c[c="398"]:before{width:.778em;padding:.705em 0 .022em;content:"\398"}.MJX-TEX mjx-c[c="399"]:before{width:.361em;padding:.683em 0 0;content:"I"}.MJX-TEX mjx-c[c="39A"]:before{width:.778em;padding:.683em 0 0;content:"K"}.MJX-TEX mjx-c[c="39B"]:before{width:.694em;padding:.716em 0 0;content:"\39B"}.MJX-TEX mjx-c[c="39C"]:before{width:.917em;padding:.683em 0 0;content:"M"}.MJX-TEX mjx-c[c="39D"]:before{width:.75em;padding:.683em 0 0;content:"N"}.MJX-TEX mjx-c[c="39E"]:before{width:.667em;padding:.677em 0 0;content:"\39E"}.MJX-TEX mjx-c[c="39F"]:before{width:.778em;padding:.705em 0 .022em;content:"O"}.MJX-TEX mjx-c[c="3A0"]:before{width:.75em;padding:.68em 0 0;content:"\3A0"}.MJX-TEX mjx-c[c="3A1"]:before{width:.681em;padding:.683em 0 0;content:"P"}.MJX-TEX mjx-c[c="3A2"]:before{width:.778em;padding:.705em 0 .022em;content:"\398"}.MJX-TEX mjx-c[c="3A3"]:before{width:.722em;padding:.683em 0 0;content:"\3A3"}.MJX-TEX mjx-c[c="3A4"]:before{width:.722em;padding:.677em 0 0;content:"T"}.MJX-TEX mjx-c[c="3A5"]:before{width:.778em;padding:.705em 0 0;content:"\3A5"}.MJX-TEX mjx-c[c="3A6"]:before{width:.722em;padding:.683em 0 0;content:"\3A6"}.MJX-TEX mjx-c[c="3A7"]:before{width:.75em;padding:.683em 0 0;content:"X"}.MJX-TEX mjx-c[c="3A8"]:before{width:.778em;padding:.683em 0 0;content:"\3A8"}.MJX-TEX mjx-c[c="3A9"]:before{width:.722em;padding:.704em 0 0;content:"\3A9"}.MJX-TEX mjx-c[c="3D2"]:before{width:.778em;padding:.705em 0 0;content:"\3A5"}.MJX-TEX mjx-c[c="3DC"]:before{width:.653em;padding:.68em 0 0;content:"F"}.MJX-TEX mjx-c[c="3DD"]:before{width:.778em;padding:.605em 0 .085em;content:"\3DD"}.MJX-TEX mjx-c[c="3F0"]:before{width:.667em;padding:.434em 0 .006em;content:"\3F0"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="3F0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="3F0"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="3F6"]:before{width:.429em;padding:.44em 0 0;content:"\220D"}.MJX-TEX mjx-c[c="2000"]:before{width:.5em;content:"\2000"}.MJX-TEX mjx-c[c="2001"]:before{width:1em;content:"\2001"}.MJX-TEX mjx-c[c="2002"]:before{width:.5em;content:"\2002"}.MJX-TEX mjx-c[c="2003"]:before{width:1em;content:"\2003"}.MJX-TEX mjx-c[c="2004"]:before{width:.333em;content:"\2004"}.MJX-TEX mjx-c[c="2005"]:before{width:.25em;content:"\2005"}.MJX-TEX mjx-c[c="2006"]:before{width:.167em;content:"\2006"}.MJX-TEX mjx-c[c="2009"]:before{width:.167em;content:"\2009"}.MJX-TEX mjx-c[c="200A"]:before{width:.1em;content:"\200A"}.MJX-TEX mjx-c[c="200B"]:before{width:0;content:"\200B"}.MJX-TEX mjx-c[c="200C"]:before{width:0;content:"\200C"}.MJX-TEX mjx-c[c="2013"]:before{width:.5em;padding:.285em 0 0;content:"\2013"}.MJX-TEX mjx-c[c="2014"]:before,.MJX-TEX mjx-c[c="2015"]:before{width:1em;padding:.285em 0 0;content:"\2014"}.MJX-TEX mjx-c[c="2016"]:before{width:.5em;padding:.75em 0 .25em;content:"\2225"}.MJX-TEX mjx-c[c="2017"]:before{width:.5em;padding:0 0 .062em;content:"_"}.MJX-TEX mjx-c[c="2018"]:before{width:.278em;padding:.694em 0 0;content:"\2018"}.MJX-TEX mjx-c[c="2019"]:before{width:.278em;padding:.694em 0 0;content:"\2019"}.MJX-TEX mjx-c[c="201C"]:before{width:.5em;padding:.694em 0 0;content:"\201C"}.MJX-TEX mjx-c[c="201D"]:before{width:.5em;padding:.694em 0 0;content:"\201D"}.MJX-TEX mjx-c[c="2020"]:before{width:.444em;padding:.705em 0 .216em;content:"\2020"}.MJX-TEX mjx-c[c="2021"]:before{width:.444em;padding:.705em 0 .205em;content:"\2021"}.MJX-TEX mjx-c[c="2022"]:before{width:.5em;padding:.444em 0 0;content:"\2219"}.MJX-TEX mjx-c[c="2026"]:before{width:1.172em;padding:.12em 0 0;content:"\2026"}.MJX-TEX mjx-c[c="2032"]:before{width:.275em;padding:.56em 0 0;content:"\2032"}.MJX-TEX mjx-c[c="2033"]:before{width:.55em;padding:.56em 0 0;content:"\2032\2032"}.MJX-TEX mjx-c[c="2034"]:before{width:.825em;padding:.56em 0 0;content:"\2032\2032\2032"}.MJX-TEX mjx-c[c="2035"]:before{width:.275em;padding:.56em 0 0;content:"\2035"}.MJX-TEX mjx-c[c="2036"]:before{width:.55em;padding:.56em 0 0;content:"\2035\2035"}.MJX-TEX mjx-c[c="2037"]:before{width:.825em;padding:.56em 0 0;content:"\2035\2035\2035"}.MJX-TEX mjx-c[c="203E"]:before{width:.5em;padding:.59em 0 0;content:"\2C9"}.MJX-TEX mjx-c[c="2044"]:before{width:.5em;padding:.75em 0 .25em;content:"/"}.MJX-TEX mjx-c[c="2057"]:before{width:1.1em;padding:.56em 0 0;content:"\2032\2032\2032\2032"}.MJX-TEX mjx-c[c="2061"]:before{width:0;content:"\2061"}.MJX-TEX mjx-c[c="2062"]:before{width:0;content:"\2062"}.MJX-TEX mjx-c[c="2063"]:before{width:0;content:"\2063"}.MJX-TEX mjx-c[c="2064"]:before{width:0;content:"\2064"}.MJX-TEX mjx-c[c="20D7"]:before{width:.5em;padding:.714em 0 0;content:"\2192";font-family:MJXZERO,MJXTEX-V}.MJX-TEX mjx-c[c="2102"]:before{width:.722em;padding:.702em 0 .019em;content:"C";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="210B"]:before{width:.969em;padding:.717em 0 .036em;content:"H";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="210B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="210B"]:last-child:before{width:1.241em}.MJX-TEX mjx-c[c="210C"]:before{width:.72em;padding:.666em 0 .133em;content:"H";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="210D"]:before{width:.778em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="210E"]:before{width:.576em;padding:.694em 0 .011em;content:"h";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="210F"]:before{width:.54em;padding:.695em 0 .013em;content:"\210F";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="2110"]:before{width:1.052em;padding:.717em 0 .314em;content:"J";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2110"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2110"]:last-child:before{width:1.133em}.MJX-TEX mjx-c[c="2111"]:before{width:.554em;padding:.686em 0 .026em;content:"I";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="2112"]:before{width:.874em;padding:.717em 0 .017em;content:"L";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2112"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2112"]:last-child:before{width:1.035em}.MJX-TEX mjx-c[c="2113"]:before{width:.417em;padding:.705em 0 .02em;content:"\2113"}.MJX-TEX mjx-c[c="2115"]:before{width:.722em;padding:.683em 0 .02em;content:"N";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="2118"]:before{width:.636em;padding:.453em 0 .216em;content:"\2118"}.MJX-TEX mjx-c[c="2119"]:before{width:.611em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="211A"]:before{width:.778em;padding:.701em 0 .181em;content:"Q";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="211B"]:before{width:.85em;padding:.717em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="211C"]:before{width:.828em;padding:.686em 0 .026em;content:"R";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="211D"]:before{width:.722em;padding:.683em 0 0;content:"R";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="2124"]:before{width:.667em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="2126"]:before{width:.722em;padding:.704em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="2127"]:before{width:.722em;padding:.684em 0 .022em;content:"\2127"}.MJX-TEX mjx-c[c="2128"]:before{width:.602em;padding:.729em 0 .139em;content:"Z";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="212C"]:before{width:.908em;padding:.708em 0 .028em;content:"B";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="212D"]:before{width:.613em;padding:.685em 0 .024em;content:"C";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="2130"]:before{width:.562em;padding:.707em 0 .008em;content:"E";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2130"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2130"]:last-child:before{width:.718em}.MJX-TEX mjx-c[c="2131"]:before{width:.895em;padding:.735em 0 .036em;content:"F";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2131"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2131"]:last-child:before{width:.99em}.MJX-TEX mjx-c[c="2132"]:before{width:.556em;padding:.695em 0 0;content:"\2132"}.MJX-TEX mjx-c[c="2133"]:before{width:1.08em;padding:.721em 0 .05em;content:"M";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2133"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2133"]:last-child:before{width:1.216em}.MJX-TEX mjx-c[c="2135"]:before{width:.611em;padding:.694em 0 0;content:"\2135"}.MJX-TEX mjx-c[c="2136"]:before{width:.667em;padding:.763em 0 .021em;content:"\2136"}.MJX-TEX mjx-c[c="2137"]:before{width:.444em;padding:.764em 0 .043em;content:"\2137"}.MJX-TEX mjx-c[c="2138"]:before{width:.667em;padding:.764em 0 .043em;content:"\2138"}.MJX-TEX mjx-c[c="2141"]:before{width:.639em;padding:.705em 0 .023em;content:"\2141"}.MJX-TEX mjx-c[c="2190"]:before{width:1em;padding:.511em 0 .011em;content:"\2190"}.MJX-TEX mjx-c[c="2191"]:before{width:.5em;padding:.694em 0 .193em;content:"\2191"}.MJX-TEX mjx-c[c="2192"]:before{width:1em;padding:.511em 0 .011em;content:"\2192"}.MJX-TEX mjx-c[c="2193"]:before{width:.5em;padding:.694em 0 .194em;content:"\2193"}.MJX-TEX mjx-c[c="2194"]:before{width:1em;padding:.511em 0 .011em;content:"\2194"}.MJX-TEX mjx-c[c="2195"]:before{width:.5em;padding:.772em 0 .272em;content:"\2195"}.MJX-TEX mjx-c[c="2196"]:before{width:1em;padding:.72em 0 .195em;content:"\2196"}.MJX-TEX mjx-c[c="2197"]:before{width:1em;padding:.72em 0 .195em;content:"\2197"}.MJX-TEX mjx-c[c="2198"]:before{width:1em;padding:.695em 0 .22em;content:"\2198"}.MJX-TEX mjx-c[c="2199"]:before{width:1em;padding:.695em 0 .22em;content:"\2199"}.MJX-TEX mjx-c[c="219A"]:before{width:1em;padding:.437em 0 0;content:"\219A"}.MJX-TEX mjx-c[c="219B"]:before{width:1em;padding:.437em 0 0;content:"\219B"}.MJX-TEX mjx-c[c="219E"]:before{width:1em;padding:.417em 0 0;content:"\219E"}.MJX-TEX mjx-c[c="21A0"]:before{width:1em;padding:.417em 0 0;content:"\21A0"}.MJX-TEX mjx-c[c="21A2"]:before{width:1.111em;padding:.417em 0 0;content:"\21A2"}.MJX-TEX mjx-c[c="21A3"]:before{width:1.111em;padding:.417em 0 0;content:"\21A3"}.MJX-TEX mjx-c[c="21A6"]:before{width:1em;padding:.511em 0 .011em;content:"\21A6"}.MJX-TEX mjx-c[c="21A9"]:before{width:1.126em;padding:.511em 0 .011em;content:"\21A9"}.MJX-TEX mjx-c[c="21AA"]:before{width:1.126em;padding:.511em 0 .011em;content:"\21AA"}.MJX-TEX mjx-c[c="21AB"]:before{width:1em;padding:.575em 0 .041em;content:"\21AB"}.MJX-TEX mjx-c[c="21AC"]:before{width:1em;padding:.575em 0 .041em;content:"\21AC"}.MJX-TEX mjx-c[c="21AD"]:before{width:1.389em;padding:.417em 0 0;content:"\21AD"}.MJX-TEX mjx-c[c="21AE"]:before{width:1em;padding:.437em 0 0;content:"\21AE"}.MJX-TEX mjx-c[c="21B0"]:before{width:.5em;padding:.722em 0 0;content:"\21B0"}.MJX-TEX mjx-c[c="21B1"]:before{width:.5em;padding:.722em 0 0;content:"\21B1"}.MJX-TEX mjx-c[c="21B6"]:before{width:1em;padding:.461em 0 0;content:"\21B6"}.MJX-TEX mjx-c[c="21B7"]:before{width:1em;padding:.46em 0 0;content:"\21B7"}.MJX-TEX mjx-c[c="21BA"]:before{width:.778em;padding:.65em 0 .083em;content:"\21BA"}.MJX-TEX mjx-c[c="21BB"]:before{width:.778em;padding:.65em 0 .083em;content:"\21BB"}.MJX-TEX mjx-c[c="21BC"]:before{width:1em;padding:.511em 0 0;content:"\21BC"}.MJX-TEX mjx-c[c="21BD"]:before{width:1em;padding:.27em 0 .011em;content:"\21BD"}.MJX-TEX mjx-c[c="21BE"]:before{width:.417em;padding:.694em 0 .194em;content:"\21BE"}.MJX-TEX mjx-c[c="21BF"]:before{width:.417em;padding:.694em 0 .194em;content:"\21BF"}.MJX-TEX mjx-c[c="21C0"]:before{width:1em;padding:.511em 0 0;content:"\21C0"}.MJX-TEX mjx-c[c="21C1"]:before{width:1em;padding:.27em 0 .011em;content:"\21C1"}.MJX-TEX mjx-c[c="21C2"]:before{width:.417em;padding:.694em 0 .194em;content:"\21C2"}.MJX-TEX mjx-c[c="21C3"]:before{width:.417em;padding:.694em 0 .194em;content:"\21C3"}.MJX-TEX mjx-c[c="21C4"]:before{width:1em;padding:.667em 0 0;content:"\21C4"}.MJX-TEX mjx-c[c="21C6"]:before{width:1em;padding:.667em 0 0;content:"\21C6"}.MJX-TEX mjx-c[c="21C7"]:before{width:1em;padding:.583em 0 .083em;content:"\21C7"}.MJX-TEX mjx-c[c="21C8"]:before{width:.833em;padding:.694em 0 .193em;content:"\21C8"}.MJX-TEX mjx-c[c="21C9"]:before{width:1em;padding:.583em 0 .083em;content:"\21C9"}.MJX-TEX mjx-c[c="21CA"]:before{width:.833em;padding:.694em 0 .194em;content:"\21CA"}.MJX-TEX mjx-c[c="21CB"]:before{width:1em;padding:.514em 0 .014em;content:"\21CB"}.MJX-TEX mjx-c[c="21CC"]:before{width:1em;padding:.671em 0 .011em;content:"\21CC"}.MJX-TEX mjx-c[c="21CD"]:before{width:1em;padding:.534em 0 .035em;content:"\21CD"}.MJX-TEX mjx-c[c="21CE"]:before{width:1em;padding:.534em 0 .037em;content:"\21CE"}.MJX-TEX mjx-c[c="21CF"]:before{width:1em;padding:.534em 0 .035em;content:"\21CF"}.MJX-TEX mjx-c[c="21D0"]:before{width:1em;padding:.525em 0 .024em;content:"\21D0"}.MJX-TEX mjx-c[c="21D1"]:before{width:.611em;padding:.694em 0 .194em;content:"\21D1"}.MJX-TEX mjx-c[c="21D2"]:before{width:1em;padding:.525em 0 .024em;content:"\21D2"}.MJX-TEX mjx-c[c="21D3"]:before{width:.611em;padding:.694em 0 .194em;content:"\21D3"}.MJX-TEX mjx-c[c="21D4"]:before{width:1em;padding:.526em 0 .025em;content:"\21D4"}.MJX-TEX mjx-c[c="21D5"]:before{width:.611em;padding:.772em 0 .272em;content:"\21D5"}.MJX-TEX mjx-c[c="21DA"]:before{width:1em;padding:.611em 0 .111em;content:"\21DA"}.MJX-TEX mjx-c[c="21DB"]:before{width:1em;padding:.611em 0 .111em;content:"\21DB"}.MJX-TEX mjx-c[c="21DD"]:before{width:1em;padding:.417em 0 0;content:"\21DD"}.MJX-TEX mjx-c[c="21E0"]:before{width:1.334em;padding:.437em 0 0;content:"\21E0"}.MJX-TEX mjx-c[c="21E2"]:before{width:1.334em;padding:.437em 0 0;content:"\21E2"}.MJX-TEX mjx-c[c="2200"]:before{width:.556em;padding:.694em 0 .022em;content:"\2200"}.MJX-TEX mjx-c[c="2201"]:before{width:.5em;padding:.846em 0 .021em;content:"\2201"}.MJX-TEX mjx-c[c="2202"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202"}.MJX-TEX mjx-c[c="2203"]:before{width:.556em;padding:.694em 0 0;content:"\2203"}.MJX-TEX mjx-c[c="2204"]:before{width:.556em;padding:.716em 0 .215em;content:"\2203\338"}.MJX-TEX mjx-c[c="2205"]:before{width:.5em;padding:.772em 0 .078em;content:"\2205"}.MJX-TEX mjx-c[c="2206"]:before{width:.833em;padding:.716em 0 0;content:"\394"}.MJX-TEX mjx-c[c="2207"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207"}.MJX-TEX mjx-c[c="2208"]:before{width:.667em;padding:.54em 0 .04em;content:"\2208"}.MJX-TEX mjx-c[c="2209"]:before{width:.667em;padding:.716em 0 .215em;content:"\2209"}.MJX-TEX mjx-c[c="220B"]:before{width:.667em;padding:.54em 0 .04em;content:"\220B"}.MJX-TEX mjx-c[c="220C"]:before{width:.667em;padding:.716em 0 .215em;content:"\220B\338"}.MJX-TEX mjx-c[c="220D"]:before{width:.429em;padding:.44em 0 0;content:"\220D"}.MJX-TEX mjx-c[c="220F"]:before{width:.944em;padding:.75em 0 .25em;content:"\220F"}.MJX-TEX mjx-c[c="2210"]:before{width:.944em;padding:.75em 0 .25em;content:"\2210"}.MJX-TEX mjx-c[c="2211"]:before{width:1.056em;padding:.75em 0 .25em;content:"\2211"}.MJX-TEX mjx-c[c="2212"]:before{width:.778em;padding:.583em 0 .082em;content:"\2212"}.MJX-TEX mjx-c[c="2213"]:before{width:.778em;padding:.5em 0 .166em;content:"\2213"}.MJX-TEX mjx-c[c="2214"]:before{width:.778em;padding:.766em 0 .093em;content:"\2214"}.MJX-TEX mjx-c[c="2215"]:before{width:.5em;padding:.75em 0 .25em;content:"\2215"}.MJX-TEX mjx-c[c="2216"]:before{width:.778em;padding:.43em 0 .023em;content:"\2216";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="2217"]:before{width:.5em;padding:.465em 0 0;content:"\2217"}.MJX-TEX mjx-c[c="2218"]:before{width:.5em;padding:.444em 0 0;content:"\2218"}.MJX-TEX mjx-c[c="2219"]:before{width:.5em;padding:.444em 0 0;content:"\2219"}.MJX-TEX mjx-c[c="221A"]:before{width:.833em;padding:.8em 0 .2em;content:"\221A"}.MJX-TEX mjx-c[c="221D"]:before{width:.778em;padding:.442em 0 .011em;content:"\221D"}.MJX-TEX mjx-c[c="221E"]:before{width:1em;padding:.442em 0 .011em;content:"\221E"}.MJX-TEX mjx-c[c="2220"]:before{width:.722em;padding:.694em 0 0;content:"\2220"}.MJX-TEX mjx-c[c="2221"]:before{width:.722em;padding:.714em 0 .02em;content:"\2221"}.MJX-TEX mjx-c[c="2222"]:before{width:.722em;padding:.551em 0 .051em;content:"\2222"}.MJX-TEX mjx-c[c="2223"]:before{width:.278em;padding:.75em 0 .249em;content:"\2223"}.MJX-TEX mjx-c[c="2224"]:before{width:.278em;padding:.75em 0 .252em;content:"\2224"}.MJX-TEX mjx-c[c="2225"]:before{width:.5em;padding:.75em 0 .25em;content:"\2225"}.MJX-TEX mjx-c[c="2226"]:before{width:.5em;padding:.75em 0 .25em;content:"\2226"}.MJX-TEX mjx-c[c="2227"]:before{width:.667em;padding:.598em 0 .022em;content:"\2227"}.MJX-TEX mjx-c[c="2228"]:before{width:.667em;padding:.598em 0 .022em;content:"\2228"}.MJX-TEX mjx-c[c="2229"]:before{width:.667em;padding:.598em 0 .022em;content:"\2229"}.MJX-TEX mjx-c[c="222A"]:before{width:.667em;padding:.598em 0 .022em;content:"\222A"}.MJX-TEX mjx-c[c="222B"]:before{width:.417em;padding:.716em 0 .216em;content:"\222B"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="222B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="222B"]:last-child:before{width:.472em}.MJX-TEX mjx-c[c="222C"]:before{width:.819em;padding:.805em 0 .306em;content:"\222C"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="222C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="222C"]:last-child:before{width:.957em}.MJX-TEX mjx-c[c="222D"]:before{width:1.166em;padding:.805em 0 .306em;content:"\222D"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="222D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="222D"]:last-child:before{width:1.304em}.MJX-TEX mjx-c[c="222E"]:before{width:.472em;padding:.805em 0 .306em;content:"\222E"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="222E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="222E"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="2234"]:before{width:.667em;padding:.471em 0 .082em;content:"\2234"}.MJX-TEX mjx-c[c="2235"]:before{width:.667em;padding:.471em 0 .082em;content:"\2235"}.MJX-TEX mjx-c[c="223C"]:before{width:.778em;padding:.367em 0 0;content:"\223C"}.MJX-TEX mjx-c[c="223D"]:before{width:.778em;padding:.367em 0 0;content:"\223D"}.MJX-TEX mjx-c[c="2240"]:before{width:.278em;padding:.583em 0 .083em;content:"\2240"}.MJX-TEX mjx-c[c="2241"]:before{width:.778em;padding:.467em 0 0;content:"\2241"}.MJX-TEX mjx-c[c="2242"]:before{width:.778em;padding:.463em 0 0;content:"\2242"}.MJX-TEX mjx-c[c="2243"]:before{width:.778em;padding:.464em 0 0;content:"\2243"}.MJX-TEX mjx-c[c="2244"]:before{width:.778em;padding:.716em 0 .215em;content:"\2243\338"}.MJX-TEX mjx-c[c="2245"]:before{width:.778em;padding:.589em 0 0;content:"\2245"}.MJX-TEX mjx-c[c="2246"]:before,.MJX-TEX mjx-c[c="2247"]:before{width:.778em;padding:.652em 0 .155em;content:"\2246"}.MJX-TEX mjx-c[c="2248"]:before{width:.778em;padding:.483em 0 0;content:"\2248"}.MJX-TEX mjx-c[c="2249"]:before{width:.778em;padding:.716em 0 .215em;content:"\2248\338"}.MJX-TEX mjx-c[c="224A"]:before{width:.778em;padding:.579em 0 .039em;content:"\224A"}.MJX-TEX mjx-c[c="224D"]:before{width:.778em;padding:.484em 0 0;content:"\224D"}.MJX-TEX mjx-c[c="224E"]:before{width:.778em;padding:.492em 0 0;content:"\224E"}.MJX-TEX mjx-c[c="224F"]:before{width:.778em;padding:.492em 0 0;content:"\224F"}.MJX-TEX mjx-c[c="2250"]:before{width:.778em;padding:.67em 0 0;content:"\2250"}.MJX-TEX mjx-c[c="2251"]:before{width:.778em;padding:.609em 0 .108em;content:"\2251"}.MJX-TEX mjx-c[c="2252"]:before{width:.778em;padding:.601em 0 .101em;content:"\2252"}.MJX-TEX mjx-c[c="2253"]:before{width:.778em;padding:.601em 0 .102em;content:"\2253"}.MJX-TEX mjx-c[c="2256"]:before{width:.778em;padding:.367em 0 0;content:"\2256"}.MJX-TEX mjx-c[c="2257"]:before{width:.778em;padding:.721em 0 0;content:"\2257"}.MJX-TEX mjx-c[c="225C"]:before{width:.778em;padding:.859em 0 0;content:"\225C"}.MJX-TEX mjx-c[c="2260"]:before{width:.778em;padding:.716em 0 .215em;content:"\2260"}.MJX-TEX mjx-c[c="2261"]:before{width:.778em;padding:.464em 0 0;content:"\2261"}.MJX-TEX mjx-c[c="2262"]:before{width:.778em;padding:.716em 0 .215em;content:"\2261\338"}.MJX-TEX mjx-c[c="2264"]:before{width:.778em;padding:.636em 0 .138em;content:"\2264"}.MJX-TEX mjx-c[c="2265"]:before{width:.778em;padding:.636em 0 .138em;content:"\2265"}.MJX-TEX mjx-c[c="2266"]:before{width:.778em;padding:.753em 0 .175em;content:"\2266"}.MJX-TEX mjx-c[c="2267"]:before{width:.778em;padding:.753em 0 .175em;content:"\2267"}.MJX-TEX mjx-c[c="2268"]:before{width:.778em;padding:.752em 0 .286em;content:"\2268"}.MJX-TEX mjx-c[c="2269"]:before{width:.778em;padding:.752em 0 .286em;content:"\2269"}.MJX-TEX mjx-c[c="226A"]:before{width:1em;padding:.568em 0 .067em;content:"\226A"}.MJX-TEX mjx-c[c="226B"]:before{width:1em;padding:.567em 0 .067em;content:"\226B"}.MJX-TEX mjx-c[c="226C"]:before{width:.5em;padding:.75em 0 .25em;content:"\226C"}.MJX-TEX mjx-c[c="226D"]:before{width:.778em;padding:.716em 0 .215em;content:"\224D\338"}.MJX-TEX mjx-c[c="226E"]:before{width:.778em;padding:.708em 0 .209em;content:"\226E"}.MJX-TEX mjx-c[c="226F"]:before{width:.778em;padding:.708em 0 .209em;content:"\226F"}.MJX-TEX mjx-c[c="2270"]:before{width:.778em;padding:.801em 0 .303em;content:"\2270"}.MJX-TEX mjx-c[c="2271"]:before{width:.778em;padding:.801em 0 .303em;content:"\2271"}.MJX-TEX mjx-c[c="2272"]:before{width:.778em;padding:.732em 0 .228em;content:"\2272"}.MJX-TEX mjx-c[c="2273"]:before{width:.778em;padding:.732em 0 .228em;content:"\2273"}.MJX-TEX mjx-c[c="2274"]:before{width:.778em;padding:.732em 0 .228em;content:"\2272\338"}.MJX-TEX mjx-c[c="2275"]:before{width:.778em;padding:.732em 0 .228em;content:"\2273\338"}.MJX-TEX mjx-c[c="2276"]:before{width:.778em;padding:.681em 0 .253em;content:"\2276"}.MJX-TEX mjx-c[c="2277"]:before{width:.778em;padding:.681em 0 .253em;content:"\2277"}.MJX-TEX mjx-c[c="2278"]:before{width:.778em;padding:.716em 0 .253em;content:"\2276\338"}.MJX-TEX mjx-c[c="2279"]:before{width:.778em;padding:.716em 0 .253em;content:"\2277\338"}.MJX-TEX mjx-c[c="227A"]:before{width:.778em;padding:.539em 0 .041em;content:"\227A"}.MJX-TEX mjx-c[c="227B"]:before{width:.778em;padding:.539em 0 .041em;content:"\227B"}.MJX-TEX mjx-c[c="227C"]:before{width:.778em;padding:.58em 0 .153em;content:"\227C"}.MJX-TEX mjx-c[c="227D"]:before{width:.778em;padding:.58em 0 .154em;content:"\227D"}.MJX-TEX mjx-c[c="227E"]:before{width:.778em;padding:.732em 0 .228em;content:"\227E"}.MJX-TEX mjx-c[c="227F"]:before{width:.778em;padding:.732em 0 .228em;content:"\227F"}.MJX-TEX mjx-c[c="2280"]:before{width:.778em;padding:.705em 0 .208em;content:"\2280"}.MJX-TEX mjx-c[c="2281"]:before{width:.778em;padding:.705em 0 .208em;content:"\2281"}.MJX-TEX mjx-c[c="2282"]:before{width:.778em;padding:.54em 0 .04em;content:"\2282"}.MJX-TEX mjx-c[c="2283"]:before{width:.778em;padding:.54em 0 .04em;content:"\2283"}.MJX-TEX mjx-c[c="2284"]:before{width:.778em;padding:.716em 0 .215em;content:"\2282\338"}.MJX-TEX mjx-c[c="2285"]:before{width:.778em;padding:.716em 0 .215em;content:"\2283\338"}.MJX-TEX mjx-c[c="2286"]:before{width:.778em;padding:.636em 0 .138em;content:"\2286"}.MJX-TEX mjx-c[c="2287"]:before{width:.778em;padding:.636em 0 .138em;content:"\2287"}.MJX-TEX mjx-c[c="2288"]:before{width:.778em;padding:.801em 0 .303em;content:"\2288"}.MJX-TEX mjx-c[c="2289"]:before{width:.778em;padding:.801em 0 .303em;content:"\2289"}.MJX-TEX mjx-c[c="228A"]:before{width:.778em;padding:.635em 0 .241em;content:"\228A"}.MJX-TEX mjx-c[c="228B"]:before{width:.778em;padding:.635em 0 .241em;content:"\228B"}.MJX-TEX mjx-c[c="228E"]:before{width:.667em;padding:.598em 0 .022em;content:"\228E"}.MJX-TEX mjx-c[c="228F"]:before{width:.778em;padding:.539em 0 .041em;content:"\228F"}.MJX-TEX mjx-c[c="2290"]:before{width:.778em;padding:.539em 0 .041em;content:"\2290"}.MJX-TEX mjx-c[c="2291"]:before{width:.778em;padding:.636em 0 .138em;content:"\2291"}.MJX-TEX mjx-c[c="2292"]:before{width:.778em;padding:.636em 0 .138em;content:"\2292"}.MJX-TEX mjx-c[c="2293"]:before{width:.667em;padding:.598em 0 0;content:"\2293"}.MJX-TEX mjx-c[c="2294"]:before{width:.667em;padding:.598em 0 0;content:"\2294"}.MJX-TEX mjx-c[c="2295"]:before{width:.778em;padding:.583em 0 .083em;content:"\2295"}.MJX-TEX mjx-c[c="2296"]:before{width:.778em;padding:.583em 0 .083em;content:"\2296"}.MJX-TEX mjx-c[c="2297"]:before{width:.778em;padding:.583em 0 .083em;content:"\2297"}.MJX-TEX mjx-c[c="2298"]:before{width:.778em;padding:.583em 0 .083em;content:"\2298"}.MJX-TEX mjx-c[c="2299"]:before{width:.778em;padding:.583em 0 .083em;content:"\2299"}.MJX-TEX mjx-c[c="229A"]:before{width:.778em;padding:.582em 0 .082em;content:"\229A"}.MJX-TEX mjx-c[c="229B"]:before{width:.778em;padding:.582em 0 .082em;content:"\229B"}.MJX-TEX mjx-c[c="229D"]:before{width:.778em;padding:.582em 0 .082em;content:"\229D"}.MJX-TEX mjx-c[c="229E"]:before{width:.778em;padding:.689em 0 0;content:"\229E"}.MJX-TEX mjx-c[c="229F"]:before{width:.778em;padding:.689em 0 0;content:"\229F"}.MJX-TEX mjx-c[c="22A0"]:before{width:.778em;padding:.689em 0 0;content:"\22A0"}.MJX-TEX mjx-c[c="22A1"]:before{width:.778em;padding:.689em 0 0;content:"\22A1"}.MJX-TEX mjx-c[c="22A2"]:before{width:.611em;padding:.694em 0 0;content:"\22A2"}.MJX-TEX mjx-c[c="22A3"]:before{width:.611em;padding:.694em 0 0;content:"\22A3"}.MJX-TEX mjx-c[c="22A4"]:before{width:.778em;padding:.668em 0 0;content:"\22A4"}.MJX-TEX mjx-c[c="22A5"]:before{width:.778em;padding:.668em 0 0;content:"\22A5"}.MJX-TEX mjx-c[c="22A8"]:before{width:.867em;padding:.75em 0 .249em;content:"\22A8"}.MJX-TEX mjx-c[c="22A9"]:before{width:.722em;padding:.694em 0 0;content:"\22A9"}.MJX-TEX mjx-c[c="22AA"]:before{width:.889em;padding:.694em 0 0;content:"\22AA"}.MJX-TEX mjx-c[c="22AC"]:before{width:.611em;padding:.695em 0 0;content:"\22AC"}.MJX-TEX mjx-c[c="22AD"]:before{width:.611em;padding:.695em 0 0;content:"\22AD"}.MJX-TEX mjx-c[c="22AE"]:before{width:.722em;padding:.695em 0 0;content:"\22AE"}.MJX-TEX mjx-c[c="22AF"]:before{width:.722em;padding:.695em 0 0;content:"\22AF"}.MJX-TEX mjx-c[c="22B2"]:before{width:.778em;padding:.539em 0 .041em;content:"\22B2"}.MJX-TEX mjx-c[c="22B3"]:before{width:.778em;padding:.539em 0 .041em;content:"\22B3"}.MJX-TEX mjx-c[c="22B4"]:before{width:.778em;padding:.636em 0 .138em;content:"\22B4"}.MJX-TEX mjx-c[c="22B5"]:before{width:.778em;padding:.636em 0 .138em;content:"\22B5"}.MJX-TEX mjx-c[c="22B8"]:before{width:1.111em;padding:.408em 0 0;content:"\22B8"}.MJX-TEX mjx-c[c="22BA"]:before{width:.556em;padding:.431em 0 .212em;content:"\22BA"}.MJX-TEX mjx-c[c="22BB"]:before{width:.611em;padding:.716em 0 0;content:"\22BB"}.MJX-TEX mjx-c[c="22BC"]:before{width:.611em;padding:.716em 0 0;content:"\22BC"}.MJX-TEX mjx-c[c="22C0"]:before{width:.833em;padding:.75em 0 .249em;content:"\22C0"}.MJX-TEX mjx-c[c="22C1"]:before{width:.833em;padding:.75em 0 .249em;content:"\22C1"}.MJX-TEX mjx-c[c="22C2"]:before{width:.833em;padding:.75em 0 .249em;content:"\22C2"}.MJX-TEX mjx-c[c="22C3"]:before{width:.833em;padding:.75em 0 .249em;content:"\22C3"}.MJX-TEX mjx-c[c="22C4"]:before{width:.5em;padding:.488em 0 0;content:"\22C4"}.MJX-TEX mjx-c[c="22C5"]:before{width:.278em;padding:.31em 0 0;content:"\22C5"}.MJX-TEX mjx-c[c="22C6"]:before{width:.5em;padding:.486em 0 0;content:"\22C6"}.MJX-TEX mjx-c[c="22C7"]:before{width:.778em;padding:.545em 0 .044em;content:"\22C7"}.MJX-TEX mjx-c[c="22C8"]:before{width:.9em;padding:.505em 0 .005em;content:"\22C8"}.MJX-TEX mjx-c[c="22C9"]:before{width:.778em;padding:.492em 0 0;content:"\22C9"}.MJX-TEX mjx-c[c="22CA"]:before{width:.778em;padding:.492em 0 0;content:"\22CA"}.MJX-TEX mjx-c[c="22CB"]:before{width:.778em;padding:.694em 0 .022em;content:"\22CB"}.MJX-TEX mjx-c[c="22CC"]:before{width:.778em;padding:.694em 0 .022em;content:"\22CC"}.MJX-TEX mjx-c[c="22CD"]:before{width:.778em;padding:.464em 0 0;content:"\22CD"}.MJX-TEX mjx-c[c="22CE"]:before{width:.76em;padding:.578em 0 .021em;content:"\22CE"}.MJX-TEX mjx-c[c="22CF"]:before{width:.76em;padding:.578em 0 .022em;content:"\22CF"}.MJX-TEX mjx-c[c="22D0"]:before{width:.778em;padding:.54em 0 .04em;content:"\22D0"}.MJX-TEX mjx-c[c="22D1"]:before{width:.778em;padding:.54em 0 .04em;content:"\22D1"}.MJX-TEX mjx-c[c="22D2"]:before{width:.667em;padding:.598em 0 .022em;content:"\22D2"}.MJX-TEX mjx-c[c="22D3"]:before{width:.667em;padding:.598em 0 .022em;content:"\22D3"}.MJX-TEX mjx-c[c="22D4"]:before{width:.667em;padding:.736em 0 .022em;content:"\22D4"}.MJX-TEX mjx-c[c="22D6"]:before{width:.778em;padding:.541em 0 .041em;content:"\22D6"}.MJX-TEX mjx-c[c="22D7"]:before{width:.778em;padding:.541em 0 .041em;content:"\22D7"}.MJX-TEX mjx-c[c="22D8"]:before{width:1.333em;padding:.568em 0 .067em;content:"\22D8"}.MJX-TEX mjx-c[c="22D9"]:before{width:1.333em;padding:.568em 0 .067em;content:"\22D9"}.MJX-TEX mjx-c[c="22DA"]:before{width:.778em;padding:.886em 0 .386em;content:"\22DA"}.MJX-TEX mjx-c[c="22DB"]:before{width:.778em;padding:.886em 0 .386em;content:"\22DB"}.MJX-TEX mjx-c[c="22DE"]:before{width:.778em;padding:.734em 0 0;content:"\22DE"}.MJX-TEX mjx-c[c="22DF"]:before{width:.778em;padding:.734em 0 0;content:"\22DF"}.MJX-TEX mjx-c[c="22E0"]:before{width:.778em;padding:.801em 0 .303em;content:"\22E0"}.MJX-TEX mjx-c[c="22E1"]:before{width:.778em;padding:.801em 0 .303em;content:"\22E1"}.MJX-TEX mjx-c[c="22E2"]:before{width:.778em;padding:.716em 0 .215em;content:"\2291\338"}.MJX-TEX mjx-c[c="22E3"]:before{width:.778em;padding:.716em 0 .215em;content:"\2292\338"}.MJX-TEX mjx-c[c="22E6"]:before{width:.778em;padding:.73em 0 .359em;content:"\22E6"}.MJX-TEX mjx-c[c="22E7"]:before{width:.778em;padding:.73em 0 .359em;content:"\22E7"}.MJX-TEX mjx-c[c="22E8"]:before{width:.778em;padding:.73em 0 .359em;content:"\22E8"}.MJX-TEX mjx-c[c="22E9"]:before{width:.778em;padding:.73em 0 .359em;content:"\22E9"}.MJX-TEX mjx-c[c="22EA"]:before{width:.778em;padding:.706em 0 .208em;content:"\22EA"}.MJX-TEX mjx-c[c="22EB"]:before{width:.778em;padding:.706em 0 .208em;content:"\22EB"}.MJX-TEX mjx-c[c="22EC"]:before{width:.778em;padding:.802em 0 .303em;content:"\22EC"}.MJX-TEX mjx-c[c="22ED"]:before{width:.778em;padding:.801em 0 .303em;content:"\22ED"}.MJX-TEX mjx-c[c="22EE"]:before{width:.278em;padding:1.3em 0 .03em;content:"\22EE"}.MJX-TEX mjx-c[c="22EF"]:before{width:1.172em;padding:.31em 0 0;content:"\22EF"}.MJX-TEX mjx-c[c="22F1"]:before{width:1.282em;padding:1.52em 0 0;content:"\22F1"}.MJX-TEX mjx-c[c="2305"]:before{width:.611em;padding:.716em 0 0;content:"\22BC"}.MJX-TEX mjx-c[c="2306"]:before{width:.611em;padding:.813em 0 .097em;content:"\2A5E"}.MJX-TEX mjx-c[c="2308"]:before{width:.444em;padding:.75em 0 .25em;content:"\2308"}.MJX-TEX mjx-c[c="2309"]:before{width:.444em;padding:.75em 0 .25em;content:"\2309"}.MJX-TEX mjx-c[c="230A"]:before{width:.444em;padding:.75em 0 .25em;content:"\230A"}.MJX-TEX mjx-c[c="230B"]:before{width:.444em;padding:.75em 0 .25em;content:"\230B"}.MJX-TEX mjx-c[c="231C"]:before{width:.5em;padding:.694em 0 0;content:"\250C"}.MJX-TEX mjx-c[c="231D"]:before{width:.5em;padding:.694em 0 0;content:"\2510"}.MJX-TEX mjx-c[c="231E"]:before{width:.5em;padding:.366em 0 .022em;content:"\2514"}.MJX-TEX mjx-c[c="231F"]:before{width:.5em;padding:.366em 0 .022em;content:"\2518"}.MJX-TEX mjx-c[c="2322"]:before{width:1em;padding:.388em 0 0;content:"\2322"}.MJX-TEX mjx-c[c="2323"]:before{width:1em;padding:.378em 0 0;content:"\2323"}.MJX-TEX mjx-c[c="2329"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E8"}.MJX-TEX mjx-c[c="232A"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E9"}.MJX-TEX mjx-c[c="23B0"]:before{width:.412em;padding:.744em 0 .244em;content:"\23B0"}.MJX-TEX mjx-c[c="23B1"]:before{width:.412em;padding:.744em 0 .244em;content:"\23B1"}.MJX-TEX mjx-c[c="23D0"]:before{width:.667em;padding:.602em 0 0;content:"\23D0"}.MJX-TEX mjx-c[c="24C8"]:before{width:.902em;padding:.709em 0 .175em;content:"\24C8"}.MJX-TEX mjx-c[c="250C"]:before{width:.5em;padding:.694em 0 0;content:"\250C"}.MJX-TEX mjx-c[c="2510"]:before{width:.5em;padding:.694em 0 0;content:"\2510"}.MJX-TEX mjx-c[c="2514"]:before{width:.5em;padding:.366em 0 .022em;content:"\2514"}.MJX-TEX mjx-c[c="2518"]:before{width:.5em;padding:.366em 0 .022em;content:"\2518"}.MJX-TEX mjx-c[c="2571"]:before{width:.889em;padding:.694em 0 .195em;content:"\2571"}.MJX-TEX mjx-c[c="2572"]:before{width:.889em;padding:.694em 0 .195em;content:"\2572"}.MJX-TEX mjx-c[c="25A0"]:before{width:.778em;padding:.689em 0 0;content:"\25A0"}.MJX-TEX mjx-c[c="25A1"]:before{width:.778em;padding:.689em 0 0;content:"\25A1"}.MJX-TEX mjx-c[c="25AA"]:before{width:.778em;padding:.689em 0 0;content:"\25A0"}.MJX-TEX mjx-c[c="25B2"]:before{width:.722em;padding:.575em 0 .02em;content:"\25B2"}.MJX-TEX mjx-c[c="25B3"]:before{width:.889em;padding:.716em 0 0;content:"\25B3"}.MJX-TEX mjx-c[c="25B4"]:before{width:.722em;padding:.575em 0 .02em;content:"\25B2"}.MJX-TEX mjx-c[c="25B5"]:before{width:.889em;padding:.716em 0 0;content:"\25B3"}.MJX-TEX mjx-c[c="25B6"]:before,.MJX-TEX mjx-c[c="25B8"]:before{width:.778em;padding:.539em 0 .041em;content:"\25B6"}.MJX-TEX mjx-c[c="25B9"]:before{width:.5em;padding:.505em 0 .005em;content:"\25B9"}.MJX-TEX mjx-c[c="25BC"]:before{width:.722em;padding:.576em 0 .019em;content:"\25BC"}.MJX-TEX mjx-c[c="25BD"]:before{width:.889em;padding:.5em 0 .215em;content:"\25BD"}.MJX-TEX mjx-c[c="25BE"]:before{width:.722em;padding:.576em 0 .019em;content:"\25BC"}.MJX-TEX mjx-c[c="25BF"]:before{width:.889em;padding:.5em 0 .215em;content:"\25BD"}.MJX-TEX mjx-c[c="25C0"]:before,.MJX-TEX mjx-c[c="25C2"]:before{width:.778em;padding:.539em 0 .041em;content:"\25C0"}.MJX-TEX mjx-c[c="25C3"]:before{width:.5em;padding:.505em 0 .005em;content:"\25C3"}.MJX-TEX mjx-c[c="25CA"]:before{width:.667em;padding:.716em 0 .132em;content:"\25CA"}.MJX-TEX mjx-c[c="25EF"]:before{width:1em;padding:.715em 0 .215em;content:"\25EF"}.MJX-TEX mjx-c[c="25FB"]:before{width:.778em;padding:.689em 0 0;content:"\25A1"}.MJX-TEX mjx-c[c="25FC"]:before{width:.778em;padding:.689em 0 0;content:"\25A0"}.MJX-TEX mjx-c[c="2605"]:before{width:.944em;padding:.694em 0 .111em;content:"\2605"}.MJX-TEX mjx-c[c="2660"]:before{width:.778em;padding:.727em 0 .13em;content:"\2660"}.MJX-TEX mjx-c[c="2661"]:before{width:.778em;padding:.716em 0 .033em;content:"\2661"}.MJX-TEX mjx-c[c="2662"]:before{width:.778em;padding:.727em 0 .162em;content:"\2662"}.MJX-TEX mjx-c[c="2663"]:before{width:.778em;padding:.726em 0 .13em;content:"\2663"}.MJX-TEX mjx-c[c="266D"]:before{width:.389em;padding:.75em 0 .022em;content:"\266D"}.MJX-TEX mjx-c[c="266E"]:before{width:.389em;padding:.734em 0 .223em;content:"\266E"}.MJX-TEX mjx-c[c="266F"]:before{width:.389em;padding:.723em 0 .223em;content:"\266F"}.MJX-TEX mjx-c[c="2713"]:before{width:.833em;padding:.706em 0 .034em;content:"\2713"}.MJX-TEX mjx-c[c="2720"]:before{width:.833em;padding:.716em 0 .022em;content:"\2720"}.MJX-TEX mjx-c[c="2758"]:before{width:.278em;padding:.75em 0 .249em;content:"\2223"}.MJX-TEX mjx-c[c="27E8"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E8"}.MJX-TEX mjx-c[c="27E9"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E9"}.MJX-TEX mjx-c[c="27EE"]:before{width:.412em;padding:.744em 0 .244em;content:"\27EE"}.MJX-TEX mjx-c[c="27EF"]:before{width:.412em;padding:.744em 0 .244em;content:"\27EF"}.MJX-TEX mjx-c[c="27F5"]:before{width:1.609em;padding:.511em 0 .011em;content:"\27F5"}.MJX-TEX mjx-c[c="27F6"]:before{width:1.638em;padding:.511em 0 .011em;content:"\27F6"}.MJX-TEX mjx-c[c="27F7"]:before{width:1.859em;padding:.511em 0 .011em;content:"\27F7"}.MJX-TEX mjx-c[c="27F8"]:before{width:1.609em;padding:.525em 0 .024em;content:"\27F8"}.MJX-TEX mjx-c[c="27F9"]:before{width:1.638em;padding:.525em 0 .024em;content:"\27F9"}.MJX-TEX mjx-c[c="27FA"]:before{width:1.858em;padding:.525em 0 .024em;content:"\27FA"}.MJX-TEX mjx-c[c="27FC"]:before{width:1.638em;padding:.511em 0 .011em;content:"\27FC"}.MJX-TEX mjx-c[c="29EB"]:before{width:.667em;padding:.716em 0 .132em;content:"\29EB"}.MJX-TEX mjx-c[c="29F8"]:before{width:.778em;padding:.716em 0 .215em;content:"/";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="2A00"]:before{width:1.111em;padding:.75em 0 .25em;content:"\2A00"}.MJX-TEX mjx-c[c="2A01"]:before{width:1.111em;padding:.75em 0 .25em;content:"\2A01"}.MJX-TEX mjx-c[c="2A02"]:before{width:1.111em;padding:.75em 0 .25em;content:"\2A02"}.MJX-TEX mjx-c[c="2A04"]:before{width:.833em;padding:.75em 0 .249em;content:"\2A04"}.MJX-TEX mjx-c[c="2A06"]:before{width:.833em;padding:.75em 0 .249em;content:"\2A06"}.MJX-TEX mjx-c[c="2A0C"]:before{width:1.638em;padding:.805em 0 .306em;content:"\222C\222C"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="2A0C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="2A0C"]:last-child:before{width:1.776em}.MJX-TEX mjx-c[c="2A2F"]:before{width:.778em;padding:.491em 0 0;content:"\D7"}.MJX-TEX mjx-c[c="2A3F"]:before{width:.75em;padding:.683em 0 0;content:"\2A3F"}.MJX-TEX mjx-c[c="2A5E"]:before{width:.611em;padding:.813em 0 .097em;content:"\2A5E"}.MJX-TEX mjx-c[c="2A7D"]:before{width:.778em;padding:.636em 0 .138em;content:"\2A7D"}.MJX-TEX mjx-c[c="2A7E"]:before{width:.778em;padding:.636em 0 .138em;content:"\2A7E"}.MJX-TEX mjx-c[c="2A85"]:before{width:.778em;padding:.762em 0 .29em;content:"\2A85"}.MJX-TEX mjx-c[c="2A86"]:before{width:.778em;padding:.762em 0 .29em;content:"\2A86"}.MJX-TEX mjx-c[c="2A87"]:before{width:.778em;padding:.635em 0 .241em;content:"\2A87"}.MJX-TEX mjx-c[c="2A88"]:before{width:.778em;padding:.635em 0 .241em;content:"\2A88"}.MJX-TEX mjx-c[c="2A89"]:before{width:.778em;padding:.761em 0 .387em;content:"\2A89"}.MJX-TEX mjx-c[c="2A8A"]:before{width:.778em;padding:.761em 0 .387em;content:"\2A8A"}.MJX-TEX mjx-c[c="2A8B"]:before{width:.778em;padding:1.003em 0 .463em;content:"\2A8B"}.MJX-TEX mjx-c[c="2A8C"]:before{width:.778em;padding:1.003em 0 .463em;content:"\2A8C"}.MJX-TEX mjx-c[c="2A95"]:before{width:.778em;padding:.636em 0 .138em;content:"\2A95"}.MJX-TEX mjx-c[c="2A96"]:before{width:.778em;padding:.636em 0 .138em;content:"\2A96"}.MJX-TEX mjx-c[c="2AAF"]:before{width:.778em;padding:.636em 0 .138em;content:"\2AAF"}.MJX-TEX mjx-c[c="2AB0"]:before{width:.778em;padding:.636em 0 .138em;content:"\2AB0"}.MJX-TEX mjx-c[c="2AB5"]:before{width:.778em;padding:.752em 0 .286em;content:"\2AB5"}.MJX-TEX mjx-c[c="2AB6"]:before{width:.778em;padding:.752em 0 .286em;content:"\2AB6"}.MJX-TEX mjx-c[c="2AB7"]:before{width:.778em;padding:.761em 0 .294em;content:"\2AB7"}.MJX-TEX mjx-c[c="2AB8"]:before{width:.778em;padding:.761em 0 .294em;content:"\2AB8"}.MJX-TEX mjx-c[c="2AB9"]:before{width:.778em;padding:.761em 0 .337em;content:"\2AB9"}.MJX-TEX mjx-c[c="2ABA"]:before{width:.778em;padding:.761em 0 .337em;content:"\2ABA"}.MJX-TEX mjx-c[c="2AC5"]:before{width:.778em;padding:.753em 0 .215em;content:"\2AC5"}.MJX-TEX mjx-c[c="2AC6"]:before{width:.778em;padding:.753em 0 .215em;content:"\2AC6"}.MJX-TEX mjx-c[c="2ACB"]:before{width:.778em;padding:.783em 0 .385em;content:"\2ACB"}.MJX-TEX mjx-c[c="2ACC"]:before{width:.778em;padding:.783em 0 .385em;content:"\2ACC"}.MJX-TEX mjx-c[c="3008"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E8"}.MJX-TEX mjx-c[c="3009"]:before{width:.389em;padding:.75em 0 .25em;content:"\27E9"}.MJX-TEX mjx-c[c=E006]:before{width:.222em;padding:.43em 0 .023em;content:"\E006"}.MJX-TEX mjx-c[c=E007]:before{width:.389em;padding:.431em 0 .024em;content:"\E007"}.MJX-TEX mjx-c[c=E008]:before{width:.778em;padding:.605em 0 .085em;content:"\E008"}.MJX-TEX mjx-c[c=E009]:before{width:.667em;padding:.434em 0 .006em;content:"\E009"}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c=E009]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c=E009]:last-child:before{width:.734em}.MJX-TEX mjx-c[c=E00C]:before{width:.778em;padding:.752em 0 .284em;content:"\E00C"}.MJX-TEX mjx-c[c=E00D]:before{width:.778em;padding:.752em 0 .284em;content:"\E00D"}.MJX-TEX mjx-c[c=E00E]:before{width:.778em;padding:.919em 0 .421em;content:"\E00E"}.MJX-TEX mjx-c[c=E00F]:before{width:.778em;padding:.801em 0 .303em;content:"\E00F"}.MJX-TEX mjx-c[c=E010]:before{width:.778em;padding:.801em 0 .303em;content:"\E010"}.MJX-TEX mjx-c[c=E011]:before{width:.778em;padding:.919em 0 .421em;content:"\E011"}.MJX-TEX mjx-c[c=E016]:before{width:.778em;padding:.828em 0 .33em;content:"\E016"}.MJX-TEX mjx-c[c=E017]:before{width:.778em;padding:.752em 0 .332em;content:"\E017"}.MJX-TEX mjx-c[c=E018]:before{width:.778em;padding:.828em 0 .33em;content:"\E018"}.MJX-TEX mjx-c[c=E019]:before{width:.778em;padding:.752em 0 .333em;content:"\E019"}.MJX-TEX mjx-c[c=E01A]:before{width:.778em;padding:.634em 0 .255em;content:"\E01A"}.MJX-TEX mjx-c[c=E01B]:before{width:.778em;padding:.634em 0 .254em;content:"\E01B"}.MJX-TEX mjx-c[c="1D400"]:before{width:.869em;padding:.698em 0 0;content:"A";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D401"]:before{width:.818em;padding:.686em 0 0;content:"B";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D402"]:before{width:.831em;padding:.697em 0 .011em;content:"C";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D403"]:before{width:.882em;padding:.686em 0 0;content:"D";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D404"]:before{width:.756em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D405"]:before{width:.724em;padding:.68em 0 0;content:"F";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D406"]:before{width:.904em;padding:.697em 0 .01em;content:"G";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D407"]:before{width:.9em;padding:.686em 0 0;content:"H";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D408"]:before{width:.436em;padding:.686em 0 0;content:"I";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D409"]:before{width:.594em;padding:.686em 0 .011em;content:"J";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40A"]:before{width:.901em;padding:.686em 0 0;content:"K";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40B"]:before{width:.692em;padding:.686em 0 0;content:"L";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40C"]:before{width:1.092em;padding:.686em 0 0;content:"M";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40D"]:before{width:.9em;padding:.686em 0 0;content:"N";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40E"]:before{width:.864em;padding:.696em 0 .01em;content:"O";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D40F"]:before{width:.786em;padding:.686em 0 0;content:"P";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D410"]:before{width:.864em;padding:.696em 0 .193em;content:"Q";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D411"]:before{width:.862em;padding:.686em 0 .011em;content:"R";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D412"]:before{width:.639em;padding:.697em 0 .011em;content:"S";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D413"]:before{width:.8em;padding:.675em 0 0;content:"T";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D414"]:before{width:.885em;padding:.686em 0 .011em;content:"U";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D415"]:before{width:.869em;padding:.686em 0 .007em;content:"V";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D416"]:before{width:1.189em;padding:.686em 0 .007em;content:"W";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D417"]:before{width:.869em;padding:.686em 0 0;content:"X";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D418"]:before{width:.869em;padding:.686em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D419"]:before{width:.703em;padding:.686em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41A"]:before{width:.559em;padding:.453em 0 .006em;content:"a";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41B"]:before{width:.639em;padding:.694em 0 .006em;content:"b";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41C"]:before{width:.511em;padding:.453em 0 .006em;content:"c";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41D"]:before{width:.639em;padding:.694em 0 .006em;content:"d";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41E"]:before{width:.527em;padding:.452em 0 .006em;content:"e";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D41F"]:before{width:.351em;padding:.7em 0 0;content:"f";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D41F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D41F"]:last-child:before{width:.452em}.MJX-TEX mjx-c[c="1D420"]:before{width:.575em;padding:.455em 0 .201em;content:"g";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D421"]:before{width:.639em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D422"]:before{width:.319em;padding:.695em 0 0;content:"i";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D423"]:before{width:.351em;padding:.695em 0 .2em;content:"j";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D424"]:before{width:.607em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D425"]:before{width:.319em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D426"]:before{width:.958em;padding:.45em 0 0;content:"m";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D427"]:before{width:.639em;padding:.45em 0 0;content:"n";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D428"]:before{width:.575em;padding:.452em 0 .005em;content:"o";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D429"]:before{width:.639em;padding:.45em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42A"]:before{width:.607em;padding:.45em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42B"]:before{width:.474em;padding:.45em 0 0;content:"r";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42C"]:before{width:.454em;padding:.453em 0 .006em;content:"s";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42D"]:before{width:.447em;padding:.635em 0 .005em;content:"t";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42E"]:before{width:.639em;padding:.45em 0 .006em;content:"u";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D42F"]:before{width:.607em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D430"]:before{width:.831em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D431"]:before{width:.607em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D432"]:before{width:.607em;padding:.444em 0 .2em;content:"y";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D433"]:before{width:.511em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D434"]:before{width:.75em;padding:.716em 0 0;content:"A";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D435"]:before{width:.759em;padding:.683em 0 0;content:"B";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D436"]:before{width:.715em;padding:.705em 0 .022em;content:"C";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D437"]:before{width:.828em;padding:.683em 0 0;content:"D";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D438"]:before{width:.738em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D439"]:before{width:.643em;padding:.68em 0 0;content:"F";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D439"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D439"]:last-child:before{width:.749em}.MJX-TEX mjx-c[c="1D43A"]:before{width:.786em;padding:.705em 0 .022em;content:"G";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D43B"]:before{width:.831em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D43B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D43B"]:last-child:before{width:.888em}.MJX-TEX mjx-c[c="1D43C"]:before{width:.44em;padding:.683em 0 0;content:"I";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D43C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D43C"]:last-child:before{width:.504em}.MJX-TEX mjx-c[c="1D43D"]:before{width:.555em;padding:.683em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D43D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D43D"]:last-child:before{width:.633em}.MJX-TEX mjx-c[c="1D43E"]:before{width:.849em;padding:.683em 0 0;content:"K";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D43F"]:before{width:.681em;padding:.683em 0 0;content:"L";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D440"]:before{width:.97em;padding:.683em 0 0;content:"M";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D440"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D440"]:last-child:before{width:1.051em}.MJX-TEX mjx-c[c="1D441"]:before{width:.803em;padding:.683em 0 0;content:"N";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D441"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D441"]:last-child:before{width:.888em}.MJX-TEX mjx-c[c="1D442"]:before{width:.763em;padding:.704em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D443"]:before{width:.642em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D443"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D443"]:last-child:before{width:.751em}.MJX-TEX mjx-c[c="1D444"]:before{width:.791em;padding:.704em 0 .194em;content:"Q";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D445"]:before{width:.759em;padding:.683em 0 .021em;content:"R";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D446"]:before{width:.613em;padding:.705em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D447"]:before{width:.584em;padding:.677em 0 0;content:"T";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D447"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D447"]:last-child:before{width:.704em}.MJX-TEX mjx-c[c="1D448"]:before{width:.683em;padding:.683em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D448"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D448"]:last-child:before{width:.767em}.MJX-TEX mjx-c[c="1D449"]:before{width:.583em;padding:.683em 0 .022em;content:"V";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D449"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D449"]:last-child:before{width:.769em}.MJX-TEX mjx-c[c="1D44A"]:before{width:.944em;padding:.683em 0 .022em;content:"W";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D44A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D44A"]:last-child:before{width:1.048em}.MJX-TEX mjx-c[c="1D44B"]:before{width:.828em;padding:.683em 0 0;content:"X";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D44C"]:before{width:.581em;padding:.683em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D44C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D44C"]:last-child:before{width:.763em}.MJX-TEX mjx-c[c="1D44D"]:before{width:.683em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D44E"]:before{width:.529em;padding:.441em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D44F"]:before{width:.429em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D450"]:before{width:.433em;padding:.442em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D451"]:before{width:.52em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D452"]:before{width:.466em;padding:.442em 0 .011em;content:"e";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D453"]:before{width:.49em;padding:.705em 0 .205em;content:"f";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D453"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D453"]:last-child:before{width:.55em}.MJX-TEX mjx-c[c="1D454"]:before{width:.477em;padding:.442em 0 .205em;content:"g";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D455"]:before{width:.576em;padding:.694em 0 .011em;content:"h";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D456"]:before{width:.345em;padding:.661em 0 .011em;content:"i";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D457"]:before{width:.412em;padding:.661em 0 .204em;content:"j";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D458"]:before{width:.521em;padding:.694em 0 .011em;content:"k";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D459"]:before{width:.298em;padding:.694em 0 .011em;content:"l";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45A"]:before{width:.878em;padding:.442em 0 .011em;content:"m";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45B"]:before{width:.6em;padding:.442em 0 .011em;content:"n";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45C"]:before{width:.485em;padding:.441em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45D"]:before{width:.503em;padding:.442em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45E"]:before{width:.446em;padding:.442em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D45F"]:before{width:.451em;padding:.442em 0 .011em;content:"r";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D460"]:before{width:.469em;padding:.442em 0 .01em;content:"s";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D461"]:before{width:.361em;padding:.626em 0 .011em;content:"t";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D462"]:before{width:.572em;padding:.442em 0 .011em;content:"u";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D463"]:before{width:.485em;padding:.443em 0 .011em;content:"v";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D464"]:before{width:.716em;padding:.443em 0 .011em;content:"w";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D465"]:before{width:.572em;padding:.442em 0 .011em;content:"x";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D466"]:before{width:.49em;padding:.442em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D467"]:before{width:.465em;padding:.442em 0 .011em;content:"z";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D468"]:before{width:.869em;padding:.711em 0 0;content:"A";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D469"]:before{width:.866em;padding:.686em 0 0;content:"B";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46A"]:before{width:.817em;padding:.703em 0 .017em;content:"C";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46B"]:before{width:.938em;padding:.686em 0 0;content:"D";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46C"]:before{width:.81em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46D"]:before{width:.689em;padding:.68em 0 0;content:"F";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D46D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D46D"]:last-child:before{width:.809em}.MJX-TEX mjx-c[c="1D46E"]:before{width:.887em;padding:.703em 0 .016em;content:"G";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D46F"]:before{width:.982em;padding:.686em 0 0;content:"H";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D470"]:before{width:.511em;padding:.686em 0 0;content:"I";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D470"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D470"]:last-child:before{width:.573em}.MJX-TEX mjx-c[c="1D471"]:before{width:.631em;padding:.686em 0 .017em;content:"J";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D471"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D471"]:last-child:before{width:.694em}.MJX-TEX mjx-c[c="1D472"]:before{width:.971em;padding:.686em 0 0;content:"K";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D473"]:before{width:.756em;padding:.686em 0 0;content:"L";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D474"]:before{width:1.142em;padding:.686em 0 0;content:"M";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D474"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D474"]:last-child:before{width:1.219em}.MJX-TEX mjx-c[c="1D475"]:before{width:.95em;padding:.686em 0 0;content:"N";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D475"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D475"]:last-child:before{width:1.027em}.MJX-TEX mjx-c[c="1D476"]:before{width:.837em;padding:.703em 0 .017em;content:"O";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D477"]:before{width:.723em;padding:.686em 0 0;content:"P";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D477"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D477"]:last-child:before{width:.847em}.MJX-TEX mjx-c[c="1D478"]:before{width:.869em;padding:.703em 0 .194em;content:"Q";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D479"]:before{width:.872em;padding:.686em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D47A"]:before{width:.693em;padding:.703em 0 .017em;content:"S";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D47B"]:before{width:.637em;padding:.675em 0 0;content:"T";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D47B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D47B"]:last-child:before{width:.772em}.MJX-TEX mjx-c[c="1D47C"]:before{width:.8em;padding:.686em 0 .016em;content:"U";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D47C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D47C"]:last-child:before{width:.877em}.MJX-TEX mjx-c[c="1D47D"]:before{width:.678em;padding:.686em 0 .016em;content:"V";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D47D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D47D"]:last-child:before{width:.886em}.MJX-TEX mjx-c[c="1D47E"]:before{width:1.093em;padding:.686em 0 .017em;content:"W";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D47E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D47E"]:last-child:before{width:1.207em}.MJX-TEX mjx-c[c="1D47F"]:before{width:.947em;padding:.686em 0 0;content:"X";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D480"]:before{width:.675em;padding:.686em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D480"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D480"]:last-child:before{width:.876em}.MJX-TEX mjx-c[c="1D481"]:before{width:.773em;padding:.686em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D482"]:before{width:.633em;padding:.452em 0 .008em;content:"a";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D483"]:before{width:.521em;padding:.694em 0 .008em;content:"b";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D484"]:before{width:.513em;padding:.451em 0 .008em;content:"c";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D485"]:before{width:.61em;padding:.694em 0 .008em;content:"d";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D486"]:before{width:.554em;padding:.452em 0 .008em;content:"e";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D487"]:before{width:.568em;padding:.701em 0 .201em;content:"f";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D487"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D487"]:last-child:before{width:.624em}.MJX-TEX mjx-c[c="1D488"]:before{width:.545em;padding:.452em 0 .202em;content:"g";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D489"]:before{width:.668em;padding:.694em 0 .008em;content:"h";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48A"]:before{width:.405em;padding:.694em 0 .008em;content:"i";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48B"]:before{width:.471em;padding:.694em 0 .202em;content:"j";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48C"]:before{width:.604em;padding:.694em 0 .008em;content:"k";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48D"]:before{width:.348em;padding:.694em 0 .008em;content:"l";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48E"]:before{width:1.032em;padding:.452em 0 .008em;content:"m";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D48F"]:before{width:.713em;padding:.452em 0 .008em;content:"n";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D490"]:before{width:.585em;padding:.452em 0 .008em;content:"o";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D491"]:before{width:.601em;padding:.452em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D492"]:before{width:.542em;padding:.452em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D493"]:before{width:.529em;padding:.452em 0 .008em;content:"r";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D494"]:before{width:.531em;padding:.451em 0 .008em;content:"s";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D495"]:before{width:.415em;padding:.643em 0 .007em;content:"t";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D496"]:before{width:.681em;padding:.452em 0 .008em;content:"u";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D497"]:before{width:.567em;padding:.453em 0 .008em;content:"v";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D498"]:before{width:.831em;padding:.453em 0 .008em;content:"w";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D499"]:before{width:.659em;padding:.452em 0 .008em;content:"x";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D49A"]:before{width:.59em;padding:.452em 0 .202em;content:"y";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D49B"]:before{width:.555em;padding:.452em 0 .008em;content:"z";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D49C"]:before{width:.803em;padding:.717em 0 .008em;content:"A";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D49C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D49C"]:last-child:before{width:1.016em}.MJX-TEX mjx-c[c="1D49D"]:before{width:.908em;padding:.708em 0 .028em;content:"B";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D49E"]:before{width:.666em;padding:.728em 0 .026em;content:"C";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D49E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D49E"]:last-child:before{width:.819em}.MJX-TEX mjx-c[c="1D49F"]:before{width:.774em;padding:.708em 0 .031em;content:"D";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D49F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D49F"]:last-child:before{width:.855em}.MJX-TEX mjx-c[c="1D4A0"]:before{width:.562em;padding:.707em 0 .008em;content:"E";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A0"]:last-child:before{width:.718em}.MJX-TEX mjx-c[c="1D4A1"]:before{width:.895em;padding:.735em 0 .036em;content:"F";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A1"]:last-child:before{width:.99em}.MJX-TEX mjx-c[c="1D4A2"]:before{width:.61em;padding:.717em 0 .037em;content:"G";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A2"]:last-child:before{width:.738em}.MJX-TEX mjx-c[c="1D4A3"]:before{width:.969em;padding:.717em 0 .036em;content:"H";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A3"]:last-child:before{width:1.241em}.MJX-TEX mjx-c[c="1D4A4"]:before{width:.809em;padding:.717em 0 .017em;content:"I";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A4"]:last-child:before{width:.946em}.MJX-TEX mjx-c[c="1D4A5"]:before{width:1.052em;padding:.717em 0 .314em;content:"J";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A5"]:last-child:before{width:1.133em}.MJX-TEX mjx-c[c="1D4A6"]:before{width:.914em;padding:.717em 0 .037em;content:"K";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A6"]:last-child:before{width:1.204em}.MJX-TEX mjx-c[c="1D4A7"]:before{width:.874em;padding:.717em 0 .017em;content:"L";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A7"]:last-child:before{width:1.035em}.MJX-TEX mjx-c[c="1D4A8"]:before{width:1.08em;padding:.721em 0 .05em;content:"M";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A8"]:last-child:before{width:1.216em}.MJX-TEX mjx-c[c="1D4A9"]:before{width:.902em;padding:.726em 0 .036em;content:"N";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4A9"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4A9"]:last-child:before{width:1.208em}.MJX-TEX mjx-c[c="1D4AA"]:before{width:.738em;padding:.707em 0 .008em;content:"O";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4AA"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4AA"]:last-child:before{width:.805em}.MJX-TEX mjx-c[c="1D4AB"]:before{width:1.013em;padding:.716em 0 .037em;content:"P";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4AC"]:before{width:.883em;padding:.717em 0 .017em;content:"Q";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4AD"]:before{width:.85em;padding:.717em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4AE"]:before{width:.868em;padding:.708em 0 .036em;content:"S";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4AE"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4AE"]:last-child:before{width:1.016em}.MJX-TEX mjx-c[c="1D4AF"]:before{width:.747em;padding:.735em 0 .037em;content:"T";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4AF"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4AF"]:last-child:before{width:.996em}.MJX-TEX mjx-c[c="1D4B0"]:before{width:.8em;padding:.717em 0 .017em;content:"U";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B0"]:last-child:before{width:.96em}.MJX-TEX mjx-c[c="1D4B1"]:before{width:.622em;padding:.717em 0 .017em;content:"V";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B1"]:last-child:before{width:.85em}.MJX-TEX mjx-c[c="1D4B2"]:before{width:.805em;padding:.717em 0 .017em;content:"W";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B2"]:last-child:before{width:1.026em}.MJX-TEX mjx-c[c="1D4B3"]:before{width:.944em;padding:.717em 0 .017em;content:"X";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B3"]:last-child:before{width:1.131em}.MJX-TEX mjx-c[c="1D4B4"]:before{width:.71em;padding:.716em 0 .017em;content:"Y";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B4"]:last-child:before{width:.959em}.MJX-TEX mjx-c[c="1D4B5"]:before{width:.821em;padding:.717em 0 .016em;content:"Z";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4B5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4B5"]:last-child:before{width:1.032em}.MJX-TEX mjx-c[c="1D4B6"]:before{width:.529em;padding:.441em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4B7"]:before{width:.429em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4B8"]:before{width:.433em;padding:.442em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4B9"]:before{width:.52em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BA"]:before{width:.466em;padding:.442em 0 .011em;content:"e";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BB"]:before{width:.49em;padding:.705em 0 .205em;content:"f";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4BB"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4BB"]:last-child:before{width:.55em}.MJX-TEX mjx-c[c="1D4BC"]:before{width:.477em;padding:.442em 0 .205em;content:"g";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BD"]:before{width:.576em;padding:.694em 0 .011em;content:"h";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BE"]:before{width:.345em;padding:.661em 0 .011em;content:"i";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4BF"]:before{width:.412em;padding:.661em 0 .204em;content:"j";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C0"]:before{width:.521em;padding:.694em 0 .011em;content:"k";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C1"]:before{width:.298em;padding:.694em 0 .011em;content:"l";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C2"]:before{width:.878em;padding:.442em 0 .011em;content:"m";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C3"]:before{width:.6em;padding:.442em 0 .011em;content:"n";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C4"]:before{width:.485em;padding:.441em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C5"]:before{width:.503em;padding:.442em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C6"]:before{width:.446em;padding:.442em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C7"]:before{width:.451em;padding:.442em 0 .011em;content:"r";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C8"]:before{width:.469em;padding:.442em 0 .01em;content:"s";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4C9"]:before{width:.361em;padding:.626em 0 .011em;content:"t";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CA"]:before{width:.572em;padding:.442em 0 .011em;content:"u";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CB"]:before{width:.485em;padding:.443em 0 .011em;content:"v";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CC"]:before{width:.716em;padding:.443em 0 .011em;content:"w";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CD"]:before{width:.572em;padding:.442em 0 .011em;content:"x";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CE"]:before{width:.49em;padding:.442em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4CF"]:before{width:.465em;padding:.442em 0 .011em;content:"z";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D4D0"]:before{width:.803em;padding:.717em 0 .008em;content:"A";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D0"]:last-child:before{width:1.016em}.MJX-TEX mjx-c[c="1D4D1"]:before{width:.908em;padding:.708em 0 .028em;content:"B";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4D2"]:before{width:.666em;padding:.728em 0 .026em;content:"C";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D2"]:last-child:before{width:.819em}.MJX-TEX mjx-c[c="1D4D3"]:before{width:.774em;padding:.708em 0 .031em;content:"D";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D3"]:last-child:before{width:.855em}.MJX-TEX mjx-c[c="1D4D4"]:before{width:.562em;padding:.707em 0 .008em;content:"E";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D4"]:last-child:before{width:.718em}.MJX-TEX mjx-c[c="1D4D5"]:before{width:.895em;padding:.735em 0 .036em;content:"F";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D5"]:last-child:before{width:.99em}.MJX-TEX mjx-c[c="1D4D6"]:before{width:.61em;padding:.717em 0 .037em;content:"G";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D6"]:last-child:before{width:.738em}.MJX-TEX mjx-c[c="1D4D7"]:before{width:.969em;padding:.717em 0 .036em;content:"H";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D7"]:last-child:before{width:1.241em}.MJX-TEX mjx-c[c="1D4D8"]:before{width:.809em;padding:.717em 0 .017em;content:"I";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D8"]:last-child:before{width:.946em}.MJX-TEX mjx-c[c="1D4D9"]:before{width:1.052em;padding:.717em 0 .314em;content:"J";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4D9"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4D9"]:last-child:before{width:1.133em}.MJX-TEX mjx-c[c="1D4DA"]:before{width:.914em;padding:.717em 0 .037em;content:"K";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DA"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DA"]:last-child:before{width:1.204em}.MJX-TEX mjx-c[c="1D4DB"]:before{width:.874em;padding:.717em 0 .017em;content:"L";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DB"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DB"]:last-child:before{width:1.035em}.MJX-TEX mjx-c[c="1D4DC"]:before{width:1.08em;padding:.721em 0 .05em;content:"M";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DC"]:last-child:before{width:1.216em}.MJX-TEX mjx-c[c="1D4DD"]:before{width:.902em;padding:.726em 0 .036em;content:"N";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DD"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DD"]:last-child:before{width:1.208em}.MJX-TEX mjx-c[c="1D4DE"]:before{width:.738em;padding:.707em 0 .008em;content:"O";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4DE"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4DE"]:last-child:before{width:.805em}.MJX-TEX mjx-c[c="1D4DF"]:before{width:1.013em;padding:.716em 0 .037em;content:"P";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4E0"]:before{width:.883em;padding:.717em 0 .017em;content:"Q";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4E1"]:before{width:.85em;padding:.717em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-c[c="1D4E2"]:before{width:.868em;padding:.708em 0 .036em;content:"S";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E2"]:last-child:before{width:1.016em}.MJX-TEX mjx-c[c="1D4E3"]:before{width:.747em;padding:.735em 0 .037em;content:"T";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E3"]:last-child:before{width:.996em}.MJX-TEX mjx-c[c="1D4E4"]:before{width:.8em;padding:.717em 0 .017em;content:"U";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E4"]:last-child:before{width:.96em}.MJX-TEX mjx-c[c="1D4E5"]:before{width:.622em;padding:.717em 0 .017em;content:"V";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E5"]:last-child:before{width:.85em}.MJX-TEX mjx-c[c="1D4E6"]:before{width:.805em;padding:.717em 0 .017em;content:"W";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E6"]:last-child:before{width:1.026em}.MJX-TEX mjx-c[c="1D4E7"]:before{width:.944em;padding:.717em 0 .017em;content:"X";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E7"]:last-child:before{width:1.131em}.MJX-TEX mjx-c[c="1D4E8"]:before{width:.71em;padding:.716em 0 .017em;content:"Y";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E8"]:last-child:before{width:.959em}.MJX-TEX mjx-c[c="1D4E9"]:before{width:.821em;padding:.717em 0 .016em;content:"Z";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4E9"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4E9"]:last-child:before{width:1.032em}.MJX-TEX mjx-c[c="1D4EA"]:before{width:.633em;padding:.452em 0 .008em;content:"a";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4EB"]:before{width:.521em;padding:.694em 0 .008em;content:"b";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4EC"]:before{width:.513em;padding:.451em 0 .008em;content:"c";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4ED"]:before{width:.61em;padding:.694em 0 .008em;content:"d";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4EE"]:before{width:.554em;padding:.452em 0 .008em;content:"e";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4EF"]:before{width:.568em;padding:.701em 0 .201em;content:"f";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D4EF"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D4EF"]:last-child:before{width:.624em}.MJX-TEX mjx-c[c="1D4F0"]:before{width:.545em;padding:.452em 0 .202em;content:"g";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F1"]:before{width:.668em;padding:.694em 0 .008em;content:"h";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F2"]:before{width:.405em;padding:.694em 0 .008em;content:"i";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F3"]:before{width:.471em;padding:.694em 0 .202em;content:"j";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F4"]:before{width:.604em;padding:.694em 0 .008em;content:"k";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F5"]:before{width:.348em;padding:.694em 0 .008em;content:"l";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F6"]:before{width:1.032em;padding:.452em 0 .008em;content:"m";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F7"]:before{width:.713em;padding:.452em 0 .008em;content:"n";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F8"]:before{width:.585em;padding:.452em 0 .008em;content:"o";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4F9"]:before{width:.601em;padding:.452em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FA"]:before{width:.542em;padding:.452em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FB"]:before{width:.529em;padding:.452em 0 .008em;content:"r";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FC"]:before{width:.531em;padding:.451em 0 .008em;content:"s";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FD"]:before{width:.415em;padding:.643em 0 .007em;content:"t";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FE"]:before{width:.681em;padding:.452em 0 .008em;content:"u";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D4FF"]:before{width:.567em;padding:.453em 0 .008em;content:"v";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D500"]:before{width:.831em;padding:.453em 0 .008em;content:"w";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D501"]:before{width:.659em;padding:.452em 0 .008em;content:"x";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D502"]:before{width:.59em;padding:.452em 0 .202em;content:"y";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D503"]:before{width:.555em;padding:.452em 0 .008em;content:"z";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D504"]:before{width:.718em;padding:.696em 0 .026em;content:"A";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D505"]:before{width:.884em;padding:.691em 0 .027em;content:"B";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D506"]:before{width:.613em;padding:.685em 0 .024em;content:"C";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D507"]:before{width:.832em;padding:.685em 0 .027em;content:"D";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D508"]:before{width:.663em;padding:.685em 0 .024em;content:"E";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D509"]:before{width:.611em;padding:.686em 0 .153em;content:"F";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50A"]:before{width:.785em;padding:.69em 0 .026em;content:"G";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50B"]:before{width:.72em;padding:.666em 0 .133em;content:"H";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50C"]:before{width:.554em;padding:.686em 0 .026em;content:"I";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50D"]:before{width:.552em;padding:.686em 0 .139em;content:"J";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50E"]:before{width:.668em;padding:.68em 0 .027em;content:"K";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D50F"]:before{width:.666em;padding:.686em 0 .026em;content:"L";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D510"]:before{width:1.05em;padding:.692em 0 .027em;content:"M";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D511"]:before{width:.832em;padding:.686em 0 .025em;content:"N";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D512"]:before{width:.827em;padding:.729em 0 .027em;content:"O";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D513"]:before{width:.828em;padding:.692em 0 .218em;content:"P";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D514"]:before{width:.827em;padding:.729em 0 .069em;content:"Q";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D515"]:before{width:.828em;padding:.686em 0 .026em;content:"R";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D516"]:before{width:.829em;padding:.692em 0 .027em;content:"S";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D517"]:before{width:.669em;padding:.701em 0 .027em;content:"T";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D518"]:before{width:.646em;padding:.697em 0 .027em;content:"U";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D519"]:before{width:.831em;padding:.686em 0 .026em;content:"V";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51A"]:before{width:1.046em;padding:.686em 0 .027em;content:"W";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51B"]:before{width:.719em;padding:.688em 0 .027em;content:"X";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51C"]:before{width:.833em;padding:.686em 0 .218em;content:"Y";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51D"]:before{width:.602em;padding:.729em 0 .139em;content:"Z";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51E"]:before{width:.5em;padding:.47em 0 .035em;content:"a";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D51F"]:before{width:.513em;padding:.685em 0 .031em;content:"b";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D520"]:before{width:.389em;padding:.466em 0 .029em;content:"c";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D521"]:before{width:.499em;padding:.609em 0 .033em;content:"d";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D522"]:before{width:.401em;padding:.467em 0 .03em;content:"e";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D523"]:before{width:.326em;padding:.681em 0 .221em;content:"f";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D524"]:before{width:.504em;padding:.47em 0 .209em;content:"g";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D525"]:before{width:.521em;padding:.688em 0 .205em;content:"h";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D526"]:before{width:.279em;padding:.673em 0 .02em;content:"i";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D527"]:before{width:.281em;padding:.672em 0 .208em;content:"j";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D528"]:before{width:.389em;padding:.689em 0 .025em;content:"k";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D529"]:before{width:.28em;padding:.685em 0 .02em;content:"l";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52A"]:before{width:.767em;padding:.475em 0 .026em;content:"m";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52B"]:before{width:.527em;padding:.475em 0 .022em;content:"n";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52C"]:before{width:.489em;padding:.48em 0 .028em;content:"o";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52D"]:before{width:.5em;padding:.541em 0 .212em;content:"p";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52E"]:before{width:.489em;padding:.479em 0 .219em;content:"q";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D52F"]:before{width:.389em;padding:.474em 0 .021em;content:"r";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D530"]:before{width:.443em;padding:.478em 0 .029em;content:"s";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D531"]:before{width:.333em;padding:.64em 0 .02em;content:"t";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D532"]:before{width:.517em;padding:.474em 0 .023em;content:"u";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D533"]:before{width:.512em;padding:.53em 0 .028em;content:"v";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D534"]:before{width:.774em;padding:.532em 0 .028em;content:"w";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D535"]:before{width:.389em;padding:.472em 0 .188em;content:"x";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D536"]:before{width:.499em;padding:.528em 0 .218em;content:"y";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D537"]:before{width:.391em;padding:.471em 0 .214em;content:"z";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX mjx-c[c="1D538"]:before{width:.722em;padding:.701em 0 0;content:"A";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D539"]:before{width:.667em;padding:.683em 0 0;content:"B";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53A"]:before{width:.722em;padding:.702em 0 .019em;content:"C";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53B"]:before{width:.722em;padding:.683em 0 0;content:"D";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53C"]:before{width:.667em;padding:.683em 0 0;content:"E";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53D"]:before{width:.611em;padding:.683em 0 0;content:"F";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53E"]:before{width:.778em;padding:.702em 0 .019em;content:"G";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D53F"]:before{width:.778em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D540"]:before{width:.389em;padding:.683em 0 0;content:"I";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D541"]:before{width:.5em;padding:.683em 0 .077em;content:"J";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D542"]:before{width:.778em;padding:.683em 0 0;content:"K";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D543"]:before{width:.667em;padding:.683em 0 0;content:"L";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D544"]:before{width:.944em;padding:.683em 0 0;content:"M";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D545"]:before{width:.722em;padding:.683em 0 .02em;content:"N";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D546"]:before{width:.778em;padding:.701em 0 .019em;content:"O";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D547"]:before{width:.611em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D548"]:before{width:.778em;padding:.701em 0 .181em;content:"Q";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D549"]:before{width:.722em;padding:.683em 0 0;content:"R";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54A"]:before{width:.556em;padding:.702em 0 .012em;content:"S";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54B"]:before{width:.667em;padding:.683em 0 0;content:"T";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54C"]:before{width:.722em;padding:.683em 0 .019em;content:"U";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54D"]:before{width:.722em;padding:.683em 0 .02em;content:"V";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54E"]:before{width:1em;padding:.683em 0 .019em;content:"W";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D54F"]:before{width:.722em;padding:.683em 0 0;content:"X";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D550"]:before{width:.722em;padding:.683em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D551"]:before{width:.667em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D552"]:before{width:.559em;padding:.453em 0 .006em;content:"a";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D553"]:before{width:.639em;padding:.694em 0 .006em;content:"b";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D554"]:before{width:.511em;padding:.453em 0 .006em;content:"c";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D555"]:before{width:.639em;padding:.694em 0 .006em;content:"d";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D556"]:before{width:.527em;padding:.452em 0 .006em;content:"e";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D557"]:before{width:.351em;padding:.7em 0 0;content:"f";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D557"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D557"]:last-child:before{width:.452em}.MJX-TEX mjx-c[c="1D558"]:before{width:.575em;padding:.455em 0 .201em;content:"g";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D559"]:before{width:.639em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55A"]:before{width:.319em;padding:.695em 0 0;content:"i";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55B"]:before{width:.351em;padding:.695em 0 .2em;content:"j";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55C"]:before{width:.556em;padding:.683em 0 0;content:"k";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D55D"]:before{width:.319em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55E"]:before{width:.958em;padding:.45em 0 0;content:"m";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D55F"]:before{width:.639em;padding:.45em 0 0;content:"n";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D560"]:before{width:.575em;padding:.452em 0 .005em;content:"o";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D561"]:before{width:.639em;padding:.45em 0 .194em;content:"p";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D562"]:before{width:.607em;padding:.45em 0 .194em;content:"q";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D563"]:before{width:.474em;padding:.45em 0 0;content:"r";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D564"]:before{width:.454em;padding:.453em 0 .006em;content:"s";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D565"]:before{width:.447em;padding:.635em 0 .005em;content:"t";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D566"]:before{width:.639em;padding:.45em 0 .006em;content:"u";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D567"]:before{width:.607em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D568"]:before{width:.831em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D569"]:before{width:.607em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D56A"]:before{width:.607em;padding:.444em 0 .2em;content:"y";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D56B"]:before{width:.511em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D56C"]:before{width:.847em;padding:.686em 0 .031em;content:"A";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D56D"]:before{width:1.044em;padding:.684em 0 .031em;content:"B";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D56E"]:before{width:.723em;padding:.676em 0 .032em;content:"C";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D56F"]:before{width:.982em;padding:.683em 0 .029em;content:"D";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D570"]:before{width:.783em;padding:.686em 0 .029em;content:"E";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D571"]:before{width:.722em;padding:.684em 0 .146em;content:"F";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D572"]:before{width:.927em;padding:.687em 0 .029em;content:"G";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D573"]:before{width:.851em;padding:.683em 0 .126em;content:"H";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D574"]:before{width:.655em;padding:.681em 0 .025em;content:"I";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D575"]:before{width:.652em;padding:.68em 0 .141em;content:"J";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D576"]:before{width:.789em;padding:.681em 0 .026em;content:"K";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D577"]:before{width:.786em;padding:.683em 0 .028em;content:"L";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D578"]:before{width:1.239em;padding:.683em 0 .032em;content:"M";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D579"]:before{width:.983em;padding:.679em 0 .03em;content:"N";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57A"]:before{width:.976em;padding:.726em 0 .03em;content:"O";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57B"]:before{width:.977em;padding:.688em 0 .223em;content:"P";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57C"]:before{width:.976em;padding:.726em 0 .083em;content:"Q";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57D"]:before{width:.978em;padding:.688em 0 .028em;content:"R";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57E"]:before{width:.978em;padding:.685em 0 .031em;content:"S";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D57F"]:before{width:.79em;padding:.686em 0 .03em;content:"T";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D580"]:before{width:.851em;padding:.688em 0 .039em;content:"U";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D581"]:before{width:.982em;padding:.685em 0 .029em;content:"V";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D582"]:before{width:1.235em;padding:.683em 0 .03em;content:"W";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D583"]:before{width:.849em;padding:.681em 0 .035em;content:"X";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D584"]:before{width:.984em;padding:.688em 0 .214em;content:"Y";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D585"]:before{width:.711em;padding:.677em 0 .148em;content:"Z";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D586"]:before{width:.603em;padding:.472em 0 .032em;content:"a";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D587"]:before{width:.59em;padding:.69em 0 .032em;content:"b";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D588"]:before{width:.464em;padding:.473em 0 .026em;content:"c";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D589"]:before{width:.589em;padding:.632em 0 .028em;content:"d";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58A"]:before{width:.472em;padding:.471em 0 .027em;content:"e";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58B"]:before{width:.388em;padding:.687em 0 .222em;content:"f";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58C"]:before{width:.595em;padding:.472em 0 .208em;content:"g";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58D"]:before{width:.615em;padding:.687em 0 .207em;content:"h";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58E"]:before{width:.331em;padding:.686em 0 .025em;content:"i";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D58F"]:before{width:.332em;padding:.682em 0 .203em;content:"j";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D590"]:before{width:.464em;padding:.682em 0 .025em;content:"k";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D591"]:before{width:.337em;padding:.681em 0 .024em;content:"l";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D592"]:before{width:.921em;padding:.476em 0 .031em;content:"m";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D593"]:before{width:.654em;padding:.473em 0 .028em;content:"n";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D594"]:before{width:.609em;padding:.482em 0 .034em;content:"o";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D595"]:before{width:.604em;padding:.557em 0 .207em;content:"p";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D596"]:before{width:.596em;padding:.485em 0 .211em;content:"q";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D597"]:before{width:.46em;padding:.472em 0 .026em;content:"r";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D598"]:before{width:.523em;padding:.479em 0 .034em;content:"s";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D599"]:before{width:.393em;padding:.648em 0 .027em;content:"t";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59A"]:before{width:.589em;padding:.472em 0 .032em;content:"u";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59B"]:before{width:.604em;padding:.546em 0 .027em;content:"v";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59C"]:before{width:.918em;padding:.549em 0 .032em;content:"w";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59D"]:before{width:.459em;padding:.471em 0 .188em;content:"x";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59E"]:before{width:.589em;padding:.557em 0 .221em;content:"y";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D59F"]:before{width:.461em;padding:.471em 0 .214em;content:"z";font-family:MJXZERO,MJXTEX-FR-B}.MJX-TEX mjx-c[c="1D5A0"]:before{width:.667em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A1"]:before{width:.667em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A2"]:before{width:.639em;padding:.705em 0 .011em;content:"C";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A3"]:before{width:.722em;padding:.694em 0 0;content:"D";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A4"]:before{width:.597em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A5"]:before{width:.569em;padding:.691em 0 0;content:"F";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A6"]:before{width:.667em;padding:.704em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A7"]:before{width:.708em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A8"]:before{width:.278em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5A9"]:before{width:.472em;padding:.694em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AA"]:before{width:.694em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AB"]:before{width:.542em;padding:.694em 0 0;content:"L";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AC"]:before{width:.875em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AD"]:before{width:.708em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AE"]:before{width:.736em;padding:.715em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5AF"]:before{width:.639em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B0"]:before{width:.736em;padding:.715em 0 .125em;content:"Q";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B1"]:before{width:.646em;padding:.694em 0 0;content:"R";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B2"]:before{width:.556em;padding:.716em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B3"]:before{width:.681em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B4"]:before{width:.688em;padding:.694em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B5"]:before{width:.667em;padding:.694em 0 0;content:"V";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B6"]:before{width:.944em;padding:.694em 0 0;content:"W";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B7"]:before{width:.667em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B8"]:before{width:.667em;padding:.694em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5B9"]:before{width:.611em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BA"]:before{width:.481em;padding:.46em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BB"]:before{width:.517em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BC"]:before{width:.444em;padding:.46em 0 .01em;content:"c";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BD"]:before{width:.517em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BE"]:before{width:.444em;padding:.461em 0 .01em;content:"e";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5BF"]:before{width:.306em;padding:.705em 0 0;content:"f";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C0"]:before{width:.5em;padding:.455em 0 .206em;content:"g";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C1"]:before{width:.517em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C2"]:before{width:.239em;padding:.68em 0 0;content:"i";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C3"]:before{width:.267em;padding:.68em 0 .205em;content:"j";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C4"]:before{width:.489em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C5"]:before{width:.239em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C6"]:before{width:.794em;padding:.455em 0 0;content:"m";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C7"]:before{width:.517em;padding:.455em 0 0;content:"n";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C8"]:before{width:.5em;padding:.46em 0 .01em;content:"o";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5C9"]:before{content:"p"}.MJX-TEX mjx-c[c="1D5C9"]:before,.MJX-TEX mjx-c[c="1D5CA"]:before{width:.517em;padding:.455em 0 .194em;font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CA"]:before{content:"q"}.MJX-TEX mjx-c[c="1D5CB"]:before{width:.342em;padding:.455em 0 0;content:"r";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CC"]:before{width:.383em;padding:.46em 0 .01em;content:"s";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CD"]:before{width:.361em;padding:.571em 0 .01em;content:"t";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CE"]:before{width:.517em;padding:.444em 0 .01em;content:"u";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5CF"]:before{width:.461em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D0"]:before{width:.683em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D1"]:before{width:.461em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D2"]:before{width:.461em;padding:.444em 0 .204em;content:"y";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D3"]:before{width:.435em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D5D4"]:before{width:.733em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D5"]:before{width:.733em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D6"]:before{width:.703em;padding:.704em 0 .011em;content:"C";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D7"]:before{width:.794em;padding:.694em 0 0;content:"D";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D8"]:before{width:.642em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5D9"]:before{width:.611em;padding:.691em 0 0;content:"F";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DA"]:before{width:.733em;padding:.705em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DB"]:before{width:.794em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DC"]:before{width:.331em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DD"]:before{width:.519em;padding:.694em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DE"]:before{width:.764em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5DF"]:before{width:.581em;padding:.694em 0 0;content:"L";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E0"]:before{width:.978em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E1"]:before{width:.794em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E2"]:before{width:.794em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E3"]:before{width:.703em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E4"]:before{width:.794em;padding:.716em 0 .106em;content:"Q";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E5"]:before{width:.703em;padding:.694em 0 0;content:"R";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E6"]:before{width:.611em;padding:.716em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E7"]:before{width:.733em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E8"]:before{width:.764em;padding:.694em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5E9"]:before{width:.733em;padding:.694em 0 0;content:"V";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EA"]:before{width:1.039em;padding:.694em 0 0;content:"W";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EB"]:before{width:.733em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EC"]:before{width:.733em;padding:.694em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5ED"]:before{width:.672em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EE"]:before{width:.525em;padding:.475em 0 .011em;content:"a";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5EF"]:before{width:.561em;padding:.694em 0 .01em;content:"b";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F0"]:before{width:.489em;padding:.475em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F1"]:before{width:.561em;padding:.694em 0 .011em;content:"d";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F2"]:before{width:.511em;padding:.474em 0 .01em;content:"e";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F3"]:before{width:.336em;padding:.705em 0 0;content:"f";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F4"]:before{width:.55em;padding:.469em 0 .206em;content:"g";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F5"]:before{width:.561em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F6"]:before{width:.256em;padding:.695em 0 0;content:"i";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F7"]:before{width:.286em;padding:.695em 0 .205em;content:"j";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F8"]:before{width:.531em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5F9"]:before{width:.256em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FA"]:before{width:.867em;padding:.469em 0 0;content:"m";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FB"]:before{width:.561em;padding:.468em 0 0;content:"n";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FC"]:before{width:.55em;padding:.474em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FD"]:before{content:"p"}.MJX-TEX mjx-c[c="1D5FD"]:before,.MJX-TEX mjx-c[c="1D5FE"]:before{width:.561em;padding:.469em 0 .194em;font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D5FE"]:before{content:"q"}.MJX-TEX mjx-c[c="1D5FF"]:before{width:.372em;padding:.469em 0 0;content:"r";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D600"]:before{width:.422em;padding:.474em 0 .01em;content:"s";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D601"]:before{width:.404em;padding:.589em 0 .01em;content:"t";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D602"]:before{width:.561em;padding:.458em 0 .011em;content:"u";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D603"]:before{width:.5em;padding:.458em 0 0;content:"v";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D604"]:before{width:.744em;padding:.458em 0 0;content:"w";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D605"]:before{width:.5em;padding:.458em 0 0;content:"x";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D606"]:before{width:.5em;padding:.458em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D607"]:before{width:.476em;padding:.458em 0 0;content:"z";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D608"]:before{width:.667em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D609"]:before{width:.667em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D60A"]:before{width:.639em;padding:.705em 0 .01em;content:"C";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60A"]:last-child:before{width:.719em}.MJX-TEX mjx-c[c="1D60B"]:before{width:.722em;padding:.694em 0 0;content:"D";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D60C"]:before{width:.597em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60C"]:last-child:before{width:.688em}.MJX-TEX mjx-c[c="1D60D"]:before{width:.569em;padding:.691em 0 0;content:"F";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60D"]:last-child:before{width:.673em}.MJX-TEX mjx-c[c="1D60E"]:before{width:.667em;padding:.705em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60E"]:last-child:before{width:.73em}.MJX-TEX mjx-c[c="1D60F"]:before{width:.708em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D60F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D60F"]:last-child:before{width:.768em}.MJX-TEX mjx-c[c="1D610"]:before{width:.278em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D610"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D610"]:last-child:before{width:.338em}.MJX-TEX mjx-c[c="1D611"]:before{width:.472em;padding:.694em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D611"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D611"]:last-child:before{width:.535em}.MJX-TEX mjx-c[c="1D612"]:before{width:.694em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D612"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D612"]:last-child:before{width:.785em}.MJX-TEX mjx-c[c="1D613"]:before{width:.542em;padding:.694em 0 0;content:"L";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D614"]:before{width:.875em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D614"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D614"]:last-child:before{width:.929em}.MJX-TEX mjx-c[c="1D615"]:before{width:.708em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D615"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D615"]:last-child:before{width:.766em}.MJX-TEX mjx-c[c="1D616"]:before{width:.736em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D617"]:before{width:.639em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D617"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D617"]:last-child:before{width:.69em}.MJX-TEX mjx-c[c="1D618"]:before{width:.736em;padding:.716em 0 .125em;content:"Q";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D619"]:before{width:.646em;padding:.694em 0 0;content:"R";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D619"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D619"]:last-child:before{width:.698em}.MJX-TEX mjx-c[c="1D61A"]:before{width:.556em;padding:.716em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61A"]:last-child:before{width:.609em}.MJX-TEX mjx-c[c="1D61B"]:before{width:.681em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61B"]:last-child:before{width:.79em}.MJX-TEX mjx-c[c="1D61C"]:before{width:.688em;padding:.694em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61C"]:last-child:before{width:.747em}.MJX-TEX mjx-c[c="1D61D"]:before{width:.667em;padding:.694em 0 0;content:"V";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61D"]:last-child:before{width:.799em}.MJX-TEX mjx-c[c="1D61E"]:before{width:.944em;padding:.694em 0 0;content:"W";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61E"]:last-child:before{width:1.076em}.MJX-TEX mjx-c[c="1D61F"]:before{width:.667em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D61F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D61F"]:last-child:before{width:.758em}.MJX-TEX mjx-c[c="1D620"]:before{width:.667em;padding:.694em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D620"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D620"]:last-child:before{width:.81em}.MJX-TEX mjx-c[c="1D621"]:before{width:.611em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D621"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D621"]:last-child:before{width:.702em}.MJX-TEX mjx-c[c="1D622"]:before{width:.481em;padding:.461em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D623"]:before{width:.517em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D624"]:before{width:.444em;padding:.46em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D624"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D624"]:last-child:before{width:.499em}.MJX-TEX mjx-c[c="1D625"]:before{width:.517em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D625"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D625"]:last-child:before{width:.588em}.MJX-TEX mjx-c[c="1D626"]:before{width:.444em;padding:.46em 0 .011em;content:"e";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D627"]:before{width:.306em;padding:.705em 0 0;content:"f";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D627"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D627"]:last-child:before{width:.494em}.MJX-TEX mjx-c[c="1D628"]:before{width:.5em;padding:.455em 0 .206em;content:"g";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D628"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D628"]:last-child:before{width:.568em}.MJX-TEX mjx-c[c="1D629"]:before{width:.517em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D62A"]:before{width:.239em;padding:.68em 0 0;content:"i";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D62A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D62A"]:last-child:before{width:.315em}.MJX-TEX mjx-c[c="1D62B"]:before{width:.267em;padding:.68em 0 .204em;content:"j";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D62B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D62B"]:last-child:before{width:.336em}.MJX-TEX mjx-c[c="1D62C"]:before{width:.489em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D62C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D62C"]:last-child:before{width:.543em}.MJX-TEX mjx-c[c="1D62D"]:before{width:.239em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D62D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D62D"]:last-child:before{width:.311em}.MJX-TEX mjx-c[c="1D62E"]:before{width:.794em;padding:.455em 0 0;content:"m";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D62F"]:before{width:.517em;padding:.454em 0 0;content:"n";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D630"]:before{width:.5em;padding:.461em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D631"]:before{content:"p"}.MJX-TEX mjx-c[c="1D631"]:before,.MJX-TEX mjx-c[c="1D632"]:before{width:.517em;padding:.455em 0 .194em;font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D632"]:before{content:"q"}.MJX-TEX mjx-c[c="1D633"]:before{width:.342em;padding:.455em 0 0;content:"r";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D633"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D633"]:last-child:before{width:.424em}.MJX-TEX mjx-c[c="1D634"]:before{width:.383em;padding:.461em 0 .011em;content:"s";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D634"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D634"]:last-child:before{width:.436em}.MJX-TEX mjx-c[c="1D635"]:before{width:.361em;padding:.571em 0 .011em;content:"t";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D636"]:before{width:.517em;padding:.444em 0 .01em;content:"u";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D637"]:before{width:.461em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D637"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D637"]:last-child:before{width:.54em}.MJX-TEX mjx-c[c="1D638"]:before{width:.683em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D638"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D638"]:last-child:before{width:.762em}.MJX-TEX mjx-c[c="1D639"]:before{width:.461em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D639"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D639"]:last-child:before{width:.537em}.MJX-TEX mjx-c[c="1D63A"]:before{width:.461em;padding:.444em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D63A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D63A"]:last-child:before{width:.54em}.MJX-TEX mjx-c[c="1D63B"]:before{width:.435em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D63B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D63B"]:last-child:before{width:.494em}.MJX-TEX mjx-c[c="1D63C"]:before{width:.667em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D63D"]:before{width:.667em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D63E"]:before{width:.639em;padding:.705em 0 .01em;content:"C";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D63E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D63E"]:last-child:before{width:.719em}.MJX-TEX mjx-c[c="1D63F"]:before{width:.722em;padding:.694em 0 0;content:"D";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D640"]:before{width:.597em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D640"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D640"]:last-child:before{width:.688em}.MJX-TEX mjx-c[c="1D641"]:before{width:.569em;padding:.691em 0 0;content:"F";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D641"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D641"]:last-child:before{width:.673em}.MJX-TEX mjx-c[c="1D642"]:before{width:.667em;padding:.705em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D642"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D642"]:last-child:before{width:.73em}.MJX-TEX mjx-c[c="1D643"]:before{width:.708em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D643"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D643"]:last-child:before{width:.768em}.MJX-TEX mjx-c[c="1D644"]:before{width:.278em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D644"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D644"]:last-child:before{width:.338em}.MJX-TEX mjx-c[c="1D645"]:before{width:.472em;padding:.694em 0 .022em;content:"J";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D645"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D645"]:last-child:before{width:.535em}.MJX-TEX mjx-c[c="1D646"]:before{width:.694em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D646"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D646"]:last-child:before{width:.785em}.MJX-TEX mjx-c[c="1D647"]:before{width:.542em;padding:.694em 0 0;content:"L";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D648"]:before{width:.875em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D648"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D648"]:last-child:before{width:.929em}.MJX-TEX mjx-c[c="1D649"]:before{width:.708em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D649"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D649"]:last-child:before{width:.766em}.MJX-TEX mjx-c[c="1D64A"]:before{width:.736em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D64B"]:before{width:.639em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D64B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D64B"]:last-child:before{width:.69em}.MJX-TEX mjx-c[c="1D64C"]:before{width:.736em;padding:.716em 0 .125em;content:"Q";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D64D"]:before{width:.646em;padding:.694em 0 0;content:"R";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D64D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D64D"]:last-child:before{width:.698em}.MJX-TEX mjx-c[c="1D64E"]:before{width:.556em;padding:.716em 0 .022em;content:"S";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D64E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D64E"]:last-child:before{width:.609em}.MJX-TEX mjx-c[c="1D64F"]:before{width:.681em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D64F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D64F"]:last-child:before{width:.79em}.MJX-TEX mjx-c[c="1D650"]:before{width:.688em;padding:.694em 0 .022em;content:"U";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D650"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D650"]:last-child:before{width:.747em}.MJX-TEX mjx-c[c="1D651"]:before{width:.667em;padding:.694em 0 0;content:"V";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D651"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D651"]:last-child:before{width:.799em}.MJX-TEX mjx-c[c="1D652"]:before{width:.944em;padding:.694em 0 0;content:"W";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D652"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D652"]:last-child:before{width:1.076em}.MJX-TEX mjx-c[c="1D653"]:before{width:.667em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D653"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D653"]:last-child:before{width:.758em}.MJX-TEX mjx-c[c="1D654"]:before{width:.667em;padding:.694em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D654"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D654"]:last-child:before{width:.81em}.MJX-TEX mjx-c[c="1D655"]:before{width:.611em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D655"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D655"]:last-child:before{width:.702em}.MJX-TEX mjx-c[c="1D656"]:before{width:.481em;padding:.461em 0 .01em;content:"a";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D657"]:before{width:.517em;padding:.694em 0 .011em;content:"b";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D658"]:before{width:.444em;padding:.46em 0 .011em;content:"c";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D658"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D658"]:last-child:before{width:.499em}.MJX-TEX mjx-c[c="1D659"]:before{width:.517em;padding:.694em 0 .01em;content:"d";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D659"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D659"]:last-child:before{width:.588em}.MJX-TEX mjx-c[c="1D65A"]:before{width:.444em;padding:.46em 0 .011em;content:"e";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D65B"]:before{width:.306em;padding:.705em 0 0;content:"f";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D65B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D65B"]:last-child:before{width:.494em}.MJX-TEX mjx-c[c="1D65C"]:before{width:.5em;padding:.455em 0 .206em;content:"g";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D65C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D65C"]:last-child:before{width:.568em}.MJX-TEX mjx-c[c="1D65D"]:before{width:.517em;padding:.694em 0 0;content:"h";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D65E"]:before{width:.239em;padding:.68em 0 0;content:"i";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D65E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D65E"]:last-child:before{width:.315em}.MJX-TEX mjx-c[c="1D65F"]:before{width:.267em;padding:.68em 0 .204em;content:"j";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D65F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D65F"]:last-child:before{width:.336em}.MJX-TEX mjx-c[c="1D660"]:before{width:.489em;padding:.694em 0 0;content:"k";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D660"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D660"]:last-child:before{width:.543em}.MJX-TEX mjx-c[c="1D661"]:before{width:.239em;padding:.694em 0 0;content:"l";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D661"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D661"]:last-child:before{width:.311em}.MJX-TEX mjx-c[c="1D662"]:before{width:.794em;padding:.455em 0 0;content:"m";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D663"]:before{width:.517em;padding:.454em 0 0;content:"n";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D664"]:before{width:.5em;padding:.461em 0 .011em;content:"o";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D665"]:before{content:"p"}.MJX-TEX mjx-c[c="1D665"]:before,.MJX-TEX mjx-c[c="1D666"]:before{width:.517em;padding:.455em 0 .194em;font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D666"]:before{content:"q"}.MJX-TEX mjx-c[c="1D667"]:before{width:.342em;padding:.455em 0 0;content:"r";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D667"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D667"]:last-child:before{width:.424em}.MJX-TEX mjx-c[c="1D668"]:before{width:.383em;padding:.461em 0 .011em;content:"s";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D668"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D668"]:last-child:before{width:.436em}.MJX-TEX mjx-c[c="1D669"]:before{width:.361em;padding:.571em 0 .011em;content:"t";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D66A"]:before{width:.517em;padding:.444em 0 .01em;content:"u";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D66B"]:before{width:.461em;padding:.444em 0 0;content:"v";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66B"]:last-child:before{width:.54em}.MJX-TEX mjx-c[c="1D66C"]:before{width:.683em;padding:.444em 0 0;content:"w";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66C"]:last-child:before{width:.762em}.MJX-TEX mjx-c[c="1D66D"]:before{width:.461em;padding:.444em 0 0;content:"x";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66D"]:last-child:before{width:.537em}.MJX-TEX mjx-c[c="1D66E"]:before{width:.461em;padding:.444em 0 .205em;content:"y";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66E"]:last-child:before{width:.54em}.MJX-TEX mjx-c[c="1D66F"]:before{width:.435em;padding:.444em 0 0;content:"z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D66F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D66F"]:last-child:before{width:.494em}.MJX-TEX mjx-c[c="1D670"]:before{width:.525em;padding:.623em 0 0;content:"A";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D671"]:before{width:.525em;padding:.611em 0 0;content:"B";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D672"]:before{width:.525em;padding:.622em 0 .011em;content:"C";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D673"]:before{width:.525em;padding:.611em 0 0;content:"D";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D674"]:before{width:.525em;padding:.611em 0 0;content:"E";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D675"]:before{width:.525em;padding:.611em 0 0;content:"F";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D676"]:before{width:.525em;padding:.622em 0 .011em;content:"G";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D677"]:before{width:.525em;padding:.611em 0 0;content:"H";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D678"]:before{width:.525em;padding:.611em 0 0;content:"I";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D679"]:before{width:.525em;padding:.611em 0 .011em;content:"J";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67A"]:before{width:.525em;padding:.611em 0 0;content:"K";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67B"]:before{width:.525em;padding:.611em 0 0;content:"L";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67C"]:before{width:.525em;padding:.611em 0 0;content:"M";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67D"]:before{width:.525em;padding:.611em 0 0;content:"N";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67E"]:before{width:.525em;padding:.621em 0 .01em;content:"O";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D67F"]:before{width:.525em;padding:.611em 0 0;content:"P";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D680"]:before{width:.525em;padding:.621em 0 .138em;content:"Q";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D681"]:before{width:.525em;padding:.611em 0 .011em;content:"R";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D682"]:before{width:.525em;padding:.622em 0 .011em;content:"S";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D683"]:before{width:.525em;padding:.611em 0 0;content:"T";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D684"]:before{width:.525em;padding:.611em 0 .011em;content:"U";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D685"]:before{width:.525em;padding:.611em 0 .007em;content:"V";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D686"]:before{width:.525em;padding:.611em 0 .007em;content:"W";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D687"]:before{width:.525em;padding:.611em 0 0;content:"X";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D688"]:before{width:.525em;padding:.611em 0 0;content:"Y";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D689"]:before{width:.525em;padding:.611em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68A"]:before{width:.525em;padding:.439em 0 .006em;content:"a";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68B"]:before{width:.525em;padding:.611em 0 .006em;content:"b";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68C"]:before{width:.525em;padding:.44em 0 .006em;content:"c";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68D"]:before{width:.525em;padding:.611em 0 .006em;content:"d";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68E"]:before{width:.525em;padding:.44em 0 .006em;content:"e";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D68F"]:before{width:.525em;padding:.617em 0 0;content:"f";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D690"]:before{width:.525em;padding:.442em 0 .229em;content:"g";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D691"]:before{width:.525em;padding:.611em 0 0;content:"h";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D692"]:before{width:.525em;padding:.612em 0 0;content:"i";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D693"]:before{width:.525em;padding:.612em 0 .228em;content:"j";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D694"]:before{width:.525em;padding:.611em 0 0;content:"k";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D695"]:before{width:.525em;padding:.611em 0 0;content:"l";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D696"]:before{width:.525em;padding:.436em 0 0;content:"m";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D697"]:before{width:.525em;padding:.436em 0 0;content:"n";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D698"]:before{width:.525em;padding:.44em 0 .006em;content:"o";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D699"]:before{width:.525em;padding:.437em 0 .221em;content:"p";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69A"]:before{width:.525em;padding:.437em 0 .221em;content:"q";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69B"]:before{width:.525em;padding:.437em 0 0;content:"r";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69C"]:before{width:.525em;padding:.44em 0 .006em;content:"s";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69D"]:before{width:.525em;padding:.554em 0 .006em;content:"t";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69E"]:before{width:.525em;padding:.431em 0 .005em;content:"u";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D69F"]:before{width:.525em;padding:.431em 0 0;content:"v";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A0"]:before{width:.525em;padding:.431em 0 0;content:"w";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A1"]:before{width:.525em;padding:.431em 0 0;content:"x";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A2"]:before{width:.525em;padding:.431em 0 .228em;content:"y";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A3"]:before{width:.525em;padding:.431em 0 0;content:"z";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D6A4"]:before{width:.307em;padding:.441em 0 .01em;content:"\131";font-family:MJXZERO,MJXTEX-MI}.MJX-TEX mjx-c[c="1D6A5"]:before{width:.332em;padding:.442em 0 .204em;content:"\237";font-family:MJXZERO,MJXTEX-MI}.MJX-TEX mjx-c[c="1D6A8"]:before{width:.869em;padding:.698em 0 0;content:"A";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6A9"]:before{width:.818em;padding:.686em 0 0;content:"B";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AA"]:before{width:.692em;padding:.68em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AB"]:before{width:.958em;padding:.698em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AC"]:before{width:.756em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AD"]:before{width:.703em;padding:.686em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AE"]:before{width:.9em;padding:.686em 0 0;content:"H";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6AF"]:before{width:.894em;padding:.696em 0 .01em;content:"\398";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B0"]:before{width:.436em;padding:.686em 0 0;content:"I";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B1"]:before{width:.901em;padding:.686em 0 0;content:"K";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B2"]:before{width:.806em;padding:.698em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B3"]:before{width:1.092em;padding:.686em 0 0;content:"M";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B4"]:before{width:.9em;padding:.686em 0 0;content:"N";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B5"]:before{width:.767em;padding:.675em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B6"]:before{width:.864em;padding:.696em 0 .01em;content:"O";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B7"]:before{width:.9em;padding:.68em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B8"]:before{width:.786em;padding:.686em 0 0;content:"P";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6B9"]:before{width:.894em;padding:.696em 0 .01em;content:"\398";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BA"]:before{width:.831em;padding:.686em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BB"]:before{width:.8em;padding:.675em 0 0;content:"T";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BC"]:before{width:.894em;padding:.697em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BD"]:before{width:.831em;padding:.686em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BE"]:before{width:.869em;padding:.686em 0 0;content:"X";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6BF"]:before{width:.894em;padding:.686em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6C0"]:before{width:.831em;padding:.696em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6C1"]:before{width:.958em;padding:.686em 0 .024em;content:"\2207";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D6C2"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C3"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C4"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C5"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C6"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C7"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C8"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6C9"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CA"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CB"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CC"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CD"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CE"]:before{width:.577em;padding:.452em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6CF"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D0"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D1"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D2"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D3"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D4"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D5"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6D5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6D5"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="1D6D6"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D7"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D8"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6D9"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DA"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DB"]:before{width:.628em;padding:.71em 0 .017em;content:"\2202";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DC"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DD"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6DE"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6DE"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6DE"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D6DF"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6E0"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6E1"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D6E2"]:before{width:.75em;padding:.716em 0 0;content:"A";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E3"]:before{width:.759em;padding:.683em 0 0;content:"B";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E4"]:before{width:.615em;padding:.68em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6E4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6E4"]:last-child:before{width:.721em}.MJX-TEX mjx-c[c="1D6E5"]:before{width:.833em;padding:.716em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E6"]:before{width:.738em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E7"]:before{width:.683em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6E8"]:before{width:.831em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6E8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6E8"]:last-child:before{width:.888em}.MJX-TEX mjx-c[c="1D6E9"]:before{width:.763em;padding:.704em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6EA"]:before{width:.44em;padding:.683em 0 0;content:"I";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6EA"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6EA"]:last-child:before{width:.504em}.MJX-TEX mjx-c[c="1D6EB"]:before{width:.849em;padding:.683em 0 0;content:"K";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6EC"]:before{width:.694em;padding:.716em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6ED"]:before{width:.97em;padding:.683em 0 0;content:"M";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6ED"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6ED"]:last-child:before{width:1.051em}.MJX-TEX mjx-c[c="1D6EE"]:before{width:.803em;padding:.683em 0 0;content:"N";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6EE"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6EE"]:last-child:before{width:.888em}.MJX-TEX mjx-c[c="1D6EF"]:before{width:.742em;padding:.677em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F0"]:before{width:.763em;padding:.704em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F1"]:before{width:.831em;padding:.68em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F1"]:last-child:before{width:.887em}.MJX-TEX mjx-c[c="1D6F2"]:before{width:.642em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F2"]:last-child:before{width:.751em}.MJX-TEX mjx-c[c="1D6F3"]:before{width:.763em;padding:.704em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F4"]:before{width:.78em;padding:.683em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F5"]:before{width:.584em;padding:.677em 0 0;content:"T";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F5"]:last-child:before{width:.704em}.MJX-TEX mjx-c[c="1D6F6"]:before{width:.583em;padding:.705em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F6"]:last-child:before{width:.7em}.MJX-TEX mjx-c[c="1D6F7"]:before{width:.667em;padding:.683em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F8"]:before{width:.828em;padding:.683em 0 0;content:"X";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6F9"]:before{width:.612em;padding:.683em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D6F9"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D6F9"]:last-child:before{width:.692em}.MJX-TEX mjx-c[c="1D6FA"]:before{width:.772em;padding:.704em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6FB"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D6FC"]:before{width:.64em;padding:.442em 0 .011em;content:"\3B1";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6FD"]:before{width:.566em;padding:.705em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6FE"]:before{width:.518em;padding:.441em 0 .216em;content:"\3B3";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D6FF"]:before{width:.444em;padding:.717em 0 .01em;content:"\3B4";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D700"]:before{width:.466em;padding:.452em 0 .022em;content:"\3B5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D701"]:before{width:.438em;padding:.704em 0 .204em;content:"\3B6";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D702"]:before{width:.497em;padding:.442em 0 .216em;content:"\3B7";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D703"]:before{width:.469em;padding:.705em 0 .01em;content:"\3B8";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D704"]:before{width:.354em;padding:.442em 0 .01em;content:"\3B9";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D705"]:before{width:.576em;padding:.442em 0 .011em;content:"\3BA";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D706"]:before{width:.583em;padding:.694em 0 .012em;content:"\3BB";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D707"]:before{width:.603em;padding:.442em 0 .216em;content:"\3BC";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D708"]:before{width:.494em;padding:.442em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D709"]:before{width:.438em;padding:.704em 0 .205em;content:"\3BE";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70A"]:before{width:.485em;padding:.441em 0 .011em;content:"\3BF";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70B"]:before{width:.57em;padding:.431em 0 .011em;content:"\3C0";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70C"]:before{width:.517em;padding:.442em 0 .216em;content:"\3C1";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70D"]:before{width:.363em;padding:.442em 0 .107em;content:"\3C2";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70E"]:before{width:.571em;padding:.431em 0 .011em;content:"\3C3";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D70F"]:before{width:.437em;padding:.431em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D70F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D70F"]:last-child:before{width:.517em}.MJX-TEX mjx-c[c="1D710"]:before{width:.54em;padding:.443em 0 .01em;content:"\3C5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D711"]:before{width:.654em;padding:.442em 0 .218em;content:"\3C6";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D712"]:before{width:.626em;padding:.442em 0 .204em;content:"\3C7";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D713"]:before{width:.651em;padding:.694em 0 .205em;content:"\3C8";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D714"]:before{width:.622em;padding:.443em 0 .011em;content:"\3C9";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D715"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D716"]:before{width:.406em;padding:.431em 0 .011em;content:"\3F5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D717"]:before{width:.591em;padding:.705em 0 .011em;content:"\3D1";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D718"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D718"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D718"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D719"]:before{width:.596em;padding:.694em 0 .205em;content:"\3D5";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D71A"]:before{width:.517em;padding:.442em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D71B"]:before{width:.828em;padding:.431em 0 .01em;content:"\3D6";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-c[c="1D71C"]:before{width:.869em;padding:.711em 0 0;content:"A";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D71D"]:before{width:.866em;padding:.686em 0 0;content:"B";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D71E"]:before{width:.657em;padding:.68em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D71E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D71E"]:last-child:before{width:.777em}.MJX-TEX mjx-c[c="1D71F"]:before{width:.958em;padding:.711em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D720"]:before{width:.81em;padding:.68em 0 0;content:"E";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D721"]:before{width:.773em;padding:.686em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D722"]:before{width:.982em;padding:.686em 0 0;content:"H";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D723"]:before{width:.867em;padding:.702em 0 .017em;content:"\398";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D724"]:before{width:.511em;padding:.686em 0 0;content:"I";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D724"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D724"]:last-child:before{width:.573em}.MJX-TEX mjx-c[c="1D725"]:before{width:.971em;padding:.686em 0 0;content:"K";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D726"]:before{width:.806em;padding:.711em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D727"]:before{width:1.142em;padding:.686em 0 0;content:"M";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D727"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D727"]:last-child:before{width:1.219em}.MJX-TEX mjx-c[c="1D728"]:before{width:.95em;padding:.686em 0 0;content:"N";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D728"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D728"]:last-child:before{width:1.027em}.MJX-TEX mjx-c[c="1D729"]:before{width:.841em;padding:.675em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72A"]:before{width:.837em;padding:.703em 0 .017em;content:"O";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72B"]:before{width:.982em;padding:.68em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72C"]:before{width:.723em;padding:.686em 0 0;content:"P";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D72C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D72C"]:last-child:before{width:.847em}.MJX-TEX mjx-c[c="1D72D"]:before{width:.867em;padding:.702em 0 .017em;content:"\398";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72E"]:before{width:.885em;padding:.686em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D72F"]:before{width:.637em;padding:.675em 0 0;content:"T";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D72F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D72F"]:last-child:before{width:.772em}.MJX-TEX mjx-c[c="1D730"]:before{width:.671em;padding:.703em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D730"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D730"]:last-child:before{width:.802em}.MJX-TEX mjx-c[c="1D731"]:before{width:.767em;padding:.686em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D732"]:before{width:.947em;padding:.686em 0 0;content:"X";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D733"]:before{width:.714em;padding:.686em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D733"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D733"]:last-child:before{width:.79em}.MJX-TEX mjx-c[c="1D734"]:before{width:.879em;padding:.703em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D735"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D736"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D737"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D738"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D739"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73A"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73B"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73C"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73D"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73E"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D73F"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D740"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D741"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D742"]:before{width:.577em;padding:.452em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D743"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D744"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D745"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D746"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D747"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D748"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D749"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D749"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D749"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="1D74A"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74B"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74C"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74D"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74E"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D74F"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D750"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D751"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D752"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D752"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D752"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D753"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D754"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D755"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D756"]:before{width:.733em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D757"]:before{width:.733em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D758"]:before{width:.581em;padding:.691em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D759"]:before{width:.917em;padding:.694em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75A"]:before{width:.642em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75B"]:before{width:.672em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75C"]:before{width:.794em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75D"]:before{width:.856em;padding:.716em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75E"]:before{width:.331em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D75F"]:before{width:.764em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D760"]:before{width:.672em;padding:.694em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D761"]:before{width:.978em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D762"]:before{width:.794em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D763"]:before{width:.733em;padding:.688em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D764"]:before{width:.794em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D765"]:before{width:.794em;padding:.691em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D766"]:before{width:.703em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D767"]:before{width:.856em;padding:.716em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D768"]:before{width:.794em;padding:.694em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D769"]:before{width:.733em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76A"]:before{width:.856em;padding:.715em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76B"]:before{width:.794em;padding:.694em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76C"]:before{width:.733em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76D"]:before{width:.856em;padding:.694em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76E"]:before{width:.794em;padding:.716em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D76F"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D770"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D771"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D772"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D773"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D774"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D775"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D776"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D777"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D778"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D779"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77A"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77B"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77C"]:before{width:.577em;padding:.452em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77D"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77E"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D77F"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D780"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D781"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D782"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D783"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D783"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D783"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="1D784"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D785"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D786"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D787"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D788"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D789"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D78A"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D78B"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D78C"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D78C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D78C"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D78D"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D78E"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D78F"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D790"]:before{width:.667em;padding:.694em 0 0;content:"A";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D791"]:before{width:.667em;padding:.694em 0 0;content:"B";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D792"]:before{width:.542em;padding:.691em 0 0;content:"\393";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D792"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D792"]:last-child:before{width:.646em}.MJX-TEX mjx-c[c="1D793"]:before{width:.833em;padding:.694em 0 0;content:"\394";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D794"]:before{width:.597em;padding:.691em 0 0;content:"E";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D794"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D794"]:last-child:before{width:.688em}.MJX-TEX mjx-c[c="1D795"]:before{width:.611em;padding:.694em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D795"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D795"]:last-child:before{width:.702em}.MJX-TEX mjx-c[c="1D796"]:before{width:.708em;padding:.694em 0 0;content:"H";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D796"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D796"]:last-child:before{width:.768em}.MJX-TEX mjx-c[c="1D797"]:before{width:.778em;padding:.715em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D798"]:before{width:.278em;padding:.694em 0 0;content:"I";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D798"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D798"]:last-child:before{width:.338em}.MJX-TEX mjx-c[c="1D799"]:before{width:.694em;padding:.694em 0 0;content:"K";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D799"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D799"]:last-child:before{width:.785em}.MJX-TEX mjx-c[c="1D79A"]:before{width:.611em;padding:.694em 0 0;content:"\39B";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D79B"]:before{width:.875em;padding:.694em 0 0;content:"M";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D79B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D79B"]:last-child:before{width:.929em}.MJX-TEX mjx-c[c="1D79C"]:before{width:.708em;padding:.694em 0 0;content:"N";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D79C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D79C"]:last-child:before{width:.766em}.MJX-TEX mjx-c[c="1D79D"]:before{width:.667em;padding:.688em 0 0;content:"\39E";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D79D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D79D"]:last-child:before{width:.765em}.MJX-TEX mjx-c[c="1D79E"]:before{width:.736em;padding:.716em 0 .022em;content:"O";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D79F"]:before{width:.708em;padding:.691em 0 0;content:"\3A0";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D79F"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D79F"]:last-child:before{width:.768em}.MJX-TEX mjx-c[c="1D7A0"]:before{width:.639em;padding:.694em 0 0;content:"P";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A0"]:last-child:before{width:.69em}.MJX-TEX mjx-c[c="1D7A1"]:before{width:.778em;padding:.715em 0 .022em;content:"\398";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D7A2"]:before{width:.722em;padding:.694em 0 0;content:"\3A3";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A2"]:last-child:before{width:.813em}.MJX-TEX mjx-c[c="1D7A3"]:before{width:.681em;padding:.688em 0 0;content:"T";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A3"]:last-child:before{width:.79em}.MJX-TEX mjx-c[c="1D7A4"]:before{width:.778em;padding:.716em 0 0;content:"\3A5";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A4"]:last-child:before{width:.843em}.MJX-TEX mjx-c[c="1D7A5"]:before{width:.722em;padding:.694em 0 0;content:"\3A6";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D7A6"]:before{width:.667em;padding:.694em 0 0;content:"X";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A6"]:last-child:before{width:.758em}.MJX-TEX mjx-c[c="1D7A7"]:before{width:.778em;padding:.694em 0 0;content:"\3A8";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7A7"]:last-child:before{width:.854em}.MJX-TEX mjx-c[c="1D7A8"]:before{width:.722em;padding:.716em 0 0;content:"\3A9";font-family:MJXZERO,MJXTEX-SS-I}.MJX-TEX mjx-c[c="1D7A9"]:before{width:.833em;padding:.683em 0 .033em;content:"\2207";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D7AA"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AB"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AC"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AD"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AE"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7AF"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B0"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B1"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B2"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B3"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B4"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B5"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B6"]:before{width:.577em;padding:.452em 0 0;content:"\3BD";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B7"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B8"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7B9"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BA"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BB"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BC"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BD"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7BD"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7BD"]:last-child:before{width:.61em}.MJX-TEX mjx-c[c="1D7BE"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7BF"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C0"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C1"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C2"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C3"]:before{width:.531em;padding:.715em 0 .022em;content:"\2202";font-family:MJXZERO,MJXTEX}.MJX-TEX mjx-c[c="1D7C4"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C5"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C6"]:before{width:.667em;padding:.434em 0 .006em;content:"\E009";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7C6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7C6"]:last-child:before{width:.734em}.MJX-TEX mjx-c[c="1D7C7"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C8"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7C9"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6";font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-c[c="1D7CA"]:before{width:.643em;padding:.68em 0 0;content:"F";font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true])mjx-c[c="1D7CA"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true])mjx-c[c="1D7CA"]:last-child:before{width:.749em}.MJX-TEX mjx-c[c="1D7CB"]:before{width:.778em;padding:.605em 0 .085em;content:"\3DD";font-family:MJXZERO,MJXTEX-A}.MJX-TEX mjx-c[c="1D7CE"]:before{width:.575em;padding:.654em 0 .01em;content:"0";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7CF"]:before{width:.575em;padding:.655em 0 0;content:"1";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D0"]:before{width:.575em;padding:.654em 0 0;content:"2";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D1"]:before{width:.575em;padding:.655em 0 .011em;content:"3";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D2"]:before{width:.575em;padding:.656em 0 0;content:"4";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D3"]:before{width:.575em;padding:.655em 0 .011em;content:"5";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D4"]:before{width:.575em;padding:.655em 0 .011em;content:"6";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D5"]:before{width:.575em;padding:.676em 0 .011em;content:"7";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D6"]:before{width:.575em;padding:.654em 0 .011em;content:"8";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D7"]:before{width:.575em;padding:.654em 0 .011em;content:"9";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D8"]:before{width:.575em;padding:.654em 0 .01em;content:"0";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7D9"]:before{width:.575em;padding:.655em 0 0;content:"1";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DA"]:before{width:.575em;padding:.654em 0 0;content:"2";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DB"]:before{width:.575em;padding:.655em 0 .011em;content:"3";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DC"]:before{width:.575em;padding:.656em 0 0;content:"4";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DD"]:before{width:.575em;padding:.655em 0 .011em;content:"5";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DE"]:before{width:.575em;padding:.655em 0 .011em;content:"6";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7DF"]:before{width:.575em;padding:.676em 0 .011em;content:"7";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7E0"]:before{width:.575em;padding:.654em 0 .011em;content:"8";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7E1"]:before{width:.575em;padding:.654em 0 .011em;content:"9";font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-c[c="1D7E2"]:before{width:.5em;padding:.678em 0 .022em;content:"0";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E3"]:before{width:.5em;padding:.678em 0 0;content:"1";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E4"]:before{width:.5em;padding:.677em 0 0;content:"2";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E5"]:before{width:.5em;padding:.678em 0 .022em;content:"3";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E6"]:before{width:.5em;padding:.656em 0 0;content:"4";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E7"]:before{width:.5em;padding:.656em 0 .021em;content:"5";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E8"]:before{width:.5em;padding:.677em 0 .022em;content:"6";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7E9"]:before{width:.5em;padding:.656em 0 .011em;content:"7";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7EA"]:before{width:.5em;padding:.678em 0 .022em;content:"8";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7EB"]:before{width:.5em;padding:.677em 0 .022em;content:"9";font-family:MJXZERO,MJXTEX-SS}.MJX-TEX mjx-c[c="1D7EC"]:before{width:.55em;padding:.715em 0 .022em;content:"0";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7ED"]:before{width:.55em;padding:.716em 0 0;content:"1";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7EE"]:before{width:.55em;padding:.716em 0 0;content:"2";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7EF"]:before{width:.55em;padding:.716em 0 .022em;content:"3";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F0"]:before{width:.55em;padding:.694em 0 0;content:"4";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F1"]:before{width:.55em;padding:.694em 0 .022em;content:"5";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F2"]:before{width:.55em;padding:.716em 0 .022em;content:"6";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F3"]:before{width:.55em;padding:.695em 0 .011em;content:"7";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F4"]:before{width:.55em;padding:.715em 0 .022em;content:"8";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F5"]:before{width:.55em;padding:.716em 0 .022em;content:"9";font-family:MJXZERO,MJXTEX-SS-B}.MJX-TEX mjx-c[c="1D7F6"]:before{width:.525em;padding:.621em 0 .01em;content:"0";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7F7"]:before{width:.525em;padding:.622em 0 0;content:"1";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7F8"]:before{width:.525em;padding:.622em 0 0;content:"2";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7F9"]:before{width:.525em;padding:.622em 0 .011em;content:"3";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FA"]:before{width:.525em;padding:.624em 0 0;content:"4";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FB"]:before{width:.525em;padding:.611em 0 .01em;content:"5";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FC"]:before{width:.525em;padding:.622em 0 .011em;content:"6";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FD"]:before{width:.525em;padding:.627em 0 .01em;content:"7";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FE"]:before{width:.525em;padding:.621em 0 .01em;content:"8";font-family:MJXZERO,MJXTEX-T}.MJX-TEX mjx-c[c="1D7FF"]:before{width:.525em;padding:.622em 0 .011em;content:"9";font-family:MJXZERO,MJXTEX-T}.MJX-TEX .mjx-b mjx-c[c="!"]:before{width:.35em;padding:.705em 0 0}.MJX-TEX .mjx-b mjx-c[c="22"]:before{width:.603em}.MJX-TEX .mjx-b mjx-c[c="#"]:before{width:.958em}.MJX-TEX .mjx-b mjx-c[c="$"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="%"]:before{width:.958em}.MJX-TEX .mjx-b mjx-c[c="&"]:before{width:.894em;padding:.705em 0 .011em}.MJX-TEX .mjx-b mjx-c[c="27"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="("]:before,.MJX-TEX .mjx-b mjx-c[c=")"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="*"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="+"]:before{width:.894em;padding:.633em 0 .131em}.MJX-TEX .mjx-b mjx-c[c=","]:before{width:.319em;padding:.171em 0 .194em}.MJX-TEX .mjx-b mjx-c[c="-"]:before{width:.383em;padding:.278em 0 0}.MJX-TEX .mjx-b mjx-c[c="."]:before{width:.319em;padding:.171em 0 0}.MJX-TEX .mjx-b mjx-c[c="/"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="0"]:before{width:.575em;padding:.654em 0 .01em}.MJX-TEX .mjx-b mjx-c[c="1"]:before{width:.575em;padding:.655em 0 0}.MJX-TEX .mjx-b mjx-c[c="2"]:before{width:.575em;padding:.654em 0 0}.MJX-TEX .mjx-b mjx-c[c="3"]:before{width:.575em;padding:.655em 0 .011em}.MJX-TEX .mjx-b mjx-c[c="4"]:before{width:.575em;padding:.656em 0 0}.MJX-TEX .mjx-b mjx-c[c="5"]:before,.MJX-TEX .mjx-b mjx-c[c="6"]:before{width:.575em;padding:.655em 0 .011em}.MJX-TEX .mjx-b mjx-c[c="7"]:before{width:.575em;padding:.676em 0 .011em}.MJX-TEX .mjx-b mjx-c[c="8"]:before,.MJX-TEX .mjx-b mjx-c[c="9"]:before{width:.575em;padding:.654em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=":"]:before{width:.319em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c=";"]:before{width:.319em;padding:.444em 0 .194em}.MJX-TEX .mjx-b mjx-c[c="<"]:before{width:.894em;padding:.587em 0 .085em}.MJX-TEX .mjx-b mjx-c[c="="]:before{width:.894em;padding:.393em 0 0}.MJX-TEX .mjx-b mjx-c[c=">"]:before{width:.894em;padding:.587em 0 .085em}.MJX-TEX .mjx-b mjx-c[c="?"]:before{width:.543em;padding:.7em 0 0}.MJX-TEX .mjx-b mjx-c[c="@"]:before{width:.894em;padding:.699em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=A]:before{width:.869em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c=B]:before{width:.818em}.MJX-TEX .mjx-b mjx-c[c=C]:before{width:.831em;padding:.697em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=D]:before{width:.882em}.MJX-TEX .mjx-b mjx-c[c=E]:before{width:.756em}.MJX-TEX .mjx-b mjx-c[c=F]:before{width:.724em}.MJX-TEX .mjx-b mjx-c[c=G]:before{width:.904em;padding:.697em 0 .01em}.MJX-TEX .mjx-b mjx-c[c=H]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c=I]:before{width:.436em}.MJX-TEX .mjx-b mjx-c[c=J]:before{width:.594em;padding:.686em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=K]:before{width:.901em}.MJX-TEX .mjx-b mjx-c[c=L]:before{width:.692em}.MJX-TEX .mjx-b mjx-c[c=M]:before{width:1.092em}.MJX-TEX .mjx-b mjx-c[c=N]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c=O]:before{width:.864em;padding:.696em 0 .01em}.MJX-TEX .mjx-b mjx-c[c=P]:before{width:.786em}.MJX-TEX .mjx-b mjx-c[c=Q]:before{width:.864em;padding:.696em 0 .193em}.MJX-TEX .mjx-b mjx-c[c=R]:before{width:.862em;padding:.686em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=S]:before{width:.639em;padding:.697em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=T]:before{width:.8em}.MJX-TEX .mjx-b mjx-c[c=U]:before{width:.885em;padding:.686em 0 .011em}.MJX-TEX .mjx-b mjx-c[c=V]:before{width:.869em;padding:.686em 0 .007em}.MJX-TEX .mjx-b mjx-c[c=W]:before{width:1.189em;padding:.686em 0 .007em}.MJX-TEX .mjx-b mjx-c[c=X]:before,.MJX-TEX .mjx-b mjx-c[c=Y]:before{width:.869em}.MJX-TEX .mjx-b mjx-c[c=Z]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="["]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="5C"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="]"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="^"]:before,.MJX-TEX .mjx-b mjx-c[c=_]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="`"]:before{width:.575em;padding:.706em 0 0}.MJX-TEX .mjx-b mjx-c[c=a]:before{width:.559em;padding:.453em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=b]:before{width:.639em}.MJX-TEX .mjx-b mjx-c[c=c]:before{width:.511em;padding:.453em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=d]:before{width:.639em}.MJX-TEX .mjx-b mjx-c[c=e]:before{width:.527em}.MJX-TEX .mjx-b mjx-c[c=f]:before{width:.351em;padding:.7em 0 0}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b mjx-c[c=f]:last-child:before{width:.452em}.MJX-TEX .mjx-b mjx-c[c=g]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c=h]:before{width:.639em}.MJX-TEX .mjx-b mjx-c[c=i]:before{width:.319em;padding:.695em 0 0}.MJX-TEX .mjx-b mjx-c[c=j]:before{width:.351em;padding:.695em 0 .2em}.MJX-TEX .mjx-b mjx-c[c=k]:before{width:.607em}.MJX-TEX .mjx-b mjx-c[c=l]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c=m]:before{width:.958em;padding:.45em 0 0}.MJX-TEX .mjx-b mjx-c[c=n]:before{width:.639em;padding:.45em 0 0}.MJX-TEX .mjx-b mjx-c[c=o]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c=p]:before{width:.639em;padding:.45em 0 .194em}.MJX-TEX .mjx-b mjx-c[c=q]:before{width:.607em;padding:.45em 0 .194em}.MJX-TEX .mjx-b mjx-c[c=r]:before{width:.474em;padding:.45em 0 0}.MJX-TEX .mjx-b mjx-c[c=s]:before{width:.454em;padding:.453em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=t]:before{width:.447em;padding:.635em 0 .005em}.MJX-TEX .mjx-b mjx-c[c=u]:before{width:.639em;padding:.45em 0 .006em}.MJX-TEX .mjx-b mjx-c[c=v]:before{width:.607em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c=w]:before{width:.831em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c=x]:before{width:.607em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c=y]:before{width:.607em;padding:.444em 0 .2em}.MJX-TEX .mjx-b mjx-c[c=z]:before{width:.511em;padding:.444em 0 0}.MJX-TEX .mjx-b mjx-c[c="{"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="|"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="}"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="~"]:before{width:.575em;padding:.344em 0 0}.MJX-TEX .mjx-b mjx-c[c=A8]:before{width:.575em;padding:.695em 0 0}.MJX-TEX .mjx-b mjx-c[c=AC]:before{width:.767em;padding:.371em 0 0}.MJX-TEX .mjx-b mjx-c[c=AF]:before{width:.575em;padding:.607em 0 0}.MJX-TEX .mjx-b mjx-c[c=B0]:before{width:.575em;padding:.702em 0 0}.MJX-TEX .mjx-b mjx-c[c=B1]:before{width:.894em;padding:.728em 0 .035em}.MJX-TEX .mjx-b mjx-c[c=B4]:before{width:.575em;padding:.706em 0 0}.MJX-TEX .mjx-b mjx-c[c=B7]:before{width:.319em;padding:.336em 0 0}.MJX-TEX .mjx-b mjx-c[c=D7]:before{width:.894em;padding:.53em 0 .028em}.MJX-TEX .mjx-b mjx-c[c=F7]:before{width:.894em;padding:.597em 0 .096em}.MJX-TEX .mjx-b mjx-c[c="131"]:before{width:.394em;padding:.452em 0 .008em}.MJX-TEX .mjx-b mjx-c[c="237"]:before{width:.439em;padding:.451em 0 .201em}.MJX-TEX .mjx-b mjx-c[c="2B9"]:before{width:.344em}.MJX-TEX .mjx-b mjx-c[c="2C6"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2C7"]:before{width:.575em;padding:.66em 0 0}.MJX-TEX .mjx-b mjx-c[c="2C9"]:before{width:.575em;padding:.607em 0 0}.MJX-TEX .mjx-b mjx-c[c="2CA"]:before,.MJX-TEX .mjx-b mjx-c[c="2CB"]:before{width:.575em;padding:.706em 0 0}.MJX-TEX .mjx-b mjx-c[c="2D8"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2D9"]:before{width:.575em;padding:.695em 0 0}.MJX-TEX .mjx-b mjx-c[c="2DA"]:before{width:.575em;padding:.702em 0 0}.MJX-TEX .mjx-b mjx-c[c="2DC"]:before{width:.575em;padding:.694em 0 0}.MJX-TEX .mjx-b mjx-c[c="300"]:before,.MJX-TEX .mjx-b mjx-c[c="301"]:before{padding:.706em 0 0}.MJX-TEX .mjx-b mjx-c[c="303"]:before{padding:.694em 0 0}.MJX-TEX .mjx-b mjx-c[c="304"]:before{padding:.607em 0 0}.MJX-TEX .mjx-b mjx-c[c="307"]:before,.MJX-TEX .mjx-b mjx-c[c="308"]:before{padding:.695em 0 0}.MJX-TEX .mjx-b mjx-c[c="30A"]:before{padding:.702em 0 0}.MJX-TEX .mjx-b mjx-c[c="30B"]:before{padding:.714em 0 0}.MJX-TEX .mjx-b mjx-c[c="30C"]:before{padding:.66em 0 0}.MJX-TEX .mjx-b mjx-c[c="338"]:before{padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="391"]:before{width:.869em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c="392"]:before{width:.818em}.MJX-TEX .mjx-b mjx-c[c="393"]:before{width:.692em}.MJX-TEX .mjx-b mjx-c[c="394"]:before{width:.958em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c="395"]:before{width:.756em}.MJX-TEX .mjx-b mjx-c[c="396"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="397"]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c="398"]:before{width:.894em;padding:.696em 0 .01em}.MJX-TEX .mjx-b mjx-c[c="399"]:before{width:.436em}.MJX-TEX .mjx-b mjx-c[c="39A"]:before{width:.901em}.MJX-TEX .mjx-b mjx-c[c="39B"]:before{width:.806em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c="39C"]:before{width:1.092em}.MJX-TEX .mjx-b mjx-c[c="39D"]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c="39E"]:before{width:.767em}.MJX-TEX .mjx-b mjx-c[c="39F"]:before{width:.864em;padding:.696em 0 .01em}.MJX-TEX .mjx-b mjx-c[c="3A0"]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c="3A1"]:before{width:.786em}.MJX-TEX .mjx-b mjx-c[c="3A2"]:before{width:.894em;padding:.696em 0 .01em}.MJX-TEX .mjx-b mjx-c[c="3A3"]:before{width:.831em}.MJX-TEX .mjx-b mjx-c[c="3A4"]:before{width:.8em}.MJX-TEX .mjx-b mjx-c[c="3A5"]:before{width:.894em;padding:.697em 0 0}.MJX-TEX .mjx-b mjx-c[c="3A6"]:before{width:.831em}.MJX-TEX .mjx-b mjx-c[c="3A7"]:before{width:.869em}.MJX-TEX .mjx-b mjx-c[c="3A8"]:before{width:.894em}.MJX-TEX .mjx-b mjx-c[c="3A9"]:before{width:.831em;padding:.696em 0 0}.MJX-TEX .mjx-b mjx-c[c="3B1"]:before{width:.761em;padding:.452em 0 .008em;content:"\3B1"}.MJX-TEX .mjx-b mjx-c[c="3B2"]:before{width:.66em;padding:.701em 0 .194em;content:"\3B2"}.MJX-TEX .mjx-b mjx-c[c="3B3"]:before{width:.59em;padding:.451em 0 .211em;content:"\3B3"}.MJX-TEX .mjx-b mjx-c[c="3B4"]:before{width:.522em;padding:.725em 0 .008em;content:"\3B4"}.MJX-TEX .mjx-b mjx-c[c="3B5"]:before{width:.529em;padding:.461em 0 .017em;content:"\3B5"}.MJX-TEX .mjx-b mjx-c[c="3B6"]:before{width:.508em;padding:.711em 0 .202em;content:"\3B6"}.MJX-TEX .mjx-b mjx-c[c="3B7"]:before{width:.6em;padding:.452em 0 .211em;content:"\3B7"}.MJX-TEX .mjx-b mjx-c[c="3B8"]:before{width:.562em;padding:.702em 0 .008em;content:"\3B8"}.MJX-TEX .mjx-b mjx-c[c="3B9"]:before{width:.412em;padding:.452em 0 .008em;content:"\3B9"}.MJX-TEX .mjx-b mjx-c[c="3BA"]:before{width:.668em;padding:.452em 0 .008em;content:"\3BA"}.MJX-TEX .mjx-b mjx-c[c="3BB"]:before{width:.671em;padding:.694em 0 .013em;content:"\3BB"}.MJX-TEX .mjx-b mjx-c[c="3BC"]:before{width:.708em;padding:.452em 0 .211em;content:"\3BC"}.MJX-TEX .mjx-b mjx-c[c="3BD"]:before{width:.577em;padding:.452em 0 0;content:"\3BD"}.MJX-TEX .mjx-b mjx-c[c="3BE"]:before{width:.508em;padding:.711em 0 .201em;content:"\3BE"}.MJX-TEX .mjx-b mjx-c[c="3BF"]:before{width:.585em;padding:.452em 0 .008em;content:"\3BF"}.MJX-TEX .mjx-b mjx-c[c="3C0"]:before{width:.682em;padding:.444em 0 .008em;content:"\3C0"}.MJX-TEX .mjx-b mjx-c[c="3C1"]:before{width:.612em;padding:.451em 0 .211em;content:"\3C1"}.MJX-TEX .mjx-b mjx-c[c="3C2"]:before{width:.424em;padding:.451em 0 .105em;content:"\3C2"}.MJX-TEX .mjx-b mjx-c[c="3C3"]:before{width:.686em;padding:.444em 0 .008em;content:"\3C3"}.MJX-TEX .mjx-b mjx-c[c="3C4"]:before{width:.521em;padding:.444em 0 .013em;content:"\3C4"}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b mjx-c[c="3C4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b mjx-c[c="3C4"]:last-child:before{width:.61em}.MJX-TEX .mjx-b mjx-c[c="3C5"]:before{width:.631em;padding:.453em 0 .008em;content:"\3C5"}.MJX-TEX .mjx-b mjx-c[c="3C6"]:before{width:.747em;padding:.452em 0 .216em;content:"\3C6"}.MJX-TEX .mjx-b mjx-c[c="3C7"]:before{width:.718em;padding:.452em 0 .201em;content:"\3C7"}.MJX-TEX .mjx-b mjx-c[c="3C8"]:before{width:.758em;padding:.694em 0 .202em;content:"\3C8"}.MJX-TEX .mjx-b mjx-c[c="3C9"]:before{width:.718em;padding:.453em 0 .008em;content:"\3C9"}.MJX-TEX .mjx-b mjx-c[c="3D1"]:before{width:.692em;padding:.701em 0 .008em;content:"\3D1"}.MJX-TEX .mjx-b mjx-c[c="3D2"]:before{width:.894em;padding:.697em 0 0}.MJX-TEX .mjx-b mjx-c[c="3D5"]:before{width:.712em;padding:.694em 0 .202em;content:"\3D5"}.MJX-TEX .mjx-b mjx-c[c="3D6"]:before{width:.975em;padding:.444em 0 .008em;content:"\3D6"}.MJX-TEX .mjx-b mjx-c[c="3DC"]:before{width:.724em}.MJX-TEX .mjx-b mjx-c[c="3F1"]:before{width:.612em;padding:.451em 0 .194em;content:"\3F1"}.MJX-TEX .mjx-b mjx-c[c="3F5"]:before{width:.483em;padding:.444em 0 .007em;content:"\3F5"}.MJX-TEX .mjx-b mjx-c[c="2003"]:before{width:.999em}.MJX-TEX .mjx-b mjx-c[c="200A"]:before{width:.083em}.MJX-TEX .mjx-b mjx-c[c="2013"]:before{width:.575em;padding:.3em 0 0}.MJX-TEX .mjx-b mjx-c[c="2014"]:before,.MJX-TEX .mjx-b mjx-c[c="2015"]:before{width:1.15em;padding:.3em 0 0}.MJX-TEX .mjx-b mjx-c[c="2016"]:before,.MJX-TEX .mjx-b mjx-c[c="2017"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2018"]:before,.MJX-TEX .mjx-b mjx-c[c="2019"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="201C"]:before,.MJX-TEX .mjx-b mjx-c[c="201D"]:before{width:.603em}.MJX-TEX .mjx-b mjx-c[c="2020"]:before{width:.511em;padding:.702em 0 .211em}.MJX-TEX .mjx-b mjx-c[c="2021"]:before{width:.511em}.MJX-TEX .mjx-b mjx-c[c="2022"]:before{width:.575em;padding:.474em 0 0}.MJX-TEX .mjx-b mjx-c[c="2026"]:before{width:1.295em;padding:.171em 0 0}.MJX-TEX .mjx-b mjx-c[c="2032"]:before{width:.344em}.MJX-TEX .mjx-b mjx-c[c="2033"]:before{width:.688em}.MJX-TEX .mjx-b mjx-c[c="2034"]:before{width:1.032em}.MJX-TEX .mjx-b mjx-c[c="203E"]:before{width:.575em;padding:.607em 0 0}.MJX-TEX .mjx-b mjx-c[c="2044"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2057"]:before{width:1.376em}.MJX-TEX .mjx-b mjx-c[c="20D7"]:before{width:.575em;padding:.723em 0 0;font-family:MJXZERO,MJXTEX-VB}.MJX-TEX .mjx-b mjx-c[c="210F"]:before{width:.668em}.MJX-TEX .mjx-b mjx-c[c="2113"]:before{width:.474em}.MJX-TEX .mjx-b mjx-c[c="2118"]:before{width:.74em;padding:.461em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2135"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="2190"]:before{width:1.15em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2191"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2192"]:before{width:1.15em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2193"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2194"]:before{width:1.15em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2195"]:before{width:.575em;padding:.767em 0 .267em}.MJX-TEX .mjx-b mjx-c[c="2196"]:before,.MJX-TEX .mjx-b mjx-c[c="2197"]:before,.MJX-TEX .mjx-b mjx-c[c="2198"]:before,.MJX-TEX .mjx-b mjx-c[c="2199"]:before{width:1.15em}.MJX-TEX .mjx-b mjx-c[c="219A"]:before{width:1.15em;padding:.711em 0 .21em;content:"\2190\338"}.MJX-TEX .mjx-b mjx-c[c="219B"]:before{width:1.15em;padding:.711em 0 .21em;content:"\2192\338"}.MJX-TEX .mjx-b mjx-c[c="21A6"]:before{width:1.15em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21A9"]:before,.MJX-TEX .mjx-b mjx-c[c="21AA"]:before{width:1.282em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21AE"]:before{width:1.15em;padding:.711em 0 .21em;content:"\2194\338"}.MJX-TEX .mjx-b mjx-c[c="21BC"]:before{width:1.15em;padding:.518em 0 0}.MJX-TEX .mjx-b mjx-c[c="21BD"]:before{width:1.15em;padding:.281em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21C0"]:before{width:1.15em;padding:.518em 0 0}.MJX-TEX .mjx-b mjx-c[c="21C1"]:before{width:1.15em;padding:.281em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21CC"]:before{width:1.15em;padding:.718em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="21CD"]:before{width:1.15em;padding:.711em 0 .21em;content:"\21D0\338"}.MJX-TEX .mjx-b mjx-c[c="21CE"]:before{width:1.15em;padding:.711em 0 .21em;content:"\21D4\338"}.MJX-TEX .mjx-b mjx-c[c="21CF"]:before{width:1.15em;padding:.711em 0 .21em;content:"\21D2\338"}.MJX-TEX .mjx-b mjx-c[c="21D0"]:before{width:1.15em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="21D1"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="21D2"]:before{width:1.15em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="21D3"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="21D4"]:before{width:1.15em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="21D5"]:before{width:.703em;padding:.767em 0 .267em}.MJX-TEX .mjx-b mjx-c[c="2200"]:before{width:.639em;padding:.694em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="2202"]:before{width:.628em;padding:.71em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2203"]:before{width:.639em}.MJX-TEX .mjx-b mjx-c[c="2204"]:before{width:.639em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2205"]:before{width:.575em;padding:.767em 0 .073em}.MJX-TEX .mjx-b mjx-c[c="2206"]:before{width:.958em;padding:.698em 0 0}.MJX-TEX .mjx-b mjx-c[c="2207"]:before{width:.958em;padding:.686em 0 .024em}.MJX-TEX .mjx-b mjx-c[c="2208"]:before{width:.767em;padding:.587em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="2209"]:before{width:.767em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="220B"]:before{width:.767em;padding:.587em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="220C"]:before{width:.767em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2212"]:before{width:.894em;padding:.281em 0 0}.MJX-TEX .mjx-b mjx-c[c="2213"]:before{width:.894em;padding:.537em 0 .227em}.MJX-TEX .mjx-b mjx-c[c="2215"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2216"]:before{width:.575em;padding:.75em 0 .25em}.MJX-TEX .mjx-b mjx-c[c="2217"]:before{width:.575em;padding:.472em 0 0}.MJX-TEX .mjx-b mjx-c[c="2218"]:before,.MJX-TEX .mjx-b mjx-c[c="2219"]:before{width:.575em;padding:.474em 0 0}.MJX-TEX .mjx-b mjx-c[c="221A"]:before{width:.958em;padding:.82em 0 .18em}.MJX-TEX .mjx-b mjx-c[c="221D"]:before{width:.894em;padding:.451em 0 .008em}.MJX-TEX .mjx-b mjx-c[c="221E"]:before{width:1.15em;padding:.452em 0 .008em}.MJX-TEX .mjx-b mjx-c[c="2220"]:before{padding:.714em 0 0}.MJX-TEX .mjx-b mjx-c[c="2223"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="2224"]:before{width:.319em;content:"\2223\338"}.MJX-TEX .mjx-b mjx-c[c="2225"]:before{width:.575em}.MJX-TEX .mjx-b mjx-c[c="2226"]:before{width:.575em;content:"\2225\338"}.MJX-TEX .mjx-b mjx-c[c="2227"]:before{width:.767em;padding:.604em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="2228"]:before{width:.767em;padding:.604em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="2229"]:before{width:.767em;padding:.603em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="222A"]:before{width:.767em;padding:.604em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="222B"]:before{width:.569em;padding:.711em 0 .211em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b mjx-c[c="222B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b mjx-c[c="222B"]:last-child:before{width:.632em}.MJX-TEX .mjx-b mjx-c[c="223C"]:before{width:.894em;padding:.391em 0 0}.MJX-TEX .mjx-b mjx-c[c="2240"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="2241"]:before{width:.894em;padding:.711em 0 .21em;content:"\223C\338"}.MJX-TEX .mjx-b mjx-c[c="2243"]:before{width:.894em;padding:.502em 0 0}.MJX-TEX .mjx-b mjx-c[c="2244"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2245"]:before{width:.894em;padding:.638em 0 .027em}.MJX-TEX .mjx-b mjx-c[c="2247"]:before{width:.894em;padding:.711em 0 .21em;content:"\2245\338"}.MJX-TEX .mjx-b mjx-c[c="2248"]:before{width:.894em;padding:.524em 0 0}.MJX-TEX .mjx-b mjx-c[c="2249"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="224D"]:before{width:.894em;padding:.533em 0 .032em}.MJX-TEX .mjx-b mjx-c[c="2250"]:before{width:.894em;padding:.721em 0 0}.MJX-TEX .mjx-b mjx-c[c="2260"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2261"]:before{width:.894em;padding:.505em 0 0}.MJX-TEX .mjx-b mjx-c[c="2262"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2264"]:before,.MJX-TEX .mjx-b mjx-c[c="2265"]:before{width:.894em;padding:.697em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="226A"]:before{width:1.15em;padding:.617em 0 .116em}.MJX-TEX .mjx-b mjx-c[c="226B"]:before{width:1.15em;padding:.618em 0 .116em}.MJX-TEX .mjx-b mjx-c[c="226D"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="226E"]:before{width:.894em;content:"<\338"}.MJX-TEX .mjx-b mjx-c[c="226F"]:before{width:.894em;content:">\338"}.MJX-TEX .mjx-b mjx-c[c="2270"]:before{width:.894em;padding:.711em 0 .21em;content:"\2264\338"}.MJX-TEX .mjx-b mjx-c[c="2271"]:before{width:.894em;padding:.711em 0 .21em;content:"\2265\338"}.MJX-TEX .mjx-b mjx-c[c="227A"]:before{width:.894em;padding:.585em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="227B"]:before{width:.894em;padding:.586em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="2280"]:before{width:.894em;padding:.711em 0 .21em;content:"\227A\338"}.MJX-TEX .mjx-b mjx-c[c="2281"]:before{width:.894em;padding:.711em 0 .21em;content:"\227B\338"}.MJX-TEX .mjx-b mjx-c[c="2282"]:before{width:.894em;padding:.587em 0 .085em}.MJX-TEX .mjx-b mjx-c[c="2283"]:before{width:.894em;padding:.587em 0 .086em}.MJX-TEX .mjx-b mjx-c[c="2284"]:before,.MJX-TEX .mjx-b mjx-c[c="2285"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="2286"]:before,.MJX-TEX .mjx-b mjx-c[c="2287"]:before{width:.894em;padding:.697em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="2288"]:before{width:.894em;padding:.711em 0 .21em;content:"\2286\338"}.MJX-TEX .mjx-b mjx-c[c="2289"]:before{width:.894em;padding:.711em 0 .21em;content:"\2287\338"}.MJX-TEX .mjx-b mjx-c[c="228E"]:before{width:.767em;padding:.604em 0 .016em}.MJX-TEX .mjx-b mjx-c[c="2291"]:before,.MJX-TEX .mjx-b mjx-c[c="2292"]:before{width:.894em;padding:.697em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="2293"]:before,.MJX-TEX .mjx-b mjx-c[c="2294"]:before{width:.767em;padding:.604em 0 0}.MJX-TEX .mjx-b mjx-c[c="2295"]:before,.MJX-TEX .mjx-b mjx-c[c="2296"]:before,.MJX-TEX .mjx-b mjx-c[c="2297"]:before,.MJX-TEX .mjx-b mjx-c[c="2298"]:before,.MJX-TEX .mjx-b mjx-c[c="2299"]:before{width:.894em;padding:.632em 0 .132em}.MJX-TEX .mjx-b mjx-c[c="22A2"]:before,.MJX-TEX .mjx-b mjx-c[c="22A3"]:before{width:.703em}.MJX-TEX .mjx-b mjx-c[c="22A4"]:before{width:.894em;padding:.694em 0 0}.MJX-TEX .mjx-b mjx-c[c="22A5"]:before{width:.894em;padding:.693em 0 0}.MJX-TEX .mjx-b mjx-c[c="22A8"]:before{width:.974em}.MJX-TEX .mjx-b mjx-c[c="22AC"]:before{width:.703em;padding:.711em 0 .21em;content:"\22A2\338"}.MJX-TEX .mjx-b mjx-c[c="22AD"]:before{width:.974em;padding:.75em 0 .249em;content:"\22A8\338"}.MJX-TEX .mjx-b mjx-c[c="22C4"]:before{width:.575em;padding:.523em 0 .021em}.MJX-TEX .mjx-b mjx-c[c="22C5"]:before{width:.319em;padding:.336em 0 0}.MJX-TEX .mjx-b mjx-c[c="22C6"]:before{width:.575em;padding:.502em 0 0}.MJX-TEX .mjx-b mjx-c[c="22C8"]:before{width:1em;padding:.54em 0 .039em}.MJX-TEX .mjx-b mjx-c[c="22E2"]:before,.MJX-TEX .mjx-b mjx-c[c="22E3"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="22EE"]:before{width:.319em;padding:.951em 0 .029em}.MJX-TEX .mjx-b mjx-c[c="22EF"]:before{width:1.295em;padding:.336em 0 0}.MJX-TEX .mjx-b mjx-c[c="22F1"]:before{width:1.323em;padding:.871em 0 0}.MJX-TEX .mjx-b mjx-c[c="230A"]:before,.MJX-TEX .mjx-b mjx-c[c="230B"]:before,.MJX-TEX .mjx-b mjx-c[c="2308"]:before,.MJX-TEX .mjx-b mjx-c[c="2309"]:before{width:.511em}.MJX-TEX .mjx-b mjx-c[c="2322"]:before{width:1.15em;padding:.405em 0 0}.MJX-TEX .mjx-b mjx-c[c="2323"]:before{width:1.15em;padding:.392em 0 0}.MJX-TEX .mjx-b mjx-c[c="232A"]:before,.MJX-TEX .mjx-b mjx-c[c="2329"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="25B3"]:before,.MJX-TEX .mjx-b mjx-c[c="25B5"]:before{width:1.022em;padding:.711em 0 0}.MJX-TEX .mjx-b mjx-c[c="25B9"]:before{width:.575em;padding:.54em 0 .039em}.MJX-TEX .mjx-b mjx-c[c="25BD"]:before,.MJX-TEX .mjx-b mjx-c[c="25BF"]:before{width:1.022em;padding:.5em 0 .21em}.MJX-TEX .mjx-b mjx-c[c="25C3"]:before{width:.575em;padding:.539em 0 .038em}.MJX-TEX .mjx-b mjx-c[c="25EF"]:before{width:1.15em}.MJX-TEX .mjx-b mjx-c[c="2660"]:before{width:.894em;padding:.719em 0 .129em}.MJX-TEX .mjx-b mjx-c[c="2661"]:before{width:.894em;padding:.711em 0 .024em}.MJX-TEX .mjx-b mjx-c[c="2662"]:before{width:.894em;padding:.719em 0 .154em}.MJX-TEX .mjx-b mjx-c[c="2663"]:before{width:.894em;padding:.719em 0 .129em}.MJX-TEX .mjx-b mjx-c[c="266D"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="266E"]:before{width:.447em;padding:.741em 0 .223em}.MJX-TEX .mjx-b mjx-c[c="266F"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="2758"]:before{width:.319em}.MJX-TEX .mjx-b mjx-c[c="27E8"]:before,.MJX-TEX .mjx-b mjx-c[c="27E9"]:before{width:.447em}.MJX-TEX .mjx-b mjx-c[c="27F5"]:before{width:1.805em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="27F6"]:before{width:1.833em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="27F7"]:before{width:2.126em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="27F8"]:before{width:1.868em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="27F9"]:before{width:1.87em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="27FA"]:before{width:2.126em;padding:.547em 0 .046em}.MJX-TEX .mjx-b mjx-c[c="27FC"]:before{width:1.833em;padding:.518em 0 .017em}.MJX-TEX .mjx-b mjx-c[c="29F8"]:before{width:.894em;padding:.711em 0 .21em;font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-b mjx-c[c="2A2F"]:before{width:.894em;padding:.53em 0 .028em}.MJX-TEX .mjx-b mjx-c[c="2A3F"]:before{width:.9em}.MJX-TEX .mjx-b mjx-c[c="2AAF"]:before{width:.894em;padding:.696em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="2AB0"]:before{width:.894em;padding:.697em 0 .199em}.MJX-TEX .mjx-b mjx-c[c="3008"]:before,.MJX-TEX .mjx-b mjx-c[c="3009"]:before{width:.447em}.MJX-TEX .mjx-i mjx-c[c="!"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="!"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="!"]:last-child:before{width:.38em}.MJX-TEX .mjx-i mjx-c[c="22"]:before{width:.514em}.MJX-TEX .mjx-i mjx-c[c="#"]:before,.MJX-TEX .mjx-i mjx-c[c="%"]:before{width:.818em}.MJX-TEX .mjx-i mjx-c[c="&"]:before{width:.767em}.MJX-TEX .mjx-i mjx-c[c="27"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="27"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="27"]:last-child:before{width:.377em}.MJX-TEX .mjx-i mjx-c[c="("]:before{width:.409em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="("]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="("]:last-child:before{width:.517em}.MJX-TEX .mjx-i mjx-c[c=")"]:before{width:.409em}.MJX-TEX .mjx-i mjx-c[c="*"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="*"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="*"]:last-child:before{width:.584em}.MJX-TEX .mjx-i mjx-c[c="+"]:before{width:.767em;padding:.557em 0 .057em}.MJX-TEX .mjx-i mjx-c[c=","]:before{width:.307em}.MJX-TEX .mjx-i mjx-c[c="-"]:before{width:.358em}.MJX-TEX .mjx-i mjx-c[c="."]:before{width:.307em}.MJX-TEX .mjx-i mjx-c[c="/"]:before{width:.778em;padding:.716em 0 .215em}.MJX-TEX .mjx-i mjx-c[c="0"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="0"]:last-child:before{width:.562em}.MJX-TEX .mjx-i mjx-c[c="1"]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c="2"]:before{width:.511em;padding:.666em 0 .022em}.MJX-TEX .mjx-i mjx-c[c="3"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3"]:last-child:before{width:.562em}.MJX-TEX .mjx-i mjx-c[c="4"]:before{width:.511em;padding:.666em 0 .194em}.MJX-TEX .mjx-i mjx-c[c="5"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="5"]:last-child:before{width:.567em}.MJX-TEX .mjx-i mjx-c[c="6"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="6"]:last-child:before{width:.565em}.MJX-TEX .mjx-i mjx-c[c="7"]:before{width:.511em;padding:.666em 0 .022em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="7"]:last-child:before{width:.634em}.MJX-TEX .mjx-i mjx-c[c="8"]:before,.MJX-TEX .mjx-i mjx-c[c="9"]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c=":"]:before,.MJX-TEX .mjx-i mjx-c[c=";"]:before{width:.307em}.MJX-TEX .mjx-i mjx-c[c="="]:before{width:.767em;padding:.367em 0 0}.MJX-TEX .mjx-i mjx-c[c="?"]:before{width:.511em;padding:.716em 0 0}.MJX-TEX .mjx-i mjx-c[c="@"]:before{width:.767em}.MJX-TEX .mjx-i mjx-c[c=B]:before{width:.759em}.MJX-TEX .mjx-i mjx-c[c=C]:before{width:.715em}.MJX-TEX .mjx-i mjx-c[c=D]:before{width:.828em}.MJX-TEX .mjx-i mjx-c[c=E]:before{width:.738em}.MJX-TEX .mjx-i mjx-c[c=F]:before{width:.643em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=F]:last-child:before{width:.749em}.MJX-TEX .mjx-i mjx-c[c=G]:before{width:.786em}.MJX-TEX .mjx-i mjx-c[c=H]:before{width:.831em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=H]:last-child:before{width:.888em}.MJX-TEX .mjx-i mjx-c[c=I]:before{width:.44em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=I]:last-child:before{width:.504em}.MJX-TEX .mjx-i mjx-c[c=J]:before{width:.555em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=J]:last-child:before{width:.633em}.MJX-TEX .mjx-i mjx-c[c=K]:before{width:.849em}.MJX-TEX .mjx-i mjx-c[c=L]:before{width:.681em}.MJX-TEX .mjx-i mjx-c[c=M]:before{width:.97em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=M]:last-child:before{width:1.051em}.MJX-TEX .mjx-i mjx-c[c=N]:before{width:.803em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=N]:last-child:before{width:.888em}.MJX-TEX .mjx-i mjx-c[c=O]:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c=P]:before{width:.642em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=P]:last-child:before{width:.751em}.MJX-TEX .mjx-i mjx-c[c=Q]:before{width:.791em}.MJX-TEX .mjx-i mjx-c[c=R]:before{width:.759em}.MJX-TEX .mjx-i mjx-c[c=S]:before{width:.613em}.MJX-TEX .mjx-i mjx-c[c=T]:before{width:.584em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=T]:last-child:before{width:.704em}.MJX-TEX .mjx-i mjx-c[c=U]:before{width:.683em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=U]:last-child:before{width:.767em}.MJX-TEX .mjx-i mjx-c[c=V]:before{width:.583em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=V]:last-child:before{width:.769em}.MJX-TEX .mjx-i mjx-c[c=W]:before{width:.944em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=W]:last-child:before{width:1.048em}.MJX-TEX .mjx-i mjx-c[c=X]:before{width:.828em}.MJX-TEX .mjx-i mjx-c[c=Y]:before{width:.581em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=Y]:last-child:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c=Z]:before{width:.683em}.MJX-TEX .mjx-i mjx-c[c="["]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="["]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="["]:last-child:before{width:.446em}.MJX-TEX .mjx-i mjx-c[c="]"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="]"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="]"]:last-child:before{width:.359em}.MJX-TEX .mjx-i mjx-c[c="^"]:before,.MJX-TEX .mjx-i mjx-c[c=_]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c=a]:before{width:.529em;padding:.441em 0 .01em}.MJX-TEX .mjx-i mjx-c[c=b]:before{width:.429em}.MJX-TEX .mjx-i mjx-c[c=c]:before{width:.433em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=d]:before{width:.52em}.MJX-TEX .mjx-i mjx-c[c=e]:before{width:.466em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=f]:before{width:.49em;padding:.705em 0 .205em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c=f]:last-child:before{width:.55em}.MJX-TEX .mjx-i mjx-c[c=g]:before{width:.477em;padding:.442em 0 .205em}.MJX-TEX .mjx-i mjx-c[c=h]:before{width:.576em;padding:.694em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=i]:before{width:.345em;padding:.661em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=j]:before{width:.412em;padding:.661em 0 .204em}.MJX-TEX .mjx-i mjx-c[c=k]:before{width:.521em;padding:.694em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=l]:before{width:.298em;padding:.694em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=m]:before{width:.878em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=n]:before{width:.6em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=o]:before{width:.485em;padding:.441em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=p]:before{width:.503em}.MJX-TEX .mjx-i mjx-c[c=q]:before{width:.446em}.MJX-TEX .mjx-i mjx-c[c=r]:before{width:.451em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=s]:before{width:.469em;padding:.442em 0 .01em}.MJX-TEX .mjx-i mjx-c[c=t]:before{width:.361em;padding:.626em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=u]:before{width:.572em}.MJX-TEX .mjx-i mjx-c[c=v]:before{width:.485em;padding:.443em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=w]:before{width:.716em;padding:.443em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=x]:before{width:.572em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c=y]:before{width:.49em;padding:.442em 0 .205em}.MJX-TEX .mjx-i mjx-c[c=z]:before{width:.465em;padding:.442em 0 .011em}.MJX-TEX .mjx-i mjx-c[c="~"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="~"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="~"]:last-child:before{width:.571em}.MJX-TEX .mjx-i mjx-c[c="131"]:before{width:.307em;padding:.441em 0 .01em}.MJX-TEX .mjx-i mjx-c[c="237"]:before{width:.332em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="303"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="303"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="304"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="304"]:last-child:before{width:.054em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="306"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="306"]:last-child:before{width:.062em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="30B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="30B"]:last-child:before{width:.065em}.MJX-TEX .mjx-i mjx-c[c="30C"]:before{padding:.638em 0 0}.MJX-TEX .mjx-i mjx-c[c="392"]:before{width:.759em}.MJX-TEX .mjx-i mjx-c[c="393"]:before{width:.615em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="393"]:last-child:before{width:.721em}.MJX-TEX .mjx-i mjx-c[c="395"]:before{width:.738em}.MJX-TEX .mjx-i mjx-c[c="396"]:before{width:.683em}.MJX-TEX .mjx-i mjx-c[c="397"]:before{width:.831em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="397"]:last-child:before{width:.888em}.MJX-TEX .mjx-i mjx-c[c="398"]:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c="399"]:before{width:.44em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="399"]:last-child:before{width:.504em}.MJX-TEX .mjx-i mjx-c[c="39A"]:before{width:.849em}.MJX-TEX .mjx-i mjx-c[c="39C"]:before{width:.97em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="39C"]:last-child:before{width:1.051em}.MJX-TEX .mjx-i mjx-c[c="39D"]:before{width:.803em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="39D"]:last-child:before{width:.888em}.MJX-TEX .mjx-i mjx-c[c="39E"]:before{width:.742em}.MJX-TEX .mjx-i mjx-c[c="39F"]:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c="3A0"]:before{width:.831em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A0"]:last-child:before{width:.887em}.MJX-TEX .mjx-i mjx-c[c="3A1"]:before{width:.642em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A1"]:last-child:before{width:.751em}.MJX-TEX .mjx-i mjx-c[c="3A2"]:before{width:.763em}.MJX-TEX .mjx-i mjx-c[c="3A3"]:before{width:.78em}.MJX-TEX .mjx-i mjx-c[c="3A4"]:before{width:.584em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A4"]:last-child:before{width:.704em}.MJX-TEX .mjx-i mjx-c[c="3A5"]:before{width:.583em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A5"]:last-child:before{width:.7em}.MJX-TEX .mjx-i mjx-c[c="3A6"]:before{width:.667em}.MJX-TEX .mjx-i mjx-c[c="3A7"]:before{width:.828em}.MJX-TEX .mjx-i mjx-c[c="3A8"]:before{width:.612em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3A8"]:last-child:before{width:.692em}.MJX-TEX .mjx-i mjx-c[c="3A9"]:before{width:.772em}.MJX-TEX .mjx-i mjx-c[c="3B1"]:before{width:.64em;padding:.442em 0 .011em;content:"\3B1"}.MJX-TEX .mjx-i mjx-c[c="3B2"]:before{width:.566em;padding:.705em 0 .194em;content:"\3B2"}.MJX-TEX .mjx-i mjx-c[c="3B3"]:before{width:.518em;padding:.441em 0 .216em;content:"\3B3"}.MJX-TEX .mjx-i mjx-c[c="3B4"]:before{width:.444em;padding:.717em 0 .01em;content:"\3B4"}.MJX-TEX .mjx-i mjx-c[c="3B5"]:before{width:.466em;padding:.452em 0 .022em;content:"\3B5"}.MJX-TEX .mjx-i mjx-c[c="3B6"]:before{width:.438em;padding:.704em 0 .204em;content:"\3B6"}.MJX-TEX .mjx-i mjx-c[c="3B7"]:before{width:.497em;padding:.442em 0 .216em;content:"\3B7"}.MJX-TEX .mjx-i mjx-c[c="3B8"]:before{width:.469em;padding:.705em 0 .01em;content:"\3B8"}.MJX-TEX .mjx-i mjx-c[c="3B9"]:before{width:.354em;padding:.442em 0 .01em;content:"\3B9"}.MJX-TEX .mjx-i mjx-c[c="3BA"]:before{width:.576em;padding:.442em 0 .011em;content:"\3BA"}.MJX-TEX .mjx-i mjx-c[c="3BB"]:before{width:.583em;padding:.694em 0 .012em;content:"\3BB"}.MJX-TEX .mjx-i mjx-c[c="3BC"]:before{width:.603em;padding:.442em 0 .216em;content:"\3BC"}.MJX-TEX .mjx-i mjx-c[c="3BD"]:before{width:.494em;padding:.442em 0 0;content:"\3BD"}.MJX-TEX .mjx-i mjx-c[c="3BE"]:before{width:.438em;padding:.704em 0 .205em;content:"\3BE"}.MJX-TEX .mjx-i mjx-c[c="3BF"]:before{width:.485em;padding:.441em 0 .011em;content:"\3BF"}.MJX-TEX .mjx-i mjx-c[c="3C0"]:before{width:.57em;padding:.431em 0 .011em;content:"\3C0"}.MJX-TEX .mjx-i mjx-c[c="3C1"]:before{width:.517em;padding:.442em 0 .216em;content:"\3C1"}.MJX-TEX .mjx-i mjx-c[c="3C2"]:before{width:.363em;padding:.442em 0 .107em;content:"\3C2"}.MJX-TEX .mjx-i mjx-c[c="3C3"]:before{width:.571em;padding:.431em 0 .011em;content:"\3C3"}.MJX-TEX .mjx-i mjx-c[c="3C4"]:before{width:.437em;padding:.431em 0 .013em;content:"\3C4"}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3C4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3C4"]:last-child:before{width:.517em}.MJX-TEX .mjx-i mjx-c[c="3C5"]:before{width:.54em;padding:.443em 0 .01em;content:"\3C5"}.MJX-TEX .mjx-i mjx-c[c="3C6"]:before{width:.654em;padding:.442em 0 .218em;content:"\3C6"}.MJX-TEX .mjx-i mjx-c[c="3C7"]:before{width:.626em;padding:.442em 0 .204em;content:"\3C7"}.MJX-TEX .mjx-i mjx-c[c="3C8"]:before{width:.651em;padding:.694em 0 .205em;content:"\3C8"}.MJX-TEX .mjx-i mjx-c[c="3C9"]:before{width:.622em;padding:.443em 0 .011em;content:"\3C9"}.MJX-TEX .mjx-i mjx-c[c="3D1"]:before{width:.591em;padding:.705em 0 .011em;content:"\3D1"}.MJX-TEX .mjx-i mjx-c[c="3D2"]:before{width:.583em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3D2"]:last-child:before{width:.7em}.MJX-TEX .mjx-i mjx-c[c="3D5"]:before{width:.596em;padding:.694em 0 .205em;content:"\3D5"}.MJX-TEX .mjx-i mjx-c[c="3D6"]:before{width:.828em;padding:.431em 0 .01em;content:"\3D6"}.MJX-TEX .mjx-i mjx-c[c="3DC"]:before{width:.643em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="3DC"]:last-child:before{width:.749em}.MJX-TEX .mjx-i mjx-c[c="3F1"]:before{width:.517em;padding:.442em 0 .194em;content:"\3F1"}.MJX-TEX .mjx-i mjx-c[c="3F5"]:before{width:.406em;padding:.431em 0 .011em;content:"\3F5"}.MJX-TEX .mjx-i mjx-c[c="2013"]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c="2014"]:before,.MJX-TEX .mjx-i mjx-c[c="2015"]:before{width:1.022em}.MJX-TEX .mjx-i mjx-c[c="2017"]:before{width:.511em}.MJX-TEX .mjx-i mjx-c[c="2018"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="2018"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="2018"]:last-child:before{width:.362em}.MJX-TEX .mjx-i mjx-c[c="2019"]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="2019"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="2019"]:last-child:before{width:.377em}.MJX-TEX .mjx-i mjx-c[c="201C"]:before{width:.514em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-i mjx-c[c="201C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-i mjx-c[c="201C"]:last-child:before{width:.606em}.MJX-TEX .mjx-i mjx-c[c="201D"]:before{width:.514em}.MJX-TEX .mjx-i mjx-c[c="2044"]:before{width:.778em;padding:.716em 0 .215em}.MJX-TEX .mjx-i mjx-c[c="210E"]:before{width:.576em;padding:.694em 0 .011em;content:"h";font-family:MJXZERO,MJXTEX-I}.MJX-TEX .mjx-i mjx-c[c="29F8"]:before{width:.778em;padding:.716em 0 .215em;content:"/";font-family:MJXZERO,MJXTEX-I}.MJX-TEX .mjx-b.mjx-i mjx-c[c="/"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=A]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c=B]:before{width:.866em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=C]:before{width:.817em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=D]:before{width:.938em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=E]:before{width:.81em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=F]:before{width:.689em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=F]:last-child:before{width:.809em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=G]:before{width:.887em;padding:.703em 0 .016em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=H]:before{width:.982em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=I]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=I]:last-child:before{width:.573em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=J]:before{width:.631em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=J]:last-child:before{width:.694em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=K]:before{width:.971em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=L]:before{width:.756em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=M]:before{width:1.142em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=M]:last-child:before{width:1.219em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=N]:before{width:.95em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=N]:last-child:before{width:1.027em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=O]:before{width:.837em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=P]:before{width:.723em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=P]:last-child:before{width:.847em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=Q]:before{width:.869em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=R]:before{width:.872em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=S]:before{width:.693em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=T]:before{width:.637em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=T]:last-child:before{width:.772em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=U]:before{width:.8em;padding:.686em 0 .016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=U]:last-child:before{width:.877em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=V]:before{width:.678em;padding:.686em 0 .016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=V]:last-child:before{width:.886em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=W]:before{width:1.093em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=W]:last-child:before{width:1.207em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=X]:before{width:.947em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=Y]:before{width:.675em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=Y]:last-child:before{width:.876em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=Z]:before{width:.773em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=a]:before{width:.633em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=b]:before{width:.521em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=c]:before{width:.513em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=d]:before{width:.61em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=e]:before{width:.554em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=f]:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c=f]:last-child:before{width:.624em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=g]:before{width:.545em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=h]:before{width:.668em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=i]:before{width:.405em;padding:.694em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=j]:before{width:.471em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=k]:before{width:.604em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=l]:before{width:.348em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=m]:before{width:1.032em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=n]:before{width:.713em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=o]:before{width:.585em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=p]:before{width:.601em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=q]:before{width:.542em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=r]:before{width:.529em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=s]:before{width:.531em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=t]:before{width:.415em;padding:.643em 0 .007em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=u]:before{width:.681em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=v]:before{width:.567em;padding:.453em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=w]:before{padding:.453em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=x]:before{width:.659em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=y]:before{width:.59em;padding:.452em 0 .202em}.MJX-TEX .mjx-b.mjx-i mjx-c[c=z]:before{width:.555em;padding:.452em 0 .008em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="391"]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c="392"]:before{width:.866em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="393"]:before{width:.657em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="393"]:last-child:before{width:.777em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="394"]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c="395"]:before{width:.81em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="396"]:before{width:.773em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="397"]:before{width:.982em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="398"]:before{width:.867em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="399"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="399"]:last-child:before{width:.573em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39A"]:before{width:.971em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39B"]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39C"]:before{width:1.142em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="39C"]:last-child:before{width:1.219em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39D"]:before{width:.95em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="39D"]:last-child:before{width:1.027em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39E"]:before{width:.841em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="39F"]:before{width:.837em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A0"]:before{width:.982em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A1"]:before{width:.723em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A1"]:last-child:before{width:.847em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A2"]:before{width:.867em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A3"]:before{width:.885em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A4"]:before{width:.637em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A4"]:last-child:before{width:.772em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A5"]:before{width:.671em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A5"]:last-child:before{width:.802em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A6"]:before{width:.767em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A7"]:before{width:.947em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A8"]:before{width:.714em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3A8"]:last-child:before{width:.79em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3A9"]:before{width:.879em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3C4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3C4"]:last-child:before{width:.61em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3D2"]:before{width:.671em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3D2"]:last-child:before{width:.802em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="3DC"]:before{width:.689em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-b.mjx-i mjx-c[c="3DC"]:last-child:before{width:.809em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="2044"]:before{width:.894em;padding:.711em 0 .21em}.MJX-TEX .mjx-b.mjx-i mjx-c[c="2206"]:before{padding:.711em 0 0}.MJX-TEX .mjx-b.mjx-i mjx-c[c="29F8"]:before{width:.894em;padding:.711em 0 .21em;font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-ds mjx-c[c=A]:before{width:.722em}.MJX-TEX .mjx-ds mjx-c[c=B]:before{width:.667em}.MJX-TEX .mjx-ds mjx-c[c=D]:before{width:.722em}.MJX-TEX .mjx-ds mjx-c[c=E]:before{width:.667em}.MJX-TEX .mjx-ds mjx-c[c=F]:before{width:.611em}.MJX-TEX .mjx-ds mjx-c[c=G]:before,.MJX-TEX .mjx-ds mjx-c[c=H]:before{width:.778em}.MJX-TEX .mjx-ds mjx-c[c=I]:before{width:.389em}.MJX-TEX .mjx-ds mjx-c[c=J]:before{width:.5em;padding:.683em 0 .077em}.MJX-TEX .mjx-ds mjx-c[c=L]:before{width:.667em}.MJX-TEX .mjx-ds mjx-c[c=M]:before{width:.944em}.MJX-TEX .mjx-ds mjx-c[c=N]:before{width:.722em;padding:.683em 0 .02em}.MJX-TEX .mjx-ds mjx-c[c=P]:before{width:.611em}.MJX-TEX .mjx-ds mjx-c[c=Q]:before{padding:.701em 0 .181em}.MJX-TEX .mjx-ds mjx-c[c=R]:before{width:.722em;padding:.683em 0 0}.MJX-TEX .mjx-ds mjx-c[c=S]:before{padding:.702em 0 .012em}.MJX-TEX .mjx-ds mjx-c[c=T]:before{width:.667em;padding:.683em 0 0}.MJX-TEX .mjx-ds mjx-c[c=U]:before,.MJX-TEX .mjx-ds mjx-c[c=V]:before{width:.722em}.MJX-TEX .mjx-ds mjx-c[c=W]:before{width:1em}.MJX-TEX .mjx-ds mjx-c[c=X]:before,.MJX-TEX .mjx-ds mjx-c[c=Y]:before{width:.722em}.MJX-TEX .mjx-ds mjx-c[c=Z]:before{width:.667em}.MJX-TEX .mjx-ds mjx-c[c=k]:before{width:.556em;padding:.683em 0 0}.MJX-TEX .mjx-ds mjx-c[c="3A1"]:before,.MJX-TEX .mjx-ds mjx-c[c="3A2"]:before,.MJX-TEX .mjx-ds mjx-c[c="3A4"]:before,.MJX-TEX .mjx-ds mjx-c[c="3A7"]:before,.MJX-TEX .mjx-ds mjx-c[c="3D2"]:before,.MJX-TEX .mjx-ds mjx-c[c="3DC"]:before,.MJX-TEX .mjx-ds mjx-c[c="39A"]:before,.MJX-TEX .mjx-ds mjx-c[c="39C"]:before,.MJX-TEX .mjx-ds mjx-c[c="39D"]:before,.MJX-TEX .mjx-ds mjx-c[c="39F"]:before,.MJX-TEX .mjx-ds mjx-c[c="391"]:before,.MJX-TEX .mjx-ds mjx-c[c="392"]:before,.MJX-TEX .mjx-ds mjx-c[c="395"]:before,.MJX-TEX .mjx-ds mjx-c[c="396"]:before,.MJX-TEX .mjx-ds mjx-c[c="397"]:before,.MJX-TEX .mjx-ds mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-B}.MJX-TEX .mjx-ds mjx-c[c="2102"]:before{width:.722em;padding:.702em 0 .019em;content:"C";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="210D"]:before{width:.778em;padding:.683em 0 0;content:"H";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="2115"]:before{width:.722em;padding:.683em 0 .02em;content:"N";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="2119"]:before{width:.611em;padding:.683em 0 0;content:"P";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="211A"]:before{width:.778em;padding:.701em 0 .181em;content:"Q";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="211D"]:before{width:.722em;padding:.683em 0 0;content:"R";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-ds mjx-c[c="2124"]:before{width:.667em;padding:.683em 0 0;content:"Z";font-family:MJXZERO,MJXTEX-A}.MJX-TEX .mjx-fr mjx-c[c="!"]:before{width:.296em;padding:.689em 0 .012em}.MJX-TEX .mjx-fr mjx-c[c="22"]:before{width:.215em}.MJX-TEX .mjx-fr mjx-c[c="&"]:before{width:.738em;padding:.698em 0 .011em}.MJX-TEX .mjx-fr mjx-c[c="27"]:before{width:.212em}.MJX-TEX .mjx-fr mjx-c[c="("]:before{padding:.737em 0 .186em}.MJX-TEX .mjx-fr mjx-c[c=")"]:before{padding:.735em 0 .187em}.MJX-TEX .mjx-fr mjx-c[c="*"]:before{width:.278em;padding:.692em 0 0}.MJX-TEX .mjx-fr mjx-c[c="+"]:before{width:.756em;padding:.598em 0 .082em}.MJX-TEX .mjx-fr mjx-c[c=","]:before{padding:.107em 0 .191em}.MJX-TEX .mjx-fr mjx-c[c="-"]:before{width:.756em;padding:.275em 0 0}.MJX-TEX .mjx-fr mjx-c[c="."]:before{padding:.102em 0 .015em}.MJX-TEX .mjx-fr mjx-c[c="/"]:before{width:.502em;padding:.721em 0 .182em}.MJX-TEX .mjx-fr mjx-c[c="0"]:before{width:.502em;padding:.492em 0 .013em}.MJX-TEX .mjx-fr mjx-c[c="1"]:before{width:.502em;padding:.468em 0 0}.MJX-TEX .mjx-fr mjx-c[c="2"]:before{width:.502em;padding:.474em 0 0}.MJX-TEX .mjx-fr mjx-c[c="3"]:before{width:.502em;padding:.473em 0 .182em}.MJX-TEX .mjx-fr mjx-c[c="4"]:before{width:.502em;padding:.476em 0 .191em}.MJX-TEX .mjx-fr mjx-c[c="5"]:before{width:.502em;padding:.458em 0 .184em}.MJX-TEX .mjx-fr mjx-c[c="6"]:before{width:.502em;padding:.7em 0 .013em}.MJX-TEX .mjx-fr mjx-c[c="7"]:before{width:.502em;padding:.468em 0 .181em}.MJX-TEX .mjx-fr mjx-c[c="8"]:before{width:.502em;padding:.705em 0 .01em}.MJX-TEX .mjx-fr mjx-c[c="9"]:before{width:.502em;padding:.469em 0 .182em}.MJX-TEX .mjx-fr mjx-c[c=":"]:before{width:.216em;padding:.457em 0 .012em}.MJX-TEX .mjx-fr mjx-c[c=";"]:before{width:.216em;padding:.458em 0 .189em}.MJX-TEX .mjx-fr mjx-c[c="="]:before{width:.756em;padding:.368em 0 0}.MJX-TEX .mjx-fr mjx-c[c="?"]:before{width:.362em;padding:.693em 0 .011em}.MJX-TEX .mjx-fr mjx-c[c=A]:before{width:.718em;padding:.696em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=B]:before{width:.884em;padding:.691em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=C]:before{width:.613em;padding:.685em 0 .024em}.MJX-TEX .mjx-fr mjx-c[c=D]:before{width:.832em;padding:.685em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=E]:before{width:.663em;padding:.685em 0 .024em}.MJX-TEX .mjx-fr mjx-c[c=F]:before{width:.611em;padding:.686em 0 .153em}.MJX-TEX .mjx-fr mjx-c[c=G]:before{padding:.69em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=H]:before{width:.72em;padding:.666em 0 .133em}.MJX-TEX .mjx-fr mjx-c[c=I]:before{width:.554em;padding:.686em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=J]:before{width:.552em;padding:.686em 0 .139em}.MJX-TEX .mjx-fr mjx-c[c=K]:before{width:.668em;padding:.68em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=L]:before{width:.666em;padding:.686em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=M]:before{width:1.05em;padding:.692em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=N]:before{width:.832em;padding:.686em 0 .025em}.MJX-TEX .mjx-fr mjx-c[c=O]:before{width:.827em;padding:.729em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=P]:before{width:.828em;padding:.692em 0 .218em}.MJX-TEX .mjx-fr mjx-c[c=Q]:before{width:.827em;padding:.729em 0 .069em}.MJX-TEX .mjx-fr mjx-c[c=R]:before{width:.828em}.MJX-TEX .mjx-fr mjx-c[c=S]:before{width:.829em;padding:.692em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=T]:before{width:.669em;padding:.701em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=U]:before{width:.646em;padding:.697em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=V]:before{width:.831em}.MJX-TEX .mjx-fr mjx-c[c=W]:before{width:1.046em;padding:.686em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=X]:before{width:.719em;padding:.688em 0 .027em}.MJX-TEX .mjx-fr mjx-c[c=Y]:before{width:.833em;padding:.686em 0 .218em}.MJX-TEX .mjx-fr mjx-c[c=Z]:before{width:.602em;padding:.729em 0 .139em}.MJX-TEX .mjx-fr mjx-c[c="["]:before{padding:.74em 0 .13em}.MJX-TEX .mjx-fr mjx-c[c="]"]:before{padding:.738em 0 .131em}.MJX-TEX .mjx-fr mjx-c[c="^"]:before{padding:.734em 0 0}.MJX-TEX .mjx-fr mjx-c[c=a]:before{padding:.47em 0 .035em}.MJX-TEX .mjx-fr mjx-c[c=b]:before{width:.513em;padding:.685em 0 .031em}.MJX-TEX .mjx-fr mjx-c[c=c]:before{width:.389em;padding:.466em 0 .029em}.MJX-TEX .mjx-fr mjx-c[c=d]:before{width:.499em;padding:.609em 0 .033em}.MJX-TEX .mjx-fr mjx-c[c=e]:before{width:.401em;padding:.467em 0 .03em}.MJX-TEX .mjx-fr mjx-c[c=f]:before{width:.326em;padding:.681em 0 .221em}.MJX-TEX .mjx-fr mjx-c[c=g]:before{width:.504em;padding:.47em 0 .209em}.MJX-TEX .mjx-fr mjx-c[c=h]:before{width:.521em;padding:.688em 0 .205em}.MJX-TEX .mjx-fr mjx-c[c=i]:before{width:.279em;padding:.673em 0 .02em}.MJX-TEX .mjx-fr mjx-c[c=j]:before{width:.281em}.MJX-TEX .mjx-fr mjx-c[c=k]:before{width:.389em;padding:.689em 0 .025em}.MJX-TEX .mjx-fr mjx-c[c=l]:before{width:.28em;padding:.685em 0 .02em}.MJX-TEX .mjx-fr mjx-c[c=m]:before{width:.767em;padding:.475em 0 .026em}.MJX-TEX .mjx-fr mjx-c[c=n]:before{width:.527em;padding:.475em 0 .022em}.MJX-TEX .mjx-fr mjx-c[c=o]:before{width:.489em;padding:.48em 0 .028em}.MJX-TEX .mjx-fr mjx-c[c=p]:before{width:.5em;padding:.541em 0 .212em}.MJX-TEX .mjx-fr mjx-c[c=q]:before{width:.489em;padding:.479em 0 .219em}.MJX-TEX .mjx-fr mjx-c[c=r]:before{width:.389em;padding:.474em 0 .021em}.MJX-TEX .mjx-fr mjx-c[c=s]:before{width:.443em;padding:.478em 0 .029em}.MJX-TEX .mjx-fr mjx-c[c=t]:before{width:.333em;padding:.64em 0 .02em}.MJX-TEX .mjx-fr mjx-c[c=u]:before{width:.517em;padding:.474em 0 .023em}.MJX-TEX .mjx-fr mjx-c[c=v]:before{width:.512em;padding:.53em 0 .028em}.MJX-TEX .mjx-fr mjx-c[c=w]:before{width:.774em;padding:.532em 0 .028em}.MJX-TEX .mjx-fr mjx-c[c=x]:before{width:.389em;padding:.472em 0 .188em}.MJX-TEX .mjx-fr mjx-c[c=y]:before{width:.499em;padding:.528em 0 .218em}.MJX-TEX .mjx-fr mjx-c[c=z]:before{width:.391em;padding:.471em 0 .214em}.MJX-TEX .mjx-fr mjx-c[c="3A1"]:before,.MJX-TEX .mjx-fr mjx-c[c="3A2"]:before,.MJX-TEX .mjx-fr mjx-c[c="3A4"]:before,.MJX-TEX .mjx-fr mjx-c[c="3A7"]:before,.MJX-TEX .mjx-fr mjx-c[c="3D2"]:before,.MJX-TEX .mjx-fr mjx-c[c="3DC"]:before,.MJX-TEX .mjx-fr mjx-c[c="39A"]:before,.MJX-TEX .mjx-fr mjx-c[c="39C"]:before,.MJX-TEX .mjx-fr mjx-c[c="39D"]:before,.MJX-TEX .mjx-fr mjx-c[c="39F"]:before,.MJX-TEX .mjx-fr mjx-c[c="391"]:before,.MJX-TEX .mjx-fr mjx-c[c="392"]:before,.MJX-TEX .mjx-fr mjx-c[c="395"]:before,.MJX-TEX .mjx-fr mjx-c[c="396"]:before,.MJX-TEX .mjx-fr mjx-c[c="397"]:before,.MJX-TEX .mjx-fr mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX}.MJX-TEX .mjx-fr mjx-c[c="2018"]:before{width:.215em;padding:.708em 0 0}.MJX-TEX .mjx-fr mjx-c[c="2019"]:before{width:.215em}.MJX-TEX .mjx-fr mjx-c[c="2044"]:before{width:.502em;padding:.721em 0 .182em}.MJX-TEX .mjx-fr mjx-c[c="210C"]:before{width:.72em;padding:.666em 0 .133em;content:"H";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c="2111"]:before{width:.554em;padding:.686em 0 .026em;content:"I";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c="211C"]:before{width:.828em;padding:.686em 0 .026em;content:"R";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c="2128"]:before{width:.602em;padding:.729em 0 .139em;content:"Z";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c="212D"]:before{width:.613em;padding:.685em 0 .024em;content:"C";font-family:MJXZERO,MJXTEX-FR}.MJX-TEX .mjx-fr mjx-c[c=E300]:before{width:.497em;padding:.683em 0 .032em;content:"\E300"}.MJX-TEX .mjx-fr mjx-c[c=E301]:before{width:.498em;padding:.616em 0 .03em;content:"\E301"}.MJX-TEX .mjx-fr mjx-c[c=E302]:before{width:.333em;padding:.68em 0 .215em;content:"\E302"}.MJX-TEX .mjx-fr mjx-c[c=E303]:before{width:.329em;padding:.679em 0 .224em;content:"\E303"}.MJX-TEX .mjx-fr mjx-c[c=E304]:before{width:.503em;padding:.471em 0 .214em;content:"\E304"}.MJX-TEX .mjx-fr mjx-c[c=E305]:before{width:.333em;padding:.686em 0 .02em;content:"\E305"}.MJX-TEX .mjx-fr mjx-c[c=E306]:before{width:.334em;padding:.577em 0 .021em;content:"\E306"}.MJX-TEX .mjx-fr mjx-c[c=E307]:before{width:.501em;padding:.475em 0 .022em;content:"\E307"}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="!"]:before{width:.349em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="22"]:before{width:.254em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="&"]:before{width:.871em;padding:.696em 0 .016em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="27"]:before{width:.25em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="("]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c=")"]:before{width:.459em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="*"]:before{width:.328em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="+"]:before{width:.893em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=","]:before{width:.328em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="-"]:before{width:.893em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="."]:before{width:.328em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="/"]:before{width:.593em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="0"]:before{width:.593em;padding:.501em 0 .012em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="1"]:before{width:.593em;padding:.489em 0 0}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="2"]:before{width:.593em;padding:.491em 0 0}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3"]:before{width:.593em;padding:.487em 0 .193em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="4"]:before{width:.593em;padding:.495em 0 .196em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="5"]:before{width:.593em;padding:.481em 0 .19em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="6"]:before{width:.593em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="7"]:before{width:.593em;padding:.479em 0 .197em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="8"]:before{width:.593em;padding:.714em 0 .005em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="9"]:before{width:.593em;padding:.487em 0 .195em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=":"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c=";"]:before{width:.255em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="="]:before{width:.582em;padding:.343em 0 0}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="?"]:before{width:.428em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=A]:before{width:.847em;padding:.686em 0 .031em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=B]:before{width:1.044em;padding:.684em 0 .031em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=C]:before{width:.723em;padding:.676em 0 .032em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=D]:before{width:.982em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E]:before{width:.783em;padding:.686em 0 .029em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=F]:before{width:.722em;padding:.684em 0 .146em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=G]:before{width:.927em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=H]:before{width:.851em;padding:.683em 0 .126em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=I]:before{width:.655em;padding:.681em 0 .025em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=J]:before{width:.652em;padding:.68em 0 .141em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=K]:before{width:.789em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=L]:before{width:.786em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=M]:before{width:1.239em;padding:.683em 0 .032em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=N]:before{width:.983em;padding:.679em 0 .03em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=O]:before{width:.976em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=P]:before{width:.977em;padding:.688em 0 .223em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=Q]:before{width:.976em;padding:.726em 0 .083em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=R]:before{width:.978em;padding:.688em 0 .028em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=S]:before{width:.978em;padding:.685em 0 .031em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=T]:before{width:.79em;padding:.686em 0 .03em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=U]:before{width:.851em;padding:.688em 0 .039em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=V]:before{width:.982em;padding:.685em 0 .029em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=W]:before{width:1.235em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=X]:before{width:.849em;padding:.681em 0 .035em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=Y]:before{width:.984em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=Z]:before{width:.711em;padding:.677em 0 .148em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="["]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="]"]:before{width:.257em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="^"]:before{width:.59em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=a]:before{width:.603em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=b]:before{width:.59em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=c]:before{width:.464em;padding:.473em 0 .026em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=d]:before{width:.589em;padding:.632em 0 .028em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=e]:before{width:.472em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=f]:before{width:.388em;padding:.687em 0 .222em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=g]:before{width:.595em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=h]:before{width:.615em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=i]:before{width:.331em;padding:.686em 0 .025em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=j]:before{width:.332em;padding:.682em 0 .203em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=k]:before{width:.464em;padding:.682em 0 .025em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=l]:before{width:.337em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=m]:before{width:.921em;padding:.476em 0 .031em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=n]:before{width:.654em;padding:.473em 0 .028em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=o]:before{width:.609em;padding:.482em 0 .034em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=p]:before{width:.604em;padding:.557em 0 .207em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=q]:before{width:.596em;padding:.485em 0 .211em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=r]:before{width:.46em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=s]:before{width:.523em;padding:.479em 0 .034em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=t]:before{width:.393em;padding:.648em 0 .027em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=u]:before{width:.589em;padding:.472em 0 .032em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=v]:before{width:.604em;padding:.546em 0 .027em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=w]:before{width:.918em;padding:.549em 0 .032em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=x]:before{width:.459em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=y]:before{width:.589em;padding:.557em 0 .221em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=z]:before{width:.461em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3A1"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3A2"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3A4"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3A7"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3D2"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="3DC"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="39A"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="39C"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="39D"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="39F"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="392"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="395"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="396"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="397"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-B}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="2018"]:before,.MJX-TEX .mjx-fr.mjx-b mjx-c[c="2019"]:before{width:.254em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c="2044"]:before{width:.593em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E301]:before{width:.587em;padding:.63em 0 .027em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E302]:before{width:.394em;padding:.693em 0 .212em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E303]:before{width:.387em;padding:.681em 0 .219em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E304]:before{width:.593em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E305]:before{width:.393em;padding:.684em 0 .027em}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E308]:before{width:.981em;padding:.679em 0 .22em;content:"\E308"}.MJX-TEX .mjx-fr.mjx-b mjx-c[c=E309]:before{width:.727em;padding:.717em 0 .137em;content:"\E309"}.MJX-TEX .mjx-sc mjx-c[c=A]:before{width:.803em;padding:.717em 0 .008em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=A]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=A]:last-child:before{width:1.016em}.MJX-TEX .mjx-sc mjx-c[c=B]:before{width:.908em;padding:.708em 0 .028em}.MJX-TEX .mjx-sc mjx-c[c=C]:before{width:.666em;padding:.728em 0 .026em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=C]:last-child:before{width:.819em}.MJX-TEX .mjx-sc mjx-c[c=D]:before{width:.774em;padding:.708em 0 .031em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=D]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=D]:last-child:before{width:.855em}.MJX-TEX .mjx-sc mjx-c[c=E]:before{width:.562em;padding:.707em 0 .008em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=E]:last-child:before{width:.718em}.MJX-TEX .mjx-sc mjx-c[c=F]:before{width:.895em;padding:.735em 0 .036em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=F]:last-child:before{width:.99em}.MJX-TEX .mjx-sc mjx-c[c=G]:before{width:.61em;padding:.717em 0 .037em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=G]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=G]:last-child:before{width:.738em}.MJX-TEX .mjx-sc mjx-c[c=H]:before{width:.969em;padding:.717em 0 .036em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=H]:last-child:before{width:1.241em}.MJX-TEX .mjx-sc mjx-c[c=I]:before{width:.809em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=I]:last-child:before{width:.946em}.MJX-TEX .mjx-sc mjx-c[c=J]:before{width:1.052em;padding:.717em 0 .314em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=J]:last-child:before{width:1.133em}.MJX-TEX .mjx-sc mjx-c[c=K]:before{width:.914em;padding:.717em 0 .037em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=K]:last-child:before{width:1.204em}.MJX-TEX .mjx-sc mjx-c[c=L]:before{width:.874em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=L]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=L]:last-child:before{width:1.035em}.MJX-TEX .mjx-sc mjx-c[c=M]:before{width:1.08em;padding:.721em 0 .05em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=M]:last-child:before{width:1.216em}.MJX-TEX .mjx-sc mjx-c[c=N]:before{width:.902em;padding:.726em 0 .036em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=N]:last-child:before{width:1.208em}.MJX-TEX .mjx-sc mjx-c[c=O]:before{width:.738em;padding:.707em 0 .008em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=O]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=O]:last-child:before{width:.805em}.MJX-TEX .mjx-sc mjx-c[c=P]:before{width:1.013em;padding:.716em 0 .037em}.MJX-TEX .mjx-sc mjx-c[c=Q]:before{width:.883em;padding:.717em 0 .017em}.MJX-TEX .mjx-sc mjx-c[c=R]:before{width:.85em;padding:.717em 0 .017em}.MJX-TEX .mjx-sc mjx-c[c=S]:before{width:.868em;padding:.708em 0 .036em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=S]:last-child:before{width:1.016em}.MJX-TEX .mjx-sc mjx-c[c=T]:before{width:.747em;padding:.735em 0 .037em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=T]:last-child:before{width:.996em}.MJX-TEX .mjx-sc mjx-c[c=U]:before{width:.8em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=U]:last-child:before{width:.96em}.MJX-TEX .mjx-sc mjx-c[c=V]:before{width:.622em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=V]:last-child:before{width:.85em}.MJX-TEX .mjx-sc mjx-c[c=W]:before{width:.805em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=W]:last-child:before{width:1.026em}.MJX-TEX .mjx-sc mjx-c[c=X]:before{width:.944em;padding:.717em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=X]:last-child:before{width:1.131em}.MJX-TEX .mjx-sc mjx-c[c=Y]:before{width:.71em;padding:.716em 0 .017em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=Y]:last-child:before{width:.959em}.MJX-TEX .mjx-sc mjx-c[c=Z]:before{width:.821em;padding:.717em 0 .016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c=Z]:last-child:before{width:1.032em}.MJX-TEX .mjx-sc mjx-c[c="3A1"]:before,.MJX-TEX .mjx-sc mjx-c[c="3A2"]:before,.MJX-TEX .mjx-sc mjx-c[c="3A4"]:before,.MJX-TEX .mjx-sc mjx-c[c="3A7"]:before,.MJX-TEX .mjx-sc mjx-c[c="3D2"]:before,.MJX-TEX .mjx-sc mjx-c[c="3DC"]:before,.MJX-TEX .mjx-sc mjx-c[c="39A"]:before,.MJX-TEX .mjx-sc mjx-c[c="39C"]:before,.MJX-TEX .mjx-sc mjx-c[c="39D"]:before,.MJX-TEX .mjx-sc mjx-c[c="39F"]:before,.MJX-TEX .mjx-sc mjx-c[c="391"]:before,.MJX-TEX .mjx-sc mjx-c[c="392"]:before,.MJX-TEX .mjx-sc mjx-c[c="395"]:before,.MJX-TEX .mjx-sc mjx-c[c="396"]:before,.MJX-TEX .mjx-sc mjx-c[c="397"]:before,.MJX-TEX .mjx-sc mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX}.MJX-TEX .mjx-sc mjx-c[c="210B"]:before{width:.969em;padding:.717em 0 .036em;content:"H";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="210B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="210B"]:last-child:before{width:1.241em}.MJX-TEX .mjx-sc mjx-c[c="2110"]:before{width:1.052em;padding:.717em 0 .314em;content:"J";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2110"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2110"]:last-child:before{width:1.133em}.MJX-TEX .mjx-sc mjx-c[c="2112"]:before{width:.874em;padding:.717em 0 .017em;content:"L";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2112"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2112"]:last-child:before{width:1.035em}.MJX-TEX .mjx-sc mjx-c[c="211B"]:before{width:.85em;padding:.717em 0 .017em;content:"R";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX .mjx-sc mjx-c[c="212C"]:before{width:.908em;padding:.708em 0 .028em;content:"B";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX .mjx-sc mjx-c[c="2130"]:before{width:.562em;padding:.707em 0 .008em;content:"E";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2130"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2130"]:last-child:before{width:.718em}.MJX-TEX .mjx-sc mjx-c[c="2131"]:before{width:.895em;padding:.735em 0 .036em;content:"F";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2131"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2131"]:last-child:before{width:.99em}.MJX-TEX .mjx-sc mjx-c[c="2133"]:before{width:1.08em;padding:.721em 0 .05em;content:"M";font-family:MJXZERO,MJXTEX-SC}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc mjx-c[c="2133"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc mjx-c[c="2133"]:last-child:before{width:1.216em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=A]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=A]:last-child:before{width:1.016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=C]:last-child:before{width:.819em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=D]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=D]:last-child:before{width:.855em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=E]:last-child:before{width:.718em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=F]:last-child:before{width:.99em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=G]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=G]:last-child:before{width:.738em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=H]:last-child:before{width:1.241em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=I]:last-child:before{width:.946em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=J]:last-child:before{width:1.133em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=K]:last-child:before{width:1.204em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=L]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=L]:last-child:before{width:1.035em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=M]:last-child:before{width:1.216em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=N]:last-child:before{width:1.208em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=O]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=O]:last-child:before{width:.805em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=S]:last-child:before{width:1.016em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=T]:last-child:before{width:.996em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=U]:last-child:before{width:.96em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=V]:last-child:before{width:.85em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=W]:last-child:before{width:1.026em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=X]:last-child:before{width:1.131em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=Y]:last-child:before{width:.959em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sc.mjx-b mjx-c[c=Z]:last-child:before{width:1.032em}.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3A1"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3A2"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3A4"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3A7"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3D2"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="3DC"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="39A"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="39C"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="39D"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="39F"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="392"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="395"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="396"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="397"]:before,.MJX-TEX .mjx-sc.mjx-b mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-B}.MJX-TEX .mjx-ss mjx-c[c="!"]:before{width:.319em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="&"]:before{width:.758em}.MJX-TEX .mjx-ss mjx-c[c=","]:before{padding:.098em 0 .125em}.MJX-TEX .mjx-ss mjx-c[c="-"]:before{padding:.259em 0 0}.MJX-TEX .mjx-ss mjx-c[c="."]:before{padding:.098em 0 0}.MJX-TEX .mjx-ss mjx-c[c="0"]:before{padding:.678em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="1"]:before{padding:.678em 0 0}.MJX-TEX .mjx-ss mjx-c[c="2"]:before{padding:.677em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3"]:before{padding:.678em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="4"]:before{padding:.656em 0 0}.MJX-TEX .mjx-ss mjx-c[c="5"]:before{padding:.656em 0 .021em}.MJX-TEX .mjx-ss mjx-c[c="6"]:before{padding:.677em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="7"]:before{padding:.656em 0 .011em}.MJX-TEX .mjx-ss mjx-c[c="8"]:before{padding:.678em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="9"]:before{padding:.677em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=":"]:before{padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c=";"]:before{padding:.444em 0 .125em}.MJX-TEX .mjx-ss mjx-c[c="="]:before{padding:.37em 0 0}.MJX-TEX .mjx-ss mjx-c[c="@"]:before{width:.667em}.MJX-TEX .mjx-ss mjx-c[c=A]:before,.MJX-TEX .mjx-ss mjx-c[c=B]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=C]:before{width:.639em;padding:.705em 0 .011em}.MJX-TEX .mjx-ss mjx-c[c=D]:before{width:.722em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=E]:before{width:.597em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c=F]:before{width:.569em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c=G]:before{width:.667em;padding:.704em 0 .011em}.MJX-TEX .mjx-ss mjx-c[c=H]:before{width:.708em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=I]:before{width:.278em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=J]:before{width:.472em;padding:.694em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=K]:before{width:.694em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=L]:before{width:.542em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=M]:before{width:.875em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=N]:before{width:.708em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=O]:before{width:.736em;padding:.715em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=P]:before{width:.639em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=Q]:before{width:.736em;padding:.715em 0 .125em}.MJX-TEX .mjx-ss mjx-c[c=R]:before{width:.646em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=S]:before{padding:.716em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=T]:before{width:.681em;padding:.688em 0 0}.MJX-TEX .mjx-ss mjx-c[c=U]:before{width:.688em;padding:.694em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c=V]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=W]:before{width:.944em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=X]:before,.MJX-TEX .mjx-ss mjx-c[c=Y]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c=Z]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="["]:before,.MJX-TEX .mjx-ss mjx-c[c="]"]:before{width:.289em}.MJX-TEX .mjx-ss mjx-c[c=_]:before{padding:0 0 .114em}.MJX-TEX .mjx-ss mjx-c[c=a]:before{width:.481em;padding:.46em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=b]:before{width:.517em}.MJX-TEX .mjx-ss mjx-c[c=c]:before{padding:.46em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=d]:before{width:.517em}.MJX-TEX .mjx-ss mjx-c[c=e]:before{padding:.461em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=h]:before{width:.517em}.MJX-TEX .mjx-ss mjx-c[c=i]:before{width:.239em;padding:.68em 0 0}.MJX-TEX .mjx-ss mjx-c[c=j]:before{width:.267em;padding:.68em 0 .205em}.MJX-TEX .mjx-ss mjx-c[c=k]:before{width:.489em}.MJX-TEX .mjx-ss mjx-c[c=l]:before{width:.239em}.MJX-TEX .mjx-ss mjx-c[c=m]:before{width:.794em;padding:.455em 0 0}.MJX-TEX .mjx-ss mjx-c[c=n]:before{width:.517em;padding:.455em 0 0}.MJX-TEX .mjx-ss mjx-c[c=o]:before{padding:.46em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=p]:before,.MJX-TEX .mjx-ss mjx-c[c=q]:before{width:.517em;padding:.455em 0 .194em}.MJX-TEX .mjx-ss mjx-c[c=r]:before{width:.342em;padding:.455em 0 0}.MJX-TEX .mjx-ss mjx-c[c=s]:before{width:.383em;padding:.46em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=t]:before{width:.361em;padding:.571em 0 .01em}.MJX-TEX .mjx-ss mjx-c[c=u]:before{width:.517em}.MJX-TEX .mjx-ss mjx-c[c=v]:before{width:.461em;padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c=w]:before{width:.683em;padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c=x]:before{width:.461em;padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c=y]:before{width:.461em;padding:.444em 0 .204em}.MJX-TEX .mjx-ss mjx-c[c=z]:before{width:.435em;padding:.444em 0 0}.MJX-TEX .mjx-ss mjx-c[c="~"]:before{padding:.327em 0 0}.MJX-TEX .mjx-ss mjx-c[c="131"]:before{width:.239em}.MJX-TEX .mjx-ss mjx-c[c="237"]:before{width:.267em}.MJX-TEX .mjx-ss mjx-c[c="300"]:before,.MJX-TEX .mjx-ss mjx-c[c="301"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="303"]:before{padding:.677em 0 0}.MJX-TEX .mjx-ss mjx-c[c="304"]:before{padding:.631em 0 0}.MJX-TEX .mjx-ss mjx-c[c="307"]:before,.MJX-TEX .mjx-ss mjx-c[c="308"]:before{padding:.68em 0 0}.MJX-TEX .mjx-ss mjx-c[c="30A"]:before,.MJX-TEX .mjx-ss mjx-c[c="30B"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="30C"]:before{padding:.654em 0 0}.MJX-TEX .mjx-ss mjx-c[c="391"]:before,.MJX-TEX .mjx-ss mjx-c[c="392"]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="393"]:before{width:.542em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c="394"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="395"]:before{width:.597em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c="396"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="397"]:before{width:.708em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="398"]:before{padding:.716em 0 .021em}.MJX-TEX .mjx-ss mjx-c[c="399"]:before{width:.278em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39A"]:before{width:.694em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39B"]:before{width:.611em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39C"]:before{width:.875em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39D"]:before{width:.708em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39E"]:before{padding:.688em 0 0}.MJX-TEX .mjx-ss mjx-c[c="39F"]:before{width:.736em;padding:.715em 0 .022em}.MJX-TEX .mjx-ss mjx-c[c="3A0"]:before{width:.708em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A1"]:before{width:.639em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A2"]:before{padding:.716em 0 .021em}.MJX-TEX .mjx-ss mjx-c[c="3A3"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A4"]:before{width:.681em;padding:.688em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A5"]:before{padding:.716em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A6"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A7"]:before{width:.667em;padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A8"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3A9"]:before,.MJX-TEX .mjx-ss mjx-c[c="3D2"]:before{padding:.716em 0 0}.MJX-TEX .mjx-ss mjx-c[c="3DC"]:before{width:.569em;padding:.691em 0 0}.MJX-TEX .mjx-ss mjx-c[c="2013"]:before,.MJX-TEX .mjx-ss mjx-c[c="2014"]:before,.MJX-TEX .mjx-ss mjx-c[c="2015"]:before{padding:.312em 0 0}.MJX-TEX .mjx-ss mjx-c[c="2017"]:before{padding:0 0 .114em}.MJX-TEX .mjx-ss mjx-c[c="2206"]:before{padding:.694em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="!"]:before{width:.367em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="22"]:before{width:.558em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="#"]:before{width:.917em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="$"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="%"]:before{width:1.029em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="&"]:before{width:.831em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="27"]:before{width:.306em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="("]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=")"]:before{width:.428em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="*"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="+"]:before{width:.856em;padding:.617em 0 .116em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=","]:before{width:.306em;padding:.146em 0 .106em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="-"]:before{width:.367em;padding:.273em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="."]:before{width:.306em;padding:.146em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="/"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="0"]:before{width:.55em;padding:.715em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="1"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2"]:before{width:.55em;padding:.716em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3"]:before{width:.55em;padding:.716em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="4"]:before{width:.55em;padding:.694em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="5"]:before{width:.55em;padding:.694em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="6"]:before{width:.55em;padding:.716em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="7"]:before{width:.55em;padding:.695em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="8"]:before{width:.55em;padding:.715em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="9"]:before{width:.55em;padding:.716em 0 .022em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=":"]:before{width:.306em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=";"]:before{width:.306em;padding:.458em 0 .106em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="="]:before{width:.856em;padding:.407em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="?"]:before{width:.519em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="@"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=A]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=B]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=C]:before{width:.703em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=D]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=E]:before{width:.642em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=F]:before{width:.611em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=G]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=H]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=I]:before{width:.331em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=J]:before{width:.519em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=K]:before{width:.764em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=L]:before{width:.581em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=M]:before{width:.978em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=N]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=O]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=P]:before{width:.703em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=Q]:before{width:.794em;padding:.716em 0 .106em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=R]:before{width:.703em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=S]:before{width:.611em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=T]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=U]:before{width:.764em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=V]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=W]:before{width:1.039em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=X]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=Y]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=Z]:before{width:.672em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="["]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="]"]:before{width:.343em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="^"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=_]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=a]:before{width:.525em;padding:.475em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=b]:before{width:.561em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=c]:before{width:.489em;padding:.475em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=d]:before{width:.561em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=e]:before{width:.511em;padding:.474em 0 .01em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=f]:before{width:.336em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=g]:before{width:.55em;padding:.469em 0 .206em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=h]:before{width:.561em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=i]:before{width:.256em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=j]:before{width:.286em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=k]:before{width:.531em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=l]:before{width:.256em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=m]:before{width:.867em;padding:.469em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=n]:before{width:.561em;padding:.468em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=o]:before{width:.55em;padding:.474em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=p]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c=q]:before{width:.561em;padding:.469em 0 .194em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=r]:before{width:.372em;padding:.469em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=s]:before{width:.422em;padding:.474em 0 .01em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=t]:before{width:.404em;padding:.589em 0 .01em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=u]:before{width:.561em;padding:.458em 0 .011em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=v]:before{width:.5em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=w]:before{width:.744em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=x]:before{width:.5em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=y]:before{width:.5em;padding:.458em 0 .205em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c=z]:before{width:.476em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="~"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="131"]:before{width:.256em;padding:.458em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="237"]:before{width:.286em;padding:.458em 0 .205em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="304"]:before{padding:.66em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="392"]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="393"]:before{width:.581em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="394"]:before{width:.917em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="395"]:before{width:.642em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="396"]:before{width:.672em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="397"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="398"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="399"]:before{width:.331em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39A"]:before{width:.764em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39B"]:before{width:.672em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39C"]:before{width:.978em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39D"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39E"]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A0"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="39F"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A1"]:before{width:.703em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A2"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A3"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A4"]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A5"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A6"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A7"]:before{width:.733em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A8"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3A9"]:before{width:.794em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3D2"]:before{width:.856em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="3DC"]:before{width:.611em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2013"]:before{width:.55em;padding:.327em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2014"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2015"]:before{width:1.1em;padding:.327em 0 0}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2017"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2018"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2019"]:before{width:.306em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="201C"]:before,.MJX-TEX .mjx-ss.mjx-b mjx-c[c="201D"]:before{width:.558em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2044"]:before{width:.55em}.MJX-TEX .mjx-ss.mjx-b mjx-c[c="2206"]:before{width:.917em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="$"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="$"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="27"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="27"]:last-child:before{width:.335em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="("]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="("]:last-child:before{width:.491em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="*"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="*"]:last-child:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="/"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="/"]:last-child:before{width:.6em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2"]:last-child:before{width:.551em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="5"]:last-child:before{width:.555em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="7"]:last-child:before{width:.596em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="8"]:last-child:before{width:.554em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="?"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="?"]:last-child:before{width:.536em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=C]:last-child:before{width:.719em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=E]:last-child:before{width:.688em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=F]:last-child:before{width:.673em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=G]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=G]:last-child:before{width:.73em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=H]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=I]:last-child:before{width:.338em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=J]:last-child:before{width:.535em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=K]:last-child:before{width:.785em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=M]:last-child:before{width:.929em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=N]:last-child:before{width:.766em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=P]:last-child:before{width:.69em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=R]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=R]:last-child:before{width:.698em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=S]:last-child:before{width:.609em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=T]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=U]:last-child:before{width:.747em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=V]:last-child:before{width:.799em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=W]:last-child:before{width:1.076em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=X]:last-child:before{width:.758em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=Y]:last-child:before{width:.81em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=Z]:last-child:before{width:.702em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="["]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="["]:last-child:before{width:.425em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="]"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="]"]:last-child:before{width:.353em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=_]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=_]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=c]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=c]:last-child:before{width:.499em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=d]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=d]:last-child:before{width:.588em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=f]:last-child:before{width:.494em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=g]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=g]:last-child:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=i]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=i]:last-child:before{width:.315em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=j]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=j]:last-child:before{width:.336em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=k]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=k]:last-child:before{width:.543em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=l]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=l]:last-child:before{width:.311em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=r]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=r]:last-child:before{width:.424em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=s]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=s]:last-child:before{width:.436em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=v]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=v]:last-child:before{width:.54em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=w]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=w]:last-child:before{width:.762em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=x]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=x]:last-child:before{width:.537em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=y]:last-child:before{width:.54em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c=z]:last-child:before{width:.494em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="~"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="~"]:last-child:before{width:.56em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="301"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="301"]:last-child:before{width:.063em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="303"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="303"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="304"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="304"]:last-child:before{width:.064em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="306"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="306"]:last-child:before{width:.073em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="30B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="30B"]:last-child:before{width:.063em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="30C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="30C"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="393"]:last-child:before{width:.646em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="395"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="395"]:last-child:before{width:.688em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="396"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="396"]:last-child:before{width:.702em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="397"]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="399"]:last-child:before{width:.338em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39A"]:last-child:before{width:.785em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39C"]:last-child:before{width:.929em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39D"]:last-child:before{width:.766em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="39E"]:last-child:before{width:.765em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A0"]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A1"]:last-child:before{width:.69em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A3"]:last-child:before{width:.813em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A4"]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A5"]:last-child:before{width:.843em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A7"]:last-child:before{width:.758em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3A8"]:last-child:before{width:.854em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3D2"]:last-child:before{width:.843em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="3DC"]:last-child:before{width:.673em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2013"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2013"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2014"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2014"]:last-child:before{width:1.065em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2015"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2015"]:last-child:before{width:1.065em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2017"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2017"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2018"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2018"]:last-child:before{width:.336em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2019"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2019"]:last-child:before{width:.335em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="201C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="201C"]:last-child:before{width:.614em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2044"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-i mjx-c[c="2044"]:last-child:before{width:.6em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="$"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="$"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="27"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="27"]:last-child:before{width:.335em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="("]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="("]:last-child:before{width:.491em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="*"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="*"]:last-child:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="/"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="/"]:last-child:before{width:.6em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2"]:last-child:before{width:.551em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="5"]:last-child:before{width:.555em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="7"]:last-child:before{width:.596em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="8"]:last-child:before{width:.554em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="?"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="?"]:last-child:before{width:.536em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=C]:last-child:before{width:.719em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=E]:last-child:before{width:.688em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=F]:last-child:before{width:.673em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=G]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=G]:last-child:before{width:.73em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=H]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=I]:last-child:before{width:.338em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=J]:last-child:before{width:.535em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=K]:last-child:before{width:.785em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=M]:last-child:before{width:.929em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=N]:last-child:before{width:.766em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=P]:last-child:before{width:.69em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=R]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=R]:last-child:before{width:.698em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=S]:last-child:before{width:.609em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=T]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=U]:last-child:before{width:.747em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=V]:last-child:before{width:.799em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=W]:last-child:before{width:1.076em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=X]:last-child:before{width:.758em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=Y]:last-child:before{width:.81em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=Z]:last-child:before{width:.702em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="["]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="["]:last-child:before{width:.425em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="]"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="]"]:last-child:before{width:.353em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=_]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=_]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=c]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=c]:last-child:before{width:.499em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=d]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=d]:last-child:before{width:.588em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=f]:last-child:before{width:.494em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=g]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=g]:last-child:before{width:.568em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=i]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=i]:last-child:before{width:.315em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=j]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=j]:last-child:before{width:.336em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=k]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=k]:last-child:before{width:.543em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=l]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=l]:last-child:before{width:.311em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=r]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=r]:last-child:before{width:.424em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=s]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=s]:last-child:before{width:.436em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=v]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=v]:last-child:before{width:.54em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=w]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=w]:last-child:before{width:.762em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=x]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=x]:last-child:before{width:.537em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=y]:last-child:before{width:.54em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c=z]:last-child:before{width:.494em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="~"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="~"]:last-child:before{width:.56em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="301"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="301"]:last-child:before{width:.063em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="303"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="303"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="304"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="304"]:last-child:before{width:.064em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="306"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="306"]:last-child:before{width:.073em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="30B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="30B"]:last-child:before{width:.063em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="30C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="30C"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="393"]:last-child:before{width:.646em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="395"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="395"]:last-child:before{width:.688em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="396"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="396"]:last-child:before{width:.702em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="397"]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="399"]:last-child:before{width:.338em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39A"]:last-child:before{width:.785em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39C"]:last-child:before{width:.929em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39D"]:last-child:before{width:.766em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="39E"]:last-child:before{width:.765em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A0"]:last-child:before{width:.768em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A1"]:last-child:before{width:.69em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A3"]:last-child:before{width:.813em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A4"]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A5"]:last-child:before{width:.843em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A7"]:last-child:before{width:.758em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3A8"]:last-child:before{width:.854em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3D2"]:last-child:before{width:.843em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="3DC"]:last-child:before{width:.673em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2013"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2013"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2014"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2014"]:last-child:before{width:1.065em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2015"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2015"]:last-child:before{width:1.065em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2017"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2017"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2018"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2018"]:last-child:before{width:.336em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2019"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2019"]:last-child:before{width:.335em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="201C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="201C"]:last-child:before{width:.614em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2044"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-ss.mjx-b.mjx-i mjx-c[c="2044"]:last-child:before{width:.6em}.MJX-TEX .mjx-ty mjx-c[c=" "]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c="!"]:before{width:.525em;padding:.622em 0 0}.MJX-TEX .mjx-ty mjx-c[c="22"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="#"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="$"]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="%"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="&"]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c="27"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="("]:before,.MJX-TEX .mjx-ty mjx-c[c=")"]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="*"]:before{width:.525em;padding:.52em 0 0}.MJX-TEX .mjx-ty mjx-c[c="+"]:before{width:.525em;padding:.531em 0 0}.MJX-TEX .mjx-ty mjx-c[c=","]:before{width:.525em;padding:.14em 0 .139em}.MJX-TEX .mjx-ty mjx-c[c="-"]:before{width:.525em;padding:.341em 0 0}.MJX-TEX .mjx-ty mjx-c[c="."]:before{width:.525em;padding:.14em 0 0}.MJX-TEX .mjx-ty mjx-c[c="/"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="0"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="1"]:before,.MJX-TEX .mjx-ty mjx-c[c="2"]:before{width:.525em;padding:.622em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3"]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c="4"]:before{width:.525em;padding:.624em 0 0}.MJX-TEX .mjx-ty mjx-c[c="5"]:before{width:.525em;padding:.611em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="6"]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c="7"]:before{width:.525em;padding:.627em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="8"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="9"]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=":"]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c=";"]:before{width:.525em;padding:.431em 0 .139em}.MJX-TEX .mjx-ty mjx-c[c="<"]:before{width:.525em;padding:.557em 0 0}.MJX-TEX .mjx-ty mjx-c[c="="]:before{width:.525em;padding:.417em 0 0}.MJX-TEX .mjx-ty mjx-c[c=">"]:before{width:.525em;padding:.557em 0 0}.MJX-TEX .mjx-ty mjx-c[c="?"]:before{width:.525em;padding:.617em 0 0}.MJX-TEX .mjx-ty mjx-c[c="@"]:before{width:.525em;padding:.617em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=A]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c=B]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=C]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=D]:before,.MJX-TEX .mjx-ty mjx-c[c=E]:before,.MJX-TEX .mjx-ty mjx-c[c=F]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=G]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=H]:before,.MJX-TEX .mjx-ty mjx-c[c=I]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=J]:before{width:.525em;padding:.611em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=K]:before,.MJX-TEX .mjx-ty mjx-c[c=L]:before,.MJX-TEX .mjx-ty mjx-c[c=M]:before,.MJX-TEX .mjx-ty mjx-c[c=N]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=O]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c=P]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=Q]:before{width:.525em;padding:.621em 0 .138em}.MJX-TEX .mjx-ty mjx-c[c=R]:before{width:.525em;padding:.611em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=S]:before{width:.525em;padding:.622em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=T]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=U]:before{width:.525em;padding:.611em 0 .011em}.MJX-TEX .mjx-ty mjx-c[c=V]:before,.MJX-TEX .mjx-ty mjx-c[c=W]:before{width:.525em;padding:.611em 0 .007em}.MJX-TEX .mjx-ty mjx-c[c=X]:before,.MJX-TEX .mjx-ty mjx-c[c=Y]:before,.MJX-TEX .mjx-ty mjx-c[c=Z]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="["]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="5C"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="]"]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="^"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=_]:before{width:.525em;padding:0 0 .095em}.MJX-TEX .mjx-ty mjx-c[c="`"]:before{width:.525em;padding:.681em 0 0}.MJX-TEX .mjx-ty mjx-c[c=a]:before{width:.525em;padding:.439em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=b]:before{width:.525em;padding:.611em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=c]:before{width:.525em;padding:.44em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=d]:before{width:.525em;padding:.611em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=e]:before{width:.525em;padding:.44em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=f]:before{width:.525em;padding:.617em 0 0}.MJX-TEX .mjx-ty mjx-c[c=g]:before{width:.525em;padding:.442em 0 .229em}.MJX-TEX .mjx-ty mjx-c[c=h]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=i]:before{width:.525em;padding:.612em 0 0}.MJX-TEX .mjx-ty mjx-c[c=j]:before{width:.525em;padding:.612em 0 .228em}.MJX-TEX .mjx-ty mjx-c[c=k]:before,.MJX-TEX .mjx-ty mjx-c[c=l]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c=m]:before,.MJX-TEX .mjx-ty mjx-c[c=n]:before{width:.525em;padding:.436em 0 0}.MJX-TEX .mjx-ty mjx-c[c=o]:before{width:.525em;padding:.44em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=p]:before,.MJX-TEX .mjx-ty mjx-c[c=q]:before{width:.525em;padding:.437em 0 .221em}.MJX-TEX .mjx-ty mjx-c[c=r]:before{width:.525em;padding:.437em 0 0}.MJX-TEX .mjx-ty mjx-c[c=s]:before{width:.525em;padding:.44em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=t]:before{width:.525em;padding:.554em 0 .006em}.MJX-TEX .mjx-ty mjx-c[c=u]:before{width:.525em;padding:.431em 0 .005em}.MJX-TEX .mjx-ty mjx-c[c=v]:before,.MJX-TEX .mjx-ty mjx-c[c=w]:before{width:.525em;padding:.431em 0 0}.MJX-TEX .mjx-ty mjx-c[c=x]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c=y]:before{width:.525em;padding:.431em 0 .228em}.MJX-TEX .mjx-ty mjx-c[c=z]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c="{"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="|"]:before{width:.525em;padding:.694em 0 .082em}.MJX-TEX .mjx-ty mjx-c[c="}"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="~"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="7F"]:before{width:.525em;padding:.612em 0 0;content:"\7F"}.MJX-TEX .mjx-ty mjx-c[c=A0]:before{width:.525em}.MJX-TEX .mjx-ty mjx-c[c="131"]:before{width:.525em;padding:.431em 0 0}.MJX-TEX .mjx-ty mjx-c[c="237"]:before{width:.525em;padding:.431em 0 .228em}.MJX-TEX .mjx-ty mjx-c[c="2B9"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="300"]:before,.MJX-TEX .mjx-ty mjx-c[c="301"]:before,.MJX-TEX .mjx-ty mjx-c[c="302"]:before,.MJX-TEX .mjx-ty mjx-c[c="303"]:before{padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="304"]:before{padding:.577em 0 0}.MJX-TEX .mjx-ty mjx-c[c="306"]:before{padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="308"]:before{padding:.612em 0 0}.MJX-TEX .mjx-ty mjx-c[c="30A"]:before{padding:.619em 0 0}.MJX-TEX .mjx-ty mjx-c[c="30C"]:before{padding:.577em 0 0}.MJX-TEX .mjx-ty mjx-c[c="391"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="392"]:before,.MJX-TEX .mjx-ty mjx-c[c="393"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="394"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="395"]:before,.MJX-TEX .mjx-ty mjx-c[c="396"]:before,.MJX-TEX .mjx-ty mjx-c[c="397"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="398"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="39A"]:before,.MJX-TEX .mjx-ty mjx-c[c="399"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="39B"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="39C"]:before,.MJX-TEX .mjx-ty mjx-c[c="39D"]:before,.MJX-TEX .mjx-ty mjx-c[c="39E"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="39F"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="3A0"]:before,.MJX-TEX .mjx-ty mjx-c[c="3A1"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3A2"]:before{width:.525em;padding:.621em 0 .01em}.MJX-TEX .mjx-ty mjx-c[c="3A3"]:before,.MJX-TEX .mjx-ty mjx-c[c="3A4"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3A5"]:before{width:.525em;padding:.622em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3A6"]:before,.MJX-TEX .mjx-ty mjx-c[c="3A7"]:before,.MJX-TEX .mjx-ty mjx-c[c="3A8"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3A9"]:before,.MJX-TEX .mjx-ty mjx-c[c="3D2"]:before{width:.525em;padding:.622em 0 0}.MJX-TEX .mjx-ty mjx-c[c="3DC"]:before{width:.525em;padding:.611em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2017"]:before{width:.525em;padding:0 0 .095em}.MJX-TEX .mjx-ty mjx-c[c="2032"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2033"]:before{width:1.05em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2034"]:before{width:1.575em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2044"]:before{width:.525em;padding:.694em 0 .083em}.MJX-TEX .mjx-ty mjx-c[c="2057"]:before{width:2.1em;padding:.623em 0 0}.MJX-TEX .mjx-ty mjx-c[c="2206"]:before{width:.525em;padding:.623em 0 0}.MJX-TEX .mjx-sop mjx-c[c="("]:before,.MJX-TEX .mjx-sop mjx-c[c=")"]:before{width:.458em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="/"]:before{width:.578em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="["]:before{width:.417em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="5C"]:before{width:.578em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="]"]:before{width:.417em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="{"]:before,.MJX-TEX .mjx-sop mjx-c[c="}"]:before{width:.583em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="2C6"]:before{width:.556em;padding:.744em 0 0}.MJX-TEX .mjx-sop mjx-c[c="2DC"]:before{width:.556em;padding:.722em 0 0}.MJX-TEX .mjx-sop mjx-c[c="302"]:before{padding:.744em 0 0}.MJX-TEX .mjx-sop mjx-c[c="303"]:before{padding:.722em 0 0}.MJX-TEX .mjx-sop mjx-c[c="2016"]:before{width:.778em;padding:.602em 0 0;content:"\2016"}.MJX-TEX .mjx-sop mjx-c[c="2044"]:before{width:.578em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="2191"]:before,.MJX-TEX .mjx-sop mjx-c[c="2193"]:before{width:.667em;padding:.6em 0 0}.MJX-TEX .mjx-sop mjx-c[c="21D1"]:before{width:.778em;padding:.599em 0 0}.MJX-TEX .mjx-sop mjx-c[c="21D3"]:before{width:.778em;padding:.6em 0 0}.MJX-TEX .mjx-sop mjx-c[c="221A"]:before{width:1em;padding:.85em 0 .35em}.MJX-TEX .mjx-sop mjx-c[c="2223"]:before{width:.333em;padding:.627em 0 .015em}.MJX-TEX .mjx-sop mjx-c[c="2225"]:before{width:.556em;padding:.627em 0 .015em}.MJX-TEX .mjx-sop mjx-c[c="222B"]:before{width:.472em;padding:.805em 0 .306em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="222B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="222B"]:last-child:before{width:.61em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="222C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="222C"]:last-child:before{width:.957em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="222D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="222D"]:last-child:before{width:1.304em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="222E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="222E"]:last-child:before{width:.61em}.MJX-TEX .mjx-sop mjx-c[c="230A"]:before,.MJX-TEX .mjx-sop mjx-c[c="230B"]:before,.MJX-TEX .mjx-sop mjx-c[c="2308"]:before,.MJX-TEX .mjx-sop mjx-c[c="2309"]:before{width:.472em;padding:.85em 0 .349em}.MJX-TEX .mjx-sop mjx-c[c="232A"]:before,.MJX-TEX .mjx-sop mjx-c[c="2329"]:before{width:.472em;padding:.85em 0 .35em}.MJX-TEX .mjx-sop mjx-c[c="2758"]:before{width:.333em;padding:.627em 0 .015em}.MJX-TEX .mjx-sop mjx-c[c="27E8"]:before,.MJX-TEX .mjx-sop mjx-c[c="27E9"]:before{width:.472em;padding:.85em 0 .35em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-sop mjx-c[c="2A0C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-sop mjx-c[c="2A0C"]:last-child:before{width:1.776em}.MJX-TEX .mjx-sop mjx-c[c="3008"]:before,.MJX-TEX .mjx-sop mjx-c[c="3009"]:before{width:.472em;padding:.85em 0 .35em}.MJX-TEX .mjx-lop mjx-c[c="("]:before,.MJX-TEX .mjx-lop mjx-c[c=")"]:before{width:.597em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="/"]:before{width:.811em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="["]:before{width:.472em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="5C"]:before{width:.811em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="]"]:before{width:.472em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="{"]:before,.MJX-TEX .mjx-lop mjx-c[c="}"]:before{width:.667em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="2C6"]:before{width:1em;padding:.772em 0 0}.MJX-TEX .mjx-lop mjx-c[c="2DC"]:before{width:1em;padding:.75em 0 0}.MJX-TEX .mjx-lop mjx-c[c="302"]:before{padding:.772em 0 0}.MJX-TEX .mjx-lop mjx-c[c="303"]:before{padding:.75em 0 0}.MJX-TEX .mjx-lop mjx-c[c="2016"]:before{width:.778em;padding:.602em 0 0;content:"\2016"}.MJX-TEX .mjx-lop mjx-c[c="2044"]:before{width:.811em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="2191"]:before,.MJX-TEX .mjx-lop mjx-c[c="2193"]:before{width:.667em;padding:.6em 0 0}.MJX-TEX .mjx-lop mjx-c[c="21D1"]:before{width:.778em;padding:.599em 0 0}.MJX-TEX .mjx-lop mjx-c[c="21D3"]:before{width:.778em;padding:.6em 0 0}.MJX-TEX .mjx-lop mjx-c[c="220F"]:before,.MJX-TEX .mjx-lop mjx-c[c="2210"]:before{width:1.278em;padding:.95em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="2211"]:before{width:1.444em;padding:.95em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="221A"]:before{width:1em;padding:1.15em 0 .65em}.MJX-TEX .mjx-lop mjx-c[c="2223"]:before{width:.333em;padding:.627em 0 .015em}.MJX-TEX .mjx-lop mjx-c[c="2225"]:before{width:.556em;padding:.627em 0 .015em}.MJX-TEX .mjx-lop mjx-c[c="222B"]:before{width:.556em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="222B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="222B"]:last-child:before{width:.944em}.MJX-TEX .mjx-lop mjx-c[c="222C"]:before{width:1.084em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="222C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="222C"]:last-child:before{width:1.472em}.MJX-TEX .mjx-lop mjx-c[c="222D"]:before{width:1.592em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="222D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="222D"]:last-child:before{width:1.98em}.MJX-TEX .mjx-lop mjx-c[c="222E"]:before{width:.556em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="222E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="222E"]:last-child:before{width:.944em}.MJX-TEX .mjx-lop mjx-c[c="22C0"]:before,.MJX-TEX .mjx-lop mjx-c[c="22C1"]:before{width:1.111em;padding:.95em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="22C2"]:before{width:1.111em;padding:.949em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="22C3"]:before{width:1.111em;padding:.95em 0 .449em}.MJX-TEX .mjx-lop mjx-c[c="230A"]:before,.MJX-TEX .mjx-lop mjx-c[c="230B"]:before,.MJX-TEX .mjx-lop mjx-c[c="2308"]:before,.MJX-TEX .mjx-lop mjx-c[c="2309"]:before{width:.528em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="232A"]:before,.MJX-TEX .mjx-lop mjx-c[c="2329"]:before{width:.611em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="2758"]:before{width:.333em;padding:.627em 0 .015em}.MJX-TEX .mjx-lop mjx-c[c="27E8"]:before,.MJX-TEX .mjx-lop mjx-c[c="27E9"]:before{width:.611em;padding:1.15em 0 .649em}.MJX-TEX .mjx-lop mjx-c[c="2A00"]:before,.MJX-TEX .mjx-lop mjx-c[c="2A01"]:before,.MJX-TEX .mjx-lop mjx-c[c="2A02"]:before{width:1.511em;padding:.949em 0 .449em}.MJX-TEX .mjx-lop mjx-c[c="2A04"]:before{width:1.111em;padding:.95em 0 .449em}.MJX-TEX .mjx-lop mjx-c[c="2A06"]:before{width:1.111em;padding:.95em 0 .45em}.MJX-TEX .mjx-lop mjx-c[c="2A0C"]:before{width:2.168em;padding:1.36em 0 .862em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-lop mjx-c[c="2A0C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-lop mjx-c[c="2A0C"]:last-child:before{width:2.556em}.MJX-TEX .mjx-lop mjx-c[c="3008"]:before,.MJX-TEX .mjx-lop mjx-c[c="3009"]:before{width:.611em;padding:1.15em 0 .649em}.MJX-TEX .mjx-s3 mjx-c[c="("]:before,.MJX-TEX .mjx-s3 mjx-c[c=")"]:before{width:.736em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="/"]:before{width:1.044em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="["]:before{width:.528em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="5C"]:before{width:1.044em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="]"]:before{width:.528em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="{"]:before,.MJX-TEX .mjx-s3 mjx-c[c="}"]:before{width:.75em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="2C6"]:before{width:1.444em;padding:.772em 0 0}.MJX-TEX .mjx-s3 mjx-c[c="2DC"]:before{width:1.444em;padding:.749em 0 0}.MJX-TEX .mjx-s3 mjx-c[c="302"]:before{padding:.772em 0 0}.MJX-TEX .mjx-s3 mjx-c[c="303"]:before{padding:.749em 0 0}.MJX-TEX .mjx-s3 mjx-c[c="2044"]:before{width:1.044em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="221A"]:before{width:1em;padding:1.45em 0 .95em}.MJX-TEX .mjx-s3 mjx-c[c="230A"]:before,.MJX-TEX .mjx-s3 mjx-c[c="230B"]:before,.MJX-TEX .mjx-s3 mjx-c[c="2308"]:before,.MJX-TEX .mjx-s3 mjx-c[c="2309"]:before{width:.583em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="2329"]:before{width:.75em;padding:1.45em 0 .95em}.MJX-TEX .mjx-s3 mjx-c[c="232A"]:before{width:.75em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="27E8"]:before{width:.75em;padding:1.45em 0 .95em}.MJX-TEX .mjx-s3 mjx-c[c="27E9"]:before{width:.75em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s3 mjx-c[c="3008"]:before{width:.75em;padding:1.45em 0 .95em}.MJX-TEX .mjx-s3 mjx-c[c="3009"]:before{width:.75em;padding:1.45em 0 .949em}.MJX-TEX .mjx-s4 mjx-c[c="("]:before,.MJX-TEX .mjx-s4 mjx-c[c=")"]:before{width:.792em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="/"]:before{width:1.278em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="["]:before{width:.583em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="5C"]:before{width:1.278em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="]"]:before{width:.583em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="{"]:before,.MJX-TEX .mjx-s4 mjx-c[c="}"]:before{width:.806em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="2C6"]:before{width:1.889em;padding:.845em 0 0}.MJX-TEX .mjx-s4 mjx-c[c="2DC"]:before{width:1.889em;padding:.823em 0 0}.MJX-TEX .mjx-s4 mjx-c[c="302"]:before{padding:.845em 0 0}.MJX-TEX .mjx-s4 mjx-c[c="303"]:before{padding:.823em 0 0}.MJX-TEX .mjx-s4 mjx-c[c="2044"]:before{width:1.278em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="221A"]:before{width:1em;padding:1.75em 0 1.25em}.MJX-TEX .mjx-s4 mjx-c[c="230A"]:before,.MJX-TEX .mjx-s4 mjx-c[c="230B"]:before,.MJX-TEX .mjx-s4 mjx-c[c="2308"]:before,.MJX-TEX .mjx-s4 mjx-c[c="2309"]:before{width:.639em;padding:1.75em 0 1.249em}.MJX-TEX .mjx-s4 mjx-c[c="232A"]:before,.MJX-TEX .mjx-s4 mjx-c[c="2329"]:before{width:.806em;padding:1.75em 0 1.248em}.MJX-TEX .mjx-s4 mjx-c[c="239B"]:before{width:.875em;padding:1.154em 0 .655em;content:"\239B"}.MJX-TEX .mjx-s4 mjx-c[c="239C"]:before{width:.875em;padding:.61em 0 .01em;content:"\239C"}.MJX-TEX .mjx-s4 mjx-c[c="239D"]:before{width:.875em;padding:1.165em 0 .644em;content:"\239D"}.MJX-TEX .mjx-s4 mjx-c[c="239E"]:before{width:.875em;padding:1.154em 0 .655em;content:"\239E"}.MJX-TEX .mjx-s4 mjx-c[c="239F"]:before{width:.875em;padding:.61em 0 .01em;content:"\239F"}.MJX-TEX .mjx-s4 mjx-c[c="23A0"]:before{width:.875em;padding:1.165em 0 .644em;content:"\23A0"}.MJX-TEX .mjx-s4 mjx-c[c="23A1"]:before{width:.667em;padding:1.154em 0 .645em;content:"\23A1"}.MJX-TEX .mjx-s4 mjx-c[c="23A2"]:before{width:.667em;padding:.602em 0 0;content:"\23A2"}.MJX-TEX .mjx-s4 mjx-c[c="23A3"]:before{width:.667em;padding:1.155em 0 .644em;content:"\23A3"}.MJX-TEX .mjx-s4 mjx-c[c="23A4"]:before{width:.667em;padding:1.154em 0 .645em;content:"\23A4"}.MJX-TEX .mjx-s4 mjx-c[c="23A5"]:before{width:.667em;padding:.602em 0 0;content:"\23A5"}.MJX-TEX .mjx-s4 mjx-c[c="23A6"]:before{width:.667em;padding:1.155em 0 .644em;content:"\23A6"}.MJX-TEX .mjx-s4 mjx-c[c="23A7"]:before{width:.889em;padding:.899em 0 .01em;content:"\23A7"}.MJX-TEX .mjx-s4 mjx-c[c="23A8"]:before{width:.889em;padding:1.16em 0 .66em;content:"\23A8"}.MJX-TEX .mjx-s4 mjx-c[c="23A9"]:before{width:.889em;padding:.01em 0 .899em;content:"\23A9"}.MJX-TEX .mjx-s4 mjx-c[c="23AA"]:before{width:.889em;padding:.29em 0 .015em;content:"\23AA"}.MJX-TEX .mjx-s4 mjx-c[c="23AB"]:before{width:.889em;padding:.899em 0 .01em;content:"\23AB"}.MJX-TEX .mjx-s4 mjx-c[c="23AC"]:before{width:.889em;padding:1.16em 0 .66em;content:"\23AC"}.MJX-TEX .mjx-s4 mjx-c[c="23AD"]:before{width:.889em;padding:.01em 0 .899em;content:"\23AD"}.MJX-TEX .mjx-s4 mjx-c[c="23B7"]:before{width:1.056em;padding:.935em 0 .885em;content:"\23B7"}.MJX-TEX .mjx-s4 mjx-c[c="27E8"]:before,.MJX-TEX .mjx-s4 mjx-c[c="27E9"]:before,.MJX-TEX .mjx-s4 mjx-c[c="3008"]:before,.MJX-TEX .mjx-s4 mjx-c[c="3009"]:before{width:.806em;padding:1.75em 0 1.248em}.MJX-TEX .mjx-s4 mjx-c[c=E000]:before{width:1.056em;padding:.625em 0 .014em;content:"\E000"}.MJX-TEX .mjx-s4 mjx-c[c=E001]:before{width:1.056em;padding:.605em 0 .014em;content:"\E001"}.MJX-TEX .mjx-s4 mjx-c[c=E150]:before{width:.45em;padding:.12em 0 .213em;content:"\E150"}.MJX-TEX .mjx-s4 mjx-c[c=E151]:before{width:.45em;padding:.12em 0 .213em;content:"\E151"}.MJX-TEX .mjx-s4 mjx-c[c=E152]:before{width:.45em;padding:.333em 0 0;content:"\E152"}.MJX-TEX .mjx-s4 mjx-c[c=E153]:before{width:.45em;padding:.333em 0 0;content:"\E153"}.MJX-TEX .mjx-s4 mjx-c[c=E154]:before{width:.4em;padding:.32em 0 .2em;content:"\E154"}.MJX-TEX .mjx-s4 mjx-c[c=E155]:before{width:.9em;padding:.333em 0 0;content:"\E153\E152"}.MJX-TEX .mjx-s4 mjx-c[c=E156]:before{width:.9em;padding:.12em 0 .213em;content:"\E151\E150"}.MJX-TEX .mjx-cal mjx-c[c="0"]:before{padding:.452em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c="1"]:before,.MJX-TEX .mjx-cal mjx-c[c="2"]:before{padding:.453em 0 0}.MJX-TEX .mjx-cal mjx-c[c="3"]:before{padding:.452em 0 .216em}.MJX-TEX .mjx-cal mjx-c[c="4"]:before{padding:.464em 0 .194em}.MJX-TEX .mjx-cal mjx-c[c="5"]:before{padding:.453em 0 .216em}.MJX-TEX .mjx-cal mjx-c[c="7"]:before{padding:.463em 0 .216em}.MJX-TEX .mjx-cal mjx-c[c="9"]:before{padding:.453em 0 .216em}.MJX-TEX .mjx-cal mjx-c[c=A]:before{width:.798em;padding:.728em 0 .05em}.MJX-TEX .mjx-cal mjx-c[c=B]:before{width:.657em;padding:.705em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c=C]:before{width:.527em}.MJX-TEX .mjx-cal mjx-c[c=D]:before{width:.771em}.MJX-TEX .mjx-cal mjx-c[c=E]:before{width:.528em;padding:.705em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c=F]:before{width:.719em;padding:.683em 0 .032em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=F]:last-child:before{width:.829em}.MJX-TEX .mjx-cal mjx-c[c=G]:before{width:.595em;padding:.704em 0 .119em}.MJX-TEX .mjx-cal mjx-c[c=H]:before{width:.845em;padding:.683em 0 .048em}.MJX-TEX .mjx-cal mjx-c[c=I]:before{width:.545em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=I]:last-child:before{width:.642em}.MJX-TEX .mjx-cal mjx-c[c=J]:before{width:.678em;padding:.683em 0 .119em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=J]:last-child:before{width:.839em}.MJX-TEX .mjx-cal mjx-c[c=K]:before{width:.762em;padding:.705em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c=L]:before{width:.69em;padding:.705em 0 .022em}.MJX-TEX .mjx-cal mjx-c[c=M]:before{width:1.201em;padding:.705em 0 .05em}.MJX-TEX .mjx-cal mjx-c[c=N]:before{width:.82em;padding:.789em 0 .05em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=N]:last-child:before{width:.979em}.MJX-TEX .mjx-cal mjx-c[c=O]:before{width:.796em}.MJX-TEX .mjx-cal mjx-c[c=P]:before{width:.696em;padding:.683em 0 .057em}.MJX-TEX .mjx-cal mjx-c[c=Q]:before{width:.817em;padding:.705em 0 .131em}.MJX-TEX .mjx-cal mjx-c[c=R]:before{width:.848em}.MJX-TEX .mjx-cal mjx-c[c=S]:before{width:.606em}.MJX-TEX .mjx-cal mjx-c[c=T]:before{width:.545em;padding:.717em 0 .068em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=T]:last-child:before{width:.833em}.MJX-TEX .mjx-cal mjx-c[c=U]:before{width:.626em;padding:.683em 0 .028em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=U]:last-child:before{width:.687em}.MJX-TEX .mjx-cal mjx-c[c=V]:before{width:.613em;padding:.683em 0 .052em}.MJX-TEX .mjx-cal mjx-c[c=W]:before{width:.988em;padding:.683em 0 .053em}.MJX-TEX .mjx-cal mjx-c[c=X]:before{width:.713em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c=X]:last-child:before{width:.807em}.MJX-TEX .mjx-cal mjx-c[c=Y]:before{width:.668em;padding:.683em 0 .143em}.MJX-TEX .mjx-cal mjx-c[c=Z]:before{width:.725em}.MJX-TEX .mjx-cal mjx-c[c="391"]:before,.MJX-TEX .mjx-cal mjx-c[c="392"]:before,.MJX-TEX .mjx-cal mjx-c[c="395"]:before,.MJX-TEX .mjx-cal mjx-c[c="396"]:before,.MJX-TEX .mjx-cal mjx-c[c="397"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="397"]:last-child:before{width:.888em}.MJX-TEX .mjx-cal mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="399"]:last-child:before{width:.504em}.MJX-TEX .mjx-cal mjx-c[c="39A"]:before,.MJX-TEX .mjx-cal mjx-c[c="39C"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="39C"]:last-child:before{width:1.051em}.MJX-TEX .mjx-cal mjx-c[c="39D"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="39D"]:last-child:before{width:.888em}.MJX-TEX .mjx-cal mjx-c[c="3A1"]:before,.MJX-TEX .mjx-cal mjx-c[c="39F"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="3A1"]:last-child:before{width:.751em}.MJX-TEX .mjx-cal mjx-c[c="3A2"]:before,.MJX-TEX .mjx-cal mjx-c[c="3A4"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="3A4"]:last-child:before{width:.704em}.MJX-TEX .mjx-cal mjx-c[c="3A7"]:before,.MJX-TEX .mjx-cal mjx-c[c="3D2"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="3D2"]:last-child:before{width:.7em}.MJX-TEX .mjx-cal mjx-c[c="3DC"]:before{font-family:MJXZERO,MJXTEX-I}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal mjx-c[c="3DC"]:last-child:before{width:.749em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="0"]:before{padding:.46em 0 .017em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="1"]:before{padding:.461em 0 0}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="2"]:before{padding:.46em 0 0}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3"]:before{padding:.461em 0 .211em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="5"]:before{padding:.461em 0 .211em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="6"]:before{padding:.66em 0 .017em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="7"]:before{padding:.476em 0 .211em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="8"]:before{padding:.661em 0 .017em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="9"]:before{padding:.461em 0 .21em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=A]:before{width:.921em;padding:.751em 0 .049em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=A]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=A]:last-child:before{width:.989em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=B]:before{width:.748em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=C]:before{width:.613em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=D]:before{width:.892em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=E]:before{width:.607em;padding:.703em 0 .016em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=F]:before{width:.814em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=F]:last-child:before{width:.93em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=G]:before{width:.682em;padding:.703em 0 .113em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=H]:before{width:.987em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=I]:before{width:.642em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=I]:last-child:before{width:.746em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=J]:before{width:.779em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=J]:last-child:before{width:.937em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=K]:before{width:.871em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=L]:before{width:.788em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=M]:before{width:1.378em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=N]:before{width:.937em;padding:.84em 0 .049em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=N]:last-child:before{width:1.105em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=O]:before{width:.906em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=P]:before{width:.81em;padding:.686em 0 .067em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=Q]:before{width:.939em;padding:.703em 0 .146em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=R]:before{width:.99em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=S]:before{width:.696em;padding:.703em 0 .016em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=T]:before{width:.644em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=T]:last-child:before{width:.947em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=U]:before{width:.715em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=U]:last-child:before{width:.771em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=V]:before{width:.737em;padding:.686em 0 .077em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=W]:before{width:1.169em;padding:.686em 0 .077em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=X]:before{width:.817em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=X]:last-child:before{width:.906em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=Y]:before{width:.759em;padding:.686em 0 .164em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=Z]:before{width:.818em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=f]:before{padding:.701em 0 .201em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c=f]:last-child:before{width:.624em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=h]:before{padding:.694em 0 .008em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c=k]:before,.MJX-TEX .mjx-cal.mjx-b mjx-c[c=l]:before{padding:.694em 0 .008em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-cal.mjx-b mjx-c[c="392"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="393"]:last-child:before{width:.777em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="395"]:before,.MJX-TEX .mjx-cal.mjx-b mjx-c[c="396"]:before,.MJX-TEX .mjx-cal.mjx-b mjx-c[c="397"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="399"]:last-child:before{width:.573em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="39A"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="39C"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="39C"]:last-child:before{width:1.219em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="39D"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="39D"]:last-child:before{width:1.027em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="39F"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3A1"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A1"]:last-child:before{width:.847em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3A2"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3A4"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A4"]:last-child:before{width:.772em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A5"]:last-child:before{width:.802em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3A7"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3A8"]:last-child:before{width:.79em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3C4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3C4"]:last-child:before{width:.61em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3D2"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3D2"]:last-child:before{width:.802em}.MJX-TEX .mjx-cal.mjx-b mjx-c[c="3DC"]:before{font-family:MJXZERO,MJXTEX-BI}.MJX-TEX mjx-mi:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-cal.mjx-b mjx-c[c="3DC"]:last-child:before{width:.809em}.MJX-TEX .mjx-os mjx-c[c="0"]:before{padding:.452em 0 .022em}.MJX-TEX .mjx-os mjx-c[c="1"]:before,.MJX-TEX .mjx-os mjx-c[c="2"]:before{padding:.453em 0 0}.MJX-TEX .mjx-os mjx-c[c="3"]:before{padding:.452em 0 .216em}.MJX-TEX .mjx-os mjx-c[c="4"]:before{padding:.464em 0 .194em}.MJX-TEX .mjx-os mjx-c[c="5"]:before{padding:.453em 0 .216em}.MJX-TEX .mjx-os mjx-c[c="7"]:before{padding:.463em 0 .216em}.MJX-TEX .mjx-os mjx-c[c="9"]:before{padding:.453em 0 .216em}.MJX-TEX .mjx-os mjx-c[c=A]:before{width:.798em;padding:.728em 0 .05em}.MJX-TEX .mjx-os mjx-c[c=B]:before{width:.657em;padding:.705em 0 .022em}.MJX-TEX .mjx-os mjx-c[c=C]:before{width:.527em}.MJX-TEX .mjx-os mjx-c[c=D]:before{width:.771em}.MJX-TEX .mjx-os mjx-c[c=E]:before{width:.528em;padding:.705em 0 .022em}.MJX-TEX .mjx-os mjx-c[c=F]:before{width:.719em;padding:.683em 0 .032em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=F]:last-child:before{width:.829em}.MJX-TEX .mjx-os mjx-c[c=G]:before{width:.595em;padding:.704em 0 .119em}.MJX-TEX .mjx-os mjx-c[c=H]:before{width:.845em;padding:.683em 0 .048em}.MJX-TEX .mjx-os mjx-c[c=I]:before{width:.545em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=I]:last-child:before{width:.642em}.MJX-TEX .mjx-os mjx-c[c=J]:before{width:.678em;padding:.683em 0 .119em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=J]:last-child:before{width:.839em}.MJX-TEX .mjx-os mjx-c[c=K]:before{width:.762em;padding:.705em 0 .022em}.MJX-TEX .mjx-os mjx-c[c=L]:before{width:.69em;padding:.705em 0 .022em}.MJX-TEX .mjx-os mjx-c[c=M]:before{width:1.201em;padding:.705em 0 .05em}.MJX-TEX .mjx-os mjx-c[c=N]:before{width:.82em;padding:.789em 0 .05em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=N]:last-child:before{width:.979em}.MJX-TEX .mjx-os mjx-c[c=O]:before{width:.796em}.MJX-TEX .mjx-os mjx-c[c=P]:before{width:.696em;padding:.683em 0 .057em}.MJX-TEX .mjx-os mjx-c[c=Q]:before{width:.817em;padding:.705em 0 .131em}.MJX-TEX .mjx-os mjx-c[c=R]:before{width:.848em}.MJX-TEX .mjx-os mjx-c[c=S]:before{width:.606em}.MJX-TEX .mjx-os mjx-c[c=T]:before{width:.545em;padding:.717em 0 .068em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=T]:last-child:before{width:.833em}.MJX-TEX .mjx-os mjx-c[c=U]:before{width:.626em;padding:.683em 0 .028em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=U]:last-child:before{width:.687em}.MJX-TEX .mjx-os mjx-c[c=V]:before{width:.613em;padding:.683em 0 .052em}.MJX-TEX .mjx-os mjx-c[c=W]:before{width:.988em;padding:.683em 0 .053em}.MJX-TEX .mjx-os mjx-c[c=X]:before{width:.713em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os mjx-c[c=X]:last-child:before{width:.807em}.MJX-TEX .mjx-os mjx-c[c=Y]:before{width:.668em;padding:.683em 0 .143em}.MJX-TEX .mjx-os mjx-c[c=Z]:before{width:.725em}.MJX-TEX .mjx-os mjx-c[c="3A1"]:before,.MJX-TEX .mjx-os mjx-c[c="3A2"]:before,.MJX-TEX .mjx-os mjx-c[c="3A4"]:before,.MJX-TEX .mjx-os mjx-c[c="3A7"]:before,.MJX-TEX .mjx-os mjx-c[c="3D2"]:before,.MJX-TEX .mjx-os mjx-c[c="3DC"]:before,.MJX-TEX .mjx-os mjx-c[c="39A"]:before,.MJX-TEX .mjx-os mjx-c[c="39C"]:before,.MJX-TEX .mjx-os mjx-c[c="39D"]:before,.MJX-TEX .mjx-os mjx-c[c="39F"]:before,.MJX-TEX .mjx-os mjx-c[c="391"]:before,.MJX-TEX .mjx-os mjx-c[c="392"]:before,.MJX-TEX .mjx-os mjx-c[c="395"]:before,.MJX-TEX .mjx-os mjx-c[c="396"]:before,.MJX-TEX .mjx-os mjx-c[c="397"]:before,.MJX-TEX .mjx-os mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX}.MJX-TEX .mjx-os.mjx-b mjx-c[c="0"]:before{padding:.46em 0 .017em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="1"]:before{padding:.461em 0 0}.MJX-TEX .mjx-os.mjx-b mjx-c[c="2"]:before{padding:.46em 0 0}.MJX-TEX .mjx-os.mjx-b mjx-c[c="3"]:before{padding:.461em 0 .211em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="5"]:before{padding:.461em 0 .211em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="6"]:before{padding:.66em 0 .017em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="7"]:before{padding:.476em 0 .211em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="8"]:before{padding:.661em 0 .017em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="9"]:before{padding:.461em 0 .21em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=A]:before{width:.921em;padding:.751em 0 .049em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=A]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=A]:last-child:before{width:.989em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=B]:before{width:.748em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=C]:before{width:.613em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=D]:before{width:.892em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=E]:before{width:.607em;padding:.703em 0 .016em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=F]:before{width:.814em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=F]:last-child:before{width:.93em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=G]:before{width:.682em;padding:.703em 0 .113em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=H]:before{width:.987em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=I]:before{width:.642em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=I]:last-child:before{width:.746em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=J]:before{width:.779em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=J]:last-child:before{width:.937em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=K]:before{width:.871em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=L]:before{width:.788em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=M]:before{width:1.378em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=N]:before{width:.937em;padding:.84em 0 .049em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=N]:last-child:before{width:1.105em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=O]:before{width:.906em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=P]:before{width:.81em;padding:.686em 0 .067em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=Q]:before{width:.939em;padding:.703em 0 .146em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=R]:before{width:.99em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=S]:before{width:.696em;padding:.703em 0 .016em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=T]:before{width:.644em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=T]:last-child:before{width:.947em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=U]:before{width:.715em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=U]:last-child:before{width:.771em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=V]:before{width:.737em;padding:.686em 0 .077em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=W]:before{width:1.169em;padding:.686em 0 .077em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=X]:before{width:.817em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-os.mjx-b mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-os.mjx-b mjx-c[c=X]:last-child:before{width:.906em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=Y]:before{width:.759em;padding:.686em 0 .164em}.MJX-TEX .mjx-os.mjx-b mjx-c[c=Z]:before{width:.818em}.MJX-TEX .mjx-os.mjx-b mjx-c[c="3A1"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3A2"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3A4"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3A7"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3D2"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="3DC"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="39A"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="39C"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="39D"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="39F"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="391"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="392"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="395"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="396"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="397"]:before,.MJX-TEX .mjx-os.mjx-b mjx-c[c="399"]:before{font-family:MJXZERO,MJXTEX-B}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="!"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="!"]:last-child:before{width:.38em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="27"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="27"]:last-child:before{width:.377em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="("]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="("]:last-child:before{width:.517em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="*"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="*"]:last-child:before{width:.584em}.MJX-TEX .mjx-mit mjx-c[c="/"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="/"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="/"]:last-child:before{width:.617em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="0"]:last-child:before{width:.562em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3"]:last-child:before{width:.562em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="5"]:last-child:before{width:.567em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="6"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="6"]:last-child:before{width:.565em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="7"]:last-child:before{width:.634em}.MJX-TEX .mjx-mit mjx-c[c=A]:before{width:.743em}.MJX-TEX .mjx-mit mjx-c[c=B]:before{width:.704em}.MJX-TEX .mjx-mit mjx-c[c=C]:before{width:.716em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=C]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=C]:last-child:before{width:.812em}.MJX-TEX .mjx-mit mjx-c[c=D]:before{width:.755em}.MJX-TEX .mjx-mit mjx-c[c=E]:before{width:.678em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=E]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=E]:last-child:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=F]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=F]:last-child:before{width:.731em}.MJX-TEX .mjx-mit mjx-c[c=G]:before{width:.774em}.MJX-TEX .mjx-mit mjx-c[c=H]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=H]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=H]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c=I]:before{width:.386em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=I]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=I]:last-child:before{width:.508em}.MJX-TEX .mjx-mit mjx-c[c=J]:before{width:.525em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=J]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=J]:last-child:before{width:.622em}.MJX-TEX .mjx-mit mjx-c[c=K]:before{width:.769em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=K]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=K]:last-child:before{width:.859em}.MJX-TEX .mjx-mit mjx-c[c=L]:before{width:.627em}.MJX-TEX .mjx-mit mjx-c[c=M]:before{width:.897em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=M]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=M]:last-child:before{width:1.01em}.MJX-TEX .mjx-mit mjx-c[c=N]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=N]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=N]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c=O]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c=P]:before{width:.678em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=P]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=P]:last-child:before{width:.729em}.MJX-TEX .mjx-mit mjx-c[c=Q]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c=R]:before{width:.729em}.MJX-TEX .mjx-mit mjx-c[c=S]:before{width:.562em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=S]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=S]:last-child:before{width:.633em}.MJX-TEX .mjx-mit mjx-c[c=T]:before{width:.716em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=T]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=T]:last-child:before{width:.806em}.MJX-TEX .mjx-mit mjx-c[c=U]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=U]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=U]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c=V]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=V]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=V]:last-child:before{width:.868em}.MJX-TEX .mjx-mit mjx-c[c=W]:before{width:.999em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=W]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=W]:last-child:before{width:1.124em}.MJX-TEX .mjx-mit mjx-c[c=X]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=X]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=X]:last-child:before{width:.825em}.MJX-TEX .mjx-mit mjx-c[c=Y]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=Y]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=Y]:last-child:before{width:.875em}.MJX-TEX .mjx-mit mjx-c[c=Z]:before{width:.613em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=Z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=Z]:last-child:before{width:.704em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="["]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="["]:last-child:before{width:.446em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="]"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="]"]:last-child:before{width:.359em}.MJX-TEX .mjx-mit mjx-c[c=a]:before{width:.511em}.MJX-TEX .mjx-mit mjx-c[c=b]:before,.MJX-TEX .mjx-mit mjx-c[c=c]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=d]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=d]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=d]:last-child:before{width:.567em}.MJX-TEX .mjx-mit mjx-c[c=e]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=f]:before{width:.307em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=f]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=f]:last-child:before{width:.45em}.MJX-TEX .mjx-mit mjx-c[c=g]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=h]:before{width:.511em}.MJX-TEX .mjx-mit mjx-c[c=i]:before{width:.307em;padding:.656em 0 .01em}.MJX-TEX .mjx-mit mjx-c[c=j]:before{width:.307em;padding:.656em 0 .204em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=j]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=j]:last-child:before{width:.364em}.MJX-TEX .mjx-mit mjx-c[c=k]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=l]:before{width:.256em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=l]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=l]:last-child:before{width:.312em}.MJX-TEX .mjx-mit mjx-c[c=m]:before{width:.818em}.MJX-TEX .mjx-mit mjx-c[c=n]:before{width:.562em}.MJX-TEX .mjx-mit mjx-c[c=o]:before,.MJX-TEX .mjx-mit mjx-c[c=p]:before{width:.511em}.MJX-TEX .mjx-mit mjx-c[c=q]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=r]:before{width:.422em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=r]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=r]:last-child:before{width:.484em}.MJX-TEX .mjx-mit mjx-c[c=s]:before{width:.409em}.MJX-TEX .mjx-mit mjx-c[c=t]:before{width:.332em}.MJX-TEX .mjx-mit mjx-c[c=u]:before{width:.537em}.MJX-TEX .mjx-mit mjx-c[c=v]:before{width:.46em}.MJX-TEX .mjx-mit mjx-c[c=w]:before{width:.664em}.MJX-TEX .mjx-mit mjx-c[c=x]:before{width:.464em}.MJX-TEX .mjx-mit mjx-c[c=y]:before{width:.486em}.MJX-TEX .mjx-mit mjx-c[c=z]:before{width:.409em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c=z]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c=z]:last-child:before{width:.466em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="~"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="~"]:last-child:before{width:.571em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="303"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="303"]:last-child:before{width:.06em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="304"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="304"]:last-child:before{width:.054em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="306"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="306"]:last-child:before{width:.062em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="30B"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="30B"]:last-child:before{width:.065em}.MJX-TEX .mjx-mit mjx-c[c="391"]:before{width:.743em}.MJX-TEX .mjx-mit mjx-c[c="392"]:before{width:.704em}.MJX-TEX .mjx-mit mjx-c[c="393"]:before{width:.627em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="393"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="393"]:last-child:before{width:.705em}.MJX-TEX .mjx-mit mjx-c[c="394"]:before{width:.818em}.MJX-TEX .mjx-mit mjx-c[c="395"]:before{width:.678em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="395"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="395"]:last-child:before{width:.743em}.MJX-TEX .mjx-mit mjx-c[c="396"]:before{width:.613em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="396"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="396"]:last-child:before{width:.704em}.MJX-TEX .mjx-mit mjx-c[c="397"]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="397"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="397"]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c="398"]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c="399"]:before{width:.386em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="399"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="399"]:last-child:before{width:.508em}.MJX-TEX .mjx-mit mjx-c[c="39A"]:before{width:.769em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="39A"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="39A"]:last-child:before{width:.859em}.MJX-TEX .mjx-mit mjx-c[c="39B"]:before{width:.692em}.MJX-TEX .mjx-mit mjx-c[c="39C"]:before{width:.897em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="39C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="39C"]:last-child:before{width:1.01em}.MJX-TEX .mjx-mit mjx-c[c="39D"]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="39D"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="39D"]:last-child:before{width:.86em}.MJX-TEX .mjx-mit mjx-c[c="39E"]:before{width:.664em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="39E"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="39E"]:last-child:before{width:.754em}.MJX-TEX .mjx-mit mjx-c[c="39F"]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c="3A0"]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A0"]:last-child:before{width:.859em}.MJX-TEX .mjx-mit mjx-c[c="3A1"]:before{width:.678em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A1"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A1"]:last-child:before{width:.729em}.MJX-TEX .mjx-mit mjx-c[c="3A2"]:before{width:.767em}.MJX-TEX .mjx-mit mjx-c[c="3A3"]:before{width:.716em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A3"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A3"]:last-child:before{width:.782em}.MJX-TEX .mjx-mit mjx-c[c="3A4"]:before{width:.716em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A4"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A4"]:last-child:before{width:.806em}.MJX-TEX .mjx-mit mjx-c[c="3A5"]:before{width:.767em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A5"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A5"]:last-child:before{width:.832em}.MJX-TEX .mjx-mit mjx-c[c="3A6"]:before{width:.716em}.MJX-TEX .mjx-mit mjx-c[c="3A7"]:before{width:.743em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A7"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A7"]:last-child:before{width:.825em}.MJX-TEX .mjx-mit mjx-c[c="3A8"]:before{width:.767em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3A8"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3A8"]:last-child:before{width:.824em}.MJX-TEX .mjx-mit mjx-c[c="3A9"]:before{width:.716em}.MJX-TEX .mjx-mit mjx-c[c="3D2"]:before{width:.767em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3D2"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3D2"]:last-child:before{width:.832em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="3DC"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="3DC"]:last-child:before{width:.731em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="2018"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="2018"]:last-child:before{width:.362em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="2019"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="2019"]:last-child:before{width:.377em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="201C"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="201C"]:last-child:before{width:.606em}.MJX-TEX .mjx-mit mjx-c[c="2044"]:before{width:.511em}.MJX-TEX mjx-mi:not([noIC=true]).mjx-mit mjx-c[c="2044"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-mit mjx-c[c="2044"]:last-child:before{width:.617em}.MJX-TEX .mjx-mit mjx-c[c="2206"]:before{width:.818em}.MJX-TEX .mjx-v mjx-c[c=A]:before{width:.722em;padding:.701em 0 0}.MJX-TEX .mjx-v mjx-c[c=B]:before{width:.667em}.MJX-TEX .mjx-v mjx-c[c=D]:before{width:.722em}.MJX-TEX .mjx-v mjx-c[c=E]:before{width:.667em}.MJX-TEX .mjx-v mjx-c[c=F]:before{width:.611em}.MJX-TEX .mjx-v mjx-c[c=G]:before,.MJX-TEX .mjx-v mjx-c[c=H]:before{width:.778em}.MJX-TEX .mjx-v mjx-c[c=I]:before{width:.389em}.MJX-TEX .mjx-v mjx-c[c=J]:before{width:.5em;padding:.683em 0 .077em}.MJX-TEX .mjx-v mjx-c[c=L]:before{width:.667em}.MJX-TEX .mjx-v mjx-c[c=M]:before{width:.944em}.MJX-TEX .mjx-v mjx-c[c=N]:before{width:.722em;padding:.683em 0 .02em}.MJX-TEX .mjx-v mjx-c[c=P]:before{width:.611em}.MJX-TEX .mjx-v mjx-c[c=Q]:before{padding:.701em 0 .181em}.MJX-TEX .mjx-v mjx-c[c=R]:before{width:.722em;padding:.683em 0 0}.MJX-TEX .mjx-v mjx-c[c=S]:before{padding:.702em 0 .012em}.MJX-TEX .mjx-v mjx-c[c=T]:before{width:.667em;padding:.683em 0 0}.MJX-TEX .mjx-v mjx-c[c=U]:before,.MJX-TEX .mjx-v mjx-c[c=V]:before{width:.722em}.MJX-TEX .mjx-v mjx-c[c=W]:before{width:1em}.MJX-TEX .mjx-v mjx-c[c=X]:before,.MJX-TEX .mjx-v mjx-c[c=Y]:before{width:.722em}.MJX-TEX .mjx-v mjx-c[c=Z]:before{width:.667em}.MJX-TEX .mjx-v mjx-c[c=k]:before{width:.556em;padding:.683em 0 0}.MJX-TEX .mjx-v mjx-c[c="2C6"]:before{width:2.333em;padding:.845em 0 0}.MJX-TEX .mjx-v mjx-c[c="2DC"]:before{width:2.333em;padding:.899em 0 0}.MJX-TEX .mjx-v mjx-c[c="302"]:before{padding:.845em 0 0}.MJX-TEX .mjx-v mjx-c[c="303"]:before{padding:.899em 0 0}.MJX-TEX .mjx-v mjx-c[c="3DC"]:before{width:.778em;padding:.605em 0 .085em;content:"\E008"}.MJX-TEX .mjx-v mjx-c[c="3F0"]:before{content:"\E009"}.MJX-TEX mjx-mi:not([noIC=true]).mjx-v mjx-c[c="3F0"]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-v mjx-c[c="3F0"]:last-child:before{width:.734em}.MJX-TEX .mjx-v mjx-c[c="2190"]:before,.MJX-TEX .mjx-v mjx-c[c="2192"]:before{width:.5em;padding:.437em 0 0}.MJX-TEX .mjx-v mjx-c[c="21CC"]:before{padding:.514em 0 .014em}.MJX-TEX .mjx-v mjx-c[c="2204"]:before{padding:.86em 0 .166em;content:"\2204"}.MJX-TEX .mjx-v mjx-c[c="2205"]:before{width:.778em;padding:.587em 0 0}.MJX-TEX .mjx-v mjx-c[c="2212"]:before{width:.5em;padding:.27em 0 0}.MJX-TEX .mjx-v mjx-c[c="221D"]:before{padding:.472em 0 0}.MJX-TEX .mjx-v mjx-c[c="2223"]:before{width:.222em;padding:.43em 0 .023em}.MJX-TEX .mjx-v mjx-c[c="2224"]:before{width:.222em;padding:.43em 0 .023em;content:"\E006"}.MJX-TEX .mjx-v mjx-c[c="2225"]:before{width:.389em;padding:.431em 0 .023em}.MJX-TEX .mjx-v mjx-c[c="2226"]:before{width:.389em;padding:.431em 0 .024em;content:"\E007"}.MJX-TEX .mjx-v mjx-c[c="2268"]:before{content:"\E00C"}.MJX-TEX .mjx-v mjx-c[c="2269"]:before{content:"\E00D"}.MJX-TEX .mjx-v mjx-c[c="2270"]:before{padding:.919em 0 .421em;content:"\E011"}.MJX-TEX .mjx-v mjx-c[c="2271"]:before{padding:.919em 0 .421em;content:"\E00E"}.MJX-TEX .mjx-v mjx-c[c="2288"]:before{padding:.828em 0 .33em;content:"\E016"}.MJX-TEX .mjx-v mjx-c[c="2289"]:before{padding:.828em 0 .33em;content:"\E018"}.MJX-TEX .mjx-v mjx-c[c="228A"]:before{padding:.634em 0 .255em;content:"\E01A"}.MJX-TEX .mjx-v mjx-c[c="228B"]:before{padding:.634em 0 .254em;content:"\E01B"}.MJX-TEX .mjx-v mjx-c[c="22A8"]:before{width:.611em;padding:.694em 0 0}.MJX-TEX .mjx-v mjx-c[c="22C5"]:before{padding:.189em 0 0}.MJX-TEX .mjx-v mjx-c[c="2322"]:before{width:.778em;padding:.378em 0 0}.MJX-TEX .mjx-v mjx-c[c="2323"]:before{width:.778em}.MJX-TEX .mjx-v mjx-c[c="25B3"]:before{width:.722em;padding:.575em 0 .02em}.MJX-TEX .mjx-v mjx-c[c="25BD"]:before{width:.722em;padding:.576em 0 .019em}.MJX-TEX .mjx-v mjx-c[c="2A87"]:before{padding:.801em 0 .303em;content:"\E010"}.MJX-TEX .mjx-v mjx-c[c="2A88"]:before{padding:.801em 0 .303em;content:"\E00F"}.MJX-TEX .mjx-v mjx-c[c="2ACB"]:before{padding:.752em 0 .332em;content:"\E017"}.MJX-TEX .mjx-v mjx-c[c="2ACC"]:before{padding:.752em 0 .333em;content:"\E019"}.MJX-TEX mjx-mi:not([noIC=true]).mjx-v mjx-c[c=E009]:last-child:before,.MJX-TEX mjx-mo:not([noIC=true]).mjx-v mjx-c[c=E009]:last-child:before{width:.734em}mjx-container[display=true]{overflow-x:auto;overflow-y:hidden}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.algolia-search-wrapper>span{vertical-align:middle}.algolia-search-wrapper .algolia-autocomplete{line-height:normal}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu{background-color:#fff;border:1px solid #999;border-radius:4px;font-size:16px;margin:6px 0 0;padding:4px;text-align:left}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu:before{border-color:#999}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu [class*=ds-dataset-]{border:none;padding:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestions{margin-top:0}.algolia-search-wrapper .algolia-autocomplete .ds-dropdown-menu .ds-suggestion{border-bottom:1px solid #eaecef}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#2c815b}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion{border-color:#eaecef;padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header{padding:5px 10px;margin-top:0;background:#3eaf7c;color:#fff;font-weight:600}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--highlight{background:hsla(0,0%,100%,.6)}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--wrapper{padding:0}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--title{font-weight:600;margin-bottom:0;color:#2c3e50}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{vertical-align:top;padding:5px 7px 5px 5px;border-color:#eaecef;background:#f1f3f5}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{display:none}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column-text{color:#555}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-footer{border-color:#eaecef}.algolia-search-wrapper .algolia-autocomplete .ds-cursor .algolia-docsearch-suggestion--content{background-color:#e7edf3!important;color:#2c3e50}@media (min-width:719px){.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{float:none;width:150px;min-width:150px;display:table-cell}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{float:none;display:table-cell;width:100%;vertical-align:top}.algolia-search-wrapper .algolia-autocomplete .algolia-docsearch-suggestion .ds-dropdown-menu{min-width:515px!important}}@media (max-width:719px){.algolia-search-wrapper .ds-dropdown-menu{min-width:calc(100vw - 4rem)!important;max-width:calc(100vw - 4rem)!important}.algolia-search-wrapper .algolia-docsearch-suggestion--wrapper{padding:5px 7px 5px 5px!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column{padding:0!important;background:#fff!important}.algolia-search-wrapper .algolia-docsearch-suggestion--subcategory-column-text:after{content:" > ";font-size:10px;line-height:14.4px;display:inline-block;width:5px;margin:-3px 3px 0;vertical-align:middle}}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#3eaf7c;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #389d70}.home .hero .action-button:hover{background-color:#4abf8a}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/Blog/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#3eaf7c}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#3eaf7c}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983}.searchbox{display:inline-block;position:relative;width:200px;height:32px!important;white-space:nowrap;box-sizing:border-box;visibility:visible!important}.searchbox .algolia-autocomplete{display:block;width:100%;height:100%}.searchbox__wrapper{width:100%;height:100%;z-index:999;position:relative}.searchbox__input{display:inline-block;box-sizing:border-box;transition:box-shadow .4s ease,background .4s ease;border:0;border-radius:16px;box-shadow:inset 0 0 0 1px #ccc;background:#fff!important;padding:0 26px 0 32px;width:100%;height:100%;vertical-align:middle;white-space:normal;font-size:12px;-webkit-appearance:none;-moz-appearance:none;appearance:none}.searchbox__input::-webkit-search-cancel-button,.searchbox__input::-webkit-search-decoration,.searchbox__input::-webkit-search-results-button,.searchbox__input::-webkit-search-results-decoration{display:none}.searchbox__input:hover{box-shadow:inset 0 0 0 1px #b3b3b3}.searchbox__input:active,.searchbox__input:focus{outline:0;box-shadow:inset 0 0 0 1px #aaa;background:#fff}.searchbox__input::-moz-placeholder{color:#aaa}.searchbox__input::placeholder{color:#aaa}.searchbox__submit{position:absolute;top:0;margin:0;border:0;border-radius:16px 0 0 16px;background-color:rgba(69,142,225,0);padding:0;width:32px;height:100%;vertical-align:middle;text-align:center;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;right:inherit;left:0}.searchbox__submit:before{display:inline-block;margin-right:-4px;height:100%;vertical-align:middle;content:""}.searchbox__submit:active,.searchbox__submit:hover{cursor:pointer}.searchbox__submit:focus{outline:0}.searchbox__submit svg{width:14px;height:14px;vertical-align:middle;fill:#6d7e96}.searchbox__reset{display:block;position:absolute;top:8px;right:8px;margin:0;border:0;background:none;cursor:pointer;padding:0;font-size:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none;fill:rgba(0,0,0,.5)}.searchbox__reset.hide{display:none}.searchbox__reset:focus{outline:0}.searchbox__reset svg{display:block;margin:4px;width:8px;height:8px}.searchbox__input:valid~.searchbox__reset{display:block;animation-name:sbx-reset-in;animation-duration:.15s}@keyframes sbx-reset-in{0%{transform:translate3d(-20%,0,0);opacity:0}to{transform:none;opacity:1}}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu{right:0!important;left:inherit!important}.algolia-autocomplete.algolia-autocomplete-right .ds-dropdown-menu:before{right:48px}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu{left:0!important;right:inherit!important}.algolia-autocomplete.algolia-autocomplete-left .ds-dropdown-menu:before{left:48px}.algolia-autocomplete .ds-dropdown-menu{top:-6px;border-radius:4px;margin:6px 0 0;padding:0;text-align:left;height:auto;position:relative;background:transparent;border:none;z-index:999;max-width:600px;min-width:500px;box-shadow:0 1px 0 0 rgba(0,0,0,.2),0 2px 3px 0 rgba(0,0,0,.1)}.algolia-autocomplete .ds-dropdown-menu:before{display:block;position:absolute;content:"";width:14px;height:14px;background:#fff;z-index:1000;top:-7px;border-top:1px solid #d9d9d9;border-right:1px solid #d9d9d9;transform:rotate(-45deg);border-radius:2px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions{position:relative;z-index:1000;margin-top:8px}.algolia-autocomplete .ds-dropdown-menu .ds-suggestions a:hover{text-decoration:none}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion{cursor:pointer}.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion.suggestion-layout-simple,.algolia-autocomplete .ds-dropdown-menu .ds-suggestion.ds-cursor .algolia-docsearch-suggestion:not(.suggestion-layout-simple) .algolia-docsearch-suggestion--content{background-color:rgba(69,142,225,.05)}.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-]{position:relative;border:1px solid #d9d9d9;background:#fff;border-radius:4px;overflow:auto;padding:0 8px 8px}.algolia-autocomplete .ds-dropdown-menu *{box-sizing:border-box}.algolia-autocomplete .algolia-docsearch-suggestion{display:block;position:relative;padding:0 8px;background:#fff;color:#02060c;overflow:hidden}.algolia-autocomplete .algolia-docsearch-suggestion--highlight{color:#174d8c;background:rgba(143,187,237,.1);padding:.1em .05em}.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl0 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--category-header .algolia-docsearch-suggestion--category-header-lvl1 .algolia-docsearch-suggestion--highlight,.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{padding:0 0 1px;background:inherit;box-shadow:inset 0 -2px 0 0 rgba(69,142,225,.8);color:inherit}.algolia-autocomplete .algolia-docsearch-suggestion--content{display:block;float:right;width:70%;position:relative;padding:5.33333px 0 5.33333px 10.66667px;cursor:pointer}.algolia-autocomplete .algolia-docsearch-suggestion--content:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;left:-1px}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{position:relative;border-bottom:1px solid #ddd;display:none;margin-top:8px;padding:4px 0;font-size:1em;color:#33363d}.algolia-autocomplete .algolia-docsearch-suggestion--wrapper{width:100%;float:left;padding:8px 0 0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column{float:left;width:30%;text-align:right;position:relative;padding:5.33333px 10.66667px;color:#a4a7ae;font-size:.9em;word-wrap:break-word}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column:before{content:"";position:absolute;display:block;top:0;height:100%;width:1px;background:#ddd;right:0}.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-inline{display:none}.algolia-autocomplete .algolia-docsearch-suggestion--title{margin-bottom:4px;color:#02060c;font-size:.9em;font-weight:700}.algolia-autocomplete .algolia-docsearch-suggestion--text{display:block;line-height:1.2em;font-size:.85em;color:#63676d}.algolia-autocomplete .algolia-docsearch-suggestion--no-results{width:100%;padding:8px 0;text-align:center;font-size:1.2em}.algolia-autocomplete .algolia-docsearch-suggestion--no-results:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion code{padding:1px 5px;font-size:90%;border:none;color:#222;background-color:#ebebeb;border-radius:3px;font-family:Menlo,Monaco,Consolas,Courier New,monospace}.algolia-autocomplete .algolia-docsearch-suggestion code .algolia-docsearch-suggestion--highlight{background:none}.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__main .algolia-docsearch-suggestion--category-header,.algolia-autocomplete .algolia-docsearch-suggestion.algolia-docsearch-suggestion__secondary{display:block}@media (min-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:block}}@media (max-width:768px){.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column{display:inline-block;width:auto;float:left;padding:0;color:#02060c;font-size:.9em;font-weight:700;text-align:left;opacity:.5}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:before{display:none}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column:after{content:"|"}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content{display:inline-block;width:auto;text-align:left;float:left;padding:0}.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--content:before{display:none}}.algolia-autocomplete .suggestion-layout-simple.algolia-docsearch-suggestion{border-bottom:1px solid #eee;padding:8px;margin:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content{width:100%;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--content:before{display:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header{margin:0;padding:0;display:block;width:100%;border:none}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl0,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1{opacity:.6;font-size:.85em}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--category-header-lvl1:before{background-image:url('data:image/svg+xml;utf8,');content:"";width:10px;height:10px;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--wrapper{width:100%;float:left;margin:0;padding:0}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--duplicate-content,.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--subcategory-inline{display:none!important}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title{margin:0;color:#458ee1;font-size:.9em;font-weight:400}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--title:before{content:"#";font-weight:700;color:#458ee1;display:inline-block}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text{margin:4px 0 0;display:block;line-height:1.4em;padding:5.33333px 8px;background:#f8f8f8;font-size:.85em;opacity:.8}.algolia-autocomplete .suggestion-layout-simple .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight{color:#3f4145;font-weight:700;box-shadow:none}.algolia-autocomplete .algolia-docsearch-footer{width:134px;height:20px;z-index:2000;margin-top:10.66667px;float:right;font-size:0;line-height:0}.algolia-autocomplete .algolia-docsearch-footer--logo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='168' height='24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath d='M78.988.938h16.594a2.968 2.968 0 012.966 2.966V20.5a2.967 2.967 0 01-2.966 2.964H78.988a2.967 2.967 0 01-2.966-2.964V3.897A2.961 2.961 0 0178.988.938zm41.937 17.866c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 00-1.574-.199 5.7 5.7 0 00-.897.069 2.699 2.699 0 00-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 01-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 01-1.471-.636 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 011.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 011.82-.185 8.404 8.404 0 011.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 00-.384-.73 1.784 1.784 0 00-.724-.493 3.164 3.164 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 00-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 012.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 00-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 00-.814.24 1.46 1.46 0 00-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 01.233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 01-1.471-.635 3.085 3.085 0 01-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 012.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 00-.109-.875 1.873 1.873 0 00-.384-.731 1.784 1.784 0 00-.724-.492 3.165 3.165 0 00-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 00-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 012.073-.177zm-8.034-1.271a1.626 1.626 0 01-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 01-1.128 1.906 4.986 4.986 0 01-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 01-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 01-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 011.15-1.892 5.133 5.133 0 011.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 011.753 1.216 5.644 5.644 0 011.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 00-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 01-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 01-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 012.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17z' fill='%235468FF'/%3E%3Cpath d='M6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 00-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 01-.582-.271 13.67 13.67 0 01-.55-.287 4.275 4.275 0 01-.567-.351 6.92 6.92 0 01-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 01-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 00-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 00-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 00-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 01-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z' fill='%235D6494'/%3E%3Cpath d='M89.632 5.967v-.772a.978.978 0 00-.978-.977h-2.28a.978.978 0 00-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 011.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 00-1.382 0l-.465.465a.973.973 0 000 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 00-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 01-4.49-4.482 4.488 4.488 0 014.49-4.482 4.488 4.488 0 014.489 4.482 4.484 4.484 0 01-4.49 4.482m0-10.85a6.363 6.363 0 100 12.729 6.37 6.37 0 006.372-6.368 6.358 6.358 0 00-6.371-6.36' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-position:50%;background-size:100%;overflow:hidden;text-indent:-9000px;padding:0!important;width:100%;height:100%;display:block}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #3eaf7c;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#3eaf7c}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #46bd87}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-heading.clickable:hover{color:#3eaf7c}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#3eaf7c}a.sidebar-link.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}} \ No newline at end of file diff --git a/assets/fonts/MathJax_AMS-Regular.07173fb7.woff b/assets/fonts/MathJax_AMS-Regular.07173fb7.woff new file mode 100644 index 0000000000000000000000000000000000000000..1bf198f87915a35332b2704553fbc6880ca2c109 GIT binary patch literal 40808 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_Fraktur-Bold.bc421258.woff b/assets/fonts/MathJax_Fraktur-Bold.bc421258.woff new file mode 100644 index 0000000000000000000000000000000000000000..f5df02348b3ad03c4828e77e172cd1cee1bef4dc GIT binary patch literal 22340 zcmZr%V{j+D*RAb#Yg=2}wry{1+qP}n`qj2=duzM@ecsP+W=>|#nVUQLlH^Wu;wCR9 zCa*l;pa5iRX!GZv<_rV`()CX^<--?&vbS^k$JH7B#i0HJ;ZG!IHOlFt*UjdKYo}i?)x3=Qm6lhH-F~Z^SJ!iJ4<7N^h26@MZehvXR|lY@3@9yiyb?_zpsUbvYv|#6 z?2g*yGb8U&f0&-^DVx{%?#^uM`R1L5-`(6%ssqS;K`iK$zLlQvv#MM876U|`!cKgr zi!xQQtHhQ}SVV>GMrGM~?NRx7?iaIczwhlQ)57w6J=&ip2WNYDw!V+|5uWP3-v;&Z z@!#(2KMQ(%Ck@24JHI0d*mT{7f3t5pkHWWYIX}p%^K3CK&98V3ca+Aa?v$ny=-;{9 zEy{oQUf=%QtylK+=jv`_e^$=x6l)e%EH+#96aqvZRHsWa>nu_aHam14Tx7e&s@_7y z!tCy}GwrOtg&**y-B@=QS|GytcVu)D?EjovBFR3Cl1r7nZGhASZN&A z)U0wBs^_bhs~4+Rt>>(ltQV|Tcxu)Q*R_PL@aOWeOG9h+E%QU`kS&L>E5vG{&0Q;- zZhd$#)rxeEy3hI&aZ-oq_1qi+1csi5jDvexd)O4+P~Ty&e->85>c zrdPGnc0AWVSHu45zmBAEeQU4!c^zu4ae2G}oRl*Tye>-G6VQc7C!TgCTFc%{PUAp2D2~ zuV)>jLUDGU2Ol)Ptq1J#_!^vD?^*J?ZKZ}+tE-l)u5~_twg=wtA^wik%5LWNIKf&| z*>QFpAJgoaA14&Cir-m{&)ZS2s*hByuHy6BE$qwB@+-AHMwalU1ybK+T=XjRD0e^J z#QkZhqtfSAFIwyYx?(=h#%x3i;(@A``EyCcn=h7j zeEw$x5%*Mo^(ppgYE~w-tgJJ16NigClq>CbcjbM3Vr4|v!vMFmT()+>1L*V{CpKlM zp)Q(i0CJ`Wl?z$qHhLI`zS2sc#Q=^gxQ##G`D#EO?4QbAk@3pVJrE@G@Vf^2@Y@fe z&{-j9e>hK2y&VLI`q#eLRJFp^-Jj3)`wc-dM&(}p3Ys5DfDqA+hxA{rm(+VeEQY*L zP;V+2w?@16nb+EAK2|Pz2k@H*CNW&!Eqr2q+H4<4+RO3OVCWi<^B}siwmyLo*g&#v z-g%xmPbGo=2R>8Gv}r{5n@M?k_U}JTcaAI+>Xq)VK>cMXU-U8YXQOe0hLl$hE@VMb1lsMz4=Ft~7JQjY)*}?t! zx5Yc}YD_vvB}WJmq)?MR4a^R|RUpSCxeW+(hKZ4SlDRA+@ICNPEsplnU+$2OOHhd6 zX@o0C;KzUAzT+PFRVj1o5ZK_ZEm_^ie7S*W+8><9*p9OTpq-mp+)O+hi@FQ2tG<;X z!KqMZ#GE2Ti16b!*DwcEZo@F8vei6RGE>clV+Aflu1_#(&w?{-%{A^w@hZ z3TCKctY<%=;$Fm)?aur9YOiiT?-u$k@+qbtkz3!#yO(SSqeUWoA8XHj2;@|^wYjZP zu%HSN=Woj2kq_pLGC37*E_|T?2?kU@UwTB2K3_t^@a-Y3cs26Tzn|bIgvkoca-Ga_ z_%^@S6#2}ek>54^7SP5H@emi zYZv*3wL>TZgak5Bg89y2vXaKI?h?Qx-|ng|(;H*g6b8gOwysVD%N9?IZ-WJ=#@K0V zWT+lktG~Nv%*a3SH(>qSU-szv@Fy{i5u8?#PKsHah;b>)L9-AeK$@U`nbLh=S;RPQO8 zg)za~GG=hlS@t*4_8rO8GPLpQ#fu3H08srIF!n*5XH*$txfXMw$cVLy-C-aM`=Ej( z@S45kr;B^6q~~PN$;&>* zu&_TNI`>_FlxG?4$62K+>{otLyrGSD9D*bxZk> zVU5b8_WEuR;ncW0!@u6#YU#AtT*+AP; z$<^l3;7ZMelN}_@zT#ToT4mly+0J#8_##3_@=tSJG+*uRV2`=kP3sZAy|wkGme zwAt*CtttSA7#LAGGv>ij&Igq{ z14r01Hp|R(4Ti7(^|acL?aJ%H+Jx5^<^-|^d=>&3ECv+&;E#Gvv%^IvEdVC2CorJv zB7cxk=)r%JhLw@Rz~h53vHFVj=3&TlTOCeiEC&=|^@^oJaQg(JMeXf6O^~AhQ>f>m z_mq>YaO4=)G0lFK;FjnEw>(6kRTPXdAVZ?UCI? z|HV=+fKL@}s+-)}?R0Yb395(CD(rL|``yVKti{WbdRfjZhKIv*%>|7$cCV=jV5!l$ z$5H5kw;(^1Cmzfg#ju4-;Hmg#qLY&YgEPPtQ_aONU~{yzZ4Ynuqe(6@=0J9o8AxK8 zX+_}2yT2pP<{MM&od0R|unNm+=I$n?PLG&>)M+FP1DlFw0N3=}$ZQ&#nv1plHvC|P zm);MVaLgX~DbeW>d9!k9k_%4n;%EK!TbyAndeN>ASIS!f1E1n3IeE_`SiIG^4d)et zr%=*2uJ}_!g)Yp;ygK&R7$rUv=9!?UKieFKQ+sFKx8f6%icfuInBK9C{}b3_AKgrN zyQz>t5GkFO+i|fR$VmHTKbI{t&&X50i)xYzhH6JLZ$fCva?8WSsCbIix5~pj<8Z!C zr$__MUl%{V`sdUOvX?E@uZza*Iox&5XltUpqA((zq9X7#A*?)e=x1siHUMXp1_(TMUUv3tcXc*>>vY6r8+xN51?sCl#%8Z$McN+Yvx z`{)-ZshtEL{lDc^>4T`{j?Y@H7q>v`?0$ZA!QM>se9&s?Oc4YM+m~M1PfEzwa^JI{ z6R_RZ#~itCw)!4D2FUC+Lf`ezjV9gTa&s~E)UgoEj3MKLf&~*E$1x+5OBICkkDv-> zg#FM7^jWZ}Mry^qs@$_o`IG$@UK zKE2=XzUAiVX1qfR9n~r+J#ju((jBO&j!$V3fPx#X_f_ex?C73Q^P_NwYH4>E13<|b zkE;d}#u>$968Tnrev%xQ_R{dDZ~bi5iI*ubzzsj}AVt^xQ1}Cn`kifwivLBVbU~z& zPTq!bsA>e0o-#gdJ-3k?AKO&gb{!Q*9{m_I@rwf{@r9ww@lnhcgTjCB<8ib%hY)< z@D0M@Bo^`Vpe&<*mT^ydg-Zh5CCG62hak!I5T+JUKHOmE;L9|UMUSp?Y#m3!wTLes=i?}C?vSAH<`jaLF4 zhMpHTndq3)SBH5qOmT2dH0@k!z-BR2Jw_L8d&PV>AoTJ+3}m%q*N%(`-chx%(o^s1 zI(FQH>e@LN_|9J5E?G+#0Bp*8s|0JQJ7yXUjb?KnbwG#Ofv_A95QjE^U9h}5{?({j zZyFUf{3YIYlT{n26D28lTvESFVSD;!GkN5SsN+4PZo}ZQHdzebP)4B%(Bhv(h*abT zI5MpXENt?tPF>_yBJAL4j6(mI6HM>jJAzUufuK5uY&UU>^qvjvo@(~(fO=<#m3*oR zH;Kkc*rmfM2jjv?%nx09`_eLE&x9*Z;iJw(1VAs=Q=IMH#n-QiNi(u-cb^(p`^ixe zoY%IKI^umdJi3Gx*63KM`1bVr?r*R3e(C_8F(yPe;*v|9c2{}b>^Cp|)US6`)ouQD z^_q^wFPdNBT&tm=TDWRmM4;VtOOs9FW6>p?I44vqPNxJHvmeg3(0M~W)?p0F<(EKX z8n#xD6LSLC^XSLQ8}-HySz|VKHJcu&xnrs!*jfo~%s!ezJ}b>(H>L5K)5#wdo-@oS z8;EGNnvR1N&s|Q9H9%bXsnhfQudW;>N@_~-A?d_%b$)iH)z)&z?R*{1Y?ux4 zqkf@&ii)%y2Vn58B+SKj{{o!}v_X5qJ5B@(UMGet;&r)I69DMCqxXL{7~2NqgGv3W z*U4&VAlL?^0LAk4qP-(wO7PGB(OYhq4BbL5bZVwq#d8|BogXKOQIqV%^e$hN99O%$6UuqO{o0k?Cq{|( zg#6+3FfK$$92|mVS_G%r7@Z;hWXwx>p?0xDuD9Xl4IzEbUbTu!jA05+gs)QjF45xj z4Y%@FdX{(TD}YHy;hK$V*S+E7v8>Rsp-{D_0(Wr8r}km%s{{V%>*~ekRwr7uUIwwXVA{*QyaA+kN%8Uyo1&dvC<{Iv`Z z7-Hb0ZjE7gIN6u&#Hqs>e9#I0VEo}mi|jiB^C(d&ELZ&oiljBClj6bNnD@P^LWpK` z&daQayr!JSv%Bf%A1;t01_Td76)~ziH;RbCL$3)QecWmMups+6PF98$b^w`=Hkcye zgNTGeCZBrHNNEG&aJpb4IyMOqou_wAKG`wd$4G+NPTI?`4xmQ>C*M*!Wuc#idxHF~ zE0QOVN+udTaWKLgNSY;F30Z!Nio58qf_u_g)(S~24F53)=ZkBQW3{IaWKQw8Z4qVY z9iwlk2?Jq0pDJvSZau6|BVRpTP-W(MO~MDr*dUF%4>?7+1Y7#wkPEcwPE?1las$@i-M*&JU&mgnl)J-`4^GFuE?e=!yLK$=)way3mBgs| ziovv@;k)uY{HZjhO#vWN2ON+NrI7(OqPwAFc&puB5kUFc^9&;wWsmdNGZt;b0JirvVZu0^<00r5f)k1 zYiz&z^oE`7n(qegkBn@3=)X1$yz^?$Y~2mZ9a~}s1ai<7h2L%(4+YEvi0kz7gMZ&# z_!cg%92RpT8lO((hw=3j@}lYUbzY5)n7!|WBJQ^pnIWVp5T~b-}cua zSi=xCr9&Z;MBH7P7bM3GgK`p)mb({Tl&7=*m2#Oqo2*645U>WyLcfF?HXy`}j)^wF zbd;i-Kcv|Bz1jH@8Y*)lxDhxE5;Q(Y;zjbzV489;C!)T9R!`hthXQt{tCj_6kt6m3 zapNh_ex@@N3E%0~W+P~5H zW`QY4@YjiP$gQ&xxw1^!LWK&)ukZ*%9>Dr~06Ss| zGCq78YTqzB`y!YT9g1)K*Mq38h5S7GK=4}rMI{3s@IZ7Q*BQ>o^6#JSsKL&n)pJ9QY*)QOwNo~CFpS_|r!S}>@LsKj;YB=1FJ1M=-93JNhUuuKgA#x{ zW=hmoN4Vij%q`1pAx}=8U3>5?Kl^Da=@nF`Kisie@*t(d^0{6&*4SyDvQL@3QqC$K ztK~Y6Vc5rx#|I0ie(IKKN67@|?od#I4jkEu2ONw{Gya-{j3F-j?1LNSYM*u_9sA~g z^|8eWM=*{D_l-k>lFCjH@cds0WkkaOC{YKv z$f=XVI^=mi&l!|-X;A$KJj0AFoe_LN%Qg=lpQO?U2MQR#v_@{tR9|!Lj7xaysTT;& zz*@jr@Htmkc<;KcE#a=Q8c^1>WJE~(={Z!#$_>`$U?=+p*cZN0m$y_2)dD3oO;T+$=q+H@dB(x2W}X9bhD?j z3u;#OVnXZf7YqthCQ4ebKLhlyqAo-;vz}+VspP_&NRDqC#{BC-I^BGP9+#nVr`Q?@ z%hLMQE8o6{=O^k zZ0+~oDXQ?XO~CTIMFlA((@|?Lk8$mXn|he;u)d&n7|%JGF=5gPgrD-9@Bj%0l1hXv zo?jM%8e?t;f}hUMgGBP7%rO3McW1fq6~uy*7A&wdVt&m`CCZ>`8us zz)5`FN*tD8Oz5I1bI}e0v0XL`y%8^Rf)Oy#ajbkvJSGg{=SGHp^%vdaeN{wy=~?-7N1gozMup4bDv z1B0I~pI9|kOCU3Mx$p?$JZXGgfw~-G_uOg2p`)+p+1<5G8}>PtGO_6>-B$4h$gIeq z!Ej_O;8VtF6xzQ}ALUOuU!^OpsVn_-X8aarI+#=Tzk~EQGHlmhIJCTpx3SJnsXmcI zPIvZL44Iv+Z%xQ7c=DH))N9pxTuTa;?_uT!pGi1uw}(1jqHB#PeEGu>{9eOot;}5GI{)) z{a}6#!$lXk<4x6z-ayl)b$|B$@6puQQ@#je5P4Ke91{V$Y1%w6mUKwva+Ipp} z28#;1c@AC*Y~V47LmarS!<0k5cLgC7e>QlQ*ov>tq^@kcW(^N5NPN&;oklZ&vDL%S zRdCOxttG5sVg^CI)Q3LCX6>GLq z-x4&LMy8e@`QpG}gee|!XTZarObvUe&?(gr0pJpu78`nFFlnnWGSH3;RVb*@_JJLp z*Rz{RvW==0&OO`vRS;N|CB{xP+4 zjc9!SwSKYF24H)1S%=%xCVt%I!#I*BQ{#GCT>2=m+|E3&L&m#iUG~(k!BGK64ctl+ zGfks zQA9Xy^U<0TB8^DJpSm;W6S+uIn8baMU~YvSOI~)p0HV4p3e45>p=*P=-_>kIt=ew1 zq^|}9%ISbIKtsCP+f|jmJef zlXwc>v6WFip;klko^Y;r8$T%8OCP&r&(O32K?Rd^bX%c#JWp5}+!?S3(N+6)6Y5Xp z>^tOjf>OV$QrYNyJtxIea?G@L zb?zL$#zqtTsN0O(-ino~Xb1ft79dmDQ|iv@?MiZz`>*b5z2P)}Gb-~)nJ_!(*egOc zIxq>2bVFlAz9xI6a1US^&DJsJ`QQJ-G!|dOJvb2YxERVE^lvUe3?({_(E`O}H}*L{ z@u!iIlvyJ%0FO1?=1ZD3y}1z=78XEurfAEp@&)f#h1Cwv*hVR#i=~e9F0l1tuxRn* zZH{77#23r4mEkA87(1Iy^gBh_;$TbndR;7NCX`m9b1-mZVa66eX8?ny8@QuAEzI#9 z1@|o#5gt-(+z&TQOi4iJyN#slhlao`{^-7l&ugu@+1Ls6CdDF$IMIsydwaYT@`?BT zB#e`puqiGI{n@f()+W!3F1j&~=-q{{9k{ta9`L)9%hQWX2ckFZDFCsnQ2sgCM)AX) z0{bdb8w4TuL^W-#w{vt)1fO~j(Tj{6ne^m=Ipl7^oJzCL4W%S#rkeda7V%e@6#k`p zmjf4!As8|zZp?|Jq6LDH1`c?;gXI8QA%9PkJ&q2fx~5;N5AXdO#3LWJq3ja#PTta? zB*#+#N1E2C*#*kj^mE8;Ur7V8lSNOE6A1P+YB=RBQv{4j(wh-ra2E?a)R__?}m z^ilYmeyShFR}@Dyyf%uX%!s~-3^n0lG-j+B2r!X<&M;K*7S*PT__Ja=s;~Kv;I7uj zUxvy~s?8TT7Fu5Q%^%-CS$AZMb^4X`Ka8&-jaU?0J`=;WiT4Cu&we@OCN#EqrmUKY zu!m7mMQzLjZQ>9?x$UrC$MyUJdt2)2?Hm*GN*dcQSP%)%e!DlW zf=>nuGDnc1UdEYjJN%A+*H*+(iHWXMZcTz;y(iONXf(#qnR4nWyyV@ z^%GOJGI}Ins{>lzm$ezEv!)E|YA6BJY_j%peIw8QGQpK+v7=DEDU3OQ zg{J}9)>+!ZunIm3Z;d^xuuUNmklb}TQ>FL4NwW8qH0d7Y*43IqYnUBpgL z8sg>p0{DDM#HHlqrl`XPGE)AP!J=~c#wx{!?yLL2(GM!w{hGl72cq~Ct7BvC5Mb(< zINX+FC$}sw&FpU0cS$T2&kV0*WoNM3MJw~q>v)P*h4j`5cp85_>!F_8AGcSg=}d}n zR#Am{OABDx4-ge74-!O-n$u&@g`hdfNgWuc-u0Mr8qq2kEr;|CVCoUkiNznz)KTfL zz3wDfqG{;(T%2D;j*@lImcAMlO{etnRZ?r$^uM&QY!KU|5heeMbnl^Vq14oF4G&;G zB9EfdLJ&*o!mgz6#Q8j13L!7{ehptVJt_M^T#C~xJ5LnsTJ>@iu;fe{CY2ZmUQgz6dFCLc0QL}2TVVq(6F|YG zMD9W3+z-UMr)jp+&}ketc-it+gPEdPPa=<(PSz0}vc@leX*Gpt@VJ8b)QnKM31s=8 zG*e;O&O2;!v<&L?GDsQNOt#Cj$x=rULW`Z3wX>*@!T%Fo3+-9BY=l4;UkR=g|Ljc;w<{?JuA*}-sua)7=U^X>2u!BC=7EHns_CqY4i6JdV* zr0M;rtI?=4R4h{81`>{Eh>*t1qYor;XdhluMkvW-`;I>*o`<^;;08pD<)TGOASbRd zyEp!5lE5&9Krvzy$m7%IuhRxEs|lyb7-V&e{vOSo@1^`rc04h3TDMHOJ9Oz9q*Q0E zluGL%zVDpDz=(?{IW#yc6Dt$Bc!2`?>&}$tZpT4=Dk1-m+g3tJ0~A6<=LpiTVt1Y_ z$*>8KL`w>T4b}qwCYys=*chkli^ShC_;u6!q{}%>PL*CpK#M^gtQ$uj_8!_eYCyp< z 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_Fraktur-Regular.b80e08d5.woff b/assets/fonts/MathJax_Fraktur-Regular.b80e08d5.woff new file mode 100644 index 0000000000000000000000000000000000000000..175301efed3ab7a99605d591e2ddcbbf044c833e GIT binary patch literal 21480 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 O3`PuC001aN0k{Cua6@hY literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_Main-Bold.c9423d5d.woff b/assets/fonts/MathJax_Main-Bold.c9423d5d.woff new file mode 100644 index 0000000000000000000000000000000000000000..2805af50f1fb0f5fb5a8429873de45d1fe713759 GIT binary patch literal 34464 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 IC`19c01G*mZU6uP literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_Math-BoldItalic.77dbcee3.woff b/assets/fonts/MathJax_Math-BoldItalic.77dbcee3.woff new file mode 100644 index 0000000000000000000000000000000000000000..6496d17f5261f2f4e4cf47522441db9f9dc52ad8 GIT binary patch literal 19776 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 z z3kzRE|{k8ajq(7taSGGEYPzQOa zM3^AACzSerE-RPHEy_W?SCUWbY7-ZLrcGF#rKtk(#n=l)J`>NI--M+vRWSu-*=FI z4blf`2ji;>6OTC6i0u@g=@scg`Prh$L*}C{5Y5EVy7B_c6Gqu5d2K(yTN(9u#2R-4 z9p3^;+Y_Ptk6Rdo5$pISSLS_dB~y7+Vg&;0WM@6XSgdyJKOZ@%2WmgGB46akMo}4Y zyS(}nwp#oV$k;&$r+MMjp!USmbyKHs=D8PjQqXK?A>=+U^uoMAqmi#g`7|07|>!^$J}|mW?%5 zZF9j$M;N;qeZS+iR}4ndkX~uz3q1jzUe}`9e6vgK!%EF?r&CStZX6BhuA~+?6 zsUAxSfCKgT2d>)F97hLkPJLOA@pU0Vm zYGA?~L}~}uhz$gZPT%Lifvx*Uq^g0i-qd7N4{@p4pM%qfrhIeT8m9{x?{09gBm#E?Nmcty6#PHOtEjq}cE)wm~ayrXh;2-SFr@W2d7N_%J=6=2&5Pv-#&uLfY5nRQ*w}JV{lfBH9AdZ#Izo3?Q~d&Gjpj* ziwqu+gFNGso4{)O`N}g-$=1>^(O@jQ?q@sjbxl`4mR z9X>AX@lJ1&8(P*?#taBy)evUEc2j)v z&?9Fc0C-mZi;+0(iVin#ze7QU0{_0jQjZeU26*tZyn80GgCo>x#sZ@DJN`-Fq&jsQ1}0Md zCoDYljt+@3Xc{TG}D6YwkGC@+9R;Kcr= zwO|rV!!oOpO5$G7P*>Iza|Got80b2IcE>;(#i4ipLyRe*9ZdPT-GD>Nz#~LCh;Bbo3#hX8%0b#UQT3m>64)v zZXj?fA#$VaUT{LkT^K|bE0GRzN_&VaEGxo&)JS*e!XxYKgkQ=T7UC>4 zBu9+)+}CZ9=AkI&VcUz1!^)eE6Gm{%Ygp$Gt52KYm)NF>HqZP5`VC?+xFHt;mDNpA6W>3O zAs8Uj1-m#UG{kFfhA(*%K=FFrAQvygoQg`Zib_ZsUELVhW)Zp%8D0MFDx*H`$-l>y zV=|uArS|~b+7wufB}A25xbaQb`%lZKgrrkz^dAeJf}|w8AjUeI-wJLM)`|D)e@T?k z+Q;DLz>3k|YAJ}!W~M$BDxeDWZ;j0$KEGq1bI00#sk11c4H=Y)c$u-q^RAAiio*7A zz?%N;czTPj3Relqku^e{n{n&xlM=Ed@%B;hJpV&&h3F?e63z)T1Xev(h;jy%_)Qb) za&(@a^~;(=lv$tD;Q7r*f&XMh?v#V^!P(R@+|g3EeX|XOcFn_W)IT?>^6r(nOj`)0 zIG#vAo_$m)#;QVK15N;JYmPc=m-b!EE^Jc@G_dT(d}mZn$dXJ3_#L=nNfdY~B2K)P zAP&(Bk6=SCAct*pB-;;CIBHIjt*%M#_>m#?QeIRK(#ZXx<#We>|0bAp1JDVio>xuC zfY!z1QTr9N-_(ST324(qfvCWB=HEN4w&+xD`9)fl&UyDF)tF(EHFwJDzi%6O5opIS zA}tpnOwt<(qiwQTVa;ySMA8Tu)Pe*m16A=)sB zt{7(_%O-hVHPDYqcdW?If%vKAttvW&)fvy@Nx#l66f%Js>zFV+m}xAAC|G#twg|{v zI5+3Rjc3rYhSH(!njql=BvYr0WrF^zYaJUw6bUb&es0%T-d z+oW+?O{u=WEn?ZR&l^!=JjKFMTCR!6er1c2k>9h@4Zq<8ZV0w-Xx|J~5*Sgexs>hZ z&=9>D$l`oFh`j5(c+8IO;rLzV0wF@Sb#p@>;VXS^-fe48GsvXcP%7f!S3stj=b0+a z1;zwol9|+&9y9lFB)F_!$UNn&T2IB2Ek_&%S80K;q8)cWc$jBe4bxkm*d}eNFBwQR zzgx-&GRT?wN2m#8pugssQ)*V9X})Hz>wYKUG`PRNfBy*7UzTIVQ(!HI7|jR*y5Ug5 z%oiidQ1Jx+PkrsxI5*w`O(z44m<{wCT>i9XAkKZSuy$Rhm`+!7Uz#;|Y;&5oyj}OK zrqA0%OxosUHt6-iSaW(Mj^3DyxnESvi)^)wdrE)hf9u(_7Y@V-QCbM>*rRNMTt&1P^_ zk$Xjd>iD56woE^|(;OXR_H08L*4}Bvqr;M^t)L3Q8<#B?o|atg z`bZkaHMBl%HwLosRvif(_N`sp_;jT^XrOTkL=_0bKm^h7tZ*-pX~c1uwI1PiOrG-n z;G|IMsmX?l>(FA{T#6+UjH&tY5<-0EbR1+FCE$q(lw@(PUYVG8I@~vt!sm~#N|<13im^00kmIzUnS{AzSfZ~{NZD<%WUcO*=}+_r&}gfX7!CCuNxeAy z;zqzRr))|d#7T6Atzop+>3-_Yo;rTip(mj~bhOt~*XW)D9@u2#GyNwzO+SL6juV!@ zy^D`W1Vq+qjfo~hxs#G*!jFl{5ppZ0o6?D0Bx*8LwRY0LDM(mqWph`2e6ptvAlCJ_ zT=-@4NXr{zck3Y7sPFi3lBYGvFVk7eH}|WSa+~%!rK<|YhR# zC4GV(k??s4+PX(?ke|Ii5RZHGqv(CN?)kDYdRAooxWN20)S0~N+o8Bp>yv+}pn>qT zxew#=?j01|wZJe4)>qUz&iYyBPv*nKyt3#d1ap8gV9`!=+A5F!!~i*P)G>FBN112e zeqOqf=YgAnV-c`?x9|+8V>gv+^Fjn?=$fj$)!E&_*Jt+Owv~wNYv)^eKXAIRC4g5S zqz+vuDMut;yN+v-bA7hArNpn#jc*uVHNH}qzJ*D$+bbB(Sb{E4>vq6^QZ-z`U! z&1`Xy#eIwyFfO!{)jckCHD>RG>nNbzNXf;!;oo@Dw6K0OVC;@?S?CJR_eA+m3t=i* z)FhzJ0}@;$kg8?=bE#3;yQ>*r9mjY8!O@Eys%#y^wYYS7fpvqIOAll*%WEZ4JAZs5 zzqX3q*0N`I)uscdHUhppOvJ};BsgNEL!)(eiWQ}ZEzZqg-z*++%hSs6P;`c(at8*< z;WYIvW>I^DmD|{v#Gbpqht=2zBC)RWPxQl z6^$P9MPC#8L)Y#u#_sO3l}%kyZ+B~JH6;@`hzT;;Bnqz74%vz7&a0f>m0xfT&$YL+ z3C&OSR5Q{Q$C;h&je>hioTNl(emdnJ~v-GzVS zm6SvFQ7^TaM@e$m>sdsDN^g5X*F+RK8@%;w$u3Ue?z1~lm8mfO&r4(7vtmQ~RMLwD zL27r)@>rR?C3K>N)NqirFdXvJXNpaUAj}9mDYPWCo4AMw2=@}!kPFpywGQir13LSb zrZeZb|D^G~W}gfJKI5i(JSF2a2_gRlqw_-2oqA`i;BD*YEKoE|mR065tlQUiQJ-S8C!=^+}XVP`d*cNgM*C?UzsdPS%pQt8<$Vzuf4;R>1imZ8Ft00_4@u#j{l+E&U%xg zWozPaCt-O+>Z95;w6cUy*3wnwS*2dJdSLZ=p84&%Uy%oH&alyBgzf}J=<)W4ERsC) zF+K4K{g{2&deqe$Zegr!aY3ab*n1)T_g~*RMRpTpT||1EwQB2Xt7ZtB!i3SX1FT|} zCyty7K!I10Va_Ot11K^BeGDct1rKtp9d1nMFcF~`34Tjpfmku)b~CB#THao=Cw8E?2dUZdh~1>JY{~eM z!&;Y{kmU{>{zM58dXAWwz2V?>NVjMjAR-G)RXC})h<-0GyH9&fQevP$%q5=`|3aNA z1ygim+6v&){PbG_XJcwxC5Loz^8%U!olPXCaizRbtEy5>RgGJB+AVxB-{v5qzu@Ze z8Q;Y(UveD1M9W7QqBkO(Z?|IGUk5C*bUgbVSJ8Wz+Iw@@?EOv9-M_;THk}FyHl#gWzu#{IdJ7yc&zJ3F9CntXg+%um3yAv zH1w@W_K^PyTZ9_0p7jlLYeIX(xC8A-QtmykY3fjoClYAJym=;rPKqf}MnhMDt>3km zpZn0jXjz2{aeR3L(GAmM}o3Y?P#-oDzzzn#-ED>2uc%V#17f$vgCA30gB)#w8*%k_lZ4&o9nr zCT0cCqvn$@leHF%+`P3q4B4fSf9sbrDtD%VWx*S@*g9||N;1K_5fnmahh5Rq0vCT0 zX2pFJ7`2~{Z?`QE9SgQN3~8yfWe+cJr=;{zTq#ar6W+IQc7_V?Pg>`BAwcshJ2rD~ zq1rgutdi|hV%@u64{krmI8e6W25)!#>wmEC^`nV?t4QK0#MoAKxgTR18aFLza(YHz zcQ6i8u$r&Zy|mIfu4tU&tlClQ#`W$bH$A=vU9;grD9M!Vl8=+#@mnnVOMTV84T${p znJkd@%y_=|Fk-EKeBaXA8KX9q!za8fpv^1xarnJnDf7de9cU!d1MP{jdZY6vy}4wv_Ug_z8nkBC>}_# zpVHwd^*iS34hA^&puBB=Jzm0ku^Y#gZ9?(z@D|<~h(y!g9Y(fGH&?15lWU&koDt-1 z=yKEn`Z8li;oO_+3ub^q99Yld)zaE)c#DwM=KMlE{gC>|#UM~9Bmiviibo7jFe{-* z#i8L3eB-94?VWmVXn{(<48M!xjc$#c+0s?()}=of(~zt;uo^1E-Z;78aeHU4dyDfm zLMUNv5U=a;#=lo}6NpmtRn|~wU_Cu0(~tZwVY~<9i8@Qeo^5fLJh?$I95=)BZCy4H z@+mut*}K`ddA0Iy{nZ+-x7OZ%@qyt!vZKd5jj*7#WGO%Cmd2hiMYoTsxd%jfNPX*X zW=EP8S4|T%HfpNt*)fResxe}d5X=)CKqy#3-HU|;P{CTPG0+9;o}}^=E4dp(rj;#+ z>+ODdDJV)*Zl`r>Ltr%LzX=as760k^6^+9LO50|X)w*&i{@*&PY%79m%#FhJFEU|6 z6=6<$)pPn$W`?{$(|fM-l@xV#k1kEWC5Ro4vuq{B5M&A@S3fa{f8X|jBR9yc#7)yp z9cm{v!lq1^6lb&XLCqYJ@;;>Lwsx$CcQ{kFdeu+SZVjqx&vg9+pKuN#ACRzEZ+n(@<%$tHrI!B#kY|{cK7+1wK?v z|KSsQVUGJuCjS!A*-~L?Km!PwFJqtM;&5oK`jgH^DU^gQ0!>&5EI>()M<7}q8P2$B z?JS>cpIHz2RnmHD#G-fHw5;sLoKn+&VX3}Pgp;y{ls zcbcyixf}509q6e(j(W`YEFB8(;N_JmKWYgjeiV-w0+}gWR!KSi0ARLYH_#_W&mXHf zX0*l^>e(*Oi?f?vAd?Gimr#sDdL)xlrV;?4g-4S|b9-8r#4SKUZ{9Ad?5=w3k7+i` znl6(BUutdhie&5;FOW}u72F*)p1DdM(_iu(!(Q1X|##(VLNCUvn<7ewt^FYkS z=E6RHY?{Ya{q0QIbQg^8(o9m^bdaWO-uwZ}Tu1hMw5Pg#uw^((@dNu}h{Y=OB5&)F z0WTnTr>3BV-a9kaUDEO}8b?3D}h*oaE#M$099@NwbfJ1Z6#BZC( ze@>?Ru0d*}G=L4CKK~fs-Ene4pQTomQRSyCmG{`x$E76nJ3{6V8dx+ZKesy))HP3M zs&ccNN*wNlG@B|Ji&-=d&YQ~x6+8zR&05pMo!Fc}d9%}vtmqhzW*I=_=%@FB3~!*! zN5lH$B$7J79N0-N-_+4p(*ePlM`Oh-&81yl5CwO4 zAJ$(<>4`(abn#8_9zh6HnjW8rV;C9$Hw`0%(&GwCt=45%-;3t^XL4g5K;R|Oz)6Ne zy83@MS7`3P&o$YY{92&y0(RW^eg>yT7{SBu+Ae609-cU{Z@^pX0bY{;O{VmI zFcd6FCJ$uNZu!W^UZSqhS0+9^mL|0B6_aJ$^KX5k{lP_I;vS2RPwplmk%&m}c^A0p zk#+z!rDfa0Jb9c}wuaz;s{iC02ROH0*(TyxQMX{{5nZw$cUA)M67=A^h0B%=I*eN7 z;pjs8GbvShoU)YZ$nRUJ^YMc2aNbqEF; zaO&hs;3m&sLp<>-f_um=YL!mny%=wj9VXntP*c*+}Pnr7eI z)#VT^S+*JUauWh_w9WrksHn+0Dsu&%V3>-`M9EnKZ|QFKD7tu>QLBFEKJZzqgYl_**lujS$Jw5OOKQ)^d$bMaw4b z<0voF0q2nBz{}Lr37kFnfLR}2)IociLm5<;BV8Vr(wz^>k#}Gksx0TY0zI3v*$l9) z=RNZPGIVvP~&EHf0yaAJ715?TX^5QE?ydsErvdtv6$R%pIuqWJO1B=*YAMnq%(yX;EmxL+CoH_$!YnVR9jkfvlx_sO{I0Y;Z{{iJiQ731ENDPC^dq zTW@>PN?w=NMYCNh<5(eHDb+|N%Q%5l_&Z5XqJCnSM+d3Cykswb03A_NPz7^rl6 z&fW&4CLNv8h~mK=dGzzF&@UL+^UHh|H{Cgld3d{dXp`y(j19APrh|v?{g_e1xi=an z@0(+i#B|NUY#?~7bxfN6YO=&~$e)>4U; zf}}I>zbcxD*>Csq|6Vh4G@wXB4s{TpqHs7dQ&xdd_{d&Y+1Z2J2(*T%MuG*s`OfV2 zz0U(Gnk{5hWpKw}9XY5l-9%}6eW8YZt+R_47W7Ez;`~d2sRfOYg@d7yif9;&QJFwZa7k8fA zS+&vIAv#%*E3Dpg10^=kiTrhGf)L?*x10pPb%>HOe4uA)sc10%O?2*BYgwf=TQ}l} zp&W7+vtc8p?H0-A-?J!3j7R7pJBS8R^g~=Dq$)59qBfG!9nErD9ZeU^@t+q>B#sg`()ZI>zGy5z079+aHprD$8jv;?6PZ{7oV@d!oUWn z#n!R_?dYfRWP}XlkjCtc3En#)o|_dnMRNgPe{W(pF(QBC!y#o$50+)x!W>j@``I44 z67r4ejO(3p))Mw6tcV85kA>V;f2t65e7G~_;Mb>FE}Q>Tm$3SEu5{f@4r82!YcJch z&slF13us(N>(tRpYa73=`oBR;p^sQgXGG z#w7`oTG9)S+>dKe58HDVkh@c`>%v{zKkbLRx>((!fAw|JAA|1)9MzZHqd2zJGj|rM z2clb9r}z{p`_&;LSF~`GB&XupLzX7-PuQWDe>Sp-CUNc5I5TK$Yp@fUIJV2d#CEf4 zSW2$h2+)#kOSRSNp|s;&OQn4OrE9yUJIVh8fG z)Sk(n5TVhLAqb?{f@TvCb1%Pq-+InC3UP`cT=r+n49grD45^ z@b%^dp1?{rve>?T0ld9VCs2YfcmoA=0YUa`_-+mH`N(p?Z$$zJLFCb!PfQ)=gQ|5(>HZ>-;%;3O9q$vXRmdu~fV{igq>ryRprX zW8ZqUyZfl#I+;jfEpfI{k1DSsZFXcK2#zWWn*gO3I5!{&G99R>kPiUsA7#Ch=STkt zgm6|udK&Tmlu_SC7DirZu{oRoa^TQQ(52%U^t*@f2VWkBT>PbATU3nhUU+tL^S~>K zg|-(_Kp*GVIzvRDd>$@61h2R*$XWE=+;1h)BN;or9rh^^>CCLgfTph4HllMp@8%hS zkS%aRKuYKW^~{YGV3XPP%-9$`bx|-m=}~(U`L6J5XQCZIBM{3i1&!I=b)!|KM){8f zjK3_#@8U&>F*LX%M-_YsXZ6Vcduge~{C8ot#^;*6X0S)WlJHnn%a8z*0-7C6sjGPs z^giT&(sL7DhZkCUsAk|Ek`sTkAwq3Po?$EY-1%s;d6x&+1QUq1iE!rtAt|Xmjg50= z$U7vXtRqG%En%>~&^7jBl6xvk{qZIX{6GIxM&COl4Pf&_$scyT=XuM{=cP9o+;1NK zojMRF#*Th&?k3p9+@QW9^NB!)(31FWJDiPEQEg%^XPag^Z#bW?aL_d+m@uuOY40qk zJFzpWTy`LWaV{9<-zO+9G{?O0X9DhLrF08xUtc|U5|;OXQb#JkXB*NP{v8u~hYre1 zTL_Ph6+{fl-K9O9+|9^xPcf!@Sh)xTau?NpdEF23zEQH!D(KaOw(%NCN_3QIb^yAG zy(h+pYwGQ&10~TaCcM8&A`!PkL8Ep_JESVAmvq+a8Z54YSG;|_W}tWszsLUaBj&WI z%|@VP;Qx9lBi-Z)qvUmeyp-jK8r`4Xu+4g&@$a-^WO=D0f)pW3jDY4viwq>A1H!*S zogY4z)1H&QQGP}&5fgz|cjq`C@8+J5!XUtBb2~hyiXa!feF9!L96^5)V~|~HT;bxw)XmsJIFdiOU5V@k-orG};Q}X&fx=M1 zt-PX%sRb3W<=$~aORH;a?ZzQYdL|N9oDq_Z)H-s)l##=s+uV%1Q?m3jZQ5kryU9K;-g7_Lu`A;;v-cNgmw&28)gFnmj@*qFm*F(EiHCXPkpfN;Q9A zb(tN%u@WBDCXZqPUyrQ12u)9dXhuTEt$b zH-J@ZriR$c`r3lYOB1#t@rvBtwzqp}YA4m)Z)^~9($RT0d5OBJ z;A{LIZWB!{HimHPi#qf_ zsj6BtSu3<4fycDTgU|Vvs`K58c|QHHw5wBxDX_9@9CFpTpH^#yY>pjX6tg2jWpgS?YaL`g_z!F5=)yL?;3<6N$m5oAziApYI%kacEHSdR`8}y{Wi}jKq>l z|5-&HXG3n=m|s+se?-hynDh^C<@5y(27g1#);WNqsLje#4R!ZW5j3@gQ(+hNp1YQ> z1awd?+ULJ*W$kwe;5Ra&8j^p%npcZ&|5leSB_qDdqJB=7(gi|WA*7`g`)H-uD&etV z2|J1Vq@#D^=y*px77*nbNvy684FN^T;}d9HOW^&~mn1dkK5=T@aq3QolAce#AJIAP z+#a+y3kQwVT+VtBsXeMGy%X=5nKBhTTpn~u; z+l{WPPo5_#b42L9ojH=28D<5cf@>YVY;YF-)yV&oK-z@BQ?QK3{9xktWcNl{rUwph zFSn5_pd|M*yD5=T(QwP5VfoDlyF)gSHR*!z9^3D=S{-i zdUdPzh7%k9{x6G`=?UfTHyi_SlA7?j3AT54GIeAoQoN=L7SgG%!U#lR9`}H-s`N?=RN6;?C3z0KnrLFy*Ou96Eoi5j3nu*3M9^2V>2q==1i8@4SC zWsMVP%&Wh(xowB^TG|7)m)^uj+Md|aCqqQl#zo5F?$2V!)R z-#6k7iCOQ-uC6|n2hAz0S=d!cyocxk5gS33&gMGO0p)A!o6$3-l8L|T7@X1yQ*&1O zeShVZP=Y+A{%)5WfKMH}K5z5lH5WWBl2Z=9MBy8h_5xbZyWP^!`ZVbL1H2tpdw-ie zms3zwIJst~htTZhtl2yiQUxtqXxT&iPen2KBw~RMMGG93?ke6T?1~EGCP06HoG1^{ z&MnfpdSF9Wtz;Hy1_Tq@G>#MtaddO@u%JH{ODhc_uu@pX-*{aj&#SbwvZLFQFy4aUUZ7`KaTfbC{u|^>^S1wd@IhNA zD74ko9KP!|;vpf?buyx+)G((g`tI{+iCpG@+~!J%#oR=qsZOG|uczL#q@tmvr@nsY z?-Diu3U86@DVyS}Ci(BvGk?4P2is*xtg?pu{gEeTtXb;iV%#*gPwLL6(YL~eM;r$K zN$W>9D}&QUj@uxEx|f}f64gNL+L8hq5WnX61Y_hT0c)OiEUkAsqS^L@A)RPF$JPHc zv{nBdZ8guOM5&MTe#Hs%!o$tpRjV^-qaNN$mF$MM~JJD;qOwa ztuDr#Jp0$?KZoPLBw15~x>maFOSm9qJL=#q!NAn+Pn z=4$8$aY=-D{38Pe@HoM_$m>jTh9!UmkEA&Y9xnLjSf2|@C2ZmYc6j?Jm zyG@3n)foRF*TUBjRbIBfrfjcWhCRV!{@wAuoes9}@ z2J5WerMTvgIz|FW1M~DpVJn~JGx1(0D%K|~@b{)MH07>LOh`xJ=HUkz>6|FVl(8w~ zateEj^TXMCY}(m;+Ol^UO9wtTHp4@m8|fb{0Im#RQcZ1VQOBs#;@_+>rxhA5W?Mdw z4VfdNVai$Ex4+7aq(khEISjqss?i(AT7Ki zTZkqBW1+qVO&+Kl(~xa7U4KVkc!?Mh9%@p54}(_UL*K`IqwlYi&SKI#(ZSBr@f}}L zMX@~bu(F6_PENvZ{4v>kdCi#d4qfd>@|2Y6X{5CI4uDfPkl>SJu+tM|ry`QzsdWT; z)bC}ez}NvqVj^MV*f#=fpmOrl&t~R2a_WBEXVCePaf8bYn-HdDRCzoJLFe*;ru9WU(_F1t`VTs9B$0S44}Q*(0!WtFt866r~^lw4#Ni@R$1{~)-|2q>gu}c=H>`hs1b3~cJMLtc~`|Ry<(ID zs1pJ$4d@msS^{*FUgvgc$O&1;t=x03eP{0PF^TjhF`3FWZY_DZ2*`21GIJEHsN^Oc zHa42VJDtxjCuC)#d9P=8PxgzdGAo_QRh-gtTN`%Kt0ItCT(y$+nyTF$9W^}_^O|M1 z5h3kSuV8kNRUXV#VMg0`^FpSeGJL%U5&ZA_VLfmYKs`V9Vk`MFBA^0ilSjj9-JdQPD=ML+5>loFI&H41rx;KU<==Cq>ziFoy z`ib`F#_=V{@SEKx)4!$$OV-JkdrL|FTXxpMD&G3lfztP30J=hbZ7=P9kN%*K=94I+ zNg><_n4-hFAeVCNl5hX#CHnY+qRS5;fC zFM>i?(Ytx5j--tv#t{q2-)j%B6002kG(YUFH9cZnYb-NYnH!s%^*XalhpE)m3p)uM z+)aNdJw~XR)@osa_0i^qgv({YE4YRG`ZkZdrnvy8%pvUP*t@kqm1qm6U>ii%E1x=e z6s6(0O6IAzzwzuSJ#R8SvHy*n%#|na(E?{#W?EogpnP~1=A81$DNyXHao$vO&yte) z#!`2+(tbjeKw3qjT@hb z@e+CR6q27FX&^Ef=?%9f(jx~Bjyx0bD~Hv9{NmKPZqVEtT(=!wCYe0??^@;17GpMD zwdR3&QY;ur zVRe{gs&am|uHOOjBma!7Cfd6@(vh}sLKpy&29HxywzgrFb)B=!TZ&1vpmWnMi^QRz zfhd|eEWDgJbZGPl34}3j?Bvd^%U&&@h4hFP?yo7V+E}t?L)`{=1a!OL3FwoyhDI^x z`7iBrOxwXgk^dFqqL!@A44QTu(u@Rb( z?#j14``awzeRd}`?HGSIhZf0qX(wQ-ghDWq8$-Zlt+QiNam+QWph;diK@f#jCg2KL zlBLo$a0fK{%_&!y3o6nkCA9i`#Z+(%ls!+B4;@7#6;DC-m^4qnm;Qua0`wg6j~Md| zVKyw;C@+EqXexY?t1qFo6OA${%*^v6kSs4F2#qR0upI1}ak z3J`l3kFVC)*#P30_GuM=RQ!2Vfuc`g;TI7^*kHr)u~#!+e?pXMXzWPjfS$ z{8X!a&6DlfpM3ho59pfNADp^B`-9nU=h6RveIh^Bh?Xw=;oJMYaWUKP#2$7zF6L?W zJe=J;Tzk3pa?5eC{pS&qVbB(4U zqMXE}c<2UO%#FF*yXU1(PvGE=X$vn&%!){eb*pzpo}2;A&Aje@-u?0P-ZvZzHcwp! z48AvE$1P_y_f&S*0xf~etIRqyYxUw4E7xyZxDnX-S(@4%04)0Jx>}p#s{QM8IZ8s3 zlVfY@+v_?Tx+A+Y)^{J};06G(GRyD)000000RR910L(q2&j0`b0LJ+;PXGV_0LkzPP)V-5w z1%m<*G6Db*q7hR70C=2ZU|?WofM6L0Mg|Z#1LQG+`78_@fV2jK0+7W4B=s4h7^)Z+ zFi&Bg!91IJ9`gd`#mvi?S2CYuzQ}xy`6Kh!_y7O@2kHQ+bYw^bs+^3Zaw+o)=8Zs= zSHUX(0+l}efBFBR|9k#V|FiVZqCX4%%==O{=}-5cjz4*SvISD0t|AIB zvM~@;jwa89p@5l%m5rT)lZ%^&mycgSP)JxrR7_k#Qc79|A}=c^ub`-;tfH!>uA!-= zt)r`_Z(wL-Y+`CgyhE{pARu-^7BDBv7y#vqL?HkG0C=2ZU}Rum0OG|Dr02!++k9o< zW_|$_VYnK*Y6Fb^fAhZ@i!{?&1||j$AO->efiDf?0C=2ZU}Rumko*6Lfr0td|C|5a zSfm+1BFG>G0GUDtZ+M&?kWDM?VHCxGdq2oq3H>|Xy2tSs@)8cNxTlcB3}rxOI+B!u zPauZM(1b4_DF$R9lRLwNGBCK4TlWqOlv1Y{u+AAg?X}l__S$Q2K1lNcp`1N`CH9=& z9qEuE<$p=~F3C`%e2k=B(coQ-gn9ADG>2Q_5DR~j_8n3op_o(ODuX^l9ZvwJNkO}GT~0z!ltwq#r>nja$nDO zqn_W&pBS=rYCTh^MSicBA(mET55)Psd`h)OeHp z>}&28^}Z*(NtMqkF3_cW^_003kF0C=3GRL^S@K@|SB zO#*IzP!XhfkO4tjOg2C8(ohPeC6JP~v?(fH%62o&PEB^h?lfu79z6Ot_z!sT;6ZO5 z{Y$)f_3F2iscoPYYqRXWZ{EE5-Z$^f1i(XQ9uCI8B3@hUU=|-NoQ=kX}_!{PZ+384mx9vF+<{%Rf8JEXb}o(PPel1MT+| zZG&5gIFZ?e!laSz8M$@7H*uFH=^AmQ8*$Q=qUKdZU0lsvy2$m9T-UCBL1l?4UTlh2 zrN%1VGD%e&iK~L-0bn2!Zd*pI)K%~fWb#0sIm}tbv#Bhuw#9F6%3P`8x~OxR${SRA(*-MDd&9)i>S#3b`aCZu{+Y*PzP4O+M@olcU#2n{%8tk` zfY|Z-a^mQFu6q!wbUfRRkM+n;q@aUmPDUx$okks*2pvk%ZnnhkKt|)>);ORjuAFdh zOlH>#f9R{8f7Fx0NbyBueNXth?uJ?q>g948Bx;~jFIBxvb9uMHjsI7*{ziC*KcC+Z cTR9K_0C=2ZU}gY=|IG|W3|IgFC`19c0QFn;1^@s6 literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_SansSerif-Bold.07281897.woff b/assets/fonts/MathJax_SansSerif-Bold.07281897.woff new file mode 100644 index 0000000000000000000000000000000000000000..bd27726416adae36691dfff87dd82506eb1c5079 GIT binary patch literal 15944 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 Tz@KRt5g0W90CFL~Hh}*Jpe^L2 literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_SansSerif-Italic.3d580bd5.woff b/assets/fonts/MathJax_SansSerif-Italic.3d580bd5.woff new file mode 100644 index 0000000000000000000000000000000000000000..22e5eff737c68962138420de5742413683fbcea0 GIT binary patch literal 14628 zcmZvDb8u(P^L4PXZQC2?6Wg|J+qUgwV{B~Owr$%^-hIBmf8VY;bF0ss>8hEonX0+> zwws)&sGPF091swI6bJ_BpNYr+*Z%)ZNK}*%2nZMw2#9eC2#A~5ZK@1dR8(082#9I* zpC0!==up3Zi3y8{{^K71`FQ_82=o`|mz)v<6A%zH>OWucAM^#h)JcqN4DA1L=Ko?+ z|HC`l?|xo$69Z!)AeQ8R8s>jsgI!JsnExaHaijly!hawI#Q}{pw{dp=$DRHgr~40= zC+?VVHU{qh;<1VU(}4dEUh+V;1~w-DIC&r-ke+|^Ul^DDEqgmB=YR7>{HH}EA_DUKXI&C0+eE>S_)HnbOcJK#N-rHRkJ3y@ z+bDvB{Qkd?Im1~J&?CV_SO~)-+u6(9}c-M8!j1auInU z5k*}|%)+m3MhH$b)QY>!bW_B0e4d~-oN6S&yEv%zY@7g-m;2Xih7Ly9)ga! zkFkv5juDSZj(JKHk;*30Do8MqW*}D$(i)I;4wBtTjFUDcJ|q&5A{5I}q7;O|W^f35 zd%SeLkSGZ*^ba5(tb~P9DRuZFF?6yYZY`d+!uh>>trn&s#p!PQJ>K^frbWc*lJj_G zaPzS6@;XbpYg?Wc{JmYAUCY0_U=OB`$|30b&B?^;>@Yuk+Bz8grZD%wE;aK zki}`Uo-D?oM9?Ljm7SiPfQ*NgvR>i0>aTkPkHzFT+aVMRf5uAYZRBh$SQBC}w+Cgg zXZMnsfynmCm+|7)$;Zw}#>*lr_#;6kCk{foMH)>ik4zeo$W3)de@5gXdEZEyzW%H+ z=9GvSA${K|Oz$CZPu%n*m6%3WBd(i5N!s;y>qGoqQa7!W$U|v9?p@#CIPZ{dY$H)1 zu`kh$ROqkVc1kA&7C9C@7LiBpyIGNOvT>tvv@!0};;%8%G2=1RG3E1yvqY@Kj6?*o z2GWMIpJT~miDN0=MA~@TqHb+k4Pp&y4RQ^74S}zARm)V4V)QbVaY=!336C-v%QVg+ z*)pl~RL>$0#TphpO~NOMuX#a>ghq8uVu@sRG8Bsx~pZ(z&iF&ZU3NI~bKdMiO_eUqXy!Vlx zDS>LfeogmHwlyMMuF^zmlM0pc)~A4ilN4QruATF)nwj?Q6TRGb&KJ>H94b5IPORtS zHecqCuSLGnpBGSE&@gywZ>js`;}+2E=bo<(LQ_QS$3DWHyn`TL?8lkD8MqvlRo2$K zKY4Eb+Y)}IpMMy_qVe7jXN&UrI=LRV)?Z5CaM-;E!_!1Nc@6u*!;#LBKEvCQAjGus z94_)v*F(y#=3U23vusCOzz+Ffr4bU^IhA?PN& zT*sbN7W_aQ{9xgtV1{5+S{z(!1^FWe1JGy8aGV@I9m5gLrz+afcl~Y87J6VWw`o0b z0R1RiH3bVW{oP=_c=$9h=gt(&J;79jb6AVMtlx~;3)$uxv|-)Ax##u@mkp$vsv=fW zC4^)&My&s6T8QMF=a#8W{s{NMDoqZWF7nGnw82@sc73vQ&c<;LfzyVKYsL<+^U2yC z9OeqrU`J8QL$HPa_|uNp(A$cOPvPEM;f8q`PCI-v{?nA$*DEazQGH_aiI4Y+1EKB( zzMz+;(>vosp%u2kmvrG_+CxwdeJQQo}t)X(R=wsrV)VzHOgqS;SxvJkpOoI^P zV!MmFsI036T(5R`H~A;Bf<4M_ziaXM=+;8=;axLE>_}l_7C-w`9}5FD^I?j$jTOtp z!hGRGlbzY;$C0iz-i&>~BtQ`f_*i*39kLURHr{kGGoiB5Z!o&W05aNE&r#9F%!U>S zWWo~JBwC0=+&uMSWjLvu7Dg2arH4^Y10qJ=a>5Pcx{jec?Z`>Pq!1t~0>P+vOPi`n$=R&(GXN-?rbgIf5(N!GU1%I)CTwb4TE47e3COnC|l&C)KF1Zq}Pd|Y-$ z^iNS3ZVAP7c-+!CEIJ;ke;Y_MKj7s4a?;8rUkU=5I@Xq6|Py?%093%cF2L$<%5UM#}$B+n|kXw@#_ zGheq;E3GR}KnBx6O^%?(nQ*CNR1cxWFN`+EE_uS^gyEn(H6q^2>+YrsMRUnz5m8Da z7yVO~sxZ{_K{Kw#X>?mC4*1i(bNxwK@?~Kb5w@y1!Q`tK>&K$krgF>!^T8|{Mot5; zd+{KaUhNbsIoDwLmzX;5z;gGgua*Hqw9-_C1_PN+G3zFF(zr~f0-_GDrROEt&^|u4 zP}EfVwz=y)HT7FsdzJn&_Pg2NLGOig-^o*zu346J*O8w(PS&*>J7u$G z#oFu|ZkAK8!r9*1!yj&`Db!csFQv3EO5g35XvA14{BC=L1V0dgmA>ik)lYQ&=>Rh5 z4RZD{HdIy?TwHCzh`&}SYB>kJ!b}GtHJ;E4E6MB3hOgyF7dc6?1s1Ix*}ev}qE+;a zOxQDgHcp(mg2Zu<3{nw;oW;NPP62uILnaMy4}@ioS%o`tV99tUmBz1a0_!3u?a#cZ zs;H`>p<}3JcX!{kOud$kXMwTrV(XJ1brfUJ!bkeb7R}%w*y1hlcDepW6c#GD!~Q6i zj>3TH85b~H;F`*A;_je^X(FvwU{W$vUp8Mnm)0B&b+$7Fgxkwpjiep3r{;rZF`Y1G zl2szX=G`A9^D`!U@(hh$Qw_^8AR@tn8?{{>5zw|sG%3V&SkD2 zD;}S-MJ*kTPdFVe%rY#z&X?`UuvpSsN0JkP(#6nmPLGlwwyb_F!VR5&IR~~X6R4ha?eX7D|xW9vnW0gji*1qwo-ozUkXbCwDHTy$^tdc|2^d(3UwWOpH z@01nHOx(0(^?~VDNy+8!=o>#(iZBcDkUKdqOQ(vcI#Q16FK6+?XvU41h_>qOB3z+f z1WdjEc8d12UWSDZ(v-8shht0|INra4s2x}cyv^rt**XHM!6ZBcWaBy}p{uP0WOZg2 z6sAMbkPf87wQLAQF>1#0#RUgQl~HYo;a;5UD* z2v%T4+{i0WPcyp%gVAsWZ>1Hpb2<#P0K4x5@!roiuD-r5?L8=&QhyjvG0}#}r|Y!Z zD`~qp26^&5sqmic%O_RL?Z`Wrzce4P>ZRh-cO7w#VK|Y=|MG&J%9JVdN?V!1AfiG> ze!9aB{$bP5t#+gsfDW%KIz^{QTv2w~PbI5@lUWC{h(DXYFIG*bHXsN@|0tQi8TY$u zS!`6c+0pF4D9`KNoe=1=7YJ`99O?-68(&H_j!G{T)pSIvx=D!EFi~}?MbNx&_L#ds zU>1ulS5cjyYLnuv8C>sM3plDK}oX&PvLUb)!PgJOU z%^;>f7=aiNm&d4*S3OQj4mS9@;3@RIIHW=8vIejl9|}~Zb1J6i&kGY3j1!rBE@@eu z>U=?sR5O{)(NN#-13D{egV0TE;b8;U5T~h$G6d1>dkAGLpmeBp7t3x>~LeD8PE z%NhjK>d49%=)(aX(&*pBtqja?;GC~3$5d(Pq)~@m8`v`a#GjQKnpxmeXNy>Chc91F zX0pI5^hFG$ZQ2>Cbfen_$13}a&6;aC5I+EyVe6e&WEd?3oF^T^R%MtM9jr@bOV~Zb zS=R!bVKHWwpKm$DeizU0L9ssK%TUks!Byi`=&1Cd#As2Vr98M)6h;=+UOr$Vt04@*Y3;x^ zgal0EycsB!oR)(V?l&gfx8=&GPfkGJBA5)hDA**SVP;~wT-0yy9eqtH4$1400Q|Ml z);xg&^Y^fXx9EDiVf*Ds+FXbfw#CIoPajzZJ;+hCbOic}5&6ucEy#qtX5;h}4Ws3$ z-0HEWbIRe#;HH?ftI>VwSc7_|dKQ)+>2Kv8Q>n%2MkRUvr12@As}4{1m!|uxw+;i0 z_O99kypYq&8~Ot^25~!|um(TK-b%%5P(Hn0f;;?;4wIMX<$9mDG%8Ni`QA0-%B5w~ z#*!3~ws@?^Z2WEiu?6!{hiXMJfvGW@D>|2^A=Vsl^U$v|ZbEo(GXT7`gonj5trllZ zNd|sJ)Ffu>e$X}&DTkB8GfR4)_-?goz_H1}CyRDtn#c}hT@`w|O$m0)5 zGie7tJU^0}A&tN_1A<%j{Tcva=t@W)4H!ng*8bRvDu?n@$5xWHI4VIExU~i(?ie#@ z&U$>g*sM~kRF(oZA%?uBh6Gdw>)pPVP%;V|^-BMNd1!^rZ{zdLfR@MYbMxy&cu=Q zP?D@!_!(>?eDOImTt@rTSe?R|f%vnPYa%1q{%mi7qvs9BwwsY{JxB zlvkwOiy}m~k8Wh{7x2j@ETShjCY7GCc1peR*|`dpRlVuqu!b@sOv42FQVD7qjLeh$ zuh`@(D^d840rKi4%X)04m6EX1L2?mVC_Ui0_!Mgs?d6k(HHo;Vz$UFZS6?_;pAIOE-~wMq+@<$rM>#ot{6G5QHeGX zUA-$)l>uy`99*dqt>O!Y>o&YfaZ~J+e1m648xo}S#oXC8bBTj#Gxg$}st;IRN6+QPJF$*H!*L$?nZ znXa7C)ATzX1f^GZXQe}d*i5k^S}i=WO9D1&M|>(yMaiiClPrj&p-tyNcUO7S=dZk= zCBTK}csJP*!VE9dCYWXGSG&{)*X^Cu2ZPj|(#}q61c@&K;(Kml(lv_RzL}>WmYyjC z4M)S7`$d3Hn4BHgk&6>C$u{&6r(dSl&Gey*_|cd>snS`I39~flJ_PcwLlyC6ijI_{ zsH~MgVI8*@RWh$s$vqPWP~#+cjk*lzHN}4&Lo+Xgro1Zv;$W)r?*+9uA1}romb%~t z3+SdOHz_a!ztr8IZvNCHEm)DHVv^CUVO-K^lT_GV``n(9@rxsE+S042x9GG8}?;!^DLKD#>{pYmohnFXH+ zc&>O~T;iHO;d>GkQFP%XB2?v7&E7ueF>NIGwyo;n&XPo2<9r>XDdZyKEQFS&7uRw)Sg8|3~ut`ww zhP7ASnyFAZC{_3#>9ZgHvjRa5m zObh2<5FxzTQ{E0Rl_M@!re?=(;a~DeL&h1{*f~7t1^j2?W4THMzRiF_yPG z*SmzD!a5lPQ%mwpX)~#r2&b-L3-!Nb+{}}M`b3!>9W>HEgs2nID^5fTcX#%(XI*9A zcaL&GZXrLDK6jeG@Vouv_6S=6pOr5!7h<;8+}&?5t#Gd~buZ%LfO#hke%*XoEX44u zq@$7OE5@aXsKP%~wWv($tQ9L$@^s-kZI1VkON9-NmFSpb1!bA^rs_etHobQFg{{xf zzrFNfI5beRfmiC9K}WQcd}Yp>5k=ZU8*b~>Ip$k2Est0)9SIjYXeaJ$IFbaB-GIAQ zcK5QqXp9(qlnW@=xoZeX^7eU?{8;R2C~vLZnW9R82G$<<8kEor!H~uF9VzQIXp3I> zhBav^-C1P<4)D}PD0&D8r+fJRPJw&N#XkI@`-W!SZE?Usb&db-h0UVi4eCM@yVDIG zsdb;!3x%iHTknDG((^*=SqP|682;Gw!3|vixpit)hKFhvR#T+&*gyVI2d1l?YFp@7 zb81a?v)=@sbfA|EB@U#dV=kj5rZajlm`R1!M_Y`k3k~127wS}3O^R7tCRGX~LkmYO z(S!J;edVB*kcYZ{f+6emp~ich0pUR4ns*B!s;Rb8o6*Tpi;2{-pfB}u%BC3?dN7>} zo>fSZI5tU;XTpFiw*9k6iHGOTFa);q1=J@t<*4@v?fcb-IUQ9+5pwWnt6c;9__R1;;iLg6sToGI~}IP!6t&+AVoHfl>SQPk*C%UJ6q++U8- z`z=Z$31i4VaZ{^Qr`-s>6d^l@y>+QMIUcXYVRheaqp2|;bB`w9JgZy+4Wq#1ku4mZ3-M@MQt;w{hlI4Z7UQrU3 zDe(Z!za0EBS!eG7vC2x#;$+V1l0C&FrnE3oT3J}4HS-0-adesC4%e>cbnE>IsW?iaOtT~3PFuVL)IZ`GW?)byP`i7t^}(okRT%vZ+?Yhy>7Jw2)4*L^l=~=jSpz4n(Ty1?T}W z3^{%R`_`!^w|e*s|G6-(F=>tq;*E!=wu*i3YK59OF=rB7QDTK#pU|K1TYc=ZdmZr)71W;V1HsE@qm{wwR?~MBHu6Gvmo1R|JjCeLKHL8l=Hitkg3YVvp~LY3kh$t`|JI2#6^z8?-K>8Uzh927 zVF_uA$s8wDhq~i5G0han%E?K}%FZc*1A7FXtkGGpbX31AP>sYCpF_Gd4LiCGm1Fmn zh|#jCdCDWerq^S*JbVB!91hGCebL}NPQ%76ryk&HCtj+(tDx0l{rS8+gd3u$73!kv zH?hYC@DF*VcWSyZ-UxG2G*tT9^sx}y0eggUgB5W>^XjCMe~MNpF^lXZ^w&7zf}no( zPS&C$-`{#wKz(&!^A0B^z5aIXEv(ntR52Pu(jPUKoL$Z7!$>~C?-bs<8qy0+K!q@c zsW_523{fU7HZagzv6@WhGfn^UY%n?}H8z8ANf4xZ$L zP+;_nYm33q?%S^(`<*V=&P;m0clwxt3i-fMrxXCB74T!{hz2d5(xfIX9S zb{dUxIB-;H!=bt`7z(tYIl|5#dT#*c%Zk+*)%*dsHw~4u`557k%t_@E__$$KCmG~u zp8s$`FJ4V}9Y9sWpNx09e3r1eDX<%b1Xp)V+?19Q5ha2DrR}ffpf^ulAgGF$5z~X@ z0g3M)_7x2({~^#1Btd4a$y`_^&Yip-xa`M>kuE}B=kYx9%g#ln*6G$4Iovks3F?rQ z+{ybHx6Xf6zoy_%#Rzl>^oxD6qqi>paDP^>gEo9HuqKEnozP#7Y&L2oi%RW)Tz7&Q zLGT}Lect+Tr*w-U>rPr8C;91PTF?-c-8Vw5?i-dWhFjoH3BWrpB2#c2UP^S8|BIs1 z1Aw0iZ4ee*GQZum*}v-7C!4qEkPK^{B|FS=*cn2c;EcXw$|@(m_Xg3>SDg@V?qVgW zBsPsImv{avCt|BuhhDw_4lN6m|3&~t;{mO+5@r*M>vx8?X|MCpZ7(0(%LeG5?5H4- z$h~-g0Y(SPXtbX<7fA1Tt?3ktLxYW={;WXgTFas`B|c$`dp zkF1}UhMR>Ac8(Wzk2lrfYm58iRPaVU4~vS}s78e?tyl)n%-Uy3%}D=`Fo-4Bza$!$_%6t(X>?9ln@R;8g}2= zNjyXDC)TGBd8h2C-d7Y?i@AuSI!u?J6H8SBiN?*pQO73ZevHiaSCHNX{~f*OHOQKP zwaH~P4Ym`ENgs-KTsJkkJ_Z~n26tn`J<8k}Pnc@? zJB56-{)Z5{b3uc_RZ2@uTWNROy+gY>?za-ev&tZUxtvm*bPhW1z$=X8X9|ALgc%K} zb2*VSJY2-xy4C9=+F9|mztk%z;4mq=ZRgB_&SfK#=kcwzvtqwHch0ae zPlf8D!4z~Jth}$+tj!Qw1+F%ZT8ZK0*{|j2(JZ9#TH%yF5V>L}@|+GWb6y(y72N?- zt*!$W&6b@r-6SgsHwnlDJh7)t0)ZHUDPB{0r7l#n67-~8kbbkDnJdnhW`jZ)=F0J@ zwNhhW6dZ5Rsq1HcA%MyUeWD!fEC&EzNLrVB^7ny)fGD3_rbBh49~({ak^W}U7gK(UK&!o)sm z3PH7n$qZQX%4pO?QE8tU`IO^Bx-w_o27Qoiz=2frkqQ5C4I!=Qq}u4B4d}D2R<;_( z*a9_UO(HWyq2gq)QX(6ok%Pyj%dl|OXCg_QTNwbfP$xL^Lr31tYV zJcfmqY}z9fosR&@66qH^ z1nVv8gt{sZQ&nz#?mOt6Or`;@+M~%^SG|{rUU-Kso4L{@%&)W`%GOipmE4j039p$w zkrToDnu-}w-w+CI0v922^M|mBAyAC$wFX=6Vqh7;>K}TWbV-%oMdo?V`HTP3!hlZc>s+J zOlm`8U%P10g;=`{nq6AR*=uFVz(wuo0&@W`4PtY~5DpyUb7;0#zgx=`=m1g-R8nTMZ zRG({vF9sX9lCDR6(L(p495Zf3-PUT@`1Aw;2N|>PXTL#Jhil@*;M{?f9@}mv{eTMj z@<#Vo1Dcjb#xpA_u({!78%Zo}CSk9zK5wZwkG#=*KYT}rvYxXRuH!lxKG6I~wa@1_ z>h-oS=~3oKX&m);JUEstPoc55pSpglWHaI=qK%yqUlH>qxTpm)?{g@2UYY{MqSBAA zLH{l6@3_PWwOsx+RNo6(kQ9{R?4>@KDFXnsOZ${4SgA(P>7|t*Vr`y7ik6OFm8ZS6 zy_IBMQV+O7V|t)|$D!e_syWXe_ao<5xX7NMm#Y3siWifU&rfvqcDcU*;=X0b-UQ7; zvEJ@aPD@2qlwIErE7O&)i`2CVV~ZWNFLqxw$HJGQ0@ks>%^Tt;4a)GCPz|m3 zZ@mej%BzJ#IA=-~XQ$uhezyUtTJig1R#9*?(*bs)*vH*9ksFu&X66@Y3QV;i=32J# zGsIpsn+}zK>gTBgW|8V_6ilz3k#60rUS*gZ6w^ecWTEOHno~{~5*Ju}t6->Iux3~n zo`uv5qDADmR0V2U80l$Awl+$dwA;u|pirpu^KzPZ_gW*){XvObv%vbtr?Uj6f``Bxzcwv*@ z^)I{MTF-2%Mf8lrWP&v$Z2N76QqQ4f&!VI*f6d^4#_`oGi2Var8RgSCxt4Z2Rx$tJ z26BsJP^=B5Q6jw{Rwk7?IH_Dcttkbw{VGGyWb7Uzy9`0e7hgU%Z=<3M%~S~$;TcL7 zWLZ}uN%yh4l&>#sJejdec! zCNXbKwGfgdfASl-l^1q>@0nymf%f1GLcH57GMHG_joC6Q(eEe&G2xzxy{H`R;K0bA z{DeW}3IoWax3;4Xw7(-CR%Cracd5)z9^$JAF)+t-hKBuq&zaZkKBN`#Z4YkQf^UxK zjZuZ6W>sN(rP5RomPszfE9rCQ(~Q$CpO`4vmYKnk^NdT1k86s(jb`?bS{Au6qWj#_ zM!~mDO&%vFWrErxuS>DpRaaN9!(Z8x)?1k5N658Q;9hKz>)!AKY=wA>fm1}tL~;aM zg35Op^63;SHJ;RjZOdFQE-B~JcD3Pr^v}m16P)wuv3tT8#2sE_U(|rz%T;p_LbQQ< zhL%q)?n!b%FJU?8DAa9@Oa)a*NdxkuV=wmZ-5GLQV8ZT_PdE00_a_O+(xn3AhhT4g z`dhL8xDfB3Q}I9+|H`N{#zvXMqGTtJhWl{J-$7p_Mfa?*KvU3knk=h?pEn3$C;$^C zc4N~H9*@s*yZxJ`U0MkjH$Ud^GGSvqGg7Hl@&?meK?qQY_N$#Hx7j~xzGR&!;0=@S`wb(}i+ZoP>E)~l1fkc9CV-Va)_-&28>3AU zD9(=E%cwN3ikYZ^@|C~Gf7G7Da440J4xiCIyI;BnZAB&3wir)X9vfie$&tXG&xfxU z$v1#?pL@*|2H$++!jUktKp^hNbgRRCE7Mz(s9xR)nxWBnZ8(V@}~e8`~6raijj*^a^fb>WR}Y zn21~r5k;o~I#C-=nOlp#Hw!BoT4gWH?h50_m@{*V;^C^s=03~db$SBEv$~0^wG!cU3fZTZXx@ z*ULfHA2I=G(5o~BmpWr-9LQel#|_L@%CsP`5h_#jWl{6p59a`S0xRwq*J1Hk#1Y*5 zrk?`D6Wf=X8%rHTMeof82ko(!0!S==6kO#X3;R)A zcPa+6DVyZtqb7NiBg&ig8zbXX;AQ?)83M_Mq6u2A9_v)(C4!m z6Q|cc2rk135*>2t_)%hU5an4N8QRRg zCV>=lt%ECr)AQ_c8*1FXy00mmAPA;+yM8U#&ittf#eOzhd%@K~ABx&Be(_1tj#{VF z&|3k(I9N}+bV79JXy%JgBwwRZ#!&ra98x(gd6D7>@qYtFwwo4zBc$MarJ^+{=d4GuX&b5xqQwxS!+LC_VFQKf#pwPzk| z%JJ7qz@dpwZxed=l?P`YWzzCiQjK?p}#; z!&Hb*KB{ZgdESZJV}GhR0SoEfJRP>7Wh8f^jNLZW2C{m^XUVf9Z&giQeX-F+>&VtG zq+^~w2c()s^^njpKzTw&g1k7KAa_6qdn&#q&0%qt|1|O#7@CRX_v&YO3e27Qx{JR) zyINP;8`2D~z1_`Ls@=rP;nJP$_E?1FEHS=@=|b7F)B&4g#wg<$Ppd!ofx4VXH<{6fC2AxaD6G~! z9mEdeMRr)hfZ>XBxQ!0LTGny8vGVMZnq?s;IC6jhZd|24W8bEU+eEX;hx)>2rWU zgtChP-rtK4)2e}JJSifowf-Afv1h;~|2-3x!DCi!+a)|fHR7t_Ia)|BNf)pd&FHp1 z=x{?a9|hYlrr|ApIfv>ez#K~o4j)u(O@tZH%{~bBV!3~E^JaZ_=$Eo z$cxK}!7rHQkd@E~^$=6!@}M4k@2%Wa{;-JW?oPL=~jQU4_Er z;xAt;y{=C#nI<#8J|s84A1eNIYFC7I9Y2 zw9M&4sc-$WoL+l+9`9a?ZDS!E^w>kV8Nz-US;|UIR<>P;S*c&sb`x_>Pjjxy)jx;y zkuDyg=fBmD;vE}+dE9MNZch2Red?^Sw?5n@9BARHJvX$zU~Y^+MMijmyVaD*819W||8ylNgo2Z9TQ zjN9y1)n*IEv(6Sw7fR^aQor|-Dz z-EH&*9(e?erX2Nu6621bDT5_GdB+!c`MZ58$@MF3ZFID}$U7r^o+uIh`}Kc}bZh7a zw3{@8C?fHcj5V<?iXV2UK!6=eS#k%!1aFgEhE#wd@v^Y^qK?GnezKuVu zAX5SN!Z85q^{Eg$o-aE0d}8@{YURws3G~vtg&WH3!zm1;!ba9qaHJ>ut7L=#-yEV7 z`2za;GQgH!R|!!|KaS51_O4pap5{c5hokzjy7j($nXuhl6GJ}E@D`g|1&z99&aOEM z3MfQ=pZ1X@W%1^&Ssu4Gf}mEB6%F4!d`9I0RA|wx=Ac4FL}MD(mZ|bjNk-Hp zp1^Z?=hV_7YT3mCaV5F&{6bj#u0mX9as{Z@Ev+#Xi}uw>bWdHLs_-wEsys@t;iMDi z3QVJVjW=_@6Qs0@J3pYiSaOJeMIHYP_`hb7r(ov4=kOcTzZw@Hps`1?ZTD;=ePez7 zT~I?Pa72AW{a^jmgr>j`m_ShBKvn-V|MeRnn`Za+j`#L14mE}a1mr^qGV|*HHa0fo z2Z4iyy#d4A?hLsDo!3^v#KuD1{xOUH_<^J(93d?2?VTkUfnDqhvtSMaL1Y2}`YJ@C z`oEa^`lkN+Sm2`Ih_4`rjDc^ouzR46%^+JTcSP(%aH0NX|6I zI|T*Q1q20-zx47-!hQ%odwzble>#5bzINX99&*Qb(tGCo3ct1AobG1c_{@H?-<-~8 z#`q}k2l>K15Xt1>T$m&L6Ji4LL`BI>(N)=8;brM<@pXB9fdz;RkQ5jlpd_d)u)sCI z0Ulr?WF}}TtS)debT)W8JU*a8Bt|Go%uX;;G~iY^THst>5MmT&7;5Zp2yzT|1bTcw z{=Ip-@w2t|d1pw695}$x34jFs`oFD}okhw1-ITvjfX?()!2WNo{^bW~UoUq$eehw! z+ho_&7Z}x`6}!U{H2T}^k`E^eYJm%!92}ky90Vv26+YvCIr}%}UmC�^WvtjDB>~ zr7`)5NAs|OvT49e-LqK}7{vt@P(y#5@L82vSXhF=mXpPU1eWCu5lzq2Z|=egEh!U+ zEq~(^;$myN28!|<JYQMGIM~(6 zrg|z-Pi=90_?ygYb$>eroJsT88yhhW=QaID|MW3b;uTCz))V%> zo%OH8%Im+}RVm9z;Rs;*swO3uP#+T)mkM}>$6NE>8X^iL^OI&;7A5N%OAlX)*F$w! z6_n;k`tdV-A#^=LH1_1Re8=Z_Q5Mfk$C}I2pf^l*&vbrt&wNaBF$32g()J46)9h9a z!8^WM-@!7y+TPLLPfJB9xnFlSaKxBRV?;4O{xrJd_b9~rHn}6UIh#AcXFQ5A zag~*3cQL9MUg~2J(B|~vc584)sl6IFK%1DY?6a)gkL|;L>Cxr5`A%`yxdT^}@u4#q z0=DWo!rC6atPR4E=n?q~ArO#$-Jj}*G)FS!vZBJ3+e2Cl5wX zx&~D3of6OTFd)B8NB&Knuo|*#Q$*jOUgXhh6` z92e&@2#@Z>^YC3v^<7mBD5>bfjo|HZq04-~tbUzzt3} z!$Wy!#Z(_F6|J{wF%NQq9%T~DssVur<I$X<%Mue;fuah+U$)*e_s zjGO5jVbpE3qvBUo)*9gxM1p@=xz-f!X-RnpHHQA8FRVAJnZMV5=^inDq3pTBO1J4L zC*teFl+g-`U#R49eJ^WWiCT|>=dsTpLXBBb9c~x3ngr_dkkh($nO{0UTExR0LCz!} z2#+st6ei94&_RuuP%7Lphgy|zpR{X=ERVP{-IEo+rcE@W_;Tc+2URE*`F`9TuRwPp zGWS=NI^++3T)`}y3m>|!TSal#EN@3tu Gp#KL;gZVB1 literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_SansSerif-Regular.bc3af04f.woff b/assets/fonts/MathJax_SansSerif-Regular.bc3af04f.woff new file mode 100644 index 0000000000000000000000000000000000000000..d1ff7c6bd3e49326fd38d631fb05d5106f3455e6 GIT binary patch literal 12660 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 KP>2Av0saq+%YZom literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_Script-Regular.4c74e33b.woff b/assets/fonts/MathJax_Script-Regular.4c74e33b.woff new file mode 100644 index 0000000000000000000000000000000000000000..a9d1f345bff3b0131f7759f0022778e393fb2b00 GIT binary patch literal 11852 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/MathJax_Typewriter-Regular.72815766.woff b/assets/fonts/MathJax_Typewriter-Regular.72815766.woff new file mode 100644 index 0000000000000000000000000000000000000000..510a8dacfa0a6e6db1e139cf1ae6095c689f3849 GIT binary patch literal 17604 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�b+sF`RrI?)m4(N8^D=VyOjehxpW?A$1X$E=6b9 z^#N+AD?(s8$M6uQ9?#TJ#kfww!td<0exz&txFfjYmAJ}(3M%{%aH|AY5k55`Y47`{ z_hnR5hFQc)_9HHP<^PcMX2&Ccg9DQCY(iN2c+|7P&x~--ZrT>|A+x(!=5$!rlF@wMLY^@ zX&(l#DdbXy>!RmHD6c{3-!5?e(i_aHn@N&*JshPo|J=hJ*;>nI6RAT!6iUP+(dP8_ z@V?&@m)sjKn>`Apn)tN(r#kUt!7y}XAR>k6Vbm5e>rim3-r(jyL=)%6#39eWTm)}I zW@FhO`LgSubOjqhKG(Jn*w@u;sP&*)EUF-u1FbwIyQ%VGvxf3-)w8Pz|Mg$ocU`n! b1ONa4c${NkW&nf#%?w5iSO5ShL;<(}ylj?N literal 0 HcmV?d00001 diff --git a/assets/img/4-inputSort.a02239ea.png b/assets/img/4-inputSort.a02239ea.png new file mode 100644 index 0000000000000000000000000000000000000000..de9df223a4a65689f20bdcbc1edcc066b754ca2a GIT binary patch literal 152216 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 cpf6Z3o&IvoZr0QP-WG{#JN+mg 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

7+dPcdTx_2l0*6 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

  • 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

    VY=Brg(9B!i?%Av)KGpre#8xx*!>-9s&I zzQVWsP)0`69@&WIQHv1SM15&M)yV9ymu9@daJwP}*K`x@MvW)kEg#*!`Abw^WOoMK zvQtc_@~2y3!KgS z3u{Lk#q?)p@}A9#_PR&W--QGAg?syuh(6;5h8v8rpl^hUnrFwbo8Jc?>K7xYy<-P_ zhaX>Uo)s@#jHdER!L%BXo>rys4xVmGeSKUtJiFexvNF9aOOc4+FxBQ4x?tdZUC2O= zmEH>z8qh)z5v;RPsmOZ#vJO4Ufzh^Fo-ZvQ=BWMF_oiXe=@C> zz@x+aimpvI%lz0uM|nu)-E^+aFW_E4~g)?%}27YEH$~Fb*ilAz;oU3K^?|VP~l@GOw#emI6l*zgpsEo zC+9X`S>~}j>E5ntCFZ+_bql^*5BZfV%@As5zN%|kT-y$q#Zxh@_!8bo$PEguu_T9%RnYBFnh#P9#q}gvDs9I z#O+qCMONLCK=%$Hfs4a;Z_7-~ z<>$&Ihd5oc2-y?D(sx0B(m5Kj!Aqs0D3NGkD?C+>u*u)w2zCX-i^dE1@oEhaCG*t$;G#S2%&+()PC^~!H7)W(?AH9y_sJS$E$BL@=>l=IjK&-a}{LX`$7&M zuGgAlQ-~Oy(+J%YgB+D?QF!g%^yH9z(*ywtYm*`$mZE?(T7(&Plst+p*RtCA&`=VA zXmPoIB1`eW_Y-gB9)MGa*eX+s6_dM;c5whk*LIA|fN43>y z{44Q!XuNM@kS>`syjmnc;S_wIn5NmiX3jg*SgsOOJhYu|LB^stRCG+72BOuW zqtH$c6tT?8Go$i9%7G}yN0OF93aZWoxpdw5{Nr;8`q!t{q4YBUxsqp!iE4#ojUF0p?bDGSpXLH$Gd#_~v{5 zR4ifu3H;2Vw#){ghPPMgDl~1KS9$Zs(J!!=>GhFJQqFb%tkYHeqhzivX8RD@S zHpHtLHICX5;NK`NH60OT{btzXxKXxP^infzDdE68`x@1KP5>$JKCOufX;|z%dX<47!dI-s(d-@YY_!o`E8Psvd6Emd`AqSZ|V5{rJCbgyUVehY=~6D44$@(^R+y|lx(@AvoM5h!9DewU7dkM}roh_jwQpl?%Ma@J3K z@o=x#xQU5~Ko5Pz zi@2?IOC~M~*7KG+_yA62!b^sOWlg##_-t)#PCc&K;h6Q>b=%waqpSs z%n0Qe(@)O=1En82ao&~Ld9s9tmQ^DqN!C4dHC{C-*jAErG+2I3%SYs9J2b;n+!KSn#GJrdEY z_R~fv{~U%mfdaP2J0($(yUg?8yi=vMSwk%%QJ(1{@byp!l^)ZD!bTqu1CeteT74&^ z1tJZ@Xc$Zq?F+r0{tmc#Hyr$d{aUK@vsT^y7lU4sNYw!s ziK<54cngUf%*l}e5dg<&mmfHe-%m%^4hi*H8h(C;+-0i-5T`dHe$J5UI=PN}2Yi39 ztbZM}eZ)2(a)MgLJdA%7$^2f(>-Hw^o{8$I)sR5ZgYn<Bsf&6+JiZ1GOUsrgBVC4PQ=C<)yGxN~SnK}CWWdZ6Hl9_;Px7|W;fb78>a z^ZZLh_c`K@jDznHmn9X2=9x%x-vg2ve|ueqNO!?nu!4E4p{JW0zX98!_~^t;?o3~z zZ^5^}v=wjFQrVw&?8m)s;Loqc4+Dmq9NcigGxU%E^@MS^=Dc+^!9UCTwC9wFqCX?o z)JgV61$*qCSnMymaSbb~6?nz6lg?zi1_O8CO_%0aju?XopHm*Nk-Ovi+8M>ZMXH$ z!;1EQoV~x(>(1S}d%P1kZ?Io(+eWb>u|prf#5#qtE2_4+|2FBel}g_Id+w?|@!Qz{ zh*m$i{!6^ShPQgXd+w*7zvj0+oun)uBab5nMxlQNs zkHE#X>zA=jT`gCC=XY3r)LQko>A+PJ$v>|CYkgqPa{ou2^y2MjFV|Ro`|xmg?dl+5 zt@^#sn1BaC{*w5(z5kE!hx-omkH*;HlLn^S0kQrt*C2 z{s+^671Qy%Mf_rQSN_@O>iX+!FYjOb%4_*#DUHc*K5EMFZWh>oN4e{7JMi#{r1K5+ zoBl4C{qS1nx85?Bn`T>Ai0-_S8f4%wIctqa^%AYFiaVT=z?*yHZzTWYT)eWPJhu5U zFq%Tz!#?I*`n&72+s?^v)$TpKedc%Af;SP~#XH`GoYpeD^W@~Ay4x-P^qx)6SkA{r za8e&u6EpuO|Kuu|8I;gW%BNf3dh~dGeqkRK{BKKe^6&jk7g*ZgGrsmo3YF;FdDQ0b z$H4u+w*9)myw~=#7sH|7m&)Uh&9TyD&=Lyte8*}vYkpx}(_G+)JaL;v(be(%Q~tWF zsq)+L*M30OzbOZ=?&o4C|5%$@#oXopNaWpF2i||G-%l zA!+hXxhan?P5#k;sX=(1@x93#ZI5N%zq_n|*Ztr>FBp&iy1Y_)`!(Vkaj;_p?f>5d E0K;C2i~s-t literal 0 HcmV?d00001 diff --git a/assets/img/FSM.a8105ac5.png b/assets/img/FSM.a8105ac5.png new file mode 100644 index 0000000000000000000000000000000000000000..bf522772063fe92d0407b1a78ac8dbbefba03545 GIT binary patch literal 26749 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 literal 0 HcmV?d00001 diff --git a/assets/img/ShiftRegister.c44a0985.svg b/assets/img/ShiftRegister.c44a0985.svg new file mode 100644 index 0000000..a6aa73d --- /dev/null +++ b/assets/img/ShiftRegister.c44a0985.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 2 + 3 + 0 + + + + + + out[3:0] + + in + + + + + + + + + + diff --git a/assets/img/good.png b/assets/img/good.png new file mode 100644 index 0000000000000000000000000000000000000000..773ff54a2fe37bd07d17e0ebe4acf9dc3aeaf408 GIT binary patch literal 22988 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 y5>U78z^nOU{a diff --git a/assets/img/wenhao.png b/assets/img/wenhao.png new file mode 100644 index 0000000000000000000000000000000000000000..df295504c0086c9768e2a75dc1a23ff6579f6d32 GIT binary patch literal 31495 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

    a3 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 literal 0 HcmV?d00001 diff --git a/assets/js/1.8c21c587.js b/assets/js/1.8c21c587.js new file mode 100644 index 0000000..43fa6dd --- /dev/null +++ b/assets/js/1.8c21c587.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1,12,14,19,20,21],{241:function(t,e,n){"use strict";n.d(e,"d",(function(){return s})),n.d(e,"a",(function(){return r})),n.d(e,"i",(function(){return o})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return h})),n.d(e,"e",(function(){return f})),n.d(e,"k",(function(){return p})),n.d(e,"l",(function(){return d})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return k}));n(45);const s=/#.*$/,i=/\.(md|html)$/,r=/\/$/,o=/^[a-z]+:/i;function a(t){return decodeURI(t).replace(s,"").replace(i,"")}function l(t){return o.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function h(t){if(l(t))return t;const e=t.match(s),n=e?e[0]:"",i=a(t);return r.test(i)?t:i+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(s);if(e)return e[0]}(e);if(i&&n!==i)return!1;return a(t.path)===a(e)}function p(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const s=t.charAt(0);if("/"===s)return t;if("?"===s||"#"===s)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const r=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,s,i=1){if("string"==typeof e)return p(n,e,s);if(Array.isArray(e))return Object.assign(p(n,e[0],s),{title:e[1]});{const r=e.children||[];return 0===r.length&&e.path?Object.assign(p(n,e.path,s),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:r.map(e=>t(e,n,s,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function g(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function k(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},242:function(t,e,n){},243:function(t,e,n){"use strict";n.r(e);var s=n(241),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(s.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(s.g)(this.link)||Object(s.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(s.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(s.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},r=n(14),o=Object(r.a)(i,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=o.exports},244:function(t,e,n){"use strict";n.r(e);var s={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(245),n(14)),r=Object(i.a)(s,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=r.exports},245:function(t,e,n){"use strict";n(242)},246:function(t,e,n){},249:function(t,e,n){},253:function(t,e,n){"use strict";n(246)},256:function(t,e,n){"use strict";n.r(e);var s=n(243),i=n(244),r=n(90),o=n.n(r),a={name:"DropdownLink",components:{NavLink:s.default,DropdownTransition:i.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>o()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(253),n(14)),u=Object(l.a)(a,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,s){return e("li",{key:n.link||s,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(s){return e("li",{key:s.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:s},on:{focusout:function(e){t.isLastItemOfArray(s,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},259:function(t,e,n){},260:function(t,e,n){"use strict";n(249)},267:function(t,e,n){"use strict";n.r(e);var s=n(256),i=n(241),r={name:"NavLinks",components:{NavLink:n(243).default,DropdownLink:s.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,s=this.$site.themeConfig.locales||{},i={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(i=>{const r=t[i],o=s[i]&&s[i].label||r.lang;let a;return r.lang===this.$lang?a=e:(a=e.replace(this.$localeConfig.path,i),n.some(t=>t.path===a)||(a=i)),{text:o,link:a}})};return[...this.userNav,i]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(i.j)(t),{items:(t.items||[]).map(i.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;n{let s=i()(e,"title","");return i()(e,"frontmatter.tags")&&(s+=" "+e.frontmatter.tags.join(" ")),n&&(s+=" "+n),o(t,s)};const o=(t,e)=>{const n=t=>t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),s=new RegExp("[^\0-]"),i=t.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t);if(s.test(t))return i.some(t=>e.toLowerCase().indexOf(t)>-1);{const s=t.endsWith(" ");return new RegExp(i.map((t,e)=>i.length!==e+1||s?`(?=.*\\b${n(t)}\\b)`:`(?=.*\\b${n(t)})`).join("")+".+","gi").test(e)}};var a={name:"SearchBox",data:()=>({query:"",focused:!1,focusIndex:0,placeholder:void 0}),computed:{showSuggestions(){return this.focused&&this.suggestions&&this.suggestions.length},suggestions(){const t=this.query.trim().toLowerCase();if(!t)return;const{pages:e}=this.$site,n=this.$site.themeConfig.searchMaxSuggestions||5,s=this.$localePath,i=[];for(let o=0;o=n);o++){const a=e[o];if(this.getPageLocalePath(a)===s&&this.isSearchable(a))if(r(t,a))i.push(a);else if(a.headers)for(let e=0;e=n);e++){const n=a.headers[e];n.title&&r(t,a,n.title)&&i.push(Object.assign({},a,{path:a.path+"#"+n.slug,header:n}))}}return i},alignRight(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},mounted(){this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey)},beforeDestroy(){document.removeEventListener("keydown",this.onHotkey)},methods:{getPageLocalePath(t){for(const e in this.$site.locales||{})if("/"!==e&&0===t.path.indexOf(e))return e;return"/"},isSearchable(t){let e=null;return null===e||(e=Array.isArray(e)?e:new Array(e),e.filter(e=>t.path.match(e)).length>0)},onHotkey(t){t.srcElement===document.body&&["s","/"].includes(t.key)&&(this.$refs.input.focus(),t.preventDefault())},onUp(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown(){this.showSuggestions&&(this.focusIndex "+t._s(n.header.title))]):t._e()])])})),0):t._e()])}),[],!1,null,null,null).exports,c=n(285),h=n(267);function f(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,null)[e]}var p={name:"Navbar",components:{SidebarButton:c.default,NavLinks:h.default,SearchBox:u,AlgoliaSearchBox:{}},data:()=>({linksWrapMaxWidth:null}),computed:{algolia(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}},mounted(){const t=parseInt(f(this.$el,"paddingLeft"))+parseInt(f(this.$el,"paddingRight")),e=()=>{document.documentElement.clientWidth<719?this.linksWrapMaxWidth=null:this.linksWrapMaxWidth=this.$el.offsetWidth-t-(this.$refs.siteName&&this.$refs.siteName.offsetWidth||0)};e(),window.addEventListener("resize",e,!1)}},d=(n(292),Object(l.a)(p,(function(){var t=this,e=t._self._c;return e("header",{staticClass:"navbar"},[e("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),e("RouterLink",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?e("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?e("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),e("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?e("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?e("SearchBox"):t._e(),t._v(" "),e("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null));e.default=d.exports}}]); \ No newline at end of file diff --git a/assets/js/10.306e6bb6.js b/assets/js/10.306e6bb6.js new file mode 100644 index 0000000..6b4e8b4 --- /dev/null +++ b/assets/js/10.306e6bb6.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10,3,12,14,18,19,21],{241:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return r})),n.d(e,"i",(function(){return a})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return h})),n.d(e,"k",(function(){return d})),n.d(e,"l",(function(){return f})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return g}));n(45);const i=/#.*$/,s=/\.(md|html)$/,r=/\/$/,a=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(s,"")}function l(t){return a.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(i),n=e?e[0]:"",s=o(t);return r.test(s)?t:s+".html"+n}function h(t,e){const n=decodeURIComponent(t.hash),s=function(t){const e=t.match(i);if(e)return e[0]}(e);if(s&&n!==s)return!1;return o(t.path)===o(e)}function d(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const s=e.split("/");n&&s[s.length-1]||s.pop();const r=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,s=1){if("string"==typeof e)return d(n,e,i);if(Array.isArray(e))return Object.assign(d(n,e[0],i),{title:e[1]});{const r=e.children||[];return 0===r.length&&e.path?Object.assign(d(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:r.map(e=>t(e,n,i,s+1)),collapsable:!1!==e.collapsable}}}(t,s,n)):[]}return[]}function b(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},242:function(t,e,n){},243:function(t,e,n){"use strict";n.r(e);var i=n(241),s={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},r=n(14),a=Object(r.a)(s,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=a.exports},244:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},s=(n(245),n(14)),r=Object(s.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=r.exports},245:function(t,e,n){"use strict";n(242)},246:function(t,e,n){},247:function(t,e,n){},249:function(t,e,n){},252:function(t,e,n){},253:function(t,e,n){"use strict";n(246)},254:function(t,e,n){"use strict";n(247)},255:function(t,e,n){"use strict";n.r(e);var i=n(268),s=n(257),r=n(241);function a(t,e){if("group"===e.type){const n=e.path&&Object(r.e)(t,e.path),i=e.children.some(e=>"group"===e.type?a(t,e):"page"===e.type&&Object(r.e)(t,e.path));return n||i}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:i.default,SidebarLink:s.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let n=0;n-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(r.e)(this.$route,t.regularPath)}}},l=n(14),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(n,i){return e("li",{key:i},["group"===n.type?e("SidebarGroup",{attrs:{item:n,open:i===t.openGroupIndex,collapsable:n.collapsable||n.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(i)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:n}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},256:function(t,e,n){"use strict";n.r(e);var i=n(243),s=n(244),r=n(90),a=n.n(r),o={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:s.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>a()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(253),n(14)),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},257:function(t,e,n){"use strict";n.r(e);var i=n(241);function s(t,e,n,i,s){const r={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:i,"sidebar-link":!0}};return s>2&&(r.style={"padding-left":s+"rem"}),t("RouterLink",r,n)}function r(t,e,n,a,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(i.e)(a,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[s(t,n+"#"+e.slug,e.title,u,e.level-1),r(t,e.children,n,a,o,l+1)])}))}var a={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:a,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const p=Object(i.e)(a,u.path),h="auto"===u.type?p||u.children.some(t=>Object(i.e)(a,u.basePath+"#"+t.slug)):p,d="external"===u.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,u.path,u.title||u.path):s(t,u.path,u.title||u.path,h),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[d,r(t,u.children,u.basePath,a,f)];if((h||b)&&u.headers&&!i.d.test(u.path)){return[d,r(t,Object(i.c)(u.headers),u.path,a,f)]}return d}},o=(n(254),n(14)),l=Object(o.a)(a,void 0,void 0,!1,null,null,null);e.default=l.exports},260:function(t,e,n){"use strict";n(249)},265:function(t,e,n){"use strict";n(252)},266:function(t,e,n){},267:function(t,e,n){"use strict";n.r(e);var i=n(256),s=n(241),r={name:"NavLinks",components:{NavLink:n(243).default,DropdownLink:i.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,i=this.$site.themeConfig.locales||{},s={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(s=>{const r=t[s],a=i[s]&&i[s].label||r.lang;let o;return r.lang===this.$lang?o=e:(o=e.replace(this.$localeConfig.path,s),n.some(t=>t.path===o)||(o=s)),{text:a,link:o}})};return[...this.userNav,s]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(s.j)(t),{items:(t.items||[]).map(s.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;nfunction t(e,n,r,i=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function g(t){const e=v(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function v(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},248:function(t,e){t.exports=function(t){return null==t}},250:function(t,e,n){},251:function(t,e,n){},261:function(t,e,n){"use strict";n(250)},262:function(t,e,n){var r=n(11),i=n(4),a=n(10);t.exports=function(t){return"string"==typeof t||!i(t)&&a(t)&&"[object String]"==r(t)}},263:function(t,e,n){"use strict";n(251)},264:function(t,e,n){},269:function(t,e,n){"use strict";n.r(e);var r=n(248),i=n.n(r),a=n(241),s={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=i()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:n="",docsBranch:r="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,n,r,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,n,r,i){if(/bitbucket.org/.test(e)){return e.replace(a.a,"")+"/src"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i+`?mode=edit&spa=0&at=${r}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(a.a,"")+"/-/edit"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i}return(a.i.test(e)?e:"https://github.com/"+e).replace(a.a,"")+"/edit"+`/${r}/`+(n?n.replace(a.a,"")+"/":"")+i}}},o=(n(261),n(14)),u=Object(o.a)(s,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=u.exports},270:function(t,e,n){"use strict";n.r(e);n(45);var r=n(241),i=n(262),a=n.n(i),s=n(248),o=n.n(s),u={name:"PageNav",props:["sidebarItems"],computed:{prev(){return l(c.PREV,this)},next(){return l(c.NEXT,this)}}};const c={NEXT:{resolveLink:function(t,e){return p(t,e,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return p(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function l(t,{$themeConfig:e,$page:n,$route:i,$site:s,sidebarItems:u}){const{resolveLink:c,getThemeLinkConfig:l,getPageLinkConfig:p}=t,f=l(e),d=p(n),h=o()(d)?f:d;return!1===h?void 0:a()(h)?Object(r.k)(s.pages,h,i.path):c(n,u)}function p(t,e,n){const r=[];!function t(e,n){for(let r=0,i=e.length;rfunction t(e,n,i,r=1){if("string"==typeof e)return f(n,e,i);if(Array.isArray(e))return Object.assign(f(n,e[0],i),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(f(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function b(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},242:function(t,e,n){},243:function(t,e,n){"use strict";n.r(e);var i=n(241),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=n(14),a=Object(s.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=a.exports},244:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},r=(n(245),n(14)),s=Object(r.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},245:function(t,e,n){"use strict";n(242)},246:function(t,e,n){},249:function(t,e,n){},253:function(t,e,n){"use strict";n(246)},256:function(t,e,n){"use strict";n.r(e);var i=n(243),r=n(244),s=n(90),a=n.n(s),o={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:r.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>a()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(253),n(14)),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports},260:function(t,e,n){"use strict";n(249)},267:function(t,e,n){"use strict";n.r(e);var i=n(256),r=n(241),s={name:"NavLinks",components:{NavLink:n(243).default,DropdownLink:i.default},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,n=this.$router.options.routes,i=this.$site.themeConfig.locales||{},r={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(r=>{const s=t[r],a=i[r]&&i[r].label||s.lang;let o;return s.lang===this.$lang?o=e:(o=e.replace(this.$localeConfig.path,r),n.some(t=>t.path===o)||(o=r)),{text:a,link:o}})};return[...this.userNav,r]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(r.j)(t),{items:(t.items||[]).map(r.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let n=0;n({placeholder:void 0}),watch:{$lang(e){this.update(this.options,e)},options(e){this.update(e,this.$lang)}},mounted(){this.initialize(this.options,this.$lang),this.placeholder=this.$site.themeConfig.searchPlaceholder||""},methods:{initialize(e,t){Promise.all([Promise.all([a.e(0),a.e(9)]).then(a.t.bind(null,302,7)),Promise.all([a.e(0),a.e(9)]).then(a.t.bind(null,303,7))]).then(([a])=>{a=a.default;const{algoliaOptions:i={}}=e;a(Object.assign({},e,{inputSelector:"#algolia-search-input",algoliaOptions:{...i,facetFilters:["lang:"+t].concat(i.facetFilters||[])},handleSelected:(e,t,a)=>{const{pathname:i,hash:n}=new URL(a.url),r=i.replace(this.$site.base,"/"),s=decodeURIComponent(n);this.$router.push(`${r}${s}`)}}))})},update(e,t){this.$el.innerHTML='',this.initialize(e,t)}}},n=(a(290),a(14)),r=Object(n.a)(i,(function(){var e=this._self._c;return e("form",{staticClass:"algolia-search-wrapper search-box",attrs:{id:"search-form",role:"search"}},[e("input",{staticClass:"search-query",attrs:{id:"algolia-search-input",placeholder:this.placeholder}})])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/14.68eb8b29.js b/assets/js/14.68eb8b29.js new file mode 100644 index 0000000..85f5567 --- /dev/null +++ b/assets/js/14.68eb8b29.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14,19,21],{241:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return s})),n.d(e,"i",(function(){return o})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return f})),n.d(e,"k",(function(){return h})),n.d(e,"l",(function(){return d})),n.d(e,"c",(function(){return b})),n.d(e,"j",(function(){return g}));n(45);const i=/#.*$/,r=/\.(md|html)$/,s=/\/$/,o=/^[a-z]+:/i;function a(t){return decodeURI(t).replace(i,"").replace(r,"")}function l(t){return o.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(i),n=e?e[0]:"",r=a(t);return s.test(r)?t:r+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),r=function(t){const e=t.match(i);if(e)return e[0]}(e);if(r&&n!==r)return!1;return a(t.path)===a(e)}function h(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const r=e.split("/");n&&r[r.length-1]||r.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,r=1){if("string"==typeof e)return h(n,e,i);if(Array.isArray(e))return Object.assign(h(n,e[0],i),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(h(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function b(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},242:function(t,e,n){},243:function(t,e,n){"use strict";n.r(e);var i=n(241),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=n(14),o=Object(s.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=o.exports},244:function(t,e,n){"use strict";n.r(e);var i={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},r=(n(245),n(14)),s=Object(r.a)(i,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},245:function(t,e,n){"use strict";n(242)},246:function(t,e,n){},253:function(t,e,n){"use strict";n(246)},256:function(t,e,n){"use strict";n.r(e);var i=n(243),r=n(244),s=n(90),o=n.n(s),a={name:"DropdownLink",components:{NavLink:i.default,DropdownTransition:r.default},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,e)=>o()(e)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},l=(n(253),n(14)),u=Object(l.a)(a,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(e){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,i){return e("li",{key:n.link||i,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(i){return e("li",{key:i.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:i},on:{focusout:function(e){t.isLastItemOfArray(i,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null);e.default=u.exports}}]); \ No newline at end of file diff --git a/assets/js/15.f2b6f50f.js b/assets/js/15.f2b6f50f.js new file mode 100644 index 0000000..367d655 --- /dev/null +++ b/assets/js/15.f2b6f50f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{241:function(t,n,e){"use strict";e.d(n,"d",(function(){return r})),e.d(n,"a",(function(){return o})),e.d(n,"i",(function(){return a})),e.d(n,"f",(function(){return u})),e.d(n,"g",(function(){return c})),e.d(n,"h",(function(){return p})),e.d(n,"b",(function(){return l})),e.d(n,"e",(function(){return f})),e.d(n,"k",(function(){return h})),e.d(n,"l",(function(){return d})),e.d(n,"c",(function(){return v})),e.d(n,"j",(function(){return b}));e(45);const r=/#.*$/,i=/\.(md|html)$/,o=/\/$/,a=/^[a-z]+:/i;function s(t){return decodeURI(t).replace(r,"").replace(i,"")}function u(t){return a.test(t)}function c(t){return/^mailto:/.test(t)}function p(t){return/^tel:/.test(t)}function l(t){if(u(t))return t;const n=t.match(r),e=n?n[0]:"",i=s(t);return o.test(i)?t:i+".html"+e}function f(t,n){const e=decodeURIComponent(t.hash),i=function(t){const n=t.match(r);if(n)return n[0]}(n);if(i&&e!==i)return!1;return s(t.path)===s(n)}function h(t,n,e){if(u(n))return{type:"external",path:n};e&&(n=function(t,n,e){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;const i=n.split("/");e&&i[i.length-1]||i.pop();const o=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(n,e,r,i=1){if("string"==typeof n)return h(e,n,r);if(Array.isArray(n))return Object.assign(h(e,n[0],r),{title:n[1]});{const o=n.children||[];return 0===o.length&&n.path?Object.assign(h(e,n.path,r),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:o.map(n=>t(n,e,r,i+1)),collapsable:!1!==n.collapsable}}}(t,i,e)):[]}return[]}function g(t){const n=v(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:t.path,path:t.path+"#"+n.slug,children:n.children||[]}))}]}function v(t){let n;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?n=t:n&&(n.children||(n.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},248:function(t,n){t.exports=function(t){return null==t}},251:function(t,n,e){},262:function(t,n,e){var r=e(11),i=e(4),o=e(10);t.exports=function(t){return"string"==typeof t||!i(t)&&o(t)&&"[object String]"==r(t)}},263:function(t,n,e){"use strict";e(251)},270:function(t,n,e){"use strict";e.r(n);e(45);var r=e(241),i=e(262),o=e.n(i),a=e(248),s=e.n(a),u={name:"PageNav",props:["sidebarItems"],computed:{prev(){return p(c.PREV,this)},next(){return p(c.NEXT,this)}}};const c={NEXT:{resolveLink:function(t,n){return l(t,n,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,n){return l(t,n,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function p(t,{$themeConfig:n,$page:e,$route:i,$site:a,sidebarItems:u}){const{resolveLink:c,getThemeLinkConfig:p,getPageLinkConfig:l}=t,f=p(n),h=l(e),d=s()(h)?f:h;return!1===d?void 0:o()(d)?Object(r.k)(a.pages,d,i.path):c(e,u)}function l(t,n,e){const r=[];!function t(n,e){for(let r=0,i=n.length;rfunction t(e,n,i,r=1){if("string"==typeof e)return d(n,e,i);if(Array.isArray(e))return Object.assign(d(n,e[0],i),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function m(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},243:function(t,e,n){"use strict";n.r(e);var i=n(241),r={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(i.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(i.g)(this.link)||Object(i.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(i.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(i.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},a=n(14),s=Object(a.a)(r,(function(){var t=this,e=t._self._c;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null);e.default=s.exports},258:function(t,e,n){},271:function(t,e,n){"use strict";n(258)},282:function(t,e,n){"use strict";n.r(e);var i={name:"Home",components:{NavLink:n(243).default},computed:{data(){return this.$page.frontmatter},actionLink(){return{link:this.data.actionLink,text:this.data.actionText}}}},r=(n(271),n(14)),a=Object(r.a)(i,(function(){var t=this,e=t._self._c;return e("main",{staticClass:"home",attrs:{"aria-labelledby":null!==t.data.heroText?"main-title":null}},[e("header",{staticClass:"hero"},[t.data.heroImage?e("img",{attrs:{src:t.$withBase(t.data.heroImage),alt:t.data.heroAlt||"hero"}}):t._e(),t._v(" "),null!==t.data.heroText?e("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.data.heroText||t.$title||"Hello")+"\n ")]):t._e(),t._v(" "),null!==t.data.tagline?e("p",{staticClass:"description"},[t._v("\n "+t._s(t.data.tagline||t.$description||"Welcome to your VuePress site")+"\n ")]):t._e(),t._v(" "),t.data.actionText&&t.data.actionLink?e("p",{staticClass:"action"},[e("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.data.features&&t.data.features.length?e("div",{staticClass:"features"},t._l(t.data.features,(function(n,i){return e("div",{key:i,staticClass:"feature"},[e("h2",[t._v(t._s(n.title))]),t._v(" "),e("p",[t._v(t._s(n.details))])])})),0):t._e(),t._v(" "),e("Content",{staticClass:"theme-default-content custom"}),t._v(" "),t.data.footer?e("div",{staticClass:"footer"},[t._v("\n "+t._s(t.data.footer)+"\n ")]):e("Content",{staticClass:"footer",attrs:{"slot-key":"footer"}})],1)}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/17.73cfca4f.js b/assets/js/17.73cfca4f.js new file mode 100644 index 0000000..8f2b8d1 --- /dev/null +++ b/assets/js/17.73cfca4f.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{241:function(t,e,n){"use strict";n.d(e,"d",(function(){return i})),n.d(e,"a",(function(){return a})),n.d(e,"i",(function(){return s})),n.d(e,"f",(function(){return c})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return l})),n.d(e,"b",(function(){return d})),n.d(e,"e",(function(){return p})),n.d(e,"k",(function(){return f})),n.d(e,"l",(function(){return h})),n.d(e,"c",(function(){return m})),n.d(e,"j",(function(){return b}));n(45);const i=/#.*$/,r=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(i,"").replace(r,"")}function c(t){return s.test(t)}function u(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function d(t){if(c(t))return t;const e=t.match(i),n=e?e[0]:"",r=o(t);return a.test(r)?t:r+".html"+n}function p(t,e){const n=decodeURIComponent(t.hash),r=function(t){const e=t.match(i);if(e)return e[0]}(e);if(r&&n!==r)return!1;return o(t.path)===o(e)}function f(t,e,n){if(c(e))return{type:"external",path:e};n&&(e=function(t,e,n){const i=t.charAt(0);if("/"===i)return t;if("?"===i||"#"===i)return e+t;const r=e.split("/");n&&r[r.length-1]||r.pop();const a=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,i,r=1){if("string"==typeof e)return f(n,e,i);if(Array.isArray(e))return Object.assign(f(n,e[0],i),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(f(n,e.path,i),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,i,r+1)),collapsable:!1!==e.collapsable}}}(t,r,n)):[]}return[]}function g(t){const e=m(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function m(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function b(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},248:function(t,e){t.exports=function(t){return null==t}},250:function(t,e,n){},261:function(t,e,n){"use strict";n(250)},269:function(t,e,n){"use strict";n.r(e);var i=n(248),r=n.n(i),a=n(241),s={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=r()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:n="",docsBranch:i="master",docsRepo:a=e}=this.$site.themeConfig;return t&&a&&this.$page.relativePath?this.createEditLink(e,a,n,i,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,n,i,r){if(/bitbucket.org/.test(e)){return e.replace(a.a,"")+"/src"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r+`?mode=edit&spa=0&at=${i}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(a.a,"")+"/-/edit"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r}return(a.i.test(e)?e:"https://github.com/"+e).replace(a.a,"")+"/edit"+`/${i}/`+(n?n.replace(a.a,"")+"/":"")+r}}},o=(n(261),n(14)),c=Object(o.a)(s,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/18.fb229398.js b/assets/js/18.fb229398.js new file mode 100644 index 0000000..ac911a2 --- /dev/null +++ b/assets/js/18.fb229398.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{241:function(t,e,n){"use strict";n.d(e,"d",(function(){return r})),n.d(e,"a",(function(){return a})),n.d(e,"i",(function(){return s})),n.d(e,"f",(function(){return o})),n.d(e,"g",(function(){return c})),n.d(e,"h",(function(){return l})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return f})),n.d(e,"k",(function(){return d})),n.d(e,"l",(function(){return h})),n.d(e,"c",(function(){return g})),n.d(e,"j",(function(){return m}));n(45);const r=/#.*$/,i=/\.(md|html)$/,a=/\/$/,s=/^[a-z]+:/i;function u(t){return decodeURI(t).replace(r,"").replace(i,"")}function o(t){return s.test(t)}function c(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function p(t){if(o(t))return t;const e=t.match(r),n=e?e[0]:"",i=u(t);return a.test(i)?t:i+".html"+n}function f(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(r);if(e)return e[0]}(e);if(i&&n!==i)return!1;return u(t.path)===u(e)}function d(t,e,n){if(o(e))return{type:"external",path:e};n&&(e=function(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const a=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,r,i=1){if("string"==typeof e)return d(n,e,r);if(Array.isArray(e))return Object.assign(d(n,e[0],r),{title:e[1]});{const a=e.children||[];return 0===a.length&&e.path?Object.assign(d(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:a.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function b(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},247:function(t,e,n){},254:function(t,e,n){"use strict";n(247)},257:function(t,e,n){"use strict";n.r(e);var r=n(241);function i(t,e,n,r,i){const a={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(a.style={"padding-left":i+"rem"}),t("RouterLink",a,n)}function a(t,e,n,s,u,o=1){return!e||o>u?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const c=Object(r.e)(s,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[i(t,n+"#"+e.slug,e.title,c,e.level-1),a(t,e.children,n,s,u,o+1)])}))}var s={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:s,$themeConfig:u,$themeLocaleConfig:o},props:{item:c,sidebarDepth:l}}){const p=Object(r.e)(s,c.path),f="auto"===c.type?p||c.children.some(t=>Object(r.e)(s,c.basePath+"#"+t.slug)):p,d="external"===c.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,c.path,c.title||c.path):i(t,c.path,c.title||c.path,f),h=[e.frontmatter.sidebarDepth,l,o.sidebarDepth,u.sidebarDepth,1].find(t=>void 0!==t),b=o.displayAllHeaders||u.displayAllHeaders;if("auto"===c.type)return[d,a(t,c.children,c.basePath,s,h)];if((f||b)&&c.headers&&!r.d.test(c.path)){return[d,a(t,Object(r.c)(c.headers),c.path,s,h)]}return d}},u=(n(254),n(14)),o=Object(u.a)(s,void 0,void 0,!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/19.9f389a20.js b/assets/js/19.9f389a20.js new file mode 100644 index 0000000..fa20f53 --- /dev/null +++ b/assets/js/19.9f389a20.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{242:function(t,e,n){},244:function(t,e,n){"use strict";n.r(e);var s={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(245),n(14)),o=Object(i.a)(s,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=o.exports},245:function(t,e,n){"use strict";n(242)}}]); \ No newline at end of file diff --git a/assets/js/2.2363d9f4.js b/assets/js/2.2363d9f4.js new file mode 100644 index 0000000..98cf3da --- /dev/null +++ b/assets/js/2.2363d9f4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{247:function(t,e,a){},248:function(t,e){t.exports=function(t){return null==t}},250:function(t,e,a){},251:function(t,e,a){},252:function(t,e,a){},254:function(t,e,a){"use strict";a(247)},255:function(t,e,a){"use strict";a.r(e);var n=a(268),s=a(257),i=a(241);function r(t,e){if("group"===e.type){const a=e.path&&Object(i.e)(t,e.path),n=e.children.some(e=>"group"===e.type?r(t,e):"page"===e.type&&Object(i.e)(t,e.path));return a||n}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:n.default,SidebarLink:s.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let a=0;a-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(i.e)(this.$route,t.regularPath)}}},l=a(14),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(a,n){return e("li",{key:n},["group"===a.type?e("SidebarGroup",{attrs:{item:a,open:n===t.openGroupIndex,collapsable:a.collapsable||a.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(n)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:a}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},257:function(t,e,a){"use strict";a.r(e);var n=a(241);function s(t,e,a,n,s){const i={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:n,"sidebar-link":!0}};return s>2&&(i.style={"padding-left":s+"rem"}),t("RouterLink",i,a)}function i(t,e,a,r,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(n.e)(r,a+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[s(t,a+"#"+e.slug,e.title,u,e.level-1),i(t,e.children,a,r,o,l+1)])}))}var r={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:a,$route:r,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const p=Object(n.e)(r,u.path),d="auto"===u.type?p||u.children.some(t=>Object(n.e)(r,u.basePath+"#"+t.slug)):p,h="external"===u.type?function(t,e,a){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[a,t("OutboundLink")])}(t,u.path,u.title||u.path):s(t,u.path,u.title||u.path,d),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[h,i(t,u.children,u.basePath,r,f)];if((d||b)&&u.headers&&!n.d.test(u.path)){return[h,i(t,Object(n.c)(u.headers),u.path,r,f)]}return h}},o=(a(254),a(14)),l=Object(o.a)(r,void 0,void 0,!1,null,null,null);e.default=l.exports},258:function(t,e,a){},261:function(t,e,a){"use strict";a(250)},262:function(t,e,a){var n=a(11),s=a(4),i=a(10);t.exports=function(t){return"string"==typeof t||!s(t)&&i(t)&&"[object String]"==n(t)}},263:function(t,e,a){"use strict";a(251)},264:function(t,e,a){},265:function(t,e,a){"use strict";a(252)},266:function(t,e,a){},268:function(t,e,a){"use strict";a.r(e);var n=a(241),s={name:"SidebarGroup",components:{DropdownTransition:a(244).default},props:["item","open","collapsable","depth"],beforeCreate(){this.$options.components.SidebarLinks=a(255).default},methods:{isActive:n.e}},i=(a(265),a(14)),r=Object(i.a)(s,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null);e.default=r.exports},269:function(t,e,a){"use strict";a.r(e);var n=a(248),s=a.n(n),i=a(241),r={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=s()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:a="",docsBranch:n="master",docsRepo:i=e}=this.$site.themeConfig;return t&&i&&this.$page.relativePath?this.createEditLink(e,i,a,n,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,a,n,s){if(/bitbucket.org/.test(e)){return e.replace(i.a,"")+"/src"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s+`?mode=edit&spa=0&at=${n}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(i.a,"")+"/-/edit"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s}return(i.i.test(e)?e:"https://github.com/"+e).replace(i.a,"")+"/edit"+`/${n}/`+(a?a.replace(i.a,"")+"/":"")+s}}},o=(a(261),a(14)),l=Object(o.a)(r,(function(){var t=this,e=t._self._c;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null);e.default=l.exports},270:function(t,e,a){"use strict";a.r(e);a(45);var n=a(241),s=a(262),i=a.n(s),r=a(248),o=a.n(r),l={name:"PageNav",props:["sidebarItems"],computed:{prev(){return c(u.PREV,this)},next(){return c(u.NEXT,this)}}};const u={NEXT:{resolveLink:function(t,e){return p(t,e,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return p(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function c(t,{$themeConfig:e,$page:a,$route:s,$site:r,sidebarItems:l}){const{resolveLink:u,getThemeLinkConfig:c,getPageLinkConfig:p}=t,d=c(e),h=p(a),f=o()(h)?d:h;return!1===f?void 0:i()(f)?Object(n.k)(r.pages,f,s.path):u(a,l)}function p(t,e,a){const n=[];!function t(e,a){for(let n=0,s=e.length;n({isSidebarOpen:!1}),computed:{shouldShowNavbar(){const{themeConfig:t}=this.$site,{frontmatter:e}=this.$page;return!1!==e.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar(){const{frontmatter:t}=this.$page;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems(){return Object(o.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses(){const t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted(){this.$router.afterEach(()=>{this.isSidebarOpen=!1})},methods:{toggleSidebar(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd(t){const e=t.changedTouches[0].clientX-this.touchStart.x,a=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(a)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},u=a(14),c=Object(u.a)(l,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?e("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),e("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),e("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?e("Home"):e("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);e.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/20.39d588d5.js b/assets/js/20.39d588d5.js new file mode 100644 index 0000000..135ea0b --- /dev/null +++ b/assets/js/20.39d588d5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{259:function(t,c,n){},272:function(t,c,n){"use strict";n(259)},285:function(t,c,n){"use strict";n.r(c);n(272);var i=n(14),s=Object(i.a)({},(function(){var t=this,c=t._self._c;return c("div",{staticClass:"sidebar-button",on:{click:function(c){return t.$emit("toggle-sidebar")}}},[c("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[c("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null);c.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/21.7572c603.js b/assets/js/21.7572c603.js new file mode 100644 index 0000000..6bbaca3 --- /dev/null +++ b/assets/js/21.7572c603.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{241:function(t,n,e){"use strict";e.d(n,"d",(function(){return r})),e.d(n,"a",(function(){return s})),e.d(n,"i",(function(){return u})),e.d(n,"f",(function(){return a})),e.d(n,"g",(function(){return l})),e.d(n,"h",(function(){return c})),e.d(n,"b",(function(){return f})),e.d(n,"e",(function(){return h})),e.d(n,"k",(function(){return p})),e.d(n,"l",(function(){return d})),e.d(n,"c",(function(){return b})),e.d(n,"j",(function(){return m}));e(45);const r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,u=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function a(t){return u.test(t)}function l(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function f(t){if(a(t))return t;const n=t.match(r),e=n?n[0]:"",i=o(t);return s.test(i)?t:i+".html"+e}function h(t,n){const e=decodeURIComponent(t.hash),i=function(t){const n=t.match(r);if(n)return n[0]}(n);if(i&&e!==i)return!1;return o(t.path)===o(n)}function p(t,n,e){if(a(n))return{type:"external",path:n};e&&(n=function(t,n,e){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;const i=n.split("/");e&&i[i.length-1]||i.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(n,e,r,i=1){if("string"==typeof n)return p(e,n,r);if(Array.isArray(n))return Object.assign(p(e,n[0],r),{title:n[1]});{const s=n.children||[];return 0===s.length&&n.path?Object.assign(p(e,n.path,r),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:s.map(n=>t(n,e,r,i+1)),collapsable:!1!==n.collapsable}}}(t,i,e)):[]}return[]}function g(t){const n=b(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:t.path,path:t.path+"#"+n.slug,children:n.children||[]}))}]}function b(t){let n;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?n=t:n&&(n.children||(n.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},243:function(t,n,e){"use strict";e.r(n);var r=e(241),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(r.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(r.g)(this.link)||Object(r.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(r.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(r.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},s=e(14),u=Object(s.a)(i,(function(){var t=this,n=t._self._c;return t.isInternal?n("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(n){return t.focusoutAction.apply(null,arguments)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?n("OutboundLink"):t._e()],1)}),[],!1,null,null,null);n.default=u.exports}}]); \ No newline at end of file diff --git a/assets/js/22.cf5663a8.js b/assets/js/22.cf5663a8.js new file mode 100644 index 0000000..db91f97 --- /dev/null +++ b/assets/js/22.cf5663a8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{296:function(t,a,s){t.exports=s.p+"assets/img/Arbiter.0f715328.png"},321:function(t,a,s){"use strict";s.r(a);var n=s(14),p=Object(n.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"_2024-02-24-2-2-combinational-logic"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-24-2-2-combinational-logic"}},[t._v("#")]),t._v(" 2024.02.24-2.2 Combinational Logic")]),t._v(" "),a("h2",{attrs:{id:"common-operators"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#common-operators"}},[t._v("#")]),t._v(" Common Operators")]),t._v(" "),a("div",{staticClass:"language-scala extra-class"},[a("pre",{pre:!0,attrs:{class:"language-scala"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MyModule "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Scala expression")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" two "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n println"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("two"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Chisel expression")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" utwo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U\n println"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("utwo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// incorrect")]),t._v("\n\t"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" twotwo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n \n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("div",{staticClass:"language-scala extra-class"},[a("pre",{pre:!0,attrs:{class:"language-scala"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MyOperators "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out_add "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out_sub "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out_mul "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_add "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("U\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_sub "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_mul "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("U "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 没有参数时可以省略小括号")]),t._v("\ntest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" MyOperators"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("c "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_add"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_sub"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_mul"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"mux-and-concatenation"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mux-and-concatenation"}},[t._v("#")]),t._v(" Mux and Concatenation")]),t._v(" "),a("div",{staticClass:"language-scala extra-class"},[a("pre",{pre:!0,attrs:{class:"language-scala"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MyOperatorsTwo "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out_mux "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out_cat "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" s "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_mux "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Mux"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// should return 3.U, since s is true")]),t._v("\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_cat "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Cat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// concatenates 2 (b10) with 1 (b1) to give 5 (101)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nprintln"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getVerilog"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" MyOperatorsTwo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ntest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" MyOperatorsTwo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_mux"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out_cat"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("The "),a("code",[t._v("Mux")]),t._v(" operates like a traditional ternary operator, with the order (select, value if true, value if false)")]),t._v(" "),a("p",[t._v("The "),a("code",[t._v("Cat")]),t._v(" ordering is MSB then LSB (where B refers to bit or bits), and only takes two arguments.")]),t._v(" "),a("h2",{attrs:{id:"mac-multiply-accumulate-function"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#mac-multiply-accumulate-function"}},[t._v("#")]),t._v(" MAC: multiply accumulate function")]),t._v(" "),a("div",{staticClass:"language-scala extra-class"},[a("pre",{pre:!0,attrs:{class:"language-scala"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MAC "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_b "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_c "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_b"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_c\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ntest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" MAC"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" cycles "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("scala"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("Random\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until cycles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Random"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_b "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Random"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_c "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Random"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in_a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_b"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in_b"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in_c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" in_b "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" in_c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("h2",{attrs:{id:"arbiter"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#arbiter"}},[t._v("#")]),t._v(" Arbiter")]),t._v(" "),a("p",[t._v("The following circuit arbitrates data coming from a FIFO into two parallel processing units. The FIFO and processing elements (PEs) communicate with ready-valid interfaces. Construct the arbiter to send data to whichever PE is ready to receive data, prioritizing PE0 if both are ready to receive data. Remember that the arbiter should tell the FIFO that it's ready to receive data when at least one of the PEs can receive data. Also, wait for a PE to assert that it's ready before asserting that the data are valid. You will likely need binary operators to complete this exercise.")]),t._v(" "),a("p",[a("img",{attrs:{src:s(296),alt:"Untitled"}})]),t._v(" "),a("div",{staticClass:"language-scala extra-class"},[a("pre",{pre:!0,attrs:{class:"language-scala"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" Arbiter "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// FIFO")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" fifo_valid "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" fifo_ready "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" fifo_data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// PE0")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" pe0_valid "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" pe0_ready "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" pe0_data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// PE1")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" pe1_valid "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" pe1_ready "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" pe1_data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fifo_ready "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe0_ready "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe1_ready\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe0_valid "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fifo_valid "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe0_ready\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe1_valid "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fifo_valid "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe0_ready "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe1_ready\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe0_data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fifo_data\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe1_data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fifo_data\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ntest"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Arbiter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("scala"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("Random\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Random"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("65536")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fifo_data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fifo_valid"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe0_ready"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe1_ready"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fifo_ready"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe0_valid"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe1_valid"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe0_data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pe1_data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nprintln"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SUCCESS!!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("数据线(如**"),a("code",[t._v("io.pe0_data")]),t._v("** 和 "),a("strong",[a("code",[t._v("io.pe1_data")])]),t._v(")通常会持续地带有它们可能需要使用的数据信号(本例中为**"),a("code",[t._v("io.fifo_data")]),a("strong",[t._v(")。但是,这些数据是否被“接收”或“采用”通常由")]),a("code",[t._v("valid")]),t._v("**信号来控制。")]),t._v(" "),a("p",[t._v("测试代码设计用来验证**"),a("code",[t._v("Arbiter")]),a("strong",[t._v("模块的行为。测试通过随机生成一个数据,然后使用不同的组合的")]),a("code",[t._v("fifo_valid")]),a("strong",[t._v(",")]),a("code",[t._v("pe0_ready")]),a("strong",[t._v("和")]),a("code",[t._v("pe1_ready")]),t._v("**信号来模拟不同的工作情况。")]),t._v(" "),a("ul",[a("li",[t._v("**"),a("code",[t._v("c.io.fifo_data.poke(data.U)")]),t._v("**模拟从FIFO发送的数据。")]),t._v(" "),a("li",[t._v("循环**"),a("code",[t._v("for (i <- 0 until 8)")]),t._v("**遍历8种不同的信号组合状态。")]),t._v(" "),a("li",[a("strong",[a("code",[t._v("c.io.fifo_valid.poke")])]),t._v(",**"),a("code",[t._v("c.io.pe0_ready.poke")]),a("strong",[t._v("和")]),a("code",[t._v("c.io.pe1_ready.poke")]),a("strong",[t._v("根据")]),a("code",[t._v("i")]),t._v("**的不同值模拟不同的信号状态,使用位操作来确定每个信号是否应该被激活。")]),t._v(" "),a("li",[a("strong",[a("code",[t._v("c.io.fifo_ready.expect")])]),t._v(",**"),a("code",[t._v("c.io.pe0_valid.expect")]),a("strong",[t._v("和")]),a("code",[t._v("c.io.pe1_valid.expect")]),t._v("**是对仲裁器预期行为的断言检查。")]),t._v(" "),a("li",[t._v("如果**"),a("code",[t._v("i")]),a("strong",[t._v("的值表示PE0或PE1应该接收数据(如")]),a("code",[t._v("i == 3 || i == 7")]),a("strong",[t._v("是PE0,")]),a("code",[t._v("i == 5")]),a("strong",[t._v("是PE1),则使用")]),a("code",[t._v("expect")]),a("strong",[t._v("断言来检查")]),a("code",[t._v("io.pe0_data")]),a("strong",[t._v("或")]),a("code",[t._v("io.pe1_data")]),t._v("**与FIFO的数据相同。")])]),t._v(" "),a("h2",{attrs:{id:"parameterized-adder"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#parameterized-adder"}},[t._v("#")]),t._v(" Parameterized Adder")]),t._v(" "),a("div",{staticClass:"language-scala extra-class"},[a("pre",{pre:!0,attrs:{class:"language-scala"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" ParameterizedAdder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("saturate"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_b "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" sum "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_b\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("saturate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Mux"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sum"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("sum"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sum\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("saturate "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" Seq"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n test"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ParameterizedAdder"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("saturate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 100 random tests")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" cycles "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("scala"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("Random\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("scala"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("math"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("min")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until cycles"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Random"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_b "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Random"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextInt"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in_a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_b"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in_b"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("saturate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("min"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" in_b"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in_a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" in_b"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ensure we test saturation vs. truncation")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_a"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_b"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("saturate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("14.")]),t._v("U"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nprintln"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SUCCESS!!"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("在Chisel中,"),a("strong",[a("code",[t._v("+&")]),a("strong",[t._v("是一个用于加法的运算符,它会考虑输入的进位,得到一个比最大输入位宽更宽的结果。如果输入是4位")]),a("code",[t._v("UInt")])]),t._v(",标准加法结果**"),a("code",[t._v("io.in_a + io.in_b")]),a("strong",[t._v("会是4位,可能会截断超出的位。而")]),a("code",[t._v("+&")]),a("strong",[t._v("加法会产生一个5位的结果,这可以用于在必要时实现饱和加法逻辑。连接一个4位的")]),a("code",[t._v("UInt")]),a("strong",[t._v("线到一个5位的")]),a("code",[t._v("UInt")]),t._v("**线(一个4.W的量等于5.W的量),默认会截断最高位(MSB)。这样,你可以用这个方法来轻松实现非饱和加法器,只保留5位和的低4位。")])])}),[],!1,null,null,null);a.default=p.exports}}]); \ No newline at end of file diff --git a/assets/js/23.517330f8.js b/assets/js/23.517330f8.js new file mode 100644 index 0000000..fd111b8 --- /dev/null +++ b/assets/js/23.517330f8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{297:function(t,s,a){t.exports=a.p+"assets/img/FSM.a8105ac5.png"},322:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-02-25-2-3-control-flow"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-25-2-3-control-flow"}},[t._v("#")]),t._v(" 2024.02.25-2.3 Control Flow")]),t._v(" "),s("h2",{attrs:{id:"last-connect-semantics"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#last-connect-semantics"}},[t._v("#")]),t._v(" Last Connect Semantics")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" LastConnect "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("U\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("U\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Test LastConnect")]),t._v("\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" LastConnect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("当有多个值被赋值给一个量时,最后的那个生效")]),t._v(" "),s("h2",{attrs:{id:"when-elsewhen-and-otherwise"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#when-elsewhen-and-otherwise"}},[t._v("#")]),t._v(" "),s("code",[t._v("when")]),t._v(", "),s("code",[t._v("elsewhen")]),t._v(", and "),s("code",[t._v("otherwise")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("someBooleanCondition"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// things to do when true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elsewhen"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("someOtherBooleanCondition"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// things to do on this condition")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// things to do if none of th boolean conditions are true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("strong",[s("code",[t._v("when")]),s("strong",[t._v("是一种特殊的构造,它用于硬件生成。它类似于软件编程中的")]),s("code",[t._v("if")]),s("strong",[t._v("语句,但是在硬件描述中,")]),s("code",[t._v("when")]),s("strong",[t._v("会生成实际的硬件逻辑,如多路复用器。而标准的")]),s("code",[t._v("if")]),s("strong",[t._v("语句通常用于生成时(编译时)的控制流,并不直接生成硬件。")]),s("code",[t._v("if")]),s("strong",[t._v("语句在Scala(因此在Chisel的生成时)可以有返回值,可以用于赋值或者作为表达式的一部分。相比之下,")]),s("code",[t._v("when")]),s("strong",[t._v("是一种专门为硬件设计提供的控制结构,用于生成条件硬件逻辑,如多路复用器或条件赋值,但它不返回值。因此,当你需要根据输入信号在运行时动态地选择硬件行为时,你会使用")]),s("code",[t._v("when")])]),t._v("。而当你在编译时根据某些条件生成不同的硬件模块时,你会使用**"),s("code",[t._v("if")]),t._v("**。")]),t._v(" "),s("p",[t._v("在Scala中,**"),s("code",[t._v("==")]),s("strong",[t._v("用于基本类型和对象的相等性比较,而在Chisel中(一个建立在Scala之上的硬件构建语言),")]),s("code",[t._v("===")]),s("strong",[t._v("用于硬件信号之间的相等性比较。这是因为Chisel需要区分硬件操作和Scala的软件操作,")]),s("code",[t._v("===")]),s("strong",[t._v("在Chisel中被定义为生成硬件电路中的等于比较逻辑。而在Scala的")]),s("code",[t._v("if")]),s("strong",[t._v("语句中,")]),s("code",[t._v("==")]),t._v("**仍然用于比较两个值是否相等。这种区分确保了代码的清晰性,以及硬件设计中逻辑正确性的维护。因此,在"),s("code",[t._v("when")]),t._v("中使用"),s("code",[t._v("===")]),t._v("来生成判断相等的硬件电路")]),t._v(" "),s("h2",{attrs:{id:"the-wire-construct"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#the-wire-construct"}},[t._v("#")]),t._v(" The "),s("code",[t._v("Wire")]),t._v(" Construct")]),t._v(" "),s("p",[s("strong",[s("code",[t._v("Wire")]),s("strong",[t._v("是一种基本的硬件构造类型,用于创建一个可以在模块内部读取和写入的信号。它主要用于表示组合逻辑或暂存数据,允许在硬件描述中定义中间变量或内部连接。使用")]),s("code",[t._v("Wire")]),s("strong",[t._v("时,需要指定信号的数据类型,如")]),s("code",[t._v("UInt")]),s("strong",[t._v("或")]),s("code",[t._v("SInt")]),s("strong",[t._v("等。")]),s("code",[t._v("Wire")]),s("strong",[t._v("类型的变量在定义时不持有初始值,需要在逻辑中显式赋值。在使用过程中,可以根据需要多次对其赋值,但在每个时钟周期结束时,")]),s("code",[t._v("Wire")]),s("strong",[t._v("仅保留最后一次赋值的结果。")]),s("code",[t._v("val myWire = Wire(UInt(32.W))")])])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("permutations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foreach "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" i0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" i1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" i2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" i3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" Nil "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Sorting ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i0")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i1")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i2")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i3")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("permutations"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foreach "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" i0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" i1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" i2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" _ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" Nil "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Sorting ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i0")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i1")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(" ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i2")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("使用Scala的集合和模式匹配功能来遍历**"),s("code",[t._v("List(1, 2, 3, 4)")]),s("strong",[t._v("的所有排列组合。")]),s("code",[t._v("List(1, 2, 3, 4).permutations")]),s("strong",[t._v("生成一个包含所有可能排列的列表的迭代器。")]),s("code",[t._v("foreach")]),t._v("**循环遍历这些排列。")]),t._v(" "),s("p",[t._v("在**"),s("code",[t._v("foreach")]),s("strong",[t._v("的代码块中,")]),s("code",[t._v("case i0 :: i1 :: i2 :: i3 :: Nil =>")]),s("strong",[t._v("是一个模式匹配表达式,用于解构每个排列列表。这个表达式匹配一个包含四个元素的列表,将这四个元素分别绑定到变量")]),s("code",[t._v("i0")]),s("strong",[t._v("、")]),s("code",[t._v("i1")]),s("strong",[t._v("、")]),s("code",[t._v("i2")]),s("strong",[t._v("、")]),s("code",[t._v("i3")]),s("strong",[t._v("。")]),s("code",[t._v("Nil")]),t._v("**在这里表示列表的末尾,确保列表只有这四个元素。这种方式允许直接访问每个排列中的元素,然后可以将它们打印出来或用于其他逻辑操作。")]),t._v(" "),s("h3",{attrs:{id:"exercise-polynomial"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#exercise-polynomial"}},[t._v("#")]),t._v(" Exercise: Polynomial")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" Polynomial "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" fOfX "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" square "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("SInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n \n square "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("x\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" square "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("S "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("S\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elsewhen"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("select "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("S "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" square "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6.")]),t._v("S "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("S\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("S "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" square "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("S "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.")]),t._v("S\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fOfX "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" result \n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Test Polynomial")]),t._v("\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Polynomial"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" to "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("select "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" to "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("select"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("select"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("S"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fOfX"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("poly"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("select"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("S"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"exercise-finite-state-machine"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#exercise-finite-state-machine"}},[t._v("#")]),t._v(" Exercise: Finite State Machine")]),t._v(" "),s("p",[t._v("Grad students pass through four states in their career: Idle, Coding, Writing, and Graduating. These states transition based off three inputs: Coffee, Ideas they come up with, and Pressure from their advisor to make progress. Once they Graduate, they return to the Idle state. The FSM diagram below shows these states and transitions. Any unlabelled transition (i.e. when there are no inputs) returns a grad student to the Idle state instead of staying in the current state. The input precedence is coffee > idea > pressure, so when in the Idle state and receiving both coffee and pressure, a graduate student will move to the Coding state.")]),t._v(" "),s("p",[s("img",{attrs:{src:a(297),alt:"Untitled"}})]),t._v(" "),s("p",[t._v("检查逻辑:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// state map")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" states "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"coding"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"grad"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// life is full of question marks")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" gradLife "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" coffee"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" idea"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pressure"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("coffee"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"coding"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idea"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"coding"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("coffee"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"coding"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idea"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("coffee"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idea"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"grad"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n nextState\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// some sanity checks")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foreach"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" state "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" assert"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("gradLife"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nassert"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("gradLife"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"writing"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nassert"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("gradLife"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"coding"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nassert"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("gradLife"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nassert"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("gradLife"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"grad"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" states"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"idle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("Chisel:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" GradLife "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" coffee "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" idea "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" pressure "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" idle "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" coding "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" writing "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" grad "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" Nil "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Enum"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" idle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("coffee"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" coding"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elsewhen"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("idea"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" idle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elsewhen"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" writing"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" idle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elsewhen "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" coding"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n when "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("coffee"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" coding "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elsewhen "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("idea "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" writing "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" idle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elsewhen "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" writing"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n when "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("coffee "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("idea"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" writing "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elsewhen "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" grad "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" idle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" idle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Test")]),t._v("\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" GradLife"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// verify that the hardware matches the golden model")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" to "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("coffee "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idea "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pressure "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("state"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("coffee"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("coffee"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("idea"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("idea"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextState"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("gradLife"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" coffee"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" idea"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" pressure"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/24.35ab16b4.js b/assets/js/24.35ab16b4.js new file mode 100644 index 0000000..93270bb --- /dev/null +++ b/assets/js/24.35ab16b4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{298:function(t,s,a){t.exports=a.p+"assets/img/ShiftRegister.c44a0985.svg"},323:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-02-26-2-4-sequential-logic"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-26-2-4-sequential-logic"}},[t._v("#")]),t._v(" 2024.02.26-2.4 Sequential Logic")]),t._v(" "),s("h2",{attrs:{id:"registers"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#registers"}},[t._v("#")]),t._v(" Registers")]),t._v(" "),s("p",[t._v("A "),s("code",[t._v("Reg")]),t._v(" holds its output value until the rising edge of its clock, at which time it takes on the value of its input.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" RegisterModule "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// val register : UInt = Reg(UInt(12.W))")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" register "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Reg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n register "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" register\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" RegisterModule"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SUCCESS!!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("Notice: One important note is that Chisel distinguishes between types (like "),s("code",[t._v("UInt")]),t._v(") and hardware nodes (like the literal "),s("code",[t._v("2.U")]),t._v(", or the output of "),s("code",[t._v("myReg")]),t._v(").")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// legal because a Reg needs a data type as a model")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" myReg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Reg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// error because `2.U` is already a hardware node and can't be used as a model")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" myReg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Reg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"reginit"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#reginit"}},[t._v("#")]),t._v(" "),s("code",[t._v("RegInit")])]),t._v(" "),s("p",[t._v("The register in "),s("code",[t._v("RegisterModule")]),t._v(" was initialized to random data for simulation. Unless otherwised specified, registers do not have a reset value (or a reset). The way to create a register that resets to a given value is with "),s("code",[t._v("RegInit")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The first argument is a type node that specified the datatype and its width.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// The second argument is a hardware node that specified the reset value, in this case 0.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" myReg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// It is a hardware node that specifies the reset value, but normally `0.U`.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" myReg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[s("code",[t._v("RegInit")]),t._v(" 不仅初始化,也创建了这个reg,因此不需要先创建再init")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" RegInitModule "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" register "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n register "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" register\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"regnext"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#regnext"}},[t._v("#")]),t._v(" "),s("code",[t._v("RegNext")])]),t._v(" "),s("p",[s("strong",[s("code",[t._v("RegNext")])]),t._v(" 在 Chisel 中是一个用于创建寄存器并在下一个时钟周期将输入信号的值传递给该寄存器的便捷方法。它简化了寄存器的声明和初始化,使得您可以轻松地创建一个将当前输入信号的值保存到下一个时钟周期的寄存器。使用**"),s("code",[t._v("RegNext")]),t._v("**时,可以指定一个初始值,如果不指定,则寄存器在复位时的值是未定义的")]),t._v(" "),s("p",[t._v("在 Chisel 中使用 "),s("strong",[s("code",[t._v("RegNext")])]),t._v(" 的基本语法如下:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" myReg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegNext"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("inputSignal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" initValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ul",[s("li",[s("strong",[s("code",[t._v("inputSignal")])]),t._v(" 是你希望在下一个时钟周期传递给寄存器的信号。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("initValue")])]),t._v(" 是可选参数,用于指定寄存器在复位时的初始值。如果不提供初始值,寄存器在复位时的值是未定义的。")])]),t._v(" "),s("h2",{attrs:{id:"shift-register"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#shift-register"}},[t._v("#")]),t._v(" Shift Register")]),t._v(" "),s("p",[s("img",{attrs:{src:a(298),alt:"Untitled"}})]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MyShiftRegister"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" init"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" init"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" stateTemp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("asUInt\n state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" stateTemp\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" state\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" MyShiftRegister"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("init\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// poke in LSB of i (i % 2)")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// update expected state")]),t._v("\n state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0xf")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SUCCESS!!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"parameterized-shift-register"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#parameterized-shift-register"}},[t._v("#")]),t._v(" Parameterized Shift Register")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// n is the output width (number of delays - 1)")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// init state to init")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MyOptionalShiftRegister"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" init"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" BigInt "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" en "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("init"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("en"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" state\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// test different depths")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("65")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Testing n=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" MyOptionalShiftRegister"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" inSeq "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("init\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("en"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// poke in repeated inSeq")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" toPoke "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" inSeq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("%")]),t._v(" inSeq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("toPoke "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// update expected state")]),t._v("\n state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" toPoke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" BigInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("state"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SUCCESS!!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("Notice: Chisel中变量被声明为常量"),s("code",[t._v("val")]),t._v(",因此一个变量只能被赋值一次,因为这表示硬件电路连接,但是会根据输入等的不同而具有不同的值。因此不能多次给一个变量赋值,如果需要,可以把中间值重新命名为一个"),s("code",[t._v("val")]),t._v("来调用")]),t._v(" "),s("h2",{attrs:{id:"appendix-explicit-clock-and-reset"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#appendix-explicit-clock-and-reset"}},[t._v("#")]),t._v(" Appendix: Explicit clock and reset")]),t._v(" "),s("p",[t._v("Chisel模块默认使用隐式的时钟和复位信号,每个内部创建的寄存器都会使用这些默认信号。在某些情况下,你可能需要覆盖这种默认行为,比如使用生成时钟或复位信号的黑盒,或者设计多时钟系统。Chisel提供了**"),s("code",[t._v("withClock() {}")]),s("strong",[t._v("、")]),s("code",[t._v("withReset() {}")]),s("strong",[t._v("和")]),s("code",[t._v("withClockAndReset() {}")]),s("strong",[t._v("等构造来处理这些情况,允许分别或同时覆盖时钟和复位。需要注意的是,至本教程编写时,复位信号总是同步的并且是")]),s("code",[t._v("Bool")]),s("strong",[t._v("类型。时钟在Chisel中有其自身的类型(")]),s("code",[t._v("Clock")]),s("strong",[t._v("),并且应该相应声明。")]),s("code",[t._v("Bool")]),s("strong",[t._v("类型可以通过调用")]),s("code",[t._v("asClock()")]),s("strong",[t._v("转换为")]),s("code",[t._v("Clock")]),s("strong",[t._v("类型,但需要确保这样做是合理的。同时,")]),s("code",[t._v("chisel-testers")]),t._v("**目前对多时钟设计的支持并不完全。")]),t._v(" "),s("h3",{attrs:{id:"example-multi-clock-module"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-multi-clock-module"}},[t._v("#")]),t._v(" Example: Multi-Clock Module")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// we need to import multi-clock features")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("chisel3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("experimental"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("withClock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" withReset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" withClockAndReset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" ClockExamples "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" alternateReset "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" alternateClock "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" outImplicit "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" outAlternateReset "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" outAlternateClock "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" outAlternateBoth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" imp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n imp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("outImplicit "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" imp\n\n withReset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("alternateReset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// everything in this scope with have alternateReset as the reset")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" altRst "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n altRst "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("outAlternateReset "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" altRst\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n withClock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("alternateClock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" altClk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n altClk "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("outAlternateClock "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" altClk\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n withClockAndReset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("alternateClock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("alternateReset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" alt "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n alt "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("outAlternateBoth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" alt\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getVerilog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ClockExamples"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("通过**"),s("code",[t._v("import chisel3.experimental.{withClock, withReset, withClockAndReset}")]),s("strong",[t._v("引入了多时钟特性。")]),s("code",[t._v("ClockExamples")]),s("strong",[t._v("模块定义了一个10位宽的输入")]),s("code",[t._v("io.in")]),s("strong",[t._v(",以及替代的复位和时钟信号")]),s("code",[t._v("io.alternateReset")]),s("strong",[t._v("和")]),s("code",[t._v("io.alternateClock")]),t._v("**。模块输出了四种不同情况下的寄存器值:使用默认时钟和复位、只替换复位、只替换时钟、同时替换时钟和复位。")]),t._v(" "),s("ol",[s("li",[s("strong",[s("code",[t._v("withReset(io.alternateReset) {...}")]),s("strong",[t._v("块定义了一个新的作用域,其中所有寄存器的复位信号被替换为")]),s("code",[t._v("io.alternateReset")])]),t._v("。在这个作用域内,**"),s("code",[t._v("altRst")]),s("strong",[t._v("寄存器在被替代复位信号复位时初始化为0,并在每个时钟周期将")]),s("code",[t._v("io.in")]),t._v("**的值赋给它。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("withClock(io.alternateClock) {...}")]),s("strong",[t._v("块定义了另一个作用域,其中所有寄存器的时钟信号被替换为")]),s("code",[t._v("io.alternateClock")])]),t._v("。在这个作用域内,**"),s("code",[t._v("altClk")]),s("strong",[t._v("寄存器在被替代时钟信号驱动时初始化为0,并在每个时钟周期将")]),s("code",[t._v("io.in")]),t._v("**的值赋给它。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("withClockAndReset(io.alternateClock, io.alternateReset) {...}")]),s("strong",[t._v("块同时替换了寄存器的时钟和复位信号为")]),s("code",[t._v("io.alternateClock")]),s("strong",[t._v("和")]),s("code",[t._v("io.alternateReset")])]),t._v("。在这个作用域内,**"),s("code",[t._v("alt")]),s("strong",[t._v("寄存器同时被替代的时钟和复位信号控制,初始化为0,并在每个时钟周期将")]),s("code",[t._v("io.in")]),t._v("**的值赋给它。")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/25.a76443c0.js b/assets/js/25.a76443c0.js new file mode 100644 index 0000000..2423d11 --- /dev/null +++ b/assets/js/25.a76443c0.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{299:function(t,s,a){t.exports=a.p+"assets/img/FIR.5888a130.jpeg"},324:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-02-28-2-5-fir-filter"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-28-2-5-fir-filter"}},[t._v("#")]),t._v(" 2024.02.28-2.5 FIR Filter")]),t._v(" "),s("p",[s("img",{attrs:{src:a(299),alt:"Untitled"}})]),t._v(" "),s("p"),s("p",[s("mjx-container",{staticClass:"MathJax",attrs:{jax:"CHTML",display:"true"}},[s("mjx-math",{staticClass:"MJX-TEX",attrs:{display:"true"}},[s("mjx-mi",{staticClass:"mjx-i"},[s("mjx-c",{attrs:{c:"y"}})],1),s("mjx-mo",{staticClass:"mjx-n"},[s("mjx-c",{attrs:{c:"["}})],1),s("mjx-mi",{staticClass:"mjx-i"},[s("mjx-c",{attrs:{c:"n"}})],1),s("mjx-mo",{staticClass:"mjx-n"},[s("mjx-c",{attrs:{c:"]"}})],1),s("mjx-mo",{staticClass:"mjx-n",attrs:{space:"4"}},[s("mjx-c",{attrs:{c:"="}})],1),s("mjx-msub",{attrs:{space:"4"}},[s("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[s("mjx-c",{attrs:{c:"b"}})],1),s("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[s("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[s("mjx-c",{attrs:{c:"0"}})],1)],1)],1),s("mjx-mi",{staticClass:"mjx-i"},[s("mjx-c",{attrs:{c:"x"}})],1),s("mjx-mo",{staticClass:"mjx-n"},[s("mjx-c",{attrs:{c:"["}})],1),s("mjx-mi",{staticClass:"mjx-i"},[s("mjx-c",{attrs:{c:"n"}})],1),s("mjx-mo",{staticClass:"mjx-n"},[s("mjx-c",{attrs:{c:"]"}})],1),s("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[s("mjx-c",{attrs:{c:"+"}})],1),s("mjx-msub",{attrs:{space:"3"}},[s("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[s("mjx-c",{attrs:{c:"b"}})],1),s("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[s("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[s("mjx-c",{attrs:{c:"1"}})],1)],1)],1),s("mjx-mi",{staticClass:"mjx-i"},[s("mjx-c",{attrs:{c:"x"}})],1),s("mjx-mo",{staticClass:"mjx-n"},[s("mjx-c",{attrs:{c:"["}})],1),s("mjx-mi",{staticClass:"mjx-i"},[s("mjx-c",{attrs:{c:"n"}})],1),s("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[s("mjx-c",{attrs:{c:"2212"}})],1),s("mjx-mn",{staticClass:"mjx-n",attrs:{space:"3"}},[s("mjx-c",{attrs:{c:"1"}})],1),s("mjx-mo",{staticClass:"mjx-n"},[s("mjx-c",{attrs:{c:"]"}})],1),s("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[s("mjx-c",{attrs:{c:"+"}})],1),s("mjx-msub",{attrs:{space:"3"}},[s("mjx-mi",{staticClass:"mjx-i",attrs:{noIC:"true"}},[s("mjx-c",{attrs:{c:"b"}})],1),s("mjx-script",{staticStyle:{"vertical-align":"-0.15em"}},[s("mjx-mn",{staticClass:"mjx-n",attrs:{size:"s"}},[s("mjx-c",{attrs:{c:"2"}})],1)],1)],1),s("mjx-mi",{staticClass:"mjx-i"},[s("mjx-c",{attrs:{c:"x"}})],1),s("mjx-mo",{staticClass:"mjx-n"},[s("mjx-c",{attrs:{c:"["}})],1),s("mjx-mi",{staticClass:"mjx-i"},[s("mjx-c",{attrs:{c:"n"}})],1),s("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[s("mjx-c",{attrs:{c:"2212"}})],1),s("mjx-mn",{staticClass:"mjx-n",attrs:{space:"3"}},[s("mjx-c",{attrs:{c:"2"}})],1),s("mjx-mo",{staticClass:"mjx-n"},[s("mjx-c",{attrs:{c:"]"}})],1),s("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[s("mjx-c",{attrs:{c:"+"}})],1),s("mjx-mo",{staticClass:"mjx-n",attrs:{space:"3"}},[s("mjx-c",{attrs:{c:"22EF"}})],1)],1)],1)],1),s("p"),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" My4ElementFir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b0"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b1"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b2"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b3"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg_1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg_2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg_3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n reg_1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n reg_2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" reg_1\n reg_3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" reg_2\n\n\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 或者使用RegNext来一并定义初始化及赋值")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg_1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegNext"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg_2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegNext"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("reg_1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg_3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegNext"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("reg_2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" b0"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" b1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" reg_1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" b2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" reg_2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" b3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" reg_3\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"fir-filter-generator"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#fir-filter-generator"}},[t._v("#")]),t._v(" "),s("strong",[t._v("FIR Filter Generator")])]),t._v(" "),s("p",[t._v("一个有限脉冲响应(FIR)滤波器生成器。生成器的**"),s("code",[t._v("length")]),s("strong",[t._v("参数决定了滤波器的抽头数目,即滤波器的长度。这个生成器有三个输入:")]),s("code",[t._v("in")]),s("strong",[t._v("(滤波器的输入信号)、")]),s("code",[t._v("valid")]),s("strong",[t._v("(一个布尔值,表示输入是否有效)和")]),s("code",[t._v("consts")]),s("strong",[t._v("(一个向量,包含所有抽头的系数)。还有一个输出")]),s("code",[t._v("out")]),t._v("**,即滤波器的输出。")]),t._v(" "),s("ul",[s("li",[t._v("**"),s("code",[t._v("taps")]),t._v("**是一个序列,包含输入和一系列寄存器,用于实现滤波器的延迟线。")]),t._v(" "),s("li",[t._v("当**"),s("code",[t._v("valid")]),t._v("**信号为真时,序列中的每个元素(除了第一个)被更新为前一个元素的值。")]),t._v(" "),s("li",[t._v("输出**"),s("code",[t._v("out")]),t._v("**是抽头值和对应系数乘积之和。")])]),t._v(" "),s("p",[t._v("这个结构允许滤波器动态处理不同长度的输入,通过改变**"),s("code",[t._v("consts")]),t._v("**向量的内容来改变滤波器的特性。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MyManyDynamicElementVecFir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" valid "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" consts "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Such concision! You'll learn what all this means later.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" taps "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fill"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("zip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tail"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foreach "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" when "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" b "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("zip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" b "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reduce"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nvisualize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" MyManyDynamicElementVecFir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",[s("li",[s("p",[s("strong",[s("code",[t._v("val io = IO(new Bundle {...})")]),s("strong",[t._v("定义了模块的接口,包括8位宽的输入")]),s("code",[t._v("in")])]),t._v(",一个有效信号**"),s("code",[t._v("valid")]),s("strong",[t._v(",8位宽输出")]),s("code",[t._v("out")]),s("strong",[t._v(",和长度为")]),s("code",[t._v("length")]),s("strong",[t._v("的系数向量")]),s("code",[t._v("consts")]),t._v("**。")])]),t._v(" "),s("li",[s("p",[t._v("**"),s("code",[t._v("val taps = Seq(io.in) ++ Seq.fill(io.consts.length - 1)(RegInit(0.U(8.W)))")]),s("strong",[t._v("这行代码在FIR滤波器实现中创建了一个名为")]),s("code",[t._v("taps")]),s("strong",[t._v("的序列,用于存储当前和之前的输入值,从而实现数据的时间序列延迟。首先,它将输入信号")]),s("code",[t._v("io.in")]),s("strong",[t._v("作为序列的第一个元素。随后,使用")]),s("code",[t._v("++")]),s("strong",[t._v("操作符将")]),s("code",[t._v("io.in")]),s("strong",[t._v("与一个新的序列连接起来,后者通过")]),s("code",[t._v("Seq.fill(io.consts.length - 1)(RegInit(0.U(8.W)))")]),s("strong",[t._v("创建,其中包含")]),s("code",[t._v("length - 1")]),s("strong",[t._v("个初始化为0的8位寄存器。这样,")]),s("code",[t._v("taps")]),s("strong",[t._v("序列就包含了一个输入信号和")]),s("code",[t._v("length - 1")]),s("strong",[t._v("个延迟寄存器,总共")]),s("code",[t._v("length")]),s("strong",[t._v("个元素,每个元素对应滤波器的一个抽头。在Chisel中,虽然")]),s("code",[t._v("io.in")]),s("strong",[t._v("不是寄存器,但")]),s("code",[t._v("taps")]),s("strong",[t._v("序列可以包含不同类型的元素,因为在Chisel里,所有这些都被视为")]),s("code",[t._v("Data")]),s("strong",[t._v("类型的子类,可以被综合为硬件。在这个上下文中,")]),s("code",[t._v("io.in")]),t._v("**是直接的输入信号,而后续元素是寄存器类型,但它们共同构成了一个序列,用于表示滤波器的不同时间点上的信号值。这种混合类型的序列是可行的,并可以在Chisel生成的硬件中正确表达相应的逻辑。")])]),t._v(" "),s("li",[s("p",[t._v("**"),s("code",[t._v("taps.zip(taps.tail).foreach { case (a, b) => when (io.valid) { b := a } }")]),s("strong",[t._v("在输入")]),s("code",[t._v("valid")]),s("strong",[t._v("为真时,将")]),s("code",[t._v("taps")]),t._v("**序列中每个元素的值传递到下一个元素,实现数据在寄存器间的移动。")]),t._v(" "),s("p",[s("strong",[s("code",[t._v("zip")]),s("strong",[t._v("是一个方法,它将两个集合中对应位置的元素组成一对,生成一个新的集合。在这里,")]),s("code",[t._v("taps.zip(taps.tail)")]),s("strong",[t._v("的作用是将")]),s("code",[t._v("taps")]),s("strong",[t._v("列表中的每个元素与其后面的元素配对。")]),s("code",[t._v("tail")]),s("strong",[t._v("是一个方法,返回除第一个元素外的列表所有元素。例如,如果")]),s("code",[t._v("taps")]),s("strong",[t._v("是")]),s("code",[t._v("[in, reg1, reg2, reg3]")])]),t._v(",那么**"),s("code",[t._v("taps.tail")]),s("strong",[t._v("就是")]),s("code",[t._v("[reg1, reg2, reg3]")]),s("strong",[t._v("。")]),s("code",[t._v("taps.zip(taps.tail)")]),s("strong",[t._v("的结果将是")]),s("code",[t._v("[(in, reg1), (reg1, reg2), (reg2, reg3)]")]),s("strong",[t._v("。这样,")]),s("code",[t._v("foreach")]),s("strong",[t._v("就可以遍历这些配对,根据")]),s("code",[t._v("valid")]),t._v("**信号更新寄存器的值,实现数据的逐级传递。")]),t._v(" "),s("p",[s("strong",[s("code",[t._v("case (a, b) =>")]),s("strong",[t._v("是模式匹配的语法,用于解构元组,将")]),s("code",[t._v("zip")]),s("strong",[t._v("操作生成的元素对分别赋值给")]),s("code",[t._v("a")])]),t._v("(当前元素)和**"),s("code",[t._v("b")]),t._v("**(下一个元素)。")])]),t._v(" "),s("li",[s("p",[s("strong",[s("code",[t._v("io.out := taps.zip(io.consts).map { case (a, b) => a * b }.reduce(_ + _)")]),s("strong",[t._v("计算输出")]),s("code",[t._v("out")])]),t._v(",即将每个延迟元素与其对应的系数相乘,并将所有乘积求和得到最终结果。")]),t._v(" "),s("p",[t._v("在这段代码中,**"),s("code",[t._v("map")]),s("strong",[t._v("和")]),s("code",[t._v("reduce")]),t._v("**是Scala中的集合操作方法:")]),t._v(" "),s("ul",[s("li",[s("strong",[s("code",[t._v("map")])]),t._v(":对集合中的每个元素应用一个函数。这里**"),s("code",[t._v("map { case (a, b) => a * b }")]),s("strong",[t._v("对每对")]),s("code",[t._v("(a, b)")]),s("strong",[t._v("应用乘法操作,")]),s("code",[t._v("a")]),s("strong",[t._v("来自")]),s("code",[t._v("taps")]),s("strong",[t._v(",")]),s("code",[t._v("b")]),s("strong",[t._v("来自")]),s("code",[t._v("io.consts")]),t._v("**,分别代表寄存器中的数据和滤波器的系数。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("reduce")])]),t._v(":对集合中的元素应用一个二元操作,逐步将集合减少为单一结果。这里的**"),s("code",[t._v("reduce(_ + _)")]),t._v("**将所有乘法结果相加,得到最终的滤波输出。")])]),t._v(" "),s("p",[t._v("不使用**"),s("code",[t._v("foreach")]),s("strong",[t._v("是因为")]),s("code",[t._v("foreach")]),s("strong",[t._v("仅用于执行操作而不返回结果,而这里的目的是计算经过滤波器后的输出值,需要通过")]),s("code",[t._v("map")]),s("strong",[t._v("和")]),s("code",[t._v("reduce")]),t._v("**聚合计算结果。")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/26.6721ecdd.js b/assets/js/26.6721ecdd.js new file mode 100644 index 0000000..a5de1ad --- /dev/null +++ b/assets/js/26.6721ecdd.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{300:function(t,s,a){t.exports=a.p+"assets/img/4-inputSort.a02239ea.png"},327:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-03-01-3-1-generators-parameters"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-03-01-3-1-generators-parameters"}},[t._v("#")]),t._v(" 2024.03.01-3.1 Generators: Parameters")]),t._v(" "),s("h2",{attrs:{id:"parameter-passing"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#parameter-passing"}},[t._v("#")]),t._v(" Parameter Passing")]),t._v(" "),s("h3",{attrs:{id:"example-parameterized-scala-object"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-parameterized-scala-object"}},[t._v("#")]),t._v(" Example: Parameterized Scala Object")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" ParameterizedScalaObject"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("param1"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" param2"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"I have parameters: param1 = ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("param1")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(" and param2 = ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("param2")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" obj1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ParameterizedScalaObject"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" obj2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ParameterizedScalaObject"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"World"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"example-parameterized-chisel-object"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-parameterized-chisel-object"}},[t._v("#")]),t._v(" Example: Parameterized Chisel Object")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" ParameterizedWidthAdder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in0Width"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" in1Width"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sumWidth"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n require"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in0Width "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n require"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in1Width "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n require"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sumWidth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in0Width"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in1Width"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" sum "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sumWidth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// a +& b includes the carry, a + b does not")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sum "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in1\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getVerilog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ParameterizedWidthAdder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("The above code block has some "),s("code",[t._v("require(...)")]),t._v(" statements. These are pre-elaboration assertions, which are useful when your generator only works with certain parameterizations or when some parameterizations are mutually exclusive or nonsensical. The above code block checks that widths are non-negative.")]),t._v(" "),s("h3",{attrs:{id:"example-parameterized-4-input-sort"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-parameterized-4-input-sort"}},[t._v("#")]),t._v(" Example: Parameterized 4-input Sort")]),t._v(" "),s("p",[s("img",{attrs:{src:a(300),alt:"Untitled"}})]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/** Sort4 sorts its 4 inputs to its 4 outputs */")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" Sort4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ascending"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this comparison funtion decides < or > based on the module's parameterization")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" comp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("l"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" r"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Bool "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ascending"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n l "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" r\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n l "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" r\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" row10 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" row11 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" row12 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" row13 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("comp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in0"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n row10 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in0 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// preserve first two elements")]),t._v("\n row11 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in1\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n row10 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in1 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// swap first two elements")]),t._v("\n row11 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in0\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("comp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n row12 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in2 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// preserve last two elements")]),t._v("\n row13 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in3\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n row12 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in3 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// swap last two elements")]),t._v("\n row13 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in2\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" row21 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" row22 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("comp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row11"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" row12"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n row21 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row11 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// preserve middle 2 elements")]),t._v("\n row22 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row12\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n row21 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row12 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// swap middle two elements")]),t._v("\n row22 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row11\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" row20 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" row23 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("comp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row10"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" row13"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n row20 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row10 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// preserve the first and the forth elements")]),t._v("\n row23 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row13\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n row20 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row13 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// swap the first and the forth elements")]),t._v("\n row23 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row10\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("comp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row20"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" row21"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row20 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// preserve first two elements")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row21\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row21 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// swap first two elements")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row20\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("comp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row22"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" row23"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row22 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// preserve first two elements")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row23\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row23 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// swap first two elements")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" row22\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"option-and-defualt-arguments"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#option-and-defualt-arguments"}},[t._v("#")]),t._v(" Option and Defualt Arguments")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" map "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" b "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("在Scala中,"),s("strong",[s("code",[t._v("Map.get(key)")]),s("strong",[t._v("方法返回一个")]),s("code",[t._v("Option")]),s("strong",[t._v("类型:如果键存在,则返回")]),s("code",[t._v("Some(value)")])]),t._v(";如果键不存在,则返回**"),s("code",[t._v("None")]),s("strong",[t._v("。在您的例子中,")]),s("code",[t._v('map.get("a")')]),s("strong",[t._v("返回")]),s("code",[t._v("Some(1)")]),s("strong",[t._v(',因为"a"是映射中的一个键,值为1。然而,')]),s("code",[t._v('map.get("b")')]),s("strong",[t._v("返回")]),s("code",[t._v("None")]),s("strong",[t._v(',因为"b"不是映射中的键。')]),s("code",[t._v("Some")]),s("strong",[t._v("和")]),s("code",[t._v("None")]),t._v("**用于Scala中以安全且表达性的方式处理值的存在或缺失,避免空指针异常。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" some "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Some"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" none "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" None\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("some"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Returns 1")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// println(none.get) // Errors!")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("some"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getOrElse"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Returns 1")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("none"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getOrElse"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Returns 2")]),t._v("\n")])])]),s("p",[s("strong",[s("code",[t._v("getOrElse")]),s("strong",[t._v("是一个常用于")]),s("code",[t._v("Option")]),s("strong",[t._v("类型的方法,它允许你为")]),s("code",[t._v("Option")]),s("strong",[t._v("可能不包含值(即为")]),s("code",[t._v("None")])]),t._v(")的情况提供一个默认值。"),s("strong",[s("code",[t._v("getOrElse")]),s("strong",[t._v("接受一个参数,这个参数是当")]),s("code",[t._v("Option")]),s("strong",[t._v("为")]),s("code",[t._v("None")]),s("strong",[t._v("时将返回的值。如果")]),s("code",[t._v("Option")]),s("strong",[t._v("是")]),s("code",[t._v("Some")])]),t._v(",则**"),s("code",[t._v("getOrElse")]),s("strong",[t._v("会返回包裹在")]),s("code",[t._v("Some")]),t._v("**中的值。")]),t._v(" "),s("h3",{attrs:{id:"options-for-parameters-with-defaults"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#options-for-parameters-with-defaults"}},[t._v("#")]),t._v(" Options for Parameters with Defaults")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" DelayBy1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("resetValue"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" None"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("resetValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isDefined"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// resetValue = Some(number)")]),t._v("\n RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("resetValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//resetValue = None")]),t._v("\n Reg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n reg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" reg\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getVerilog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" DelayBy1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getVerilog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" DelayBy1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Some"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("将 "),s("code",[t._v("resetValue")]),t._v(" 默认初始化为 "),s("code",[t._v("Option[UInt] = None")]),t._v(","),s("code",[t._v("Reg(UInt())")]),t._v(" 可以从上下文中自动推断,不过最好还是指定位宽")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 还可以用match来实现ifelse")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" DelayBy1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("resetValue"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Option"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" None"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" resetValue "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" Some"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("r"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("r"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" None "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" Reg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n reg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" reg\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"match-case-statements"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#match-case-statements"}},[t._v("#")]),t._v(" Match/Case Statements")]),t._v(" "),s("p",[t._v("Scala中的匹配概念在Chisel中被广泛使用,是每个Chisel程序员必须理解的基础知识。Scala提供的match操作符支持以下功能:")]),t._v(" "),s("ul",[s("li",[t._v("用于检测多种情况的简单测试,类似于C语言中的switch语句。")]),t._v(" "),s("li",[t._v("对值的复杂组合进行测试。")]),t._v(" "),s("li",[t._v("根据变量的类型采取行动,当变量类型未知或未完全指定时,例如:\n"),s("ul",[s("li",[t._v("从异构列表中取变量,如**"),s("code",[t._v('val mixedList = List(1, "string", false)')]),t._v("**。")]),t._v(" "),s("li",[t._v("变量已知属于一个超类,但不确定是哪个具体的子类。")])])]),t._v(" "),s("li",[t._v("使用正则表达式提取字符串的子串。")])]),t._v(" "),s("h3",{attrs:{id:"example-value-matching"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-value-matching"}},[t._v("#")]),t._v(" Example: Value Matching")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// y is an integer variable defined somewhere else in the code")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" y "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/// ...")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" y "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"zero"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// One common syntax, preferred if fits in one line")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Another common syntax, preferred if does not fit in one line.")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"one"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Note the code block continues until the next case")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Another syntax, but curly braces are not required")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"two"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" _ "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"many"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// _ is a wildcard that matches all values")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"y is "')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// out: y is many")]),t._v("\n")])])]),s("p",[t._v("y 为7,不匹配,因此采用默认值")]),t._v(" "),s("ul",[s("li",[t._v("每个跟在**"),s("code",[t._v("=>")]),s("strong",[t._v("操作符后面的代码块都会继续执行,直到它到达")]),s("code",[t._v("match")]),s("strong",[t._v("的结束大括号或下一个")]),s("code",[t._v("case")]),t._v("**语句。")]),t._v(" "),s("li",[t._v("**"),s("code",[t._v("match")]),s("strong",[t._v("会按照")]),s("code",[t._v("case")]),s("strong",[t._v("语句的顺序进行搜索,一旦匹配到一个")]),s("code",[t._v("case")]),s("strong",[t._v("语句,就不会再对其他")]),s("code",[t._v("case")]),t._v("**语句进行检查。")]),t._v(" "),s("li",[t._v("使用下划线**"),s("code",[t._v("_")]),t._v("**作为通配符,来处理任何未找到匹配的值。")])]),t._v(" "),s("h3",{attrs:{id:"example-multiple-value-matching"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-multiple-value-matching"}},[t._v("#")]),t._v(" Example: Multiple Value Matching")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" animalType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("biggerThanBreadBox"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" meanAsCanBe"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("biggerThanBreadBox"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" meanAsCanBe"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"wolverine"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"elephant"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"shrew"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"puppy"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("animalType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// wolverine")]),t._v("\n")])])]),s("h3",{attrs:{id:"example-type-matching"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-type-matching"}},[t._v("#")]),t._v(" Example: Type Matching")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" sequence "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsequence"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foreach "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n x "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" s"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is a String"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" s"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is an Int"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" s"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Double")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is a Double"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" _ "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is an unknown type!"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("strong",[s("code",[t._v("Seq")]),s("strong",[t._v("是Scala集合中的一个接口,它代表序列,而")]),s("code",[t._v("List")]),s("strong",[t._v("是")]),s("code",[t._v("Seq")]),s("strong",[t._v("的一个具体实现。在这个例子中,可以直接用")]),s("code",[t._v('List("a", 1, 0.0)')]),s("strong",[t._v("来代替")]),s("code",[t._v('Seq("a", 1, 0.0)')])]),t._v(",而不会影响**"),s("code",[t._v("foreach")]),s("strong",[t._v("和")]),s("code",[t._v("match")]),t._v("**语句的行为。")]),t._v(" "),s("h3",{attrs:{id:"example-multiple-type-matching"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-multiple-type-matching"}},[t._v("#")]),t._v(" Example: Multiple Type Matching")]),t._v(" "),s("p",[t._v("If you want to match on whether a value has one of many types, use the following syntax. Note that you must use an "),s("code",[t._v("_")]),t._v(" when matching.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" sequence "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsequence"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foreach "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n x "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Double")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is a number!"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" _ "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is an unknown type!"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"example-type-matching-and-erasure"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-type-matching-and-erasure"}},[t._v("#")]),t._v(" Example: Type Matching and Erasure")]),t._v(" "),s("p",[t._v("类型匹配在Scala中有一些限制。由于Scala运行在JVM上,而JVM不保持多态类型信息,因此你不能在运行时基于它们进行匹配(因为这些类型信息已被擦除)。注意下面的例子始终匹配第一个case语句,因为**"),s("code",[t._v("[String]")]),s("strong",[t._v("、")]),s("code",[t._v("[Int]")]),s("strong",[t._v("、")]),s("code",[t._v("[Double]")]),s("strong",[t._v("这些多态类型在运行时被擦除了,case语句")]),t._v("实际上"),s("strong",[t._v("只是在匹配")]),s("code",[t._v("Seq")]),t._v("**。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" sequence "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsequence"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foreach "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n x "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" s"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is a String"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" s"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is an Int"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" s"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Double")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("x")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' is a Double"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("在Scala中,类型擦除指的是JVM在运行时不保留泛型的具体类型信息。因此,当你对**"),s("code",[t._v("Seq[String]")]),s("strong",[t._v("、")]),s("code",[t._v("Seq[Int]")]),s("strong",[t._v("或")]),s("code",[t._v("Seq[Double]")]),s("strong",[t._v("进行模式匹配时,JVM实际上无法区分这些")]),s("code",[t._v("Seq")]),s("strong",[t._v("的元素类型,因为泛型信息")]),s("code",[t._v("[String]")]),s("strong",[t._v("、")]),s("code",[t._v("[Int]")]),s("strong",[t._v("、")]),s("code",[t._v("[Double]")]),s("strong",[t._v("已经被擦除,只留下了基础的")]),s("code",[t._v("Seq")]),s("strong",[t._v("类型。所以,这些case语句在运行时都被视为对")]),s("code",[t._v("Seq")]),s("strong",[t._v("类型的匹配,而无法区分具体是哪种")]),s("code",[t._v("Seq")]),s("strong",[t._v("。因此,匹配总是成功于第一个case,无论其实际参数是什么类型的")]),s("code",[t._v("Seq")]),s("strong",[t._v("。这就是为什么在运行时你看到的行为似乎是它总是匹配")]),s("code",[t._v("Seq")]),t._v("**的原因。")]),t._v(" "),s("h2",{attrs:{id:"ios-with-optional-fields"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ios-with-optional-fields"}},[t._v("#")]),t._v(" IOs with Optional Fields")]),t._v(" "),s("p",[t._v("有时我们希望IO端口能够根据需要选择性地包含或排除。例如,在调试时可能需要查看一些内部状态,但在生成器用于系统时希望将其隐藏。或者,你的生成器可能有一些输入在某些情况下不需要连接,因为存在合理的默认值。")]),t._v(" "),s("h3",{attrs:{id:"example-optional-io-with-option"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-optional-io-with-option"}},[t._v("#")]),t._v(" Example: Optional IO with Option")]),t._v(" "),s("p",[t._v("示例中展示了一个可选地接收进位信号的一位加法器。如果包含进位,**"),s("code",[t._v("io.carryIn")]),s("strong",[t._v("将是")]),s("code",[t._v("Some[UInt]")]),s("strong",[t._v("类型并包含在IO束中;如果不包含进位,")]),s("code",[t._v("io.carryIn")]),s("strong",[t._v("将是")]),s("code",[t._v("None")]),t._v("**类型并从IO束中排除。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" HalfFullAdder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" hasCarry"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" b "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" carryIn "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("hasCarry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" Some"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" None\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" s "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" carryOut "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" sum "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("b "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("carryIn"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getOrElse"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("s "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sum"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("carryOut "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sum"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"example-optional-io-with-zero-width-wires"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-optional-io-with-zero-width-wires"}},[t._v("#")]),t._v(" Example: Optional IO with Zero-Width Wires")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" HalfFullAdder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" hasCarry"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" b "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" carryIn "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("hasCarry"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" s "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" carryOut "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" sum "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("b "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("carryIn\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("s "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sum"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("carryOut "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sum"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("也可以用一个0宽度的wire来代替None。An IO with width zero is pruned from the emitted Verilog, and anything that tries to use the value of a zero-width wire gets a constant zero.")]),t._v(" "),s("h2",{attrs:{id:"implicits"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#implicits"}},[t._v("#")]),t._v(" Implicits")]),t._v(" "),s("p",[t._v("为了减少大量重复的模板代码,Scala引入了*隐式(implicits)*的概念,允许编译器为你自动进行一些语法简化。由于很多操作是在背后进行,隐式使用可能显得很神奇。")]),t._v(" "),s("h3",{attrs:{id:"implicit-arguments"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#implicit-arguments"}},[t._v("#")]),t._v(" Implicit Arguments")]),t._v(" "),s("p",[t._v("隐式参数的一个常见用途是当你的代码在深层的函数调用中需要访问某个顶层变量时,可以使用隐式参数自动传递这个变量,而不是手动在每个函数调用中传递它。")]),t._v(" "),s("h3",{attrs:{id:"example-implicit-cats"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-implicit-cats"}},[t._v("#")]),t._v(" Example: Implicit Cats")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("object")]),t._v(" CatDog "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implicit")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" numberOfCats"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//implicit val numberOfDogs: Int = 5")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" tooManyCats"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("nDogs"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implicit")]),t._v(" nCats"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nCats "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" nDogs\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" imp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tooManyCats"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Argument passed implicitly!")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" exp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" tooManyCats"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Argument passed explicitly!")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nCatDog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("imp\nCatDog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("exp\n")])])]),s("p",[t._v("首先,我们定义了一个隐式值**"),s("code",[t._v("numberOfCats")]),s("strong",[t._v("。在给定的作用域中,"),s("strong",[t._v("同一类型的隐式值只能有一个")]),t._v("。然后,我们定义了一个函数,它接受两个参数列表;第一个是任何显式参数,第二个是任何隐式参数。当我们调用")]),s("code",[t._v("tooManyCats")]),t._v("**时,我们可以省略第二个隐式参数列表(让编译器为我们找到它),或者显式提供一个参数(这个参数可以与隐式值不同)。")]),t._v(" "),s("p",[t._v("隐式参数可能"),s("strong",[t._v("失败")]),t._v("的情况包括:")]),t._v(" "),s("ul",[s("li",[t._v("在一个作用域中定义了给定类型的两个或多个隐式值")]),t._v(" "),s("li",[t._v("如果编译器找不到调用函数所需的隐式值")])]),t._v(" "),s("p",[t._v("**"),s("code",[t._v("object")]),s("strong",[t._v("定义了一个单例对象,它是一个类的单一实例。与")]),s("code",[t._v("class")]),s("strong",[t._v("不同,当你定义一个")]),s("code",[t._v("object")]),s("strong",[t._v("时,Scala会自动为你创建这个类的一个实例。你不需要使用")]),s("code",[t._v("new")]),s("strong",[t._v("关键字来创建它的实例。在这个例子中,")]),s("code",[t._v("CatDog")]),s("strong",[t._v("是一个单例对象,可以直接访问其成员,无需创建实例。这在定义工具方法或当你需要一个全局唯一的实体时非常有用,比如这里的")]),s("code",[t._v("numberOfCats")]),s("strong",[t._v("隐式值和")]),s("code",[t._v("tooManyCats")]),t._v("**方法。")]),t._v(" "),s("h3",{attrs:{id:"example-implicit-logging"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-implicit-logging"}},[t._v("#")]),t._v(" Example: Implicit Logging")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("sealed")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("trait")]),t._v(" Verbosity\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implicit")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("object")]),t._v(" Silent "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Verbosity\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("object")]),t._v(" Verbose "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Verbosity\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" ParameterizedWidthAdder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in0Width"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" in1Width"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" sumWidth"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implicit")]),t._v(" verbosity"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Verbosity"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("msg"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Unit")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" verbosity "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("match")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" Silent "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" Verbose "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("msg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n require"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in0Width "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in0Width of ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("in0Width")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' OK"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n require"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in1Width "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in1Width of ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("in1Width")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' OK"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n require"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sumWidth "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sumWidth of ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("sumWidth")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(' OK"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in0Width"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in1Width"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" sum "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sumWidth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Made IO"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\t"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 对于结果位宽自然容纳进位的情况,直接使用+也是可行的。")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sum "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in0 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in1\n log"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Assigned output"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getVerilog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ParameterizedWidthAdder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getVerilog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ParameterizedWidthAdder"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Verbose"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ol",[s("li",[t._v("定义了一个名为**"),s("code",[t._v("Verbosity")]),s("strong",[t._v("的密封特质(")]),s("code",[t._v("sealed trait")]),s("strong",[t._v(")和两个实现这个特质的对象。")]),s("code",[t._v("sealed trait Verbosity")]),s("strong",[t._v("表示")]),s("code",[t._v("Verbosity")]),s("strong",[t._v("是一个可以被继承的类型,但所有继承它的类必须定义在同一个文件中,这有助于实现模式匹配的完整性检查。")]),s("code",[t._v("implicit case object Silent extends Verbosity")]),s("strong",[t._v("定义了一个隐式的单例对象")]),s("code",[t._v("Silent")]),s("strong",[t._v(",它是")]),s("code",[t._v("Verbosity")]),s("strong",[t._v("的一个实现,可以在需要")]),s("code",[t._v("Verbosity")]),s("strong",[t._v("类型的隐式参数时自动使用。")]),s("code",[t._v("case object Verbose extends Verbosity")]),s("strong",[t._v("定义了另一个名为")]),s("code",[t._v("Verbose")]),s("strong",[t._v("的单例对象,也是")]),s("code",[t._v("Verbosity")]),s("strong",[t._v("的实现。")]),s("code",[t._v("case object")]),t._v("**通常用于代表不可变、无状态的值或单例定义.")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("msg: => String")]),s("strong",[t._v("这样的参数定义使用了名为“call-by-name”的参数传递机制。这种机制意味着,只有在函数内部实际使用到")]),s("code",[t._v("msg")]),s("strong",[t._v("时,传入的字符串表达式才会被计算。这对于条件日志记录来说非常有用,因为它允许延迟计算日志消息直到确实需要打印消息时。例如,如果")]),s("code",[t._v("verbosity")]),s("strong",[t._v("是")]),s("code",[t._v("Silent")])]),t._v(",则**"),s("code",[t._v("msg")]),t._v("**根本不会被计算,这样就避免了不必要的性能开销。")])]),t._v(" "),s("h3",{attrs:{id:"implicit-conversions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#implicit-conversions"}},[t._v("#")]),t._v(" Implicit Conversions")]),t._v(" "),s("p",[t._v("隐式函数(也称为"),s("strong",[t._v("隐式转换")]),t._v(")用于减少模板代码。更具体地说,它们用于自动将一个Scala对象转换为另一个对象。")]),t._v(" "),s("h3",{attrs:{id:"example-implicit-conversion"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-implicit-conversion"}},[t._v("#")]),t._v(" Example: Implicit Conversion")]),t._v(" "),s("p",[t._v("在下面的例子中,我们有两个类,"),s("strong",[s("code",[t._v("Animal")]),s("strong",[t._v("和")]),s("code",[t._v("Human")])]),t._v("。"),s("strong",[s("code",[t._v("Animal")]),s("strong",[t._v("有一个")]),s("code",[t._v("species")]),s("strong",[t._v("字段,但")]),s("code",[t._v("Human")]),s("strong",[t._v("没有。然而,通过实现一个隐式转换,我们可以在")]),s("code",[t._v("Human")]),s("strong",[t._v("上调用")]),s("code",[t._v("species")]),s("strong",[t._v("方法。这意味着即使")]),s("code",[t._v("Human")]),s("strong",[t._v("类原本不包含")]),s("code",[t._v("species")]),s("strong",[t._v("字段,通过隐式转换,我们也可以像访问自己的属性一样访问")]),s("code",[t._v("species")])]),t._v(",就好像这个属性是**"),s("code",[t._v("Human")]),t._v("**类的一部分一样。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" Animal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" species"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" Human"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implicit")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" human2animal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("h"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Human"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Animal "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Animal"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("h"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Homo sapiens"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" me "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Human"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Adam"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("me"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("species"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/27.d3bbbdbb.js b/assets/js/27.d3bbbdbb.js new file mode 100644 index 0000000..6048474 --- /dev/null +++ b/assets/js/27.d3bbbdbb.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{310:function(t,i,r){"use strict";r.r(i);var o=r(14),e=Object(o.a)({},(function(){var t=this,i=t._self._c;return i("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[i("h1",{attrs:{id:"_2023-11-07-verilog语法"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#_2023-11-07-verilog语法"}},[t._v("#")]),t._v(" 2023.11.07-Verilog语法")]),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2023.11.07-Verilog语法/1.Verilog 基础语法.html"}},[t._v("1. Verilog 基础语法")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2023.11.07-Verilog语法/2.Verilog 数值表示.html"}},[t._v("2. Verilog 数值表示")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2023.11.07-Verilog语法/3.Verilog 数据类型.html"}},[t._v("3. Verilog 数据类型")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2023.11.07-Verilog语法/4.Verilog 表达式.html"}},[t._v("4. Verilog 表达式")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2023.11.07-Verilog语法/10.Verilog 多路分支语句.html"}},[t._v("10. Verilog 多路分支语句")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2023.11.07-Verilog语法/2023.11.15-Vivado.html"}},[t._v("2023.11.15-Vivado")]),t._v(" "),i("RouterLink",{attrs:{to:"/Chip/Chip/2023.11.07-Verilog语法/2023.11.16-阻塞与非阻塞赋值.html"}},[t._v("2023.11.16-阻塞与非阻塞赋值")])],1)])}),[],!1,null,null,null);i.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/28.e8e7e576.js b/assets/js/28.e8e7e576.js new file mode 100644 index 0000000..2885f61 --- /dev/null +++ b/assets/js/28.e8e7e576.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{311:function(t,s,a){"use strict";a.r(s);var r=a(14),e=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_1-verilog-基础语法"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-verilog-基础语法"}},[t._v("#")]),t._v(" 1. Verilog 基础语法")]),t._v(" "),s("h2",{attrs:{id:"格式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#格式"}},[t._v("#")]),t._v(" "),s("strong",[t._v("格式")])]),t._v(" "),s("p",[t._v("Verilog 是区分大小写的。")]),t._v(" "),s("p",[t._v("格式自由,可以在一行内编写,也可跨多行编写。")]),t._v(" "),s("p",[t._v("每个语句必须以分号为结束符。空白符(换行、制表、空格)都没有实际的意义,在编译阶段可忽略。例如下面两中编程方式都是等效的。")]),t._v(" "),s("h3",{attrs:{id:"不换行-不推荐"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#不换行-不推荐"}},[t._v("#")]),t._v(" "),s("strong",[t._v("不换行(不推荐)")])]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" results "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" results "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b01")]),t._v(" : "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b10")]),t._v(" : "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b11")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h3",{attrs:{id:"换行-推荐"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#换行-推荐"}},[t._v("#")]),t._v(" "),s("strong",[t._v("换行(推荐)")])]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" results "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" results "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b01")]),t._v(" :"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b10")]),t._v(" :"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b11")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"注释"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#注释"}},[t._v("#")]),t._v(" "),s("strong",[t._v("注释")])]),t._v(" "),s("p",[t._v("Verilog 中有 2 种注释方式:")]),t._v(" "),s("p",[t._v("用 "),s("strong",[s("code",[t._v("//")])]),t._v(" 进行单行注释:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" counter "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// A definition of counter register")]),t._v("\n")])])]),s("p",[t._v("用**"),s("code",[t._v("/* */")]),t._v("**进行跨行注释:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" addr "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\nNext are notes with multiple lines.\nCodes here cannot be compiled.\n*/")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),t._v(" addr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12'b0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"标识符与关键字"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#标识符与关键字"}},[t._v("#")]),t._v(" "),s("strong",[t._v("标识符与关键字")])]),t._v(" "),s("p",[t._v("标识符(identifier)可以是任意一组字母、数字、"),s("strong",[t._v("$")]),t._v(" 符号和 "),s("strong",[t._v("_")]),t._v("(下划线)符号的合,但标识符的第一个字符必须是字母或者下划线,不能以数字或者美元符开始。")]),t._v(" "),s("p",[t._v("另外,标识符是区分大小写的。")]),t._v(" "),s("p",[t._v("关键字是 Verilog 中预留的用于定义语言结构的特殊标识符。")]),t._v(" "),s("p",[t._v("Verilog 中关键字全部为小写。")]),t._v(" "),s("h3",{attrs:{id:"实例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" counter "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//reg 为关键字, counter 为标识符*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" clk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//input 为关键字,clk 为标识符*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" CLK"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//CLK 与 clk是 2 个不同的标识符*")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/29.4d16912e.js b/assets/js/29.4d16912e.js new file mode 100644 index 0000000..9d57bf0 --- /dev/null +++ b/assets/js/29.4d16912e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{312:function(t,s,a){"use strict";a.r(s);var n=a(14),r=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_10-verilog-多路分支语句"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_10-verilog-多路分支语句"}},[t._v("#")]),t._v(" 10. Verilog 多路分支语句")]),t._v(" "),s("h3",{attrs:{id:"关键词-case-选择器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#关键词-case-选择器"}},[t._v("#")]),t._v(" 关键词:case,选择器")]),t._v(" "),s("p",[t._v("case 语句是一种多路条件分支的形式,可以解决 if 语句中有多个条件选项时使用不方便的问题。")]),t._v(" "),s("h2",{attrs:{id:"case-语句"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#case-语句"}},[t._v("#")]),t._v(" case 语句")]),t._v(" "),s("p",[t._v("case 语句格式如下:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("case")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("case_expr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n condition1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" true_statement1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n condition2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" true_statement2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ……\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" default_statement "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("endcase")]),t._v("\n")])])]),s("p",[t._v("case 语句执行时,如果 condition1 为真,则执行 true_statement1 ; 如果 condition1 为假,condition2 为真,则执行 true_statement2;依次类推。如果各个 condition 都不为真,则执行 default_statement 语句。")]),t._v(" "),s("p",[t._v("default 语句是可选的,且在一个 case 语句中不能有多个 default 语句。")]),t._v(" "),s("p",[t._v("条件选项可以有多个,不仅限于 condition1、condition2 等,而且这些条件选项不要求互斥。虽然这些条件选项是并发比较的,但执行效果是谁在前且条件为真谁被执行。")]),t._v(" "),s("p",[t._v("ture_statement1 等执行语句可以是一条语句,也可以是多条。如果是多条执行语句,则需要用 begin 与 end 关键字进行说明。")]),t._v(" "),s("h3",{attrs:{id:"case-语句支持嵌套使用。"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#case-语句支持嵌套使用。"}},[t._v("#")]),t._v(" "),s("strong",[t._v("case 语句支持嵌套使用。")])]),t._v(" "),s("p",[t._v("下面用 case 语句代替 if 语句实现了一个 4 路选择器的功能。仿真结果与 testbench 可参考"),s("a",{attrs:{href:"https://www.runoob.com/w3cnote/verilog-condition-statement.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("条件语句"),s("OutboundLink")],1),t._v("一章,两者完全一致。")]),t._v(" "),s("h3",{attrs:{id:"实例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("module")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("mux4to1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" sel "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" p0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" p1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" p2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" p3 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("output")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" sout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token important"}},[t._v("always")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" @"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b00")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" \n sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b01")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p3 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("endcase")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" sout "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("endmodule")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("p",[t._v("case 语句中的条件选项表单式不必都是常量,也可以是 x 值或 z 值。")]),t._v(" "),s("p",[t._v("当多个条件选项下需要执行相同的语句时,多个条件选项可以用逗号分开,放在同一个语句块的候选项中。")]),t._v(" "),s("h3",{attrs:{id:"例如-对-4-路选择器的-case-语句进行扩展-举例如下"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#例如-对-4-路选择器的-case-语句进行扩展-举例如下"}},[t._v("#")]),t._v(" 例如,对 4 路选择器的 case 语句进行扩展,举例如下:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b00")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b01")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b11")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p3 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bx0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bx1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bxz")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bxx")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b0x")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b1x")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bzx")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bxx")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bz0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bz1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bzz")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b0z")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b1z")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'bzz")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token kernel-function property"}},[t._v("$display")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Unexpected input control!!!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("endcase")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("h2",{attrs:{id:"casex-casez-语句"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#casex-casez-语句"}},[t._v("#")]),t._v(" "),s("code",[t._v("casex")]),t._v("/"),s("code",[t._v("casez")]),t._v(" 语句")]),t._v(" "),s("p",[t._v("casex、 casez 语句是 case 语句的变形,用来表示条件选项中的无关项。")]),t._v(" "),s("p",[t._v('casex 用 "x" 来表示无关值,casez 用问号 "?" 来表示无关值。')]),t._v(" "),s("p",[t._v("两者的实现的功能是完全一致的,语法与 case 语句也完全一致。")]),t._v(" "),s("ol",[s("li",[t._v("在case语句中,敏感表达式中与各项值之间的比较是一种全等比较,每一位都相同才认为匹配。")]),t._v(" "),s("li",[t._v("在casez语句中,如果分支表达式某些位的值为高阻z,那么对这些位的比较就会忽略,不予考虑,而只关注其他位的比较结果。")]),t._v(" "),s("li",[t._v("在casex语句中,则把这种处理方式进一步扩展到对x的处理,即如果比较双方有一方的某些位的值是z或x,那么这些位的比较就不予考虑。")])]),t._v(" "),s("p",[s("img",{attrs:{src:"10.Verilog.%E5%A4%9A%E8%B7%AF%E5%88%86%E6%94%AF%E8%AF%AD%E5%8F%A5Untitled.png",alt:"Untitled"}})]),t._v(" "),s("h3",{attrs:{id:"例如用-casez-语句来实现一个-4bit-控制端的-4-路选择选择器。"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#例如用-casez-语句来实现一个-4bit-控制端的-4-路选择选择器。"}},[t._v("#")]),t._v(" 例如用 casez 语句来实现一个 4bit 控制端的 4 路选择选择器。")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("module")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("mux4to1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" sel "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" p0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" p1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" p2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" p3 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("output")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" sout"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token important"}},[t._v("always")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" @"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("casez")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b???1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p0 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b??1?")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b?1??")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b1???")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" p3 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("endcase")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" sout "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sout_t "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("endmodule")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/3.34faa58e.js b/assets/js/3.34faa58e.js new file mode 100644 index 0000000..a31541f --- /dev/null +++ b/assets/js/3.34faa58e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3,18,19],{241:function(t,e,n){"use strict";n.d(e,"d",(function(){return r})),n.d(e,"a",(function(){return s})),n.d(e,"i",(function(){return a})),n.d(e,"f",(function(){return l})),n.d(e,"g",(function(){return u})),n.d(e,"h",(function(){return c})),n.d(e,"b",(function(){return p})),n.d(e,"e",(function(){return d})),n.d(e,"k",(function(){return h})),n.d(e,"l",(function(){return f})),n.d(e,"c",(function(){return g})),n.d(e,"j",(function(){return m}));n(45);const r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,a=/^[a-z]+:/i;function o(t){return decodeURI(t).replace(r,"").replace(i,"")}function l(t){return a.test(t)}function u(t){return/^mailto:/.test(t)}function c(t){return/^tel:/.test(t)}function p(t){if(l(t))return t;const e=t.match(r),n=e?e[0]:"",i=o(t);return s.test(i)?t:i+".html"+n}function d(t,e){const n=decodeURIComponent(t.hash),i=function(t){const e=t.match(r);if(e)return e[0]}(e);if(i&&n!==i)return!1;return o(t.path)===o(e)}function h(t,e,n){if(l(e))return{type:"external",path:e};n&&(e=function(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(e,n,r,i=1){if("string"==typeof e)return h(n,e,r);if(Array.isArray(e))return Object.assign(h(n,e[0],r),{title:e[1]});{const s=e.children||[];return 0===s.length&&e.path?Object.assign(h(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,initialOpenGroupIndex:e.initialOpenGroupIndex,children:s.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}}(t,i,n)):[]}return[]}function b(t){const e=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:e.map(e=>({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}function g(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function m(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},242:function(t,e,n){},244:function(t,e,n){"use strict";n.r(e);var r={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(n(245),n(14)),s=Object(i.a)(r,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.default=s.exports},245:function(t,e,n){"use strict";n(242)},247:function(t,e,n){},252:function(t,e,n){},254:function(t,e,n){"use strict";n(247)},255:function(t,e,n){"use strict";n.r(e);var r=n(268),i=n(257),s=n(241);function a(t,e){if("group"===e.type){const n=e.path&&Object(s.e)(t,e.path),r=e.children.some(e=>"group"===e.type?a(t,e):"page"===e.type&&Object(s.e)(t,e.path));return n||r}return!1}var o={name:"SidebarLinks",components:{SidebarGroup:r.default,SidebarLink:i.default},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,e){for(let n=0;n-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(s.e)(this.$route,t.regularPath)}}},l=n(14),u=Object(l.a)(o,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(n,r){return e("li",{key:r},["group"===n.type?e("SidebarGroup",{attrs:{item:n,open:r===t.openGroupIndex,collapsable:n.collapsable||n.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(r)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:n}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=u.exports},257:function(t,e,n){"use strict";n.r(e);var r=n(241);function i(t,e,n,r,i){const s={props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(s.style={"padding-left":i+"rem"}),t("RouterLink",s,n)}function s(t,e,n,a,o,l=1){return!e||l>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const u=Object(r.e)(a,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[i(t,n+"#"+e.slug,e.title,u,e.level-1),s(t,e.children,n,a,o,l+1)])}))}var a={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:n,$route:a,$themeConfig:o,$themeLocaleConfig:l},props:{item:u,sidebarDepth:c}}){const p=Object(r.e)(a,u.path),d="auto"===u.type?p||u.children.some(t=>Object(r.e)(a,u.basePath+"#"+t.slug)):p,h="external"===u.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,u.path,u.title||u.path):i(t,u.path,u.title||u.path,d),f=[e.frontmatter.sidebarDepth,c,l.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),b=l.displayAllHeaders||o.displayAllHeaders;if("auto"===u.type)return[h,s(t,u.children,u.basePath,a,f)];if((d||b)&&u.headers&&!r.d.test(u.path)){return[h,s(t,Object(r.c)(u.headers),u.path,a,f)]}return h}},o=(n(254),n(14)),l=Object(o.a)(a,void 0,void 0,!1,null,null,null);e.default=l.exports},265:function(t,e,n){"use strict";n(252)},268:function(t,e,n){"use strict";n.r(e);var r=n(241),i={name:"SidebarGroup",components:{DropdownTransition:n(244).default},props:["item","open","collapsable","depth"],beforeCreate(){this.$options.components.SidebarLinks=n(255).default},methods:{isActive:r.e}},s=(n(265),n(14)),a=Object(s.a)(i,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/30.9af0e416.js b/assets/js/30.9af0e416.js new file mode 100644 index 0000000..50b65ce --- /dev/null +++ b/assets/js/30.9af0e416.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{313:function(s,t,a){"use strict";a.r(t);var r=a(14),e=Object(r.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"_2-verilog-数值表示"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2-verilog-数值表示"}},[s._v("#")]),s._v(" 2. Verilog 数值表示")]),s._v(" "),t("h2",{attrs:{id:"数值种类"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#数值种类"}},[s._v("#")]),s._v(" "),t("strong",[s._v("数值种类")])]),s._v(" "),t("p",[s._v("Verilog HDL 有下列四种基本的值来表示硬件电路中的电平逻辑:")]),s._v(" "),t("ul",[t("li",[s._v('0:逻辑 0 或 "假"')]),s._v(" "),t("li",[s._v('1:逻辑 1 或 "真"')]),s._v(" "),t("li",[s._v("x 或 X:未知")]),s._v(" "),t("li",[s._v("z 或 Z:高阻")])]),s._v(" "),t("p",[t("strong",[t("code",[s._v("x")])]),s._v(" 意味着信号数值的不确定,即在实际电路里,信号可能为 1,也可能为 0。")]),s._v(" "),t("p",[t("strong",[t("code",[s._v("z")])]),s._v(" 意味着信号处于高阻状态,常见于信号(input, reg)没有驱动时的逻辑结果。例如一个 pad 的 input 呈现高阻状态时,其逻辑值和上下拉的状态有关系。上拉则逻辑值为 1,下拉则为 0 。")]),s._v(" "),t("h2",{attrs:{id:"整数数值表示方法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#整数数值表示方法"}},[s._v("#")]),s._v(" "),t("strong",[s._v("整数数值表示方法")])]),s._v(" "),t("p",[s._v("数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。")]),s._v(" "),t("h3",{attrs:{id:"指明位宽"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#指明位宽"}},[s._v("#")]),s._v(" "),t("strong",[s._v("指明位宽:")])]),s._v(" "),t("div",{staticClass:"language-verilog extra-class"},[t("pre",{pre:!0,attrs:{class:"language-verilog"}},[t("code",[t("span",{pre:!0,attrs:{class:"token number"}},[s._v("4'b1011")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 4bit 数值*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("32'h3022_c0de")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 32bit 的数值 一个16进制的数需要4bit来表示*")]),s._v("\n")])])]),t("p",[s._v("其中,下划线 "),t("strong",[t("code",[s._v("_")])]),s._v(" 是为了增强代码的可读性。")]),s._v(" "),t("h3",{attrs:{id:"不指明位宽"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#不指明位宽"}},[s._v("#")]),s._v(" "),t("strong",[s._v("不指明位宽:")])]),s._v(" "),t("p",[s._v("一般直接写数字时,默认为十进制表示,例如下面的 3 种写法是等效的:")]),s._v(" "),t("div",{staticClass:"language-verilog extra-class"},[t("pre",{pre:!0,attrs:{class:"language-verilog"}},[t("code",[s._v("counter "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("'d100")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//一般会根据编译器自动分频位宽,常见的为32bit*")]),s._v("\ncounter "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\ncounter "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("32'h64")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])])]),t("h3",{attrs:{id:"负数表示"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#负数表示"}},[s._v("#")]),s._v(" "),t("strong",[s._v("负数表示")])]),s._v(" "),t("p",[s._v("通常在表示位宽的数字前面加一个减号来表示负数。例如:")]),s._v(" "),t("div",{staticClass:"language-verilog extra-class"},[t("pre",{pre:!0,attrs:{class:"language-verilog"}},[t("code",[t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("6'd15")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("15")]),s._v("\n")])])]),t("ul",[t("li",[s._v("15 在 5 位二进制中的形式为 5'b10001, 在 6 位二进制中的形式为 6'b11_0001。")])]),s._v(" "),t("p",[s._v("需要注意的是,减号放在基数和数字之间是非法的,例如下面的表示方法是错误的:")]),s._v(" "),t("div",{staticClass:"language-verilog extra-class"},[t("pre",{pre:!0,attrs:{class:"language-verilog"}},[t("code",[t("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),s._v("'d"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//非法说明")]),s._v("\n")])])]),t("h2",{attrs:{id:"实数表示方法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#实数表示方法"}},[s._v("#")]),s._v(" "),t("strong",[s._v("实数表示方法")])]),s._v(" "),t("p",[s._v("实数表示方法主要有两种方式:")]),s._v(" "),t("h3",{attrs:{id:"十进制"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#十进制"}},[s._v("#")]),s._v(" "),t("strong",[s._v("十进制:")])]),s._v(" "),t("div",{staticClass:"language-verilog extra-class"},[t("pre",{pre:!0,attrs:{class:"language-verilog"}},[t("code",[t("span",{pre:!0,attrs:{class:"token number"}},[s._v("30.123")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("6.0")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("3.0")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.001")]),s._v("\n")])])]),t("h3",{attrs:{id:"科学计数法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#科学计数法"}},[s._v("#")]),s._v(" "),t("strong",[s._v("科学计数法:")])]),s._v(" "),t("div",{staticClass:"language-verilog extra-class"},[t("pre",{pre:!0,attrs:{class:"language-verilog"}},[t("code",[t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1.2e4")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//大小为12000")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1_0001e4")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//大小为100010000")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1E-3")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("//大小为0.001")]),s._v("\n")])])]),t("h2",{attrs:{id:"字符串表示方法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#字符串表示方法"}},[s._v("#")]),s._v(" "),t("strong",[s._v("字符串表示方法")])]),s._v(" "),t("p",[s._v('字符串是由双引号包起来的字符队列。字符串不能多行书写,即字符串中不能包含回车符。Verilog 将字符串当做一系列的单字节 ASCII 字符队列。例如,为存储字符串 "www.runoob.com", 需要 14*8bit 的存储单元。例如:')]),s._v(" "),t("div",{staticClass:"language-verilog extra-class"},[t("pre",{pre:!0,attrs:{class:"language-verilog"}},[t("code",[t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("reg")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("14")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("8")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("-")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" str "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("initial")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("begin")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),s._v(" \n\t\t\tstr "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"www.runoob.com"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("end")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("**")]),s._v("\n")])])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/31.fe73f524.js b/assets/js/31.fe73f524.js new file mode 100644 index 0000000..8b4e0b3 --- /dev/null +++ b/assets/js/31.fe73f524.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{314:function(v,_,l){"use strict";l.r(_);var i=l(14),s=Object(i.a)({},(function(){var v=this,_=v._self._c;return _("ContentSlotsDistributor",{attrs:{"slot-key":v.$parent.slotKey}},[_("h1",{attrs:{id:"_2023-11-15-vivado"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#_2023-11-15-vivado"}},[v._v("#")]),v._v(" 2023.11.15-Vivado")]),v._v(" "),_("h2",{attrs:{id:"_1-rtl-schematic-synthesis-schematic"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#_1-rtl-schematic-synthesis-schematic"}},[v._v("#")]),v._v(" 1. RTL Schematic & Synthesis Schematic")]),v._v(" "),_("p",[v._v("在 Vivado 或类似的 FPGA 开发环境中,您会遇到 RTL (Register Transfer Level) 分析中的 Schematic 和 Synthesis 过程中的 Schematic。它们虽然看起来相似,但代表了不同阶段的电路设计和功能。")]),v._v(" "),_("ol",[_("li",[_("p",[_("strong",[v._v("RTL Analysis Schematic")]),v._v(":")]),v._v(" "),_("ul",[_("li",[v._v("这个 Schematic 是您用硬件描述语言(如 Verilog)编写的代码的直接可视化表示。")]),v._v(" "),_("li",[v._v("它展示了代码中定义的模块、它们的互联以及信号流。")]),v._v(" "),_("li",[v._v("RTL Schematic 重点在于逻辑功能的实现,而不是实际硬件如何实现这些功能。它更多地表示逻辑结构而非物理结构。")]),v._v(" "),_("li",[v._v("这是设计验证的早期阶段,您可以在这里检查逻辑错误或结构问题。")])]),v._v(" "),_("p",[_("img",{attrs:{src:"2023.11.15-VivadoUntitled.png",alt:"Untitled"}})])]),v._v(" "),_("li",[_("p",[_("strong",[v._v("Synthesis Schematic")]),v._v(":")]),v._v(" "),_("ul",[_("li",[v._v("经过综合后的 Schematic 是将 RTL 设计转换为实际 FPGA 内部资源(如查找表(LUTs)、寄存器和逻辑单元)的表示。")]),v._v(" "),_("li",[v._v("这个过程涉及优化、逻辑最小化、资源分配和时序分析。")]),v._v(" "),_("li",[v._v("Synthesis Schematic 展示了设计如何映射到 FPGA 的实际硬件上,包括使用的具体资源和连接。")]),v._v(" "),_("li",[v._v("这是设计流程的后期阶段,您可以在这里优化性能、资源使用和满足时序要求。")])]),v._v(" "),_("p",[_("img",{attrs:{src:"2023.11.15-VivadoUntitled%201.png",alt:"Untitled"}})])])]),v._v(" "),_("p",[v._v("总结来说,RTL Schematic 关注于逻辑设计的表示,而 Synthesis Schematic 则关注于该设计在 FPGA 上的物理实现。理解两者的区别对于 FPGA 开发至关重要,因为这影响着您如何优化设计以及解决可能出现的问题。")]),v._v(" "),_("h2",{attrs:{id:"_2-project汇总中的lut-ff-io-bufg"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#_2-project汇总中的lut-ff-io-bufg"}},[v._v("#")]),v._v(" 2. Project汇总中的LUT,FF,IO,BUFG")]),v._v(" "),_("p",[v._v("在 Vivado 或类似的 FPGA 设计项目中,您会遇到几个关键的资源指标,如 LUT、FF、IO 和 BUFG。这些指标是 FPGA 设计和资源利用的重要部分。下面是每个术语的简要解释:")]),v._v(" "),_("ol",[_("li",[_("strong",[v._v("LUT (Look-Up Table)")]),v._v(":\n"),_("ul",[_("li",[v._v("LUT 是 FPGA 中实现逻辑功能的基本单元。")]),v._v(" "),_("li",[v._v("它本质上是一个可编程的真值表,可以配置为执行各种逻辑操作(如 AND、OR、NOT、XOR 等)。")]),v._v(" "),_("li",[v._v("LUT 的大小和数量是 FPGA 性能和复杂性的关键决定因素。在设计中,LUT 的使用量通常是衡量设计复杂度的一个重要指标。")])])]),v._v(" "),_("li",[_("strong",[v._v("FF (Flip-Flop)")]),v._v(":\n"),_("ul",[_("li",[v._v("FF 是用于存储数据的基本存储元件,通常用于实现寄存器、计数器等。")]),v._v(" "),_("li",[v._v("在 FPGA 中,FF 通常与 LUT 配对使用,以实现存储和逻辑功能的组合。")]),v._v(" "),_("li",[v._v("FF 的数量通常表明了设计中的数据存储需求和时序复杂度。")])])]),v._v(" "),_("li",[_("strong",[v._v("IO (Input/Output Ports)")]),v._v(":\n"),_("ul",[_("li",[v._v("这些是 FPGA 与外界通信的端口,包括输入端口和输出端口。")]),v._v(" "),_("li",[v._v("IO 的数量和类型(如单端或差分)取决于 FPGA 的物理特性和您的设计需求。")]),v._v(" "),_("li",[v._v("在设计中,您需要确保 FPGA 有足够的 IO 端口来满足您的外部连接需求。")])])]),v._v(" "),_("li",[_("strong",[v._v("BUFG (Buffered Global Clock)")]),v._v(":\n"),_("ul",[_("li",[v._v("BUFG 是一种专用的时钟缓冲器,用于分配全局时钟信号。")]),v._v(" "),_("li",[v._v("在复杂的 FPGA 设计中,确保时钟信号的稳定和同步是非常重要的。BUFG 能够在整个芯片上稳定地分配时钟信号。")]),v._v(" "),_("li",[v._v("BUFG 的使用和配置对于实现有效的时钟管理和避免时钟偏移非常关键。")])])])]),v._v(" "),_("p",[v._v("理解这些资源对于 FPGA 设计至关重要,因为它们直接影响您的设计能否在特定的 FPGA 上实现,以及该设计的性能和效率。在 Vivado 的项目汇总中,这些参数帮助您评估设计对 FPGA 资源的利用情况。")]),v._v(" "),_("h2",{attrs:{id:"_3-fpga的组成构造"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#_3-fpga的组成构造"}},[v._v("#")]),v._v(" 3. FPGA的组成构造")]),v._v(" "),_("p",[v._v("FPGA (Field-Programmable Gate Array) 是一种高度灵活的可编程硬件,它由多个不同的元件构成,共同实现复杂的数字逻辑功能。以下是 FPGA 内部主要组成部分的概述:")]),v._v(" "),_("ol",[_("li",[_("strong",[v._v("查找表 (LUTs)")]),v._v(":\n"),_("ul",[_("li",[v._v("如您所述,LUTs 是 FPGA 的核心,用于实现基本的逻辑功能。它们通过存储预定义的输出值来模拟逻辑门的行为。")]),v._v(" "),_("li",[v._v("LUTs 可以通过编程来实现简单的逻辑操作(如 AND、OR、NOT)或更复杂的组合逻辑。")])])]),v._v(" "),_("li",[_("strong",[v._v("多路选择器 (MUXes)")]),v._v(":\n"),_("ul",[_("li",[v._v("虽然在传统的逻辑电路中,MUXes 是通过逻辑门实现的,但在 FPGA 中,它们通常与 LUTs 结合或独立实现。")]),v._v(" "),_("li",[v._v("MUXes 在 FPGA 设计中用于根据控制信号选择不同的输入路径,这对于创建复杂的数据路径和逻辑结构至关重要。")])])]),v._v(" "),_("li",[_("strong",[v._v("触发器 (Flip-Flops)")]),v._v(":\n"),_("ul",[_("li",[v._v("Flip-Flops 用于存储信息,是实现时序逻辑的关键元件。它们通常与 LUTs 配对,以构成可存储状态的逻辑单元。")])])]),v._v(" "),_("li",[_("strong",[v._v("编程互联资源 (Programmable Interconnects)")]),v._v(":\n"),_("ul",[_("li",[v._v("这些是连接 FPGA 内部不同部件的路径。它们可以被编程以形成任何所需的逻辑网络,从而将 LUTs、Flip-Flops 和其他资源连接起来。")])])]),v._v(" "),_("li",[_("strong",[v._v("输入/输出块 (I/O Blocks)")]),v._v(":\n"),_("ul",[_("li",[v._v("这些块连接 FPGA 和外部世界,提供数据输入和输出功能。它们可以配置为不同类型的接口(如单端或差分)。")])])]),v._v(" "),_("li",[_("strong",[v._v("专用硬件资源")]),v._v(":\n"),_("ul",[_("li",[v._v("许多 FPGA 还包含专用的硬件资源,如 DSP (数字信号处理) 块、内存控制器、时钟管理模块(如 PLLs 和 BUFGs),以及其他特定功能块。")])])]),v._v(" "),_("li",[_("strong",[v._v("存储资源")]),v._v(":\n"),_("ul",[_("li",[v._v("包括 RAM 块 (Block RAM) 或更小的存储单元,用于数据存储和缓冲。")])])])]),v._v(" "),_("p",[v._v("FPGA 的关键优势在于其高度可编程性和灵活性。设计师可以通过编程定义 LUTs、MUXes、Flip-Flops 以及互连的配置和组合方式,从而在没有物理改动硬件的情况下实现几乎任何数字逻辑设计。这种灵活性使得 FPGA 在快速原型制作、定制硬件加速和可重配置系统中非常有价值。")]),v._v(" "),_("p",[v._v("FPGA (Field-Programmable Gate Array) 是一种高度灵活的可编程硬件,它由多个不同的元件构成,共同实现复杂的数字逻辑功能。以下是 FPGA 内部主要组成部分的概述:")]),v._v(" "),_("ol",[_("li",[_("strong",[v._v("查找表 (LUTs)")]),v._v(":\n"),_("ul",[_("li",[v._v("如您所述,LUTs 是 FPGA 的核心,用于实现基本的逻辑功能。它们通过存储预定义的输出值来模拟逻辑门的行为。")]),v._v(" "),_("li",[v._v("LUTs 可以通过编程来实现简单的逻辑操作(如 AND、OR、NOT)或更复杂的组合逻辑。")])])]),v._v(" "),_("li",[_("strong",[v._v("多路选择器 (MUXes)")]),v._v(":\n"),_("ul",[_("li",[v._v("虽然在传统的逻辑电路中,MUXes 是通过逻辑门实现的,但在 FPGA 中,它们通常与 LUTs 结合或独立实现。")]),v._v(" "),_("li",[v._v("MUXes 在 FPGA 设计中用于根据控制信号选择不同的输入路径,这对于创建复杂的数据路径和逻辑结构至关重要。")])])]),v._v(" "),_("li",[_("strong",[v._v("触发器 (Flip-Flops)")]),v._v(":\n"),_("ul",[_("li",[v._v("Flip-Flops 用于存储信息,是实现时序逻辑的关键元件。它们通常与 LUTs 配对,以构成可存储状态的逻辑单元。")])])]),v._v(" "),_("li",[_("strong",[v._v("编程互联资源 (Programmable Interconnects)")]),v._v(":\n"),_("ul",[_("li",[v._v("这些是连接 FPGA 内部不同部件的路径。它们可以被编程以形成任何所需的逻辑网络,从而将 LUTs、Flip-Flops 和其他资源连接起来。")])])]),v._v(" "),_("li",[_("strong",[v._v("输入/输出块 (I/O Blocks)")]),v._v(":\n"),_("ul",[_("li",[v._v("这些块连接 FPGA 和外部世界,提供数据输入和输出功能。它们可以配置为不同类型的接口(如单端或差分)。")])])]),v._v(" "),_("li",[_("strong",[v._v("专用硬件资源")]),v._v(":\n"),_("ul",[_("li",[v._v("许多 FPGA 还包含专用的硬件资源,如 DSP (数字信号处理) 块、内存控制器、时钟管理模块(如 PLLs 和 BUFGs),以及其他特定功能块。")])])]),v._v(" "),_("li",[_("strong",[v._v("存储资源")]),v._v(":\n"),_("ul",[_("li",[v._v("包括 RAM 块 (Block RAM) 或更小的存储单元,用于数据存储和缓冲。")])])])]),v._v(" "),_("p",[v._v("FPGA 的关键优势在于其高度可编程性和灵活性。设计师可以通过编程定义 LUTs、MUXes、Flip-Flops 以及互连的配置和组合方式,从而在没有物理改动硬件的情况下实现几乎任何数字逻辑设计。这种灵活性使得 FPGA 在快速原型制作、定制硬件加速和可重配置系统中非常有价值。")])])}),[],!1,null,null,null);_.default=s.exports}}]); \ No newline at end of file diff --git a/assets/js/32.b1be8e96.js b/assets/js/32.b1be8e96.js new file mode 100644 index 0000000..57e39d9 --- /dev/null +++ b/assets/js/32.b1be8e96.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{315:function(t,s,a){"use strict";a.r(s);var n=a(14),v=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2023-11-16-阻塞与非阻塞赋值"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2023-11-16-阻塞与非阻塞赋值"}},[t._v("#")]),t._v(" 2023.11.16-阻塞与非阻塞赋值")]),t._v(" "),s("p",[s("img",{attrs:{src:"2023.11.16-%E9%98%BB%E5%A1%9E%E4%B8%8E%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B5%8B%E5%80%BCUntitled.png",alt:"Untitled"}})]),t._v(" "),s("p",[s("img",{attrs:{src:"2023.11.16-%E9%98%BB%E5%A1%9E%E4%B8%8E%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B5%8B%E5%80%BCUntitled%201.png",alt:"Untitled"}})]),t._v(" "),s("p",[t._v("组合逻辑电路使用阻塞赋值")]),t._v(" "),s("p",[t._v("时序逻辑电路使用非阻塞赋值")]),t._v(" "),s("p",[t._v("在 Verilog 中,阻塞赋值(Blocking Assignment)和非阻塞赋值(Non-Blocking Assignment)是两种不同的信号赋值方法,它们在时序逻辑的模拟和硬件描述语言(HDL)代码的编写中有着重要的区别。")]),t._v(" "),s("h3",{attrs:{id:"阻塞赋值-blocking-assignment"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#阻塞赋值-blocking-assignment"}},[t._v("#")]),t._v(" "),s("strong",[t._v("阻塞赋值(Blocking Assignment)")])]),t._v(" "),s("ul",[s("li",[t._v("使用符号 "),s("strong",[s("code",[t._v("=")])]),t._v(" 进行赋值。")]),t._v(" "),s("li",[t._v("阻塞赋值在执行时会“阻塞”代码的进一步执行,直到赋值完成。")]),t._v(" "),s("li",[t._v("在执行下一条语句之前,当前语句必须完成其操作。")]),t._v(" "),s("li",[t._v("在组合逻辑设计中常用,但在时序逻辑中使用可能会导致问题,因为它们可能会引起模拟时序和硬件时序的不一致。")])]),t._v(" "),s("p",[s("strong",[t._v("举例")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("在这个例子中,"),s("strong",[s("code",[t._v("c = a;")])]),t._v(" 会等待 "),s("strong",[s("code",[t._v("a = b;")])]),t._v(" 完成后才执行。")]),t._v(" "),s("h3",{attrs:{id:"非阻塞赋值-non-blocking-assignment"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#非阻塞赋值-non-blocking-assignment"}},[t._v("#")]),t._v(" "),s("strong",[t._v("非阻塞赋值(Non-Blocking Assignment)")])]),t._v(" "),s("ul",[s("li",[t._v("使用符号 "),s("strong",[s("code",[t._v("<=")])]),t._v(" 进行赋值。")]),t._v(" "),s("li",[t._v("非阻塞赋值允许代码的后续部分在赋值完成之前继续执行。")]),t._v(" "),s("li",[t._v("这意味着所有非阻塞赋值都是并行发生的(或看起来如此),这更接近于硬件的实际行为。")]),t._v(" "),s("li",[t._v("在时序逻辑,特别是在描述触发器(如寄存器)的行为时非常重要和常用。")])]),t._v(" "),s("p",[s("strong",[t._v("举例")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("在这个例子中,"),s("strong",[s("code",[t._v("c <= a;")])]),t._v(" 不会等待 "),s("strong",[s("code",[t._v("a <= b;")])]),t._v(" 的完成。"),s("strong",[s("code",[t._v("a")])]),t._v(" 和 "),s("strong",[s("code",[t._v("c")])]),t._v(" 的赋值看似同时发生。")]),t._v(" "),s("p",[t._v("在一个always块中,不同地方对同一个变量的赋值会被同时执行,最终结果是变量变成最后一次赋值的结果(前面的操作被覆盖)")])])}),[],!1,null,null,null);s.default=v.exports}}]); \ No newline at end of file diff --git a/assets/js/33.6e59f7d5.js b/assets/js/33.6e59f7d5.js new file mode 100644 index 0000000..b2269d8 --- /dev/null +++ b/assets/js/33.6e59f7d5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{316:function(t,s,a){"use strict";a.r(s);var r=a(14),n=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_3-verilog-数据类型"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-verilog-数据类型"}},[t._v("#")]),t._v(" 3. Verilog 数据类型")]),t._v(" "),s("p",[t._v("Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。")]),t._v(" "),s("h2",{attrs:{id:"线网-wire"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#线网-wire"}},[t._v("#")]),t._v(" "),s("strong",[t._v("线网(wire)")])]),t._v(" "),s("p",[t._v('wire 类型表示硬件单元之间的物理连线,由其连接的器件输出端连续驱动。如果没有驱动元件连接到 wire 型变量,缺省值一般为 "Z"。举例如下:')]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" interrupt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" flag1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" flag2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" gnd "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("线网型还有其他数据类型,包括 "),s("code",[t._v("wand,wor,wri,triand,trior,trireg")]),t._v(" 等。这些数据类型用的频率不是很高,这里不做介绍。")]),t._v(" "),s("h2",{attrs:{id:"寄存器-reg"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#寄存器-reg"}},[t._v("#")]),t._v(" "),s("strong",[t._v("寄存器(reg)")])]),t._v(" "),s("p",[t._v("寄存器(reg)用来表示存储单元,它会保持数据原有的值,直到被改写。声明举例如下:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" clk_temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" flag1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" flag2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("例如在 always 块中,寄存器可能被综合成边沿触发器,在组合逻辑中可能被综合成 wire 型变量。寄存器不需要驱动源,也不一定需要时钟信号。在仿真时,寄存器的值可在任意时刻通过赋值操作进行改写。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" rstn "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("initial")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" \n\t\trstn "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("#100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n rstn "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("h2",{attrs:{id:"向量"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#向量"}},[t._v("#")]),t._v(" "),s("strong",[t._v("向量")])]),t._v(" "),s("p",[t._v("当位宽大于 1 时,wire 或 reg 即可声明为向量的形式。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" counter "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//声明4bit位宽的寄存器counter*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" gpio_data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//声明32bit位宽的线型变量gpio_data*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" addr "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//声明7bit位宽的线型变量addr,位宽范围为8:2*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//声明32bit位宽的寄存器变量data, 最高有效位为0*")]),t._v("\n")])])]),s("p",[t._v("对于上面的向量,我们可以指定某一位或若干相邻位,作为其他逻辑使用。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data_low "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("addr_temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("Verilog 支持可变的向量域选择,例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" byte1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("integer")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" j "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token important"}},[t._v("always")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("@"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n byte1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//把data1[7:0]…data1[31:24]依次赋值给byte1[0][7:0]…byte[3][7:0]*")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("p",[s("strong",[t._v("Verilog 还支持指定 bit 位后固定位宽的向量域选择访问。")])]),t._v(" "),s("ul",[s("li",[s("strong",[t._v("[bit+: width]")]),t._v(" : 从起始 bit 位开始递增,位宽为 width。")]),t._v(" "),s("li",[s("strong",[t._v("[bit-: width]")]),t._v(" : 从起始 bit 位开始递减,位宽为 width。")])]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//下面 2 种赋值是等效的*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//下面 2 种赋值是等效的*")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[s("strong",[t._v("对信号重新进行组合成新的向量时,需要借助大括号。例如:")])]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" temp1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" temp2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" temp1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),t._v("byte1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//数据拼接*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" temp2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("}}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//赋值32位的数值0*")]),t._v("\n")])])]),s("h2",{attrs:{id:"整数-实数-时间寄存器变量"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#整数-实数-时间寄存器变量"}},[t._v("#")]),t._v(" "),s("strong",[t._v("整数,实数,时间寄存器变量")])]),t._v(" "),s("p",[t._v("整数,实数,时间等数据类型实际也属于寄存器类型。")]),t._v(" "),s("h3",{attrs:{id:"整数-integer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#整数-integer"}},[t._v("#")]),t._v(" "),s("strong",[t._v("整数(integer)")])]),t._v(" "),s("p",[t._v("整数类型用关键字 integer 来声明。声明时不用指明位宽,位宽和编译器有关,一般为32 bit。reg 型变量为无符号数,而 integer 型变量为有符号数。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" byte1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//数组变量,后续介绍*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("integer")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" j "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//整型变量,用来辅助生成数字电路*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token important"}},[t._v("always")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("@"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n byte1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//把data1[7:0]…data1[31:24]依次赋值给byte1[0][7:0]…byte[3][7:0]*")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("p",[t._v("此例中,integer 信号 j 作为辅助信号,将 data1 的数据依次赋值给数组 byte1。综合后实际电路里并没有 j 这个信号,j 只是辅助生成相应的硬件电路。")]),t._v(" "),s("h3",{attrs:{id:"实数-real"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实数-real"}},[t._v("#")]),t._v(" "),s("strong",[t._v("实数(real)")])]),t._v(" "),s("p",[t._v("实数用关键字 real 来声明,可用十进制或科学计数法来表示。实数声明不能带有范围,默认值为 0。如果将一个实数赋值给一个整数,则只有实数的整数部分会赋值给整数。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("real")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" data1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("integer")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" temp "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("initial")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n data1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2e3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n data1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.75")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("initial")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n temp "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//temp 值的大小为3*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("h3",{attrs:{id:"时间-time"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#时间-time"}},[t._v("#")]),t._v(" "),s("strong",[t._v("时间(time)")])]),t._v(" "),s("p",[t._v("Verilog 使用特殊的时间寄存器 time 型变量,对仿真时间进行保存。其宽度一般为 64 bit,通过调用系统函数 $time 获取当前仿真时间。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("time")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" current_time "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("initial")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("#100")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n current_time "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token kernel-function property"}},[t._v("$time")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//current_time 的大小为 100*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("h3",{attrs:{id:"数组"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#数组"}},[t._v("#")]),t._v(" "),s("strong",[t._v("数组")])]),t._v(" "),s("p",[t._v("在 Verilog 中允许声明 "),s("code",[t._v("reg, wire, integer, time, real")]),t._v(" 及其向量类型的数组。")]),t._v(" "),s("p",[t._v("数组维数没有限制。线网数组也可以用于连接实例模块的端口。数组中的每个元素都可以作为一个标量或者向量,以同样的方式来使用,形如:"),s("strong",[t._v("数组名[下标]")]),t._v("。对于多维数组来讲,用户需要说明其每一维的索引。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("integer")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" flag "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//8个整数组成的数组*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" counter "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//由4个4bit计数器组成的数组*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" addr_bus "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//由4个8bit wire型变量组成的数组*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" data_bit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//声明1bit wire型变量的二维数组*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("31")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" data_4d"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("255")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//声明4维的32bit数据变量数组*")]),t._v("\n")])])]),s("p",[t._v("下面显示了对数组元素的赋值操作:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("flag "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32'd0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//将flag数组中第二个元素赋值为32bit的0值*")]),t._v("\ncounter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'hF")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//将数组counter中第4个元素的值赋值为4bit 十六进制数F,等效于counter[3][3:0] = 4'hF,即可省略宽度;*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" addr_bus"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8'b0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//将数组addr_bus中第一个元素的值赋值为0*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" data_bit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//将数组data_bit的第1行第2列的元素赋值为1,这里不能省略第二个访问标号,即 assign data_bit[0] = 1'b1; 是非法的。*")]),t._v("\ndata_4d"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("15'd3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//将数组data_4d中标号为[0][0][0][0]的寄存器单元的15~0bit赋值为3*")]),t._v("\n")])])]),s("p",[t._v("虽然数组与向量的访问方式在一定程度上类似,但不要将向量和数组混淆。向量是一个单独的元件,位宽为 n;数组由多个元件组成,其中每个元件的位宽为 n 或 1。它们在结构的定义上就有所区别。")]),t._v(" "),s("h2",{attrs:{id:"存储器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#存储器"}},[t._v("#")]),t._v(" "),s("strong",[t._v("存储器")])]),t._v(" "),s("p",[t._v("存储器变量就是一种寄存器数组,可用来描述 RAM 或 ROM 的行为。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" membit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("255")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//256bit的1bit存储器*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" mem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1023")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//1Kbyte存储器,位宽8bit*")]),t._v("\nmem"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("511")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8'b0")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//令第512个8bit的存储单元值为0*")]),t._v("\n")])])]),s("h2",{attrs:{id:"参数"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#参数"}},[t._v("#")]),t._v(" "),s("strong",[t._v("参数")])]),t._v(" "),s("p",[t._v("参数用来表示常量,用关键字 parameter 声明,只能赋值一次。例如:")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("parameter")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" data_width "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10'd32")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("parameter")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" i"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" k"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("parameter")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" mem_size "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" data_width "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("p",[t._v("但是,通过实例化的方式,可以更改参数在模块中的值。此部分以后会介绍。")]),t._v(" "),s("p",[t._v("局部参数用 localparam 来声明,其作用和用法与 parameter 相同,区别在于它的值不能被改变。所以当参数只在本模块中调用时,可用 localparam 来说明。")]),t._v(" "),s("h2",{attrs:{id:"字符串"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#字符串"}},[t._v("#")]),t._v(" "),s("strong",[t._v("字符串")])]),t._v(" "),s("p",[t._v("字符串保存在 reg 类型的变量中,每个字符占用一个字节(8bit)。因此寄存器变量的宽度应该足够大,以保证不会溢出。")]),t._v(" "),s("p",[t._v('字符串不能多行书写,即字符串中不能包含回车符。如果寄存器变量的宽度大于字符串的大小,则使用 0 来填充左边的空余位;如果寄存器变量的宽度小于字符串大小,则会截去字符串左边多余的数据。例如,为存储字符串 "run.runoob.com", 需要 14*8bit 的存储单元:')]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" str "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("initial")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n str "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"run.runoob.com"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("p",[t._v("有一些特殊字符在显示字符串中有特殊意义,例如换行符,制表符等。如果需要在字符串中显示这些特殊的字符,则需要在前面加前缀转义字符 *"),s("em",[t._v("*")]),t._v(" 。例如下表所示:")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("转义字符")]),t._v(" "),s("th",[t._v("显示字符")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("\\n")]),t._v(" "),s("td",[t._v("换行")])]),t._v(" "),s("tr",[s("td",[t._v("\\t")]),t._v(" "),s("td",[t._v("制表符")])]),t._v(" "),s("tr",[s("td",[t._v("%%")]),t._v(" "),s("td",[t._v("%")])]),t._v(" "),s("tr",[s("td",[t._v("\\")]),t._v(" "),s("td",[t._v("\\")])]),t._v(" "),s("tr",[s("td",[t._v('"')]),t._v(" "),s("td",[t._v('"')])]),t._v(" "),s("tr",[s("td",[t._v("\\ooo")]),t._v(" "),s("td",[t._v("1到3个8进制数字字符")])])])]),t._v(" "),s("p",[t._v("其实,在 SystemVerilog(主要用于 Verilog 仿真的编程语言)语言中,已经可以直接用关键字 string 来表示字符串变量类型,这为 Verilog 的仿真带来了极大的便利。有兴趣的学者可以简单学习下 SystemVerilog。")])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/34.e04871e3.js b/assets/js/34.e04871e3.js new file mode 100644 index 0000000..548e324 --- /dev/null +++ b/assets/js/34.e04871e3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{317:function(t,s,a){"use strict";a.r(s);var r=a(14),n=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_4-verilog-表达式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-verilog-表达式"}},[t._v("#")]),t._v(" 4. Verilog 表达式")]),t._v(" "),s("h3",{attrs:{id:"表达式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#表达式"}},[t._v("#")]),t._v(" 表达式")]),t._v(" "),s("p",[t._v("表达式由操作符和操作数构成,其目的是根据操作符的意义得到一个计算结果。表达式可以在出现数值的任何地方使用。例如:")]),t._v(" "),s("h2",{attrs:{id:"实例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("a"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v("b "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//a与b进行异或操作*")]),t._v("\naddress"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10'b1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//地址累加*")]),t._v("\nflag1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" flag2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//逻辑与操作*")]),t._v("\n")])])]),s("h3",{attrs:{id:"操作数"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#操作数"}},[t._v("#")]),t._v(" 操作数")]),t._v(" "),s("p",[t._v("操作数可以是任意的数据类型,只是某些特定的语法结构要求使用特定类型的操作数。")]),t._v(" "),s("p",[t._v("操作数可以为常数,整数,实数,线网,寄存器,时间,位选,域选,存储器及函数调用等。")]),t._v(" "),s("h2",{attrs:{id:"实例-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-2"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("module")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//实数*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("real")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" b "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//寄存器*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" cprmu_1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" cprmu_2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token important"}},[t._v("always")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" @"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("posedge")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" clk"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n cprmu_2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cprmu_1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v(" cprmu_2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n \n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//函数*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" flag1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nflag "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("calculate_result")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("A"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//非法操作数*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("wire")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token important"}},[t._v("always")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("@ ("),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(")"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" cprmu_2 – cprmu_1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//temp = cprmu_2 – cprmu_1 ; //不合法,always块里赋值对象不能是wire型*")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("endmodule")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v("\n")])])]),s("h3",{attrs:{id:"操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#操作符"}},[t._v("#")]),t._v(" 操作符")]),t._v(" "),s("p",[t._v("Verilog 中提供了大约 9 种操作符,分别是算术、关系、等价、逻辑、按位、归约、移位、拼接、条件操作符。")]),t._v(" "),s("p",[t._v("大部分操作符与 C 语言中类似。同类型操作符之间,除条件操作符从右往左关联,其余操作符都是自左向右关联。圆括号内表达式优先执行。例如下面每组的 2 种写法都是等价的。")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//自右向左关联,两种写法等价")]),t._v("\nA"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("C "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("A"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("B)"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("C "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//自右向左关联,两种写法等价,结果为 B、D 或 F")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" D "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" F "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" D "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" F"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//自右向左关联,两种写法不等价")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" C"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" D "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" F "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果 D 或 F")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" D "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" F "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 B、D 或 F")]),t._v("\n")])])]),s("p",[t._v("不同操作符之间,优先级是不同的。下表列出了操作符优先级从高至低的排列顺序。当没有圆括号时,Verilog 会根据操作符优先级对表达式进行计算。为了避免由操作符优先级导致的计算混乱,在不确定优先级时,建议用圆括号将表达式区分开来。")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("操作符")]),t._v(" "),s("th",[t._v("操作符号")]),t._v(" "),s("th",[t._v("优先级")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("单目运算")]),t._v(" "),s("td",[t._v("+ - ! ~")]),t._v(" "),s("td",[t._v("最高")])]),t._v(" "),s("tr",[s("td",[t._v("乘、除、取模")]),t._v(" "),s("td",[t._v("* / %")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("加减")]),t._v(" "),s("td",[t._v("+ -")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("移位")]),t._v(" "),s("td",[t._v("<<  >>")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("关系")]),t._v(" "),s("td",[t._v("<  <=  >  >=")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("等价")]),t._v(" "),s("td",[t._v("==  !=  ===  !===")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("归约")]),t._v(" "),s("td",[t._v("& ~&")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td"),t._v(" "),s("td",[t._v("^ ~^")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td"),t._v(" "),s("td"),t._v(" "),s("td",[t._v("~")])]),t._v(" "),s("tr",[s("td",[t._v("逻辑")]),t._v(" "),s("td",[t._v("&&")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td"),t._v(" "),s("td"),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("条件")]),t._v(" "),s("td",[t._v("?:")]),t._v(" "),s("td",[t._v("最低")])])])]),t._v(" "),s("h3",{attrs:{id:"算术操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#算术操作符"}},[t._v("#")]),t._v(" 算术操作符")]),t._v(" "),s("p",[t._v("算术操作符包括单目操作符和双目操作符。")]),t._v(" "),s("p",[t._v("双目操作符对 2 个操作数进行算术运算,包括乘(*)、除(/)、加(+)、减(-)、求幂(**)、取模(%)。")]),t._v(" "),s("h2",{attrs:{id:"实例-3"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-3"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\na "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b0010")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nb "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b1001")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为c=b'b1011*")]),t._v("\nc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为c=4,取整*")]),t._v("\n")])])]),s("p",[t._v("如果操作数某一位为 X,则计算结果也会全部出现 X。例如:")]),t._v(" "),s("h2",{attrs:{id:"实例-4"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-4"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("b "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b100x")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nc "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" a"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("b "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为c=4'bxxxx*")]),t._v("\n")])])]),s("p",[t._v("对变量进行声明时,要根据变量的操作符对变量的位宽进行合理声明,不要让结果溢出。上述例子中,相加的 2 个变量位宽为 4bit,那么结果寄存器变量位宽最少为 5bit。否则,高位将被截断,导致结果高位丢失。无符号数乘法时,结果变量位宽应该为 2 个操作数位宽之和。")]),t._v(" "),s("h2",{attrs:{id:"实例-5"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-5"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" mula "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" mulb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("reg")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" res "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nmula "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'he")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nmulb "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'h3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nres "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mula "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" mulb "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为res=6'h2a, 数据结果没有丢失位数*")]),t._v("\n")])])]),s("ul",[s("li",[t._v("和 - 也可以作为单目操作符来使用,表示操作数的正负性。此类操作符优先级最高。")])]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("-4 //表示负4\n+3 //表示正3\n")])])]),s("p",[t._v("负数表示时,可以直接在十进制数字前面增加一个减号 -,也可以指定位宽。因为负数使用二进制补码来表示,不指定位宽来表示负数,编译器在转换时,会自动分配位宽,从而导致意想不到的结果。例如:")]),t._v(" "),s("h2",{attrs:{id:"实例-6"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-6"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("mula "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'd4")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nmulb "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nres "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mula "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" mulb "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//计算结果为res=-6'd8, 即res=6'h38,正常*")]),t._v("\nres "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mula "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("'d4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//(4的32次幂-4) * 2, 结果异常*")]),t._v("\n")])])]),s("h3",{attrs:{id:"关系操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#关系操作符"}},[t._v("#")]),t._v(" 关系操作符")]),t._v(" "),s("p",[t._v("关系操作符有大于(>),小于(<),大于等于(>=),小于等于(<=)。")]),t._v(" "),s("p",[t._v("关系操作符的正常结果有 2 种,真(1)或假(0)。")]),t._v(" "),s("p",[t._v("如果操作数中有一位为 x 或 z,则关系表达式的结果为 x。")]),t._v(" "),s("h2",{attrs:{id:"实例-7"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-7"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nX "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3'b1xx")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//为真*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//为假*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" Z "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//为X,不确定*")]),t._v("\n")])])]),s("h3",{attrs:{id:"等价操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#等价操作符"}},[t._v("#")]),t._v(" 等价操作符")]),t._v(" "),s("p",[t._v("等价操作符包括逻辑相等(==),逻辑不等(!=),全等(===),非全等(!==)。")]),t._v(" "),s("p",[t._v("等价操作符的正常结果有 2 种:为真(1)或假(0)。")]),t._v(" "),s("p",[t._v("逻辑相等/不等操作符不能比较 x 或 z,当操作数包含一个 x 或 z,则结果为不确定值。")]),t._v(" "),s("p",[t._v("全等比较时,如果按位比较有相同的 x 或 z,返回结果也可以为 1,即全等比较可比较 x 或 z。所以,全等比较的结果一定不包含 x。举例如下:")]),t._v(" "),s("h2",{attrs:{id:"实例-8"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-8"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8'h04")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nC "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'bxxxx")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nD "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'hx")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//为真*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//为假*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//为X,不确定*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//为假,返回值为0*")]),t._v("\nC "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("===")]),t._v(" D "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//为真,返回值为1*")]),t._v("\n")])])]),s("h3",{attrs:{id:"逻辑操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#逻辑操作符"}},[t._v("#")]),t._v(" 逻辑操作符")]),t._v(" "),s("p",[t._v("逻辑操作符主要有 3 个:&&(逻辑与), ||(逻辑或),!(逻辑非)。")]),t._v(" "),s("p",[t._v("逻辑操作符的计算结果是一个 1 bit 的值,0 表示假,1 表示真,x 表示不确定。")]),t._v(" "),s("p",[t._v("如果一个操作数不为 0,它等价于逻辑 1;如果一个操作数等于 0,它等价于逻辑 0。如果它任意一位为 x 或 z,它等价于 x。")]),t._v(" "),s("p",[t._v("如果任意一个操作数包含 x,逻辑操作符运算结果不一定为 x。")]),t._v(" "),s("p",[t._v("逻辑操作符的操作数可以为变量,也可以为表达式。例如:")]),t._v(" "),s("h2",{attrs:{id:"实例-9"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-9"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nC "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b1x")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 为假*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 为真*! A *// 为假*! B *// 为真*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 为X,不确定*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 为真,因为A为真*(A==2) && (! B) *//为真,此时第一个操作数为表达式*")]),t._v("\n")])])]),s("h3",{attrs:{id:"按位操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#按位操作符"}},[t._v("#")]),t._v(" 按位操作符")]),t._v(" "),s("p",[t._v("按位操作符包括:取反(~),与(&),或(|),异或(^),同或(~^)。")]),t._v(" "),s("p",[t._v("按位操作符对 2 个操作数的每 1 bit 数据进行按位操作。")]),t._v(" "),s("p",[t._v("如果 2 个操作数位宽不相等,则用 0 向左扩展补充较短的操作数。")]),t._v(" "),s("p",[t._v("取反操作符只有一个操作数,它对操作数的每 1 bit 数据进行取反操作。")]),t._v(" "),s("p",[t._v("下图给出了按位操作符的逻辑规则。")]),t._v(" "),s("p",[t._v("| &(与) | 0 | 1 | x | | |(或) | 0 | 1 | x |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| 0 | 0 | 0 | 0 | | 0 | 0 | 1 | x |\n| 1 | 0 | 1 | x | | 1 | 1 | 1 | 1 |\n| x | 0 | x | x | | x | x | 1 | x |")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("^(异或)")]),t._v(" "),s("th",[t._v("0")]),t._v(" "),s("th",[t._v("1")]),t._v(" "),s("th",[t._v("x")]),t._v(" "),s("th"),t._v(" "),s("th",[t._v("~^(同或)")]),t._v(" "),s("th",[t._v("0")]),t._v(" "),s("th",[t._v("1")]),t._v(" "),s("th",[t._v("x")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("0")]),t._v(" "),s("td",[t._v("0")]),t._v(" "),s("td",[t._v("1")]),t._v(" "),s("td",[t._v("x")]),t._v(" "),s("td"),t._v(" "),s("td",[t._v("0")]),t._v(" "),s("td",[t._v("1")]),t._v(" "),s("td",[t._v("0")]),t._v(" "),s("td",[t._v("x")])]),t._v(" "),s("tr",[s("td",[t._v("1")]),t._v(" "),s("td",[t._v("1")]),t._v(" "),s("td",[t._v("0")]),t._v(" "),s("td",[t._v("x")]),t._v(" "),s("td"),t._v(" "),s("td",[t._v("1")]),t._v(" "),s("td",[t._v("0")]),t._v(" "),s("td",[t._v("1")]),t._v(" "),s("td",[t._v("x")])]),t._v(" "),s("tr",[s("td",[t._v("x")]),t._v(" "),s("td",[t._v("x")]),t._v(" "),s("td",[t._v("x")]),t._v(" "),s("td",[t._v("x")]),t._v(" "),s("td"),t._v(" "),s("td",[t._v("x")]),t._v(" "),s("td",[t._v("x")]),t._v(" "),s("td",[t._v("x")]),t._v(" "),s("td",[t._v("x")])])])]),t._v(" "),s("h2",{attrs:{id:"实例-10"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-10"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b0101")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b1001")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nC "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'bx010")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("~")]),t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//4'b1010*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//4'b0001*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//4'b1101*")]),t._v("\nA"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v("B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//4'b1100*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("~^")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//4'b0011*")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//4'b1011*")]),t._v("\nB"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("C "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//4'bx000*")]),t._v("\n")])])]),s("h3",{attrs:{id:"归约操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#归约操作符"}},[t._v("#")]),t._v(" 归约操作符")]),t._v(" "),s("p",[t._v("归约操作符包括:归约与(&),归约与非(~&),归约或(|),归约或非(~|),归约异或(^),归约同或(~^)。")]),t._v(" "),s("p",[t._v("归约操作符只有一个操作数,它对这个向量操作数逐位进行操作,最终产生一个 1bit 结果。")]),t._v(" "),s("p",[t._v("逻辑操作符、按位操作符和归约操作符都使用相同的符号表示,因此有时候容易混淆。区分这些操作符的关键是分清操作数的数目,和计算结果的规则。")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b1010")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("A "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 1 & 0 & 1 & 0 = 1'b0,可用来判断变量A是否全1")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("~|")]),t._v("A "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 ~(1 | 0 | 1 | 0) = 1'b0, 可用来判断变量A是否为全0")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("^")]),t._v("A "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 1 ^ 0 ^ 1 ^ 0 = 1'b0")]),t._v("\n")])])]),s("h3",{attrs:{id:"移位操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#移位操作符"}},[t._v("#")]),t._v(" 移位操作符")]),t._v(" "),s("p",[t._v("移位操作符包括左移(<<),右移(>>),算术左移(<<<),算术右移(>>>)。")]),t._v(" "),s("p",[t._v("移位操作符是双目操作符,两个操作数分别表示要进行移位的向量信号(操作符左侧)与移动的位数(操作符右侧)。")]),t._v(" "),s("p",[t._v("算术左移和逻辑左移时,右边低位会补 0。")]),t._v(" "),s("p",[t._v("逻辑右移时,左边高位会补 0;而算术右移时,左边高位会补充符号位,以保证数据缩小后值的正确性。")]),t._v(" "),s("h2",{attrs:{id:"实例-11"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-11"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b1100")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b0010")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 4'b0011*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 4'b1000*")]),t._v("\nA "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 4'b1000*")]),t._v("\nC "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" B "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("A"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>>")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 2 + (-4/4) = 1, 4'b0001*")]),t._v("\n")])])]),s("h3",{attrs:{id:"拼接操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#拼接操作符"}},[t._v("#")]),t._v(" 拼接操作符")]),t._v(" "),s("p",[t._v("拼接操作符用大括号 {,} 来表示,用于将多个操作数(向量)拼接成新的操作数(向量),信号间用逗号隔开。")]),t._v(" "),s("p",[t._v("拼接符操作数必须指定位宽,常数的话也需要指定位宽。例如:")]),t._v(" "),s("h2",{attrs:{id:"实例-12"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-12"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("A "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'b1010")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nB "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nY1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" A"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" A"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4'h3")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为Y1='b1100_0011*")]),t._v("\nY2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3'd4")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 Y2=7'b111_1100*")]),t._v("\nY3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1'b0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("}}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//结果为 Y3=32h0,常用作寄存器初始化时匹配位宽的赋初值*")]),t._v("\n")])])]),s("h3",{attrs:{id:"条件操作符"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#条件操作符"}},[t._v("#")]),t._v(" 条件操作符")]),t._v(" "),s("p",[t._v("条件表达式有 3 个操作符,结构描述如下:")]),t._v(" "),s("div",{staticClass:"language- extra-class"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("condition_expression ? true_expression : false_expression\n")])])]),s("p",[t._v("计算时,如果 condition_expression 为真(逻辑值为 1),则运算结果为 true_expression;如果 condition_expression 为假(逻辑值为 0),则计算结果为 false_expression。")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),t._v(" hsel "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" hsel_p1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" hsel_p2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//当信号 addr 高 2bit 为 0 时,hsel 赋值为 hsel_p1; 否则,将 hsel_p2 赋值给 hsel。")]),t._v("\n")])])]),s("p",[t._v("其实,条件表达式类似于 2 路(或多路)选择器,其描述方式完全可以用 if-else 语句代替。")]),t._v(" "),s("p",[t._v("当然条件操作符也能进行嵌套,完成一个多次选择的逻辑。例如:")]),t._v(" "),s("h2",{attrs:{id:"实例-13"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#实例-13"}},[t._v("#")]),t._v(" 实例")]),t._v(" "),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("**")]),t._v(" hsel "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b00")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" hsel_p1 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b01")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" hsel_p2 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" hsel_p3 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("addr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2'b11")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" hsel_p4 "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/35.fca16eca.js b/assets/js/35.fca16eca.js new file mode 100644 index 0000000..03811af --- /dev/null +++ b/assets/js/35.fca16eca.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{318:function(t,i,e){"use strict";e.r(i);var r=e(14),o=Object(r.a)({},(function(){var t=this,i=t._self._c;return i("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[i("h1",{attrs:{id:"_2024-02-21-chisel"}},[i("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-21-chisel"}},[t._v("#")]),t._v(" 2024.02.21-Chisel")]),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.02.21-1 Introduction to Scala.html"}},[t._v("2024.02.21-1. Introduction to Scala")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1 First Chisel Module.html"}},[t._v("2024.02.23-2.1 First Chisel Module")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2 Combinational Logic.html"}},[t._v("2024.02.24-2.2 Combinational Logic")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3 Control Flow.html"}},[t._v("2024.02.25-2.3 Control Flow")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4 Sequential Logic.html"}},[t._v("2024.02.26-2.4 Sequential Logic")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5 FIR Filter.html"}},[t._v("2024.02.28-2.5 FIR Filter")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6 More on ChiselTest.html"}},[t._v("2024.02.29-2.6 More on ChiselTest")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1 Generators Parameters.html"}},[t._v("2024.03.01-3.1 Generators: Parameters")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2 Generators Collections.html"}},[t._v("2024.03.03-3.2 Generators: Collections")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3 Interlude Chisel Standard Library.html"}},[t._v("2024.03.04-3.3 Interlude: Chisel Standard Library")])],1),t._v(" "),i("p",[i("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4 Higher-Order Functions.html"}},[t._v("2024.03.05-3.4 Higher-Order Functions")])],1)])}),[],!1,null,null,null);i.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/36.1a40f8d9.js b/assets/js/36.1a40f8d9.js new file mode 100644 index 0000000..08ae7b7 --- /dev/null +++ b/assets/js/36.1a40f8d9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{319:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-02-21-1-introduction-to-scala"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-21-1-introduction-to-scala"}},[t._v("#")]),t._v(" 2024.02.21-1. Introduction to Scala")]),t._v(" "),s("h2",{attrs:{id:"variables-and-constants-var-and-val"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#variables-and-constants-var-and-val"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Variables and Constants - "),s("code",[t._v("var")]),t._v(" and "),s("code",[t._v("val")])])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" numberOfKittens "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" kittensPerHouse "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("101")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" alphabet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"abcdefghijklmnopqrstuvwxyz"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" done "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('/*\nnumberOfKittens: Int = 6\nkittensPerHouse: Int = 101\nalphabet: String = "abcdefghijklmnopqrstuvwxyz"\ndone: Boolean = false\n*/')]),t._v("\n")])])]),s("p",[t._v("变量使用"),s("code",[t._v("var")]),t._v("声明,常量则使用"),s("code",[t._v("val")])]),t._v(" "),s("h2",{attrs:{id:"conditionals"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#conditionals"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Conditionals")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("done"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"we are done"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("numberOfKittens "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" kittensPerHouse"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"more kittens!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n numberOfKittens "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n done "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("类似于C++,如果只有一行,可以省略大括号")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" likelyCharactersSet "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("alphabet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("26")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"english"')]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"not english"')]),t._v("\n\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("likelyCharactersSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// likelyCharactersSet: String = "english"')]),t._v("\n")])])]),s("p",[s("code",[t._v("if")]),t._v("这一串的返回值又所选择的分支的最后一行确定")]),t._v(" "),s("h2",{attrs:{id:"methods-functions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#methods-functions"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Methods (Functions)")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Simple scaling function with an input argument, e.g., times2(3) returns 6")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Curly braces can be omitted for short one-line functions.")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" times2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" x\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// More complicated function")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" distance"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" returnPositive"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" xy "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" y\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("returnPositive"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" xy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("abs "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v("xy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("abs\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"overloading-functions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#overloading-functions"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Overloading Functions")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Overloaded function")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" times2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" x\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" times2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt\n\ntimes2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10")]),t._v("\ntimes2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"7"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 14")]),t._v("\n")])])]),s("h3",{attrs:{id:"recursive-and-nested-functions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#recursive-and-nested-functions"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Recursive and Nested Functions")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" asciiTriangle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rows"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// This is cute: multiplying "X" makes a string with many copies of "X"')]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Unit means no return value")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" printRow"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("columns"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Unit")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"X"')]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" columns"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rows "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n printRow"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rows"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n asciiTriangle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rows "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Here is the recursive call")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// printRow(1) // This would not work, since we're calling printRow outside its scope")]),t._v("\nasciiTriangle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Output:")]),t._v("\nXXXXXX\nXXXXX\nXXXX\nXXX\nXX\nX\n")])])]),s("h3",{attrs:{id:"named-parameters-and-parameter-defaults"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#named-parameters-and-parameter-defaults"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Named Parameters and Parameter Defaults")])]),t._v(" "),s("p",[t._v("Consider the following method definition.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" myMethod"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("count"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wrap"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Boolean")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wrapValue"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Unit")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("When calling the method, you will often see the parameter names along with the passed-in values.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("myMethod"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("count"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wrap"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wrapValue"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("23")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("Using named parameters, you can even call the function with a different ordering.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("myMethod"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wrapValue"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("23")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" wrap"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" count"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("For frequently called methods, the parameter ordering may be obvious. But for less common methods and, in particular, boolean arguments, including the names with calls can make your code a lot more readable. If methods have a long list of arguments of the same type, using names also decreases the chance of error. Parameters to class definitions also use this named argument scheme (they are actually just the parameters to the constructor method for the class).")]),t._v(" "),s("p",[t._v("When certain parameters have default values (that don't need to be overridden), callers only have to pass (by name) specific arguments that do not use defaults. Notice that the parameter  "),s("code",[t._v("wrapValue")]),t._v(" has a default value of 24. Therefore, this will work as if 24 had been passed in.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("myMethod"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("wrap"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" count"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h2",{attrs:{id:"lists"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#lists"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Lists")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" y "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" list1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" list2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" y "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" y "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" Nil "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// An alternate notation for assembling a list")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Nil就是一个空的List[Nothing],即一个可以封装任何类型元素但又没有元素的容器")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" list3 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" list1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v(" list2 "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Appends the second list to the first list")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" m "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" list2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" s "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" list2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("size\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" headOfList "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" list1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("head "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Gets the first element of the list")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" restOfList "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" list1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tail "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Get a new list with first element removed")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" third "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" list1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Gets the third element of a list (0-indexed)")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Output:")]),t._v("\nx"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),t._v("\ny"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),t._v("\nlist1"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nlist2"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nlist3"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nm"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\ns"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nheadOfList"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nrestOfList"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nthird"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\n")])])]),s("h2",{attrs:{id:"for-statement"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#for-statement"}},[t._v("#")]),t._v(" "),s("strong",[s("code",[t._v("for")]),t._v(" Statement")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" to "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" print"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('" "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// include 7")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ni "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// exclude 7")]),t._v("\ni "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" to "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v(" by "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\n")])])]),s("p",[s("strong",[s("code",[t._v("print")])]),t._v(" 用于连续输出不换行,而 "),s("strong",[s("code",[t._v("println")])]),t._v(" 用于输出后换行。")]),t._v(" "),s("p",[s("strong",[s("code",[t._v("<-")])]),t._v(" 是用在for循环构造中的一个操作符,表示从一个集合中逐一取出元素")]),t._v(" "),s("h2",{attrs:{id:"packages-and-imports"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#packages-and-imports"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Packages and Imports")])]),t._v(" "),s("ul",[s("li",[s("strong",[s("code",[t._v("package")])]),t._v(" 用于定义一个命名空间,它可以包含类、对象和特质(traits),以及其他包。包主要用于组织和管理代码,防止命名冲突,并提供访问控制。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("class")])]),t._v(" 是定义数据结构及其行为的蓝图。它可以包含数据成员(属性)和方法。类用于实例化对象,每个对象都可以拥有不同的属性值。")])]),t._v(" "),s("p",[t._v("**"),s("code",[t._v("import")]),s("strong",[t._v("语句可以用来引入包、类、对象,甚至是特定的方法或属性。这意味着你可以使用")]),s("code",[t._v("import")]),t._v("**来引用几乎任何你需要的代码实体。以下是一些例子:")]),t._v(" "),s("ul",[s("li",[t._v("引入一个包中的所有成员:"),s("strong",[s("code",[t._v("import scala.collection.mutable._")])]),t._v(",这里的**"),s("code",[t._v("_")]),s("strong",[t._v("相当于Java中的")]),t._v("``"),s("strong",[t._v(",表示引入")]),s("code",[t._v("mutable")]),t._v("**包下的所有成员。")]),t._v(" "),s("li",[t._v("引入一个特定的类:"),s("strong",[s("code",[t._v("import scala.collection.mutable.ListBuffer")])]),t._v(",这表示只引入**"),s("code",[t._v("ListBuffer")]),t._v("**类。")]),t._v(" "),s("li",[t._v("引入一个包中的多个类:"),s("strong",[s("code",[t._v("import scala.collection.mutable.{ArrayBuffer, LinkedList}")])]),t._v(",这表示同时引入**"),s("code",[t._v("ArrayBuffer")]),s("strong",[t._v("和")]),s("code",[t._v("LinkedList")]),t._v("**两个类。")]),t._v(" "),s("li",[t._v("引入一个对象中的特定成员:"),s("strong",[s("code",[t._v("import java.lang.System.{out => stdout}")])]),t._v(",这里还演示了将**"),s("code",[t._v("System.out")]),s("strong",[t._v("重命名为")]),s("code",[t._v("stdout")]),t._v("**,以便在代码中使用简化的名称。")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 从chisel3.iotesters包中引入特定的几个类:ChiselFlatSpec、Driver、和PeekPokeTester")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("chisel3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("iotesters"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("ChiselFlatSpec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Driver"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" PeekPokeTester"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h2",{attrs:{id:"class"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#class"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Class")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// WrapCounter counts up to a max value based on a bit size")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" WrapCounter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("counterBits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" max"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Long")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v(" counterBits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" counter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0L")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" inc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Long")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n counter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" counter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("counter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" max"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n counter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n counter\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"counter created with max value ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("max")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ul",[s("li",[s("p",[s("code",[t._v("class WrapCounter")]),t._v(" -- This is the definition of "),s("strong",[t._v("WrapCounter")]),t._v(".")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("(counterBits: Int)")]),t._v(" -- Creating a WrapCounter requires an integer parameter, nicely named to suggest it is the bit width of the counter.")])]),t._v(" "),s("li",[s("p",[t._v("Braces ({}) delimit a block of code. Most classes use a code block to define variables, constants, and methods (functions).")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("val max: Long =")]),t._v(" -- the class contains a member variable "),s("strong",[t._v("max")]),t._v(", declared as type "),s("code",[t._v("Long")]),t._v(" and initialized as the class is created.")])]),t._v(" "),s("li",[s("p",[s("code",[t._v("(1 << counterBits) - 1")]),t._v(" computes the maximum value that can be contained in "),s("strong",[t._v("counterBits")]),t._v(" bits. Since "),s("strong",[t._v("max")]),t._v(" was created with "),s("code",[t._v("val")]),t._v(" it cannot be changed.")])]),t._v(" "),s("li",[s("p",[t._v("A variable "),s("strong",[t._v("counter")]),t._v(" is created and initialized to "),s("strong",[t._v("0L")]),t._v(". The "),s("strong",[t._v("L")]),t._v(" says that 0 is a long value; thus, "),s("strong",[t._v("counter")]),t._v(" is inferred to be Long.")])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("max")]),t._v(" and "),s("strong",[t._v("counter")]),t._v(" are commonly called "),s("em",[t._v("member variables")]),t._v(" of the class.")])]),t._v(" "),s("li",[s("p",[t._v("A class method "),s("strong",[t._v("inc")]),t._v(" is defined which takes no arguments and returns a "),s("strong",[t._v("Long")]),t._v(" value.")])]),t._v(" "),s("li",[s("p",[t._v("The body of the method "),s("strong",[t._v("inc")]),t._v(" is a code block that has:")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("counter = counter + 1")]),t._v(" increments "),s("strong",[t._v("counter")]),t._v(".")]),t._v(" "),s("li",[s("code",[t._v("if (counter > max) { counter = 0 }")]),t._v(" tests if the counter is greater than the "),s("strong",[t._v("max")]),t._v(" value and sets it back to zero if it is.")]),t._v(" "),s("li",[s("code",[t._v("counter")]),t._v(" -- The last line of the code block is important.\n"),s("ul",[s("li",[t._v("Any value expressed as the last line of a code block is considered to be the return value of that code block. The return value can be used or ignored by the calling statement.")]),t._v(" "),s("li",[t._v("This applies quite generally; for example, since an "),s("code",[t._v("if")]),t._v(" then "),s("code",[t._v("else")]),t._v(" statement defines its true and false clauses with code blocks, it can return a value i.e., "),s("code",[t._v('val result = if (10 * 10 > 90) "greater" else "lesser"')]),t._v(" would create a "),s("code",[t._v("val")]),t._v(' with the value "greater".')])])]),t._v(" "),s("li",[t._v("So in this case the function "),s("strong",[t._v("inc")]),t._v(" returns the value of "),s("strong",[t._v("counter")]),t._v(".")])])]),t._v(" "),s("li",[s("p",[s("code",[t._v('println(s"counter created with max value $max")')]),t._v(" prints a string to standard output. Because the "),s("strong",[t._v("println")]),t._v(" is directly in the defining code block, it is part of the class initialization code and is run, i.e. prints out the string, every time an instance of this class is created.")])]),t._v(" "),s("li",[s("p",[t._v("The string printed in this case is an "),s("em",[t._v("interpolated")]),t._v(" string.")]),t._v(" "),s("ul",[s("li",[t._v("The leading "),s("strong",[t._v("s")]),t._v(" in front of the first double quote identifies this as an interpolated string.")]),t._v(" "),s("li",[t._v("An interpolated string is processed at run time.")]),t._v(" "),s("li",[t._v("The "),s("strong",[t._v("$max")]),t._v(" is replaced with the value of max.")]),t._v(" "),s("li",[t._v("If the "),s("strong",[t._v("$")]),t._v(" is followed by a code block, arbitrary Scala can be in that code block.\n"),s("ul",[s("li",[t._v("For example, "),s("strong",[s("code",[t._v('println(s"doubled max is ${max + max}")')])]),t._v(".")]),t._v(" "),s("li",[t._v("The return value of this code block will be inserted in place of "),s("code",[t._v("${...}")]),t._v(".")]),t._v(" "),s("li",[t._v("If the return value is not a string, it will be converted to one; virtually every class or type in scala has an implicit conversion to a string defined).")])])]),t._v(" "),s("li",[t._v("You should generally avoid printing something every time an instance of a class is created to avoid flooding standard output, unless you're debugging.")])]),t._v(" "),s("h3",{attrs:{id:"creating-an-instance-of-a-class"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#creating-an-instance-of-a-class"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Creating an Instance of a Class")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" WrapCounter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nx"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("inc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Increments the counter")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Member variables of the instance x are visible to the outside, unless they are declared private")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("counter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("max"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"counter is about to wrap"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nx inc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Scala allows the dots to be omitted; this can be useful for making embedded DSL's look more natural")]),t._v("\n")])])]),s("p",[t._v("有时候实例化类时不需要使用**"),s("code",[t._v("new")]),s("strong",[t._v("关键字,这通常是因为该类定义了一个或多个")]),s("code",[t._v("apply")]),s("strong",[t._v("方法。")]),s("code",[t._v("apply")]),s("strong",[t._v("方法可以在类的伴生对象(companion object)中定义,允许你直接通过类名加括号的方式创建类的实例,而不需要显式地使用")]),s("code",[t._v("new")]),s("strong",[t._v("关键字。这种方式提供了一种更简洁的语法来创建对象,同时也可以在")]),s("code",[t._v("apply")]),t._v("**方法内部执行初始化操作或参数处理,为对象创建提供更多的灵活性和控制。")]),t._v(" "),s("p",[t._v("例如,假设有一个名为**"),s("code",[t._v("Person")]),s("strong",[t._v("的类及其伴生对象,伴生对象中定义了")]),s("code",[t._v("apply")]),t._v("**方法:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" Person"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("object")]),t._v(" Person "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" apply"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Person "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Person"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("在这个例子中,可以通过调用**"),s("code",[t._v("Person")]),s("strong",[t._v("伴生对象的")]),s("code",[t._v("apply")]),s("strong",[t._v("方法来创建")]),s("code",[t._v("Person")]),s("strong",[t._v("类的实例,而不需要使用")]),s("code",[t._v("new")]),t._v("**关键字:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" person "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Person"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Alice"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// 相当于调用 Person.apply("Alice")')]),t._v("\n")])])]),s("p",[t._v("这里,**"),s("code",[t._v('Person("Alice")')]),s("strong",[t._v("实际上调用的是伴生对象中的")]),s("code",[t._v("apply")]),s("strong",[t._v("方法,该方法内部使用")]),s("code",[t._v("new")]),s("strong",[t._v("关键字创建了")]),s("code",[t._v("Person")]),t._v("**类的实例。这种方式使得代码看起来更简洁,同时保留了通过构造函数创建对象的灵活性。")])])]),t._v(" "),s("h2",{attrs:{id:"code-blocks"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#code-blocks"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Code Blocks")])]),t._v(" "),s("p",[t._v("Code blocks are delimited by braces. A block can contain zero or more lines of Scala code. The last line of Scala code becomes the return value (which may be ignored) of the code block. A code block with no lines would return a special null-like object called "),s("code",[t._v("Unit")]),t._v(". Code blocks are used throughout Scala: they are the bodies of class definitions, they form function and method definitions, they are the clauses of "),s("code",[t._v("if")]),t._v(" statements, and they are the bodies of "),s("code",[t._v("for")]),t._v(" and many other Scala operators.")]),t._v(" "),s("h3",{attrs:{id:"parameterized-code-blocks"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#parameterized-code-blocks"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Parameterized Code Blocks")])]),t._v(" "),s("p",[t._v("Code blocks can take parameters. In the case of class and method definitions, these parameters look like those in most conventional programming languages. In the example below, "),s("code",[t._v("c")]),t._v(" and "),s("code",[t._v("s")]),t._v(" are parameters of the code blocks.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// A one-line code block doesn't need to be enclosed in {}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" add1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" RepeatString"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" repeatedString "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" s "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" s\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("strong",[t._v("IMPORTANT")]),t._v(": There is another way in which code blocks may be parameterized. Here is an example.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" intList "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" stringList "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" intList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toString\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("使用**"),s("code",[t._v("map")]),s("strong",[t._v("方法对")]),s("code",[t._v("intList")]),s("strong",[t._v("中的每个元素应用一个函数,该函数将整数转换为其对应的字符串表示。具体来说,")]),s("code",[t._v("map")]),s("strong",[t._v("方法遍历")]),s("code",[t._v("intList")]),s("strong",[t._v("中的每个元素(用")]),s("code",[t._v("i")]),s("strong",[t._v("表示),并对每个元素执行")]),s("code",[t._v("i.toString")]),t._v("**操作,将其转换为字符串。This type of code block is called an anonymous function, and more details on anonymous functions are provided in a later module.")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/37.e4e44929.js b/assets/js/37.e4e44929.js new file mode 100644 index 0000000..aa66756 --- /dev/null +++ b/assets/js/37.e4e44929.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{320:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-02-23-2-1-first-chisel-module"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-23-2-1-first-chisel-module"}},[t._v("#")]),t._v(" 2024.02.23-2.1 First Chisel Module")]),t._v(" "),s("h2",{attrs:{id:"setup"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#setup"}},[t._v("#")]),t._v(" Setup")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" path "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" System"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getProperty"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"user.dir"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/source/load-ivy.sc"')]),t._v("\ninterp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("load"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ammonite"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ops"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("java"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("file"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("FileSystems"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getDefault"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getPath"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("chisel3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("_\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("chisel3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("_\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("chisel3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tester"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("_\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("chisel3"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tester"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("RawTester"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("test\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("dotvisualizer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("_\n")])])]),s("p",[t._v("这两句代码在使用Chisel(一种硬件描述语言)时,涉及到Ammonite脚本的动态加载。第一句定义了一个**"),s("code",[t._v("path")]),s("strong",[t._v("变量,它通过获取系统属性")]),s("code",[t._v('"user.dir"')]),s("strong",[t._v("(当前用户目录)并附加上")]),s("code",[t._v('"/source/load-ivy.sc"')]),s("strong",[t._v("路径,用于指定一个Scala脚本文件的位置。第二句使用Ammonite的")]),s("code",[t._v("interp.load.module")]),t._v("**方法动态加载这个指定路径下的Scala脚本文件。")]),t._v(" "),s("p",[t._v("动态加载脚本在使用Chisel编写代码时可以有多个用途,如:")]),t._v(" "),s("ol",[s("li",[s("strong",[t._v("引入依赖")]),t._v(":动态加载**"),s("code",[t._v("load-ivy.sc")]),t._v("**脚本可以用来引入或更新Ammonite会话中的Ivy依赖,确保代码运行时有必要的库支持。")]),t._v(" "),s("li",[s("strong",[t._v("执行初始化代码")]),t._v(":可以在脚本中执行必要的初始化操作,为后续的Chisel硬件设计代码执行设置适当的环境或参数。")]),t._v(" "),s("li",[s("strong",[t._v("灵活性和模块化")]),t._v(":通过动态加载脚本,可以根据需要灵活地加载和卸载模块,使代码结构更加模块化,便于管理和维护。")])]),t._v(" "),s("ul",[s("li",[s("strong",[s("code",[t._v("import chisel3._")])]),t._v(":基础的Chisel功能,包括定义硬件组件的基本构建块。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("import chisel3.util._")])]),t._v(":提供了一些实用工具和额外的硬件构建块,比如计数器、移位寄存器等。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("import chisel3.tester._")])]),t._v(":提供了测试Chisel硬件设计的工具和框架。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("import chisel3.tester.RawTester.test")])]),t._v(":是**"),s("code",[t._v("chisel3.tester")]),t._v("**中的一个具体的测试功能,用于执行硬件测试。")])]),t._v(" "),s("h2",{attrs:{id:"example-module"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-module"}},[t._v("#")]),t._v(" Example Module")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" Passthrough "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// with parameter")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" PassthroughGenerator"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("width"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("width"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("width"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" Passthrough "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n")])])]),s("p",[t._v("我们声明一个叫做"),s("code",[t._v("Passthrough")]),t._v("的新模块。"),s("code",[t._v("Module")]),t._v("是Chisel内置的一个类,所有硬件模块都必须扩展它")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("我们在一个特殊的**"),s("code",[t._v("io")]),s("strong",[t._v("变量中声明所有的输入和输出端口。它必须被命名为")]),s("code",[t._v("io")]),s("strong",[t._v(",并且是一个")]),s("code",[t._v("IO")]),s("strong",[t._v("对象或实例,这需要形如")]),s("code",[t._v("IO(_instantiated_bundle_)")]),t._v("**的东西")]),t._v(" "),s("p",[t._v("在Chisel中,"),s("strong",[s("code",[t._v("io")])]),t._v("、"),s("strong",[s("code",[t._v("in")]),s("strong",[t._v("和")]),s("code",[t._v("out")]),s("strong",[t._v("被声明为")]),s("code",[t._v("val")])]),t._v("(不可变引用)而不是**"),s("code",[t._v("var")]),s("strong",[t._v("(可变引用),因为它们代表硬件模块的接口。在硬件设计中,接口的结构(例如信号的数量、类型和方向)在编译时确定且不会改变。虽然信号的值在模拟过程中会变化,但信号的定义(即接口)是固定的。使用")]),s("code",[t._v("val")]),t._v("**声明这些接口强调了它们是不变的结构,而信号值的变化则通过信号之间的连接和赋值来体现,这与软件编程中变量的概念有所不同。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("我们声明了一个新的硬件结构类型(Bundle),它包含了一些命名的信号**"),s("code",[t._v("in")]),s("strong",[t._v("和")]),s("code",[t._v("out")]),t._v("**,分别具有输入和输出的方向。")]),t._v(" "),s("p",[t._v("在Chisel中,"),s("strong",[s("code",[t._v("Bundle")]),s("strong",[t._v("是一种用于定义一组相关信号的类,类似于Verilog中的")]),s("code",[t._v("module")]),s("strong",[t._v("内部信号或VHDL中的")]),s("code",[t._v("record")])]),t._v("。它允许开发者将多个信号组合成一个单一的复合类型,这样可以更方便地管理和传递数据结构。每个**"),s("code",[t._v("Bundle")]),s("strong",[t._v("内的信号可以有不同的类型和方向(如输入")]),s("code",[t._v("Input")]),s("strong",[t._v("、输出")]),s("code",[t._v("Output")]),t._v("**),使其成为定义模块接口和内部数据结构的强大工具。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("我们声明了信号的硬件类型。在这个案例中,它是宽度为4的无符号整数。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n")])])]),s("p",[t._v("我们将我们的输入端口连接到我们的输出端口,这样**"),s("code",[t._v("io.in")]),s("em",[s("strong",[t._v("驱动")])]),s("code",[t._v("io.out")]),s("strong",[t._v("。注意,")]),s("code",[t._v(":=")]),s("strong",[t._v("操作符是一个")]),t._v("*Chisel***操作符,它表示右手边的信号驱动左手边的信号。它是一个有方向的操作符。")]),t._v(" "),s("p",[t._v("硬件构建语言(HCLs)的一个整洁之处在于我们可以使用底层的编程语言作为脚本语言。例如,在声明我们的Chisel模块之后,我们接着使用Scala调用Chisel编译器将Chisel的**"),s("code",[t._v("Passthrough")]),s("strong",[t._v("翻译成Verilog的")]),s("code",[t._v("Passthrough")]),s("strong",[t._v("。这个过程被称为")]),t._v("*精炼***。")]),t._v(" "),s("h3",{attrs:{id:"generate-verilog"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#generate-verilog"}},[t._v("#")]),t._v(" Generate Verilog")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getVerilog"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Passthrough"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("module")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Passthrough")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),t._v(" clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),t._v(" reset"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" io_in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("output")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" io_out\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assign")]),t._v(" io_out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io_in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// @[cmd2.sc 6:10]")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("endmodule")]),t._v("\n")])])]),s("h3",{attrs:{id:"generate-firrtl"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#generate-firrtl"}},[t._v("#")]),t._v(" Generate Firrtl")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("getFirrtl"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Passthrough"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("div",{staticClass:"language-verilog extra-class"},[s("pre",{pre:!0,attrs:{class:"language-verilog"}},[s("code",[t._v("circuit Passthrough "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("module")]),t._v(" Passthrough "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),t._v(" clock "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Clock\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("input")]),t._v(" reset "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("output")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("{")]),t._v(" flip in "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">}")]),t._v("\n\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in @"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("cmd2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sc "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])])]),s("h2",{attrs:{id:"example-tester"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-tester"}},[t._v("#")]),t._v(" Example Tester")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Scala Code: `test` runs the unit test. ")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// test takes a user Module and has a code block that applies pokes and expects to the ")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// circuit under test (c)")]),t._v("\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Passthrough"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set our input to value 0")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Assert that the output correctly has 0")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set our input to value 1")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Assert that the output correctly has 1")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set our input to value 2")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Assert that the output correctly has 2")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SUCCESS!!"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Scala Code: if we get here, our tests passed!")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Test with width 10")]),t._v("\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" PassthroughGenerator"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set our input to value 0")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Assert that the output correctly has 0")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set our input to value 1")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Assert that the output correctly has 1")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Set our input to value 2")]),t._v("\n\t\tc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Assert that the output correctly has 2")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ul",[s("li",[s("strong",[s("code",[t._v("c.io.in.poke(0.U)")])]),t._v(":设置模块的输入**"),s("code",[t._v("in")]),t._v("**为0。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("c.io.out.expect(0.U)")])]),t._v(":检查模块的输出**"),s("code",[t._v("out")]),t._v("**是否为0,确保电路按预期工作。")]),t._v(" "),s("li",[t._v("接下来,代码以相同的方式测试输入值1和2,分别使用**"),s("code",[t._v("poke")]),s("strong",[t._v("方法设置输入值,并用")]),s("code",[t._v("expect")]),t._v("**方法验证输出值。")])]),t._v(" "),s("p",[t._v("在Scala中,可以直接在函数调用后跟一个代码块,这是因为Scala支持高阶函数,即可以接受函数作为参数的函数。在这个例子中,**"),s("code",[t._v("test")]),s("strong",[t._v("函数接受两个参数:一个是")]),s("code",[t._v("Passthrough")]),s("strong",[t._v("模块的实例,另一个是一个匿名函数(或称为代码块),这个匿名函数以")]),s("code",[t._v("c")]),s("strong",[t._v("作为参数进行操作。这种语法使得代码更加简洁易读,允许直接在调用函数时定义行为逻辑,非常适合进行单元测试等场景。当一个函数的最后一个参数是函数类型时,可以使用特殊的语法糖允许将这个函数参数写在方法调用的外部。这种语法不仅使得代码更加清晰,而且在使用匿名函数或代码块作为参数时尤其有用,因为它允许代码块在视觉上更为突出,从而提高了代码的可读性。这就是为什么")]),s("code",[t._v("test(new Passthrough())")]),t._v("**后面可以直接跟一个代码块的原因。")]),t._v(" "),s("p",[s("strong",[s("code",[t._v("c =>")]),s("strong",[t._v("是一个函数字面量(匿名函数)的语法,用于定义一个函数。这里,")]),s("code",[t._v("c")]),s("strong",[t._v("是函数的参数,")]),s("code",[t._v("=>")]),s("strong",[t._v("后面跟着的是函数体。在这个上下文中,")]),s("code",[t._v("c")]),s("strong",[t._v("代表传递给测试代码块的模块实例(如")]),s("code",[t._v("Passthrough")]),s("strong",[t._v("模块实例),然后在代码块内部,你可以使用")]),s("code",[t._v("c")]),s("strong",[t._v("来访问和操作这个实例的输入和输出端口。在Scala的函数字面量中,参数类型通常是通过上下文推断出来的,不需要显式声明。在")]),s("code",[t._v("test(new Passthrough()) { c => ... }")]),s("strong",[t._v("这段代码中,")]),s("code",[t._v("c")]),s("strong",[t._v("是由")]),s("code",[t._v("test")]),s("strong",[t._v("函数根据其参数类型推断出的")]),s("code",[t._v("Passthrough")]),s("strong",[t._v("模块实例。也就是说,当你写")]),s("code",[t._v("c =>")]),s("strong",[t._v("时,")]),s("code",[t._v("c")]),s("strong",[t._v("的类型(在这个例子中是")]),s("code",[t._v("Passthrough")]),s("strong",[t._v("模块实例)是由")]),s("code",[t._v("test")]),s("strong",[t._v("函数的定义确定的,根据这个函数期望的参数类型。这就是为什么可以直接使用")]),s("code",[t._v("c")]),s("strong",[t._v("来访问")]),s("code",[t._v("Passthrough")]),s("strong",[t._v("实例的成员,如")]),s("code",[t._v("c.io.in")]),s("strong",[t._v("和")]),s("code",[t._v("c.io.out")])]),t._v(",而不需要额外的类型声明。")]),t._v(" "),s("div",{staticClass:"language-markdown extra-class"},[s("pre",{pre:!0,attrs:{class:"language-markdown"}},[s("code",[t._v("Note that the "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`poke`")]),t._v(" and "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`expect`")]),t._v(" use chisel hardware literal notation. Both operations expect literals of the correct type.\nIf "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`poke`")]),t._v("ing a "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`UInt()`")]),t._v(" you must supply a "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`UInt`")]),t._v(" literal (example: "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`c.io.in.poke(10.U)`")]),t._v(", likewise if the input is a "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`Bool()`")]),t._v(" the "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`poke`")]),t._v(" would expect either "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`true.B`")]),t._v(" or "),s("span",{pre:!0,attrs:{class:"token code-snippet code keyword"}},[t._v("`false.B`")]),t._v(".\n")])])]),s("h2",{attrs:{id:"appendix-a-note-on-printf-debugging"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#appendix-a-note-on-printf-debugging"}},[t._v("#")]),t._v(" "),s("strong",[t._v('Appendix: A Note on "printf" Debugging')])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" PrintingModule "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n\n printf"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Print during simulation: Input is %d\\n"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// chisel printf has its own string interpolator too")]),t._v("\n printf"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("p")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Print during simulation: IO is ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("io")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('\\n"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Print during generation: Input is ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// s用于一般的Scala字符串插值,而p专门为Chisel设计,用于更方便地在仿真中打印硬件信号和对象")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" PrintingModule "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// circuit will print")]),t._v("\n \n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Print during testing: Input is ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("Elaborating design"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\nPrint during generation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Input is UInt"),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("IO in unelaborated PrintingModule"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nDone elaborating"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Input is "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IO is AnonymousBundle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Input is "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IO is AnonymousBundle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Input is "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IO is AnonymousBundle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Input is "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IO is AnonymousBundle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Input is "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IO is AnonymousBundle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nPrint during testing"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Input is UInt"),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("4"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Input is "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nPrint during simulation"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" IO is AnonymousBundle"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\ntest PrintingModule Success"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" tests passed in "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),t._v(" cycles in "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.003471")]),t._v(" seconds "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2016.88")]),t._v(" Hz\n")])])]),s("p",[t._v("这段代码定义了一个**"),s("code",[t._v("PrintingModule")]),s("strong",[t._v("类,它扩展了Chisel的")]),s("code",[t._v("Module")]),t._v("**,用于演示在不同阶段打印信息:")]),t._v(" "),s("ol",[s("li",[s("strong",[t._v("模块定义中的"),s("code",[t._v("printf")]),t._v("语句")]),t._v(":这些在仿真时每个时钟周期都会打印。**"),s("code",[t._v('printf("Print during simulation: Input is %d\\n", io.in)')]),s("strong",[t._v("会打印输入信号的值,而")]),s("code",[t._v('printf(p"Print during simulation: IO is $io\\n")')]),s("strong",[t._v("会打印")]),s("code",[t._v("io")]),t._v("**对象的信息。这些仅在仿真(运行时)生效。")]),t._v(" "),s("li",[s("strong",[t._v("模块定义中的"),s("code",[t._v("println")]),t._v("语句")]),t._v(":这句话在模块的"),s("em",[t._v("生成")]),t._v("阶段打印,即代码编译时,打印到终端或控制台。它不会在仿真时打印,因为它是Scala的打印语句,不是Chisel的。")]),t._v(" "),s("li",[s("strong",[t._v("测试块中的"),s("code",[t._v("println")]),t._v("语句")]),t._v(":这在Scala测试环境中执行,用于打印测试时的信息。如**"),s("code",[t._v('println(s"Print during testing: Input is ${c.io.in.peek()}")')]),t._v("**将在测试过程中打印输入信号的当前值。")])]),t._v(" "),s("ul",[s("li",[t._v("**"),s("code",[t._v("c.io.in.poke(3.U)")]),t._v("**设置输入为3。")]),t._v(" "),s("li",[t._v("**"),s("code",[t._v("c.io.out.expect(3.U)")]),t._v("**期望输出为3,这个测试会通过,因为输出应该与输入相同。")]),t._v(" "),s("li",[t._v("**"),s("code",[t._v("c.clock.step(5)")]),s("strong",[t._v("推进仿真时钟5个周期,这期间")]),s("code",[t._v("printf")]),t._v("**语句会打印信息。")])]),t._v(" "),s("ol",[s("li",[t._v("最后的"),s("code",[t._v("Print during simulation: Input is 0")]),t._v(" 是因为被重置回到默认状态")]),t._v(" "),s("li",[t._v("7 周期则是因为测试中执行了**"),s("code",[t._v("c.clock.step(5)")]),t._v("**,推进了5个时钟周期,加上测试开始前后的各1个周期")])]),t._v(" "),s("p",[t._v("综上,**"),s("code",[t._v("println")]),s("strong",[t._v("用于代码生成阶段和测试代码中,打印到Scala的执行环境;")]),s("code",[t._v("printf")]),t._v("**用于仿真阶段,打印到仿真的输出中。")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/38.6f3191d1.js b/assets/js/38.6f3191d1.js new file mode 100644 index 0000000..d327fba --- /dev/null +++ b/assets/js/38.6f3191d1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{326:function(t,s,e){"use strict";e.r(s);var n=e(14),a=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-02-29-2-6-more-on-chiseltest"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-29-2-6-more-on-chiseltest"}},[t._v("#")]),t._v(" 2024.02.29-2.6 More on ChiselTest")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th"),t._v(" "),s("th",[t._v("iotesters")]),t._v(" "),s("th",[t._v("ChiselTest")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("poke")]),t._v(" "),s("td",[t._v("poke(c.io.in1, 6)")]),t._v(" "),s("td",[t._v("c.io.in1.poke(6.U)")])]),t._v(" "),s("tr",[s("td",[t._v("peek")]),t._v(" "),s("td",[t._v("peek(c.io.out1)")]),t._v(" "),s("td",[t._v("c.io.out1.peek()")])]),t._v(" "),s("tr",[s("td",[t._v("expect")]),t._v(" "),s("td",[t._v("expect(c.io.out1, 6)")]),t._v(" "),s("td",[t._v("c.io.out1.expect(6.U)")])]),t._v(" "),s("tr",[s("td",[t._v("step")]),t._v(" "),s("td",[t._v("step(1)")]),t._v(" "),s("td",[t._v("c.clock.step(1)")])]),t._v(" "),s("tr",[s("td",[t._v("initiate")]),t._v(" "),s("td",[t._v("Driver.execute(...) { c =>")]),t._v(" "),s("td",[t._v("test(...) { c =>")])])])]),t._v(" "),s("h2",{attrs:{id:"modules-with-decoupled-interfaces"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#modules-with-decoupled-interfaces"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Modules with Decoupled Interfaces")])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" QueueModule"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("T "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ioType"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" T"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entries"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" MultiIOModule "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Flipped"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Decoupled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ioType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Decoupled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ioType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n out "),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" Queue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entries"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",[s("li",[s("strong",[s("code",[t._v("class QueueModule[T <: Data](ioType: T, entries: Int) extends MultiIOModule")])]),t._v(" 定义了一个泛型队列模块,其中**"),s("code",[t._v("T <: Data")]),s("strong",[t._v("表示")]),s("code",[t._v("T")]),s("strong",[t._v("是")]),s("code",[t._v("Data")]),s("strong",[t._v("类型或其子类型。")]),s("code",[t._v("ioType")]),s("strong",[t._v("是队列中数据的类型,")]),s("code",[t._v("entries")]),t._v("**是队列的大小。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("Decoupled(ioType)")]),s("strong",[t._v("是一个Chisel提供的高级接口,自动包含了")]),s("code",[t._v("valid")])]),t._v("、**"),s("code",[t._v("bits")]),s("strong",[t._v("和")]),s("code",[t._v("ready")]),s("strong",[t._v("信号。")]),s("code",[t._v("valid")]),s("strong",[t._v("和")]),s("code",[t._v("bits")]),s("strong",[t._v("组合用于传输有效数据,而")]),s("code",[t._v("ready")]),s("strong",[t._v("信号用于流量控制。当你声明一个")]),s("code",[t._v("Decoupled")]),t._v("**接口时,这些信号都会被自动创建。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("IO(Flipped(Decoupled(ioType)))")])]),t._v(" 创建了一个输入端口,**"),s("code",[t._v("Flipped")]),s("strong",[t._v("意味着通常的输入输出方向被反转(即原本是输出的")]),s("code",[t._v("valid")]),s("strong",[t._v("和")]),s("code",[t._v("bits")]),s("strong",[t._v("成为输入,原本是输入的")]),s("code",[t._v("ready")]),s("strong",[t._v("成为输出),")]),s("code",[t._v("Decoupled")]),t._v("**表示它是一个可以被反压的接口。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("out <> Queue(in, entries)")])]),t._v(" 将输出端口**"),s("code",[t._v("out")]),s("strong",[t._v("连接到一个新建的")]),s("code",[t._v("Queue")]),s("strong",[t._v("实例,")]),s("code",[t._v("Queue(in, entries)")]),s("strong",[t._v("创建了一个队列,其中")]),s("code",[t._v("in")]),s("strong",[t._v("是输入端口,")]),s("code",[t._v("entries")]),s("strong",[t._v("是队列大小。")]),s("code",[t._v("<>")]),s("strong",[t._v("是连接操作符,表示双向连接。确保了数据可以从")]),s("code",[t._v("in")]),s("strong",[t._v("流向队列,经过处理后,再从队列流向")]),s("code",[t._v("out")]),t._v("**。")])]),t._v(" "),s("h3",{attrs:{id:"enqueuenow-and-expectdequeuenow"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enqueuenow-and-expectdequeuenow"}},[t._v("#")]),t._v(" "),s("strong",[t._v("EnqueueNow and expectDequeueNow")])]),t._v(" "),s("p",[t._v("**"),s("code",[t._v("EnqueueNow")]),s("strong",[t._v("和")]),s("code",[t._v("expectDequeueNow")]),s("strong",[t._v("是用于测试队列行为的方法。")]),s("code",[t._v("EnqueueNow")]),s("strong",[t._v("用于立即将数据入队,而不需要等待队列准备好。")]),s("code",[t._v("expectDequeueNow")]),t._v("**用于立即从队列中出队数据,并验证其值是否符合预期。这两个方法都是在基于队列的测试中非常有用,使得测试代码可以直接控制和验证队列中数据的流动。这样,测试者可以确保队列正确地处理了入队和出队操作,并且数据的传输符合设计的预期。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" QueueModule"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example testsequence showing the use and behavior of Queue")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("initSource"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("setSourceClock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("initSink"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("setSinkClock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" testVector "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tabulate"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n testVector"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("zip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("testVector"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("foreach "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("enqueueNow"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expectDequeueNow"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("There is some required boiler plate "),s("code",[t._v("initSource")]),t._v(", "),s("code",[t._v("setSourceClock")]),t._v(", etc that is necessary to ensure that the "),s("code",[t._v("ready")]),t._v(" and "),s("code",[t._v("valid")]),t._v(" fields are all initialized correctly at the beginning of the test.")]),t._v(" "),s("h3",{attrs:{id:"enqueueseq-and-dequeueseq"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#enqueueseq-and-dequeueseq"}},[t._v("#")]),t._v(" EnqueueSeq and DequeueSeq")]),t._v(" "),s("p",[s("strong",[s("code",[t._v("EnqueueSeq")])]),t._v(" 允许你一次性将一个序列的元素批量入队,这对于测试需要连续多个数据处理的场景特别有用。"),s("strong",[s("code",[t._v("DequeueSeq")])]),t._v(", 相应地,用于一次性从队列中出队多个元素,并验证这些元素是否符合预期的序列。"),s("code",[t._v("enqueueSeq")]),t._v(" must finish before the "),s("code",[t._v("expectDequeueSeq")]),t._v(" can begin. This example would fail if the "),s("code",[t._v("testVector")]),t._v("'s size is made larger than the queue depth, because the queue would fill up and not be able to complete the "),s("code",[t._v("enqueueSeq")]),t._v(".")]),t._v(" "),s("h2",{attrs:{id:"fork-and-join"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#fork-and-join"}},[t._v("#")]),t._v(" Fork and Join")]),t._v(" "),s("p",[t._v("**"),s("code",[t._v("fork")]),s("strong",[t._v("和")]),s("code",[t._v("join")]),s("strong",[t._v("用于创建并发测试,允许同时执行多个操作或测试场景。使用")]),s("code",[t._v("fork")]),s("strong",[t._v("可以启动一个并发的测试过程,这个过程可以与主测试流程同时运行。可以在")]),s("code",[t._v("fork")]),s("strong",[t._v("后使用多个测试命令定义并发执行的操作。随后,")]),s("code",[t._v("join")]),t._v("**用于等待所有并发启动的测试过程完成。这样,你可以在一个测试中执行多个并行操作,例如同时对多个模块输入不同的信号,或者同时观察多个输出。这在需要模拟复杂交互或并行处理时特别有用。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" QueueModule"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("9.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entries "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("200")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example testsequence showing the use and behavior of Queue")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("initSource"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("setSourceClock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("initSink"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("setSinkClock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" testVector "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("tabulate"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n fork "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("enqueueSeq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("testVector"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fork "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expectDequeueSeq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("testVector"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("join"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("虽然**"),s("code",[t._v("fork")]),s("strong",[t._v("启动了两个并发过程,似乎表明")]),s("code",[t._v("c.in.enqueueSeq(testVector)")]),s("strong",[t._v("和")]),s("code",[t._v("c.out.expectDequeueSeq(testVector)")]),s("strong",[t._v("应该同时执行,但实际上,它们在逻辑上是有先后顺序的。")]),s("code",[t._v("enqueueSeq")]),s("strong",[t._v("首先向队列中填充数据,而")]),s("code",[t._v("expectDequeueSeq")]),s("strong",[t._v("则等待这些数据从队列中出现并验证它们。在ChiselTest中,")]),s("code",[t._v("fork")]),s("strong",[t._v("创建的并发线程会同时开始执行,但是")]),s("code",[t._v("expectDequeueSeq")]),t._v("**自然会在等待有数据可以出队之后才开始验证,确保了数据的正确流向和测试的逻辑顺序。")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/39.bfa70ce2.js b/assets/js/39.bfa70ce2.js new file mode 100644 index 0000000..09a0b4b --- /dev/null +++ b/assets/js/39.bfa70ce2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{325:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-03-03-3-2-generators-collections"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-03-03-3-2-generators-collections"}},[t._v("#")]),t._v(" 2024.03.03-3.2 Generators: Collections")]),t._v(" "),s("h2",{attrs:{id:"generators-and-collections"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#generators-and-collections"}},[t._v("#")]),t._v(" Generators and Collections")]),t._v(" "),s("h3",{attrs:{id:"fir-golden-model"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#fir-golden-model"}},[t._v("#")]),t._v(" FIR Golden Model")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * A naive implementation of an FIR filter with an arbitrary number of taps.\n */")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" ScalaFirFilter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" pseudoRegisters "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fill"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n pseudoRegisters "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" value "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),t._v(" pseudoRegisters"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("take"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("var")]),t._v(" accumulator "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("indices"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n accumulator "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" pseudoRegisters"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n accumulator\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("h3",{attrs:{id:"seq"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#seq"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Seq")])]),t._v(" "),s("p",[t._v("当**"),s("code",[t._v("taps")]),s("strong",[t._v("变为")]),s("code",[t._v("Seq[Int]")]),s("strong",[t._v("时,意味着类的用户可以在构造类时传递任意长度的")]),s("code",[t._v("Int")]),t._v("**序列。")]),t._v(" "),s("h3",{attrs:{id:"寄存器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#寄存器"}},[t._v("#")]),t._v(" "),s("strong",[t._v("寄存器")])]),t._v(" "),s("p",[t._v("使用**"),s("code",[t._v("var pseudoRegisters = List.fill(taps.length)(0)")]),s("strong",[t._v("创建了一个")]),s("code",[t._v("List")]),s("strong",[t._v(",用于存储前几个周期的值。选择")]),s("code",[t._v("List")]),t._v("**是因为其添加元素到头部和移除最后一个元素的语法非常简单。理论上可以使用Scala集合家族中的任何成员。这个列表被初始化为全零。")]),t._v(" "),s("h3",{attrs:{id:"poke"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#poke"}},[t._v("#")]),t._v(" "),s("strong",[t._v("Poke")])]),t._v(" "),s("p",[t._v("我们的类添加了一个poke函数/方法,模拟将新输入放入过滤器并循环时钟。")]),t._v(" "),s("h3",{attrs:{id:"更新寄存器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#更新寄存器"}},[t._v("#")]),t._v(" "),s("strong",[t._v("更新寄存器")])]),t._v(" "),s("p",[t._v("**"),s("code",[t._v("pseudoRegisters = value :: pseudoRegisters.take(taps.length - 1)")]),s("strong",[t._v("首先使用列表的")]),s("code",[t._v("take")]),s("strong",[t._v("方法保留除最后一个元素外的所有元素,然后使用")]),s("code",[t._v("::")]),s("strong",[t._v("列表连接操作符将")]),s("code",[t._v("value")]),t._v("**添加到缩减版列表的头部。")]),t._v(" "),s("h3",{attrs:{id:"计算输出"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#计算输出"}},[t._v("#")]),t._v(" "),s("strong",[t._v("计算输出")])]),t._v(" "),s("p",[t._v("一个简单的for循环和累加器用于求和列表中每个元素与其对应抽头系数的乘积。仅含**"),s("code",[t._v("accumulator")]),t._v("**的行将该值作为函数结果返回。")]),t._v(" "),s("h3",{attrs:{id:"test-circuit-using-the-golden-model"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#test-circuit-using-the-golden-model"}},[t._v("#")]),t._v(" Test circuit using the golden model")]),t._v(" "),s("p",[t._v("为了避免使用繁杂的手动验证,这里使用Golden Model来生成期望的值,并与Chisel的结果对比")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" goldenModel "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ScalaFirFilter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ntest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" My4ElementFir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" scala"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Random"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" goldenModelResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" goldenModel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("goldenModelResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"i ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", input ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("input")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", gm ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("goldenModelResult")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("strong",[t._v("注意")]),t._v(":这里软件上的Golden Model没有考虑位宽,而硬件则与位宽有很大关系。这里只考虑了8以内,即3bit的数,因此不存在这个问题")]),t._v(" "),s("h3",{attrs:{id:"example-parameterized-fir-generator"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-parameterized-fir-generator"}},[t._v("#")]),t._v(" Example: Parameterized FIR Generator")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MyManyElementFir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("consts"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bitWidth"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("bitWidth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("bitWidth"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" regs "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mutable"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ArrayBuffer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" regs "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" regs "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" RegNext"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("regs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" muls "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mutable"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ArrayBuffer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n muls "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" regs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" scan "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" mutable"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ArrayBuffer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" scan "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" scan "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+=")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("last\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",[s("li",[s("strong",[s("code",[t._v("val regs = mutable.ArrayBuffer[UInt]()")]),s("strong",[t._v("声明了一个名为")]),s("code",[t._v("regs")]),s("strong",[t._v("的不可变变量,它被初始化为一个可变的")]),s("code",[t._v("ArrayBuffer")])]),t._v(",其中包含**"),s("code",[t._v("UInt")]),s("strong",[t._v("类型的元素。")]),s("code",[t._v("ArrayBuffer")]),s("strong",[t._v("是一个可变的序列,允许在序列两端高效地添加或删除元素,适用于需要动态修改元素的场景。在这里,")]),s("code",[t._v("regs")]),s("strong",[t._v("可以被用来存储和更新")]),s("code",[t._v("UInt")]),s("strong",[t._v("类型的数据,但由于使用了")]),s("code",[t._v("val")]),s("strong",[t._v(",")]),s("code",[t._v("regs")]),s("strong",[t._v("本身的引用是不可变的,尽管它指向的")]),s("code",[t._v("ArrayBuffer")]),t._v("**内容是可变的。")]),t._v(" "),s("li",[t._v("**"),s("code",[t._v("regs += io.in")]),s("strong",[t._v("这行代码的意思是将")]),s("code",[t._v("io.in")]),s("strong",[t._v("这个")]),s("code",[t._v("UInt")]),s("strong",[t._v("信号添加到")]),s("code",[t._v("regs")]),s("strong",[t._v("这个")]),s("code",[t._v("ArrayBuffer")]),s("strong",[t._v("中。这里没有直接的数值相加操作,而是将")]),s("code",[t._v("io.in")]),s("strong",[t._v("这个元素添加(追加)到")]),s("code",[t._v("regs")]),s("strong",[t._v("这个列表的末尾。")]),s("code",[t._v("regs")]),s("strong",[t._v("是一个容器,可以逐个添加元素,即使一开始")]),s("code",[t._v("regs")]),s("strong",[t._v("是空的。这行代码的作用是初始化")]),s("code",[t._v("regs")]),s("strong",[t._v("列表的第一个元素,后续元素则在循环中通过")]),s("code",[t._v("RegNext")]),t._v("**添加。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("regs")]),s("strong",[t._v("作为一个")]),s("code",[t._v("ArrayBuffer")])]),t._v(",可以包含不同类型的**"),s("code",[t._v("UInt")]),s("strong",[t._v("元素。在这种情况下,")]),s("code",[t._v("io.in")]),s("strong",[t._v("是一个")]),s("code",[t._v("Input(UInt)")]),s("strong",[t._v("类型,而")]),s("code",[t._v("RegNext(regs(i - 1), 0.U)")]),s("strong",[t._v("生成的是一个")]),s("code",[t._v("Reg(UInt)")]),s("strong",[t._v("类型。尽管")]),s("code",[t._v("io.in")]),s("strong",[t._v("和通过")]),s("code",[t._v("RegNext")]),s("strong",[t._v("创建的寄存器在硬件层面扮演不同的角色(一个是输入信号,另一个是寄存器),但它们都是")]),s("code",[t._v("UInt")]),s("strong",[t._v("类型,可以存储在同一个")]),s("code",[t._v("ArrayBuffer")]),t._v("**中。在Chisel生成的硬件逻辑中,这将创建一个信号和寄存器链,其中信号和寄存器可以互相连接。")]),t._v(" "),s("li",[t._v("使用**"),s("code",[t._v("scan")]),s("strong",[t._v("数组缓存逐步累加的结果而不是直接对")]),s("code",[t._v("muls")]),s("strong",[t._v("求和,是为了展示在每一步如何逐渐累积计算的中间值。这种方法在某些复杂的FIR滤波器设计中可以提供更多的灵活性,比如在需要逐个访问累加过程中的中间结果时。尽管在这个特定例子中,只需要最终的累加结果,直接对")]),s("code",[t._v("muls")]),s("strong",[t._v("求和看似更直接,但展开累加过程可以帮助理解和调试滤波器的行为,尤其是在更复杂或参数化的设计中。然而,如果目标只是获取最终的累加和,直接使用")]),s("code",[t._v("muls.reduce(_ + _)")]),t._v("**确实会更简洁高效。")])]),t._v(" "),s("h3",{attrs:{id:"test-a-bunch-of-different-sized-fir-filters"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#test-a-bunch-of-different-sized-fir-filters"}},[t._v("#")]),t._v(" Test a bunch of different sized FIR filters")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" r"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n scala"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("util"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Random"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("nextInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * run a test comparing software and hardware filters\n * run for at least twice as many samples as taps\n */")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" runOneTest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" goldenModel "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" ScalaFirFilter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" MyManyElementFir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" input "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" r"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" goldenModelResult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" goldenModel"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("expect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("goldenModelResult"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"i ')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("i")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", input ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("input")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", gm ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("$")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("goldenModelResult")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", ")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tapSize "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),t._v(" by "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" taps "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fill"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tapSize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("r"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create a sequence of random coefficients")]),t._v("\n\n runOneTest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",[s("li",[t._v("在Chisel测试中,"),s("strong",[s("code",[t._v("c.clock.step(1)")]),s("strong",[t._v("通常放在对输出进行期望检查(")]),s("code",[t._v("expect")])]),t._v(")之后,因为我们希望在提供输入后推进仿真一个时钟周期,然后在下一个时钟边沿检查输出。这样可以确保寄存器已经更新到了因输入变化而触发的新状态。")]),t._v(" "),s("li",[t._v("字符串**"),s("code",[t._v('s"i $i, input $input, gm $goldenModelResult, ${c.io.out.peek().litValue}"')]),s("strong",[t._v("是Scala的字符串插值,用于构造包含变量值的字符串。这里它构建了一个描述当前测试状态的字符串,包括迭代次数")]),s("code",[t._v("i")]),s("strong",[t._v(",当前输入")]),s("code",[t._v("input")]),s("strong",[t._v(",金标准模型")]),s("code",[t._v("goldenModel")]),s("strong",[t._v("的结果")]),s("code",[t._v("goldenModelResult")]),s("strong",[t._v(",以及从待测试模块的输出")]),s("code",[t._v("c.io.out")]),t._v("**中提取的值。这对于调试和理解测试失败的上下文非常有用。")])]),t._v(" "),s("h2",{attrs:{id:"hardware-collections"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#hardware-collections"}},[t._v("#")]),t._v(" Hardware Collections")]),t._v(" "),s("h3",{attrs:{id:"example-add-run-time-configurable-taps-to-our-fir"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-add-run-time-configurable-taps-to-our-fir"}},[t._v("#")]),t._v(" Example: Add run-time configurable taps to our FIR")]),t._v(" "),s("p",[t._v("在FIR生成器的IO中添加了一个额外的**"),s("code",[t._v("consts")]),s("strong",[t._v("向量,允许在电路生成后从外部改变系数。这是通过Chisel集合类型")]),s("code",[t._v("Vec")]),s("strong",[t._v("实现的。")]),s("code",[t._v("Vec")]),s("strong",[t._v("支持许多Scala集合方法,但只能包含Chisel硬件元素。仅在普通Scala集合无法满足需求的情况下使用")]),s("code",[t._v("Vec")]),t._v("**,主要是以下两种情况:"),s("em",[t._v("1.")]),t._v(" 在Bundle中需要元素集合,通常是作为IO使用的Bundle。"),s("em",[t._v("2.")]),t._v(" 需要通过硬件部分的索引访问集合(如寄存器文件)。")]),t._v(" "),s("p",[t._v("原因在于**"),s("code",[t._v("Vec")]),s("strong",[t._v("能够创建一组硬件元素的集合,而这些硬件元素可以在生成的硬件电路中被索引和操作。相反,普通的Scala集合,如")]),s("code",[t._v("List")]),s("strong",[t._v("或")]),s("code",[t._v("Seq")]),s("strong",[t._v(",仅仅在Scala软件环境中存在,它们不能直接映射到硬件电路中。因此,当定义硬件模块的IO接口或需要在硬件级别按索引访问元素时,应该使用")]),s("code",[t._v("Vec")]),t._v("**。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" MyManyDynamicElementVecFir"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" consts "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Reference solution")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" regs "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("VecInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fill"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" regs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" regs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" regs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" muls "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" regs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" scan "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",[s("li",[s("p",[s("strong",[s("code",[t._v("VecInit")]),s("strong",[t._v("用于创建一个")]),s("code",[t._v("Vec")])]),t._v(",这是Chisel中的一种集合类型,专门用于存储硬件元素。"),s("strong",[s("code",[t._v("Seq.fill(length - 1)(0.U(8.W))")]),s("strong",[t._v("生成一个长度为")]),s("code",[t._v("length - 1")])]),t._v(",每个元素初始化为8位宽的0的序列。"),s("strong",[s("code",[t._v("VecInit")]),s("strong",[t._v("将这个序列转换成一个")]),s("code",[t._v("Vec")])]),t._v(",以便在硬件设计中使用。**"),s("code",[t._v("RegInit")]),s("strong",[t._v("则将这个")]),s("code",[t._v("Vec")]),t._v("**初始化为寄存器,使得其值在复位时为指定的初始值。这种方式常用于定义具有多个初始相同值的寄存器数组。")])]),t._v(" "),s("li",[s("p",[s("strong",[s("code",[t._v("Wire(Vec(length, UInt(8.W)))")])]),t._v(" 用于创建一个具有 "),s("strong",[s("code",[t._v("length")])]),t._v(" 元素的向量,每个元素是 8 位无符号整数。这是在硬件描述语言中创建信号数组的标准方法,允许这些信号在生成的硬件电路中被实例化。")]),t._v(" "),s("p",[t._v("相比之下,"),s("strong",[s("code",[t._v("mutable.ArrayBuffer[UInt]()")])]),t._v(" 是 Scala 的一个集合类型,主要用于软件程序中的数据存储和处理。在 Chisel 的上下文中,你不能直接将 "),s("strong",[s("code",[t._v("ArrayBuffer")])]),t._v(" 用作硬件信号的容器,因为 "),s("strong",[s("code",[t._v("ArrayBuffer")])]),t._v(" 是一个可变的、仅在 Scala 软件执行环境中存在的数据结构,它不会被合成到硬件中。")]),t._v(" "),s("p",[t._v("简单来说:")]),t._v(" "),s("ul",[s("li",[s("strong",[s("code",[t._v("Wire(Vec(length, UInt(8.W)))")])]),t._v(" 在 Chisel 中创建一个硬件向量,这个向量可以在生成的硬件电路中存在并携带信号。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("mutable.ArrayBuffer[UInt]()")])]),t._v(" 创建一个仅在 Scala 软件执行时存在的内存数组,它不能直接用于硬件设计。")])]),t._v(" "),s("p",[t._v("所以,在你的代码中使用 "),s("strong",[s("code",[t._v("Wire(Vec(length, UInt(8.W)))")])]),t._v(" 是为了定义一个可以在硬件层面操作和传递信号的向量,这对于硬件设计至关重要。")]),t._v(" "),s("h3",{attrs:{id:"example-32-bit-risc-v-processor"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-32-bit-risc-v-processor"}},[t._v("#")]),t._v(" Example: 32-bit RISC-V Processor")]),t._v(" "),s("p",[t._v("Register file: An array of registers that can be read from or written to via a number of read or write ports. Each port consists of an address and data field.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" RegisterFile"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("readPorts"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n require"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("readPorts "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" wen "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" waddr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" wdata "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" raddr "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("readPorts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" rdata "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("readPorts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// A Register of a vector of UInts")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" reg "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" RegInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("VecInit"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Seq"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fill"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wen"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n reg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("waddr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("wdata\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until readPorts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("raddr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("rdata"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("otherwise"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("rdata"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" reg"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("raddr"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[s("strong",[s("code",[t._v("readPorts")])]),t._v(" 表示寄存器文件的读端口数量。这个数量决定了在任何给定的时钟周期内,可以同时读取多少个独立寄存器的数据。每个读端口由其自己的读取地址("),s("strong",[s("code",[t._v("raddr")])]),t._v(")和读取数据("),s("strong",[s("code",[t._v("rdata")])]),t._v(")组成。在这种设置中,你可以在一个时钟周期内并行读取多个寄存器的值,而不是一次只能读取一个,这对于增加处理器的数据吞吐量非常有用。")]),t._v(" "),s("p",[t._v("具体到代码:")]),t._v(" "),s("ul",[s("li",[s("strong",[s("code",[t._v("readPorts")])]),t._v(":定义了有多少个并行的读端口可用于同时读取寄存器文件中的数据。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("io.raddr")])]),t._v(":一个向量,包含了每个读端口对应的读取地址。每个读端口都可以独立地从寄存器文件中选择一个寄存器进行读取。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("io.rdata")])]),t._v(":一个向量,用于输出每个读端口读取到的寄存器值。每个端口根据对应的**"),s("code",[t._v("raddr")]),s("strong",[t._v("读取寄存器文件中的数据,并将其放置在")]),s("code",[t._v("rdata")]),t._v("**的相应位置。")])])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/4.bf48efb2.js b/assets/js/4.bf48efb2.js new file mode 100644 index 0000000..86ab0c9 --- /dev/null +++ b/assets/js/4.bf48efb2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{279:function(t,e,n){},293:function(t,e,n){"use strict";n(279)},309:function(t,e,n){"use strict";n.r(e);var i={functional:!0,props:{type:{type:String,default:"tip"},text:String,vertical:{type:String,default:"top"}},render:(t,{props:e,slots:n})=>t("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(293),n(14)),l=Object(p.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=l.exports}}]); \ No newline at end of file diff --git a/assets/js/40.dc8e2b87.js b/assets/js/40.dc8e2b87.js new file mode 100644 index 0000000..e27699f --- /dev/null +++ b/assets/js/40.dc8e2b87.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{328:function(t,s,n){"use strict";n.r(s);var a=n(14),p=Object(a.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-03-04-3-3-interlude-chisel-standard-library"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-03-04-3-3-interlude-chisel-standard-library"}},[t._v("#")]),t._v(" 2024.03.04-3.3 Interlude: Chisel Standard Library")]),t._v(" "),s("h2",{attrs:{id:"decoupled-a-standard-ready-valid-interface"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#decoupled-a-standard-ready-valid-interface"}},[t._v("#")]),t._v(" Decoupled: A Standard Ready-Valid Interface")]),t._v(" "),s("p",[t._v("在 Chisel 中,"),s("code",[t._v("DecoupledIO")]),t._v(" 是一种标准的准备就绪(ready-valid)接口,广泛用于不同模块间的数据传输,提供了一种带有流控制的通信机制。使用 "),s("code",[t._v("DecoupledIO")]),t._v(" 可以有效地处理数据传输的同步问题,特别是在生产者(source)和消费者(sink)速率不匹配时,确保数据的正确传输与接收。")]),t._v(" "),s("h3",{attrs:{id:"组件"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#组件"}},[t._v("#")]),t._v(" 组件")]),t._v(" "),s("p",[s("code",[t._v("DecoupledIO")]),t._v(" 接口由以下三个主要部分组成:")]),t._v(" "),s("ol",[s("li",[s("strong",[t._v("valid(有效)")]),t._v(" - 这是一个输出信号(从数据源角度看),用于表明当前的数据是有效的,可以被读取。当数据源有数据准备好发送时,它会将 "),s("code",[t._v("valid")]),t._v(" 信号置为高电平。")]),t._v(" "),s("li",[s("strong",[t._v("ready(准备就绪)")]),t._v(" - 这是一个输入信号(从数据源角度看),用于表明目标模块(接收端)准备好接收数据。当接收端可以接收新的数据时,它会将 "),s("code",[t._v("ready")]),t._v(" 信号置为高电平。")]),t._v(" "),s("li",[s("strong",[t._v("bits(数据位)")]),t._v(" - 这个信号承载了要传输的实际数据。数据的宽度和类型可以是任意的,从简单的 "),s("code",[t._v("UInt")]),t._v(" 或 "),s("code",[t._v("Bool")]),t._v(" 到复杂的用户定义 "),s("code",[t._v("Bundle")]),t._v("。")])]),t._v(" "),s("h3",{attrs:{id:"数据传输"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#数据传输"}},[t._v("#")]),t._v(" 数据传输")]),t._v(" "),s("p",[t._v("在 "),s("code",[t._v("DecoupledIO")]),t._v(" 接口中,数据传输在以下条件下发生:")]),t._v(" "),s("ul",[s("li",[t._v("数据源设置 "),s("code",[t._v("valid")]),t._v(" 为高电平,表示其有数据要发送。")]),t._v(" "),s("li",[t._v("接收端设置 "),s("code",[t._v("ready")]),t._v(" 为高电平,表示其准备好接收数据。")])]),t._v(" "),s("p",[t._v("当且仅当同一时钟周期内 "),s("code",[t._v("valid")]),t._v(" 和 "),s("code",[t._v("ready")]),t._v(" 同时为高电平时,数据才会被传输。这允许在接收端或发送端任一端控制数据流,实现背压(backpressure)机制:")]),t._v(" "),s("ul",[s("li",[t._v("如果接收端未准备好接收("),s("code",[t._v("ready")]),t._v(" 为低),即使发送端有数据发送("),s("code",[t._v("valid")]),t._v(" 为高),数据也不会被传输。")]),t._v(" "),s("li",[t._v("如果发送端没有数据要发送("),s("code",[t._v("valid")]),t._v(" 为低),即使接收端准备好了("),s("code",[t._v("ready")]),t._v(" 为高),也不会有数据传输。")])]),t._v(" "),s("h3",{attrs:{id:"使用场景"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#使用场景"}},[t._v("#")]),t._v(" 使用场景")]),t._v(" "),s("p",[s("code",[t._v("DecoupledIO")]),t._v(" 非常适用于生产者和消费者速率不一致的情况,如:")]),t._v(" "),s("ul",[s("li",[t._v("在 FIFO 队列的实现中,确保数据不会在缓冲区满时被写入,或在缓冲区空时被读出。")]),t._v(" "),s("li",[t._v("在处理器设计中,用于不同执行单元间的数据传输,确保在数据未准备好或处理单元未准备好时不发生数据传输。")])]),t._v(" "),s("h3",{attrs:{id:"代码示例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#代码示例"}},[t._v("#")]),t._v(" 代码示例")]),t._v(" "),s("p",[t._v("以下是如何在 Chisel 中创建一个 "),s("code",[t._v("DecoupledIO")]),t._v(" 接口的简单示例:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" data "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 定义数据宽度")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" decoupledData "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Decoupled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 创建 DecoupledIO 接口")]),t._v("\n")])])]),s("p",[t._v("这里,"),s("code",[t._v("decoupledData")]),t._v(" 将是一个拥有 "),s("code",[t._v("valid")]),t._v("、"),s("code",[t._v("ready")]),t._v(" 和 "),s("code",[t._v("bits")]),t._v(" 字段的 "),s("code",[t._v("DecoupledIO")]),t._v(" Bundle,可用于模块间的数据传输。")]),t._v(" "),s("h2",{attrs:{id:"queue"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#queue"}},[t._v("#")]),t._v(" Queue")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit using a Queue")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Flipped"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Decoupled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Decoupled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" queue "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Queue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 2-element queue")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" queue\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Enqueue an element")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("42.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Starting:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.in: ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.out: valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Enqueue another element")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("43.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// What do you think io.out.valid and io.out.bits will be?")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"After first enqueue:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.in: ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.out: valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Read a element, attempt to enqueue")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("44.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// What do you think io.in.ready will be, and will this enqueue succeed, and what will be read?")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"On first read:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.in: ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.out: valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Read elements out")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// What do you think will be read here?")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"On second read:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.in: ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.out: valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Will a third read produce anything?")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"On third read:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.in: ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tio.out: valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("Starting"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nAfter first enqueue"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),t._v("\nOn first read"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),t._v("\nOn second read"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("43")]),t._v("\nOn third read"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n\tio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),t._v("\n")])])]),s("ol",[s("li",[s("p",[s("code",[t._v("**val in = Flipped(Decoupled(UInt(8.W)))**")]),t._v(" 这里的"),s("code",[t._v("**Flipped**")]),t._v("表示是"),s("code",[t._v("**Input**")]),t._v(",因为"),s("code",[t._v("**Decoupled**")]),t._v("默认是"),s("code",[t._v("**Output**")])])]),t._v(" "),s("li",[s("p",[s("code",[t._v("**val queue = Queue(io.in, 2)**")]),t._v(" "),s("strong",[t._v("连接 "),s("code",[t._v("io.in")]),t._v(" 到队列的输入端:")]),t._v(" 这意味着 "),s("strong",[s("code",[t._v("io.in")])]),t._v(" 上发生的任何事情(比如信号变化)都会直接影响到队列。具体来说,当您在测试代码中设置 "),s("strong",[s("code",[t._v("io.in.valid")])]),t._v(" 和 "),s("strong",[s("code",[t._v("io.in.bits")])]),t._v(",您实际上是在向队列的入队端提供数据。")])]),t._v(" "),s("li",[s("p",[s("strong",[s("code",[t._v("io.out <> queue")])]),t._v(" 时,你实际上是在将模块的输出接口 "),s("strong",[s("code",[t._v("io.out")])]),t._v(" 和队列 "),s("strong",[s("code",[t._v("queue")])]),t._v(" 的出队接口双向连接。")]),t._v(" "),s("p",[t._v("具体来说,对于 "),s("strong",[s("code",[t._v("DecoupledIO")])]),t._v(" 接口:")]),t._v(" "),s("ul",[s("li",[s("strong",[s("code",[t._v("io.out.valid")])]),t._v(" 会连接到 "),s("strong",[s("code",[t._v("queue.io.deq.valid")])]),t._v("。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("io.out.bits")])]),t._v(" 会连接到 "),s("strong",[s("code",[t._v("queue.io.deq.bits")])]),t._v("。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("queue.io.deq.ready")])]),t._v(" 会连接到 "),s("strong",[s("code",[t._v("io.out.ready")])]),t._v("。")])]),t._v(" "),s("p",[t._v("这种连接方式确保了数据可以从 "),s("strong",[s("code",[t._v("queue")])]),t._v(" 的出队端传输到模块的输出 "),s("strong",[s("code",[t._v("io.out")])]),t._v(",同时允许 "),s("strong",[s("code",[t._v("io.out")])]),t._v(" 控制背压(通过 "),s("strong",[s("code",[t._v("ready")])]),t._v(" 信号)以及 "),s("strong",[s("code",[t._v("queue")])]),t._v(" 报告其状态(通过 "),s("strong",[s("code",[t._v("valid")])]),t._v(" 信号)。")])])]),t._v(" "),s("ul",[s("li",[s("p",[s("strong",[t._v("开始时:")])]),t._v(" "),s("ul",[s("li",[t._v("首先,输出端 "),s("strong",[s("code",[t._v("io.out.ready")])]),t._v(" 被设为 "),s("strong",[s("code",[t._v("false")])]),t._v(",表示消费者还没准备好接收数据。")]),t._v(" "),s("li",[t._v("输入端 "),s("strong",[s("code",[t._v("io.in.valid")])]),t._v(" 被设为 "),s("strong",[s("code",[t._v("true")])]),t._v(",并通过 "),s("strong",[s("code",[t._v("io.in.bits")])]),t._v(" 提供了值 42,尝试将其入队。")]),t._v(" "),s("li",[t._v("打印的输出显示,初始时,"),s("strong",[s("code",[t._v("io.in.ready")])]),t._v(" 应该为 "),s("strong",[s("code",[t._v("true")])]),t._v("(队列未满,可以接收数据),而 "),s("strong",[s("code",[t._v("io.out.valid")])]),t._v(" 应该为 "),s("strong",[s("code",[t._v("false")])]),t._v("(数据尚未出队到输出端)。")])])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("首次入队后:")])]),t._v(" "),s("ul",[s("li",[t._v("程序尝试将另一个值 43 入队,并再次检查状态。")]),t._v(" "),s("li",[t._v("由于队列不满,第二个值应该成功入队。"),s("strong",[s("code",[t._v("io.in.ready")])]),t._v(" 仍然为 "),s("strong",[s("code",[t._v("true")])]),t._v(",表明还可以接收更多数据。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("io.out.valid")])]),t._v(" 被设置为 "),s("strong",[s("code",[t._v("true")])]),t._v(" 并且 "),s("strong",[s("code",[t._v("io.out.bits")])]),t._v(" 被更新为 42,因为队列内部确实有一个元素(42)准备好了并且尝试发送。即使 "),s("strong",[s("code",[t._v("io.out.ready")])]),t._v(" 是 "),s("strong",[s("code",[t._v("false")])]),t._v(","),s("strong",[s("code",[t._v("io.out.valid")])]),t._v(" 和 "),s("strong",[s("code",[t._v("io.out.bits")])]),t._v(" 仍然会反映队列出口处的数据状态。")]),t._v(" "),s("li",[t._v("尽管 "),s("strong",[s("code",[t._v("io.out.valid")])]),t._v(" 为 "),s("strong",[s("code",[t._v("true")])]),t._v(" 并且 "),s("strong",[s("code",[t._v("io.out.bits")])]),t._v(" 显示了数据(42),但由于 "),s("strong",[s("code",[t._v("io.out.ready")])]),t._v(" 为 "),s("strong",[s("code",[t._v("false")])]),t._v(',这次数据传输并不会真正完成。换句话说,42 在逻辑上是"准备发送"的,但由于缺乏接收准备就绪的确认(即 '),s("strong",[s("code",[t._v("io.out.ready")])]),t._v(" 为 "),s("strong",[s("code",[t._v("false")])]),t._v('),它实际上并没有"被接收"。')])])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("首次读取尝试:")])]),t._v(" "),s("ul",[s("li",[t._v("程序尝试同时进行读取(将 "),s("strong",[s("code",[t._v("io.out.ready")])]),t._v(" 设为 "),s("strong",[s("code",[t._v("true")])]),t._v(")和入队(值 44)。")]),t._v(" "),s("li",[t._v("由于此时输出准备好接收数据,第一个入队的值(42)应该会被传递到 "),s("strong",[s("code",[t._v("io.out")])]),t._v(","),s("strong",[s("code",[t._v("io.out.valid")])]),t._v(" 应变为 "),s("strong",[s("code",[t._v("true")])]),t._v(","),s("strong",[s("code",[t._v("io.out.bits")])]),t._v(" 应显示 42。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("io.in.ready")])]),t._v(" 为 "),s("strong",[s("code",[t._v("0")])]),t._v("。这是因为队列("),s("strong",[s("code",[t._v("queue")])]),t._v(")此时已经满了。")])])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("第二次读取:")])]),t._v(" "),s("ul",[s("li",[t._v("这时不再有新数据入队,但 "),s("strong",[s("code",[t._v("io.out")])]),t._v(" 准备好读取数据。")]),t._v(" "),s("li",[t._v("应该能读取到之前入队的第二个值 43,"),s("strong",[s("code",[t._v("io.out.valid")])]),t._v(" 应为 "),s("strong",[s("code",[t._v("true")])]),t._v(","),s("strong",[s("code",[t._v("io.out.bits")])]),t._v(" 应显示 43。")])])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("第三次读取尝试:")])]),t._v(" "),s("ul",[s("li",[t._v("在这一步,尽管 "),s("strong",[s("code",[t._v("io.out")])]),t._v(" 依然准备好接收数据,但队列应该已经空了。")]),t._v(" "),s("li",[t._v("因此,"),s("strong",[s("code",[t._v("io.out.valid")])]),t._v(" 应该变回 "),s("strong",[s("code",[t._v("false")])]),t._v(",表示没有更多数据可读。")]),t._v(" "),s("li",[t._v("不过为什么是42?")])]),t._v(" "),s("p",[t._v("注:")]),t._v(" "),s("ol",[s("li",[s("strong",[s("code",[t._v("peek()")])]),t._v(" 函数用于查看信号的当前值,而 "),s("strong",[s("code",[t._v(".litValue")])]),t._v(" 用于获取这个值作为一个 Scala 的字面量(literal)。因此,"),s("strong",[s("code",[t._v("c.io.in.ready.peek().litValue")])]),t._v(" 表示查看 "),s("strong",[s("code",[t._v("c.io.in.ready")])]),t._v(" 信号的当前值,并获取其字面量值。")]),t._v(" "),s("li",[t._v("必须要"),s("code",[t._v("**c.clock.step(1)**")]),t._v("以后才会有输出")])])])]),t._v(" "),s("h2",{attrs:{id:"arbiter"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#arbiter"}},[t._v("#")]),t._v(" Arbiter")]),t._v(" "),s("p",[t._v("一个 Arbiter 是用于解决多个请求源争用单一资源的组件。它的基本功能是在多个输入信号中选择一个进行输出,基于某种特定的优先级或策略。在处理多个并发请求访问同一资源(例如,总线或共享内存)时,仲裁器确保每个时刻只有一个选定的请求被服务,同时遵循公平性或优先级规则,避免资源冲突或死锁。")]),t._v(" "),s("ol",[s("li",[s("p",[s("strong",[s("code",[t._v("Arbiter")])]),t._v(":这是一个静态优先级仲裁器,它总是优先选择索引较低的生产者。如果有多个请求同时到达,"),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 会根据请求信号的索引顺序来决定优先权,索引较小的请求者会获得优先服务。这意味着如果较低索引的请求者持续有请求,它将持续获得资源,而更高索引的请求者则需要等待。")]),t._v(" "),s("p",[t._v("示例代码如下:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit using a priority arbiter")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Flipped"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Decoupled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Decoupled"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Arbiter doesn't have a convenience constructor, so it's built like any Module")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" arbiter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Arbiter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 2 to 1 Priority Arbiter")]),t._v("\n arbiter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" arbiter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Start:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tin(0).ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", in(1).ready=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tout.valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out.bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Valid input 1")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("42.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// What do you think the output will be?")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"valid input 1:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tin(0).ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", in(1).ready=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tout.valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out.bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Valid inputs 0 and 1")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("43.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// What do you think the output will be? Which inputs will be ready?")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"valid inputs 0 and 1:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tin(0).ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", in(1).ready=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tout.valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out.bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Valid input 0")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// What do you think the output will be?")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"valid input 0:"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tin(0).ready=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", in(1).ready=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\tout.valid=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out.bits=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("Start"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nvalid input "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("42")]),t._v("\nvalid inputs "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" and "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("43")]),t._v("\nvalid input "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ready"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("valid"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bits"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("43")]),t._v("\n")])])]),s("ol",[s("li",[s("p",[s("strong",[t._v("初始状态检查")]),t._v(":")]),t._v(" "),s("ul",[s("li",[t._v("首先,测试确认在没有任何有效输入 ("),s("strong",[s("code",[t._v("io.in(0).valid")])]),t._v(" 和 "),s("strong",[s("code",[t._v("io.in(1).valid")])]),t._v(" 都为 "),s("strong",[s("code",[t._v("false")])]),t._v(") 时,输出 ("),s("strong",[s("code",[t._v("io.out.valid")])]),t._v(") 也应为 "),s("strong",[s("code",[t._v("false")])]),t._v(",表示没有数据通过仲裁器。")])])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("激活第二个输入")]),t._v(":")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("然后,测试激活 "),s("strong",[s("code",[t._v("io.in(1)")])]),t._v("(即索引为 1 的输入),同时保持 "),s("strong",[s("code",[t._v("io.out.ready")])]),t._v(" 为 "),s("strong",[s("code",[t._v("true")])]),t._v(",这模拟了接收端准备好接收数据的情况。预期 "),s("strong",[s("code",[t._v("io.in(1)")])]),t._v(" 的数据应该通过到 "),s("strong",[s("code",[t._v("io.out")])]),t._v("。")])]),t._v(" "),s("li",[s("p",[t._v("两个输入的 "),s("strong",[s("code",[t._v("ready")])]),t._v(" 信号都是 "),s("strong",[s("code",[t._v("1")])]),t._v("。这是因为 "),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 的行为是基于它可以传递数据的能力。让我们分解这个情况:")]),t._v(" "),s("p",[s("strong",[t._v("当只有 "),s("code",[t._v("io.in(1)")]),t._v(" 有效时")]),t._v(":")]),t._v(" "),s("ul",[s("li",[s("strong",[s("code",[t._v("in(0).ready=1")])]),t._v(":这意味着 "),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 仲裁器准备好从 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 接收数据,尽管此时 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 没有数据(不是有效的)。"),s("strong",[s("code",[t._v("ready")])]),t._v(" 信号为 "),s("strong",[s("code",[t._v("1")])]),t._v(" 表示如果 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 有数据,"),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 准备好接收它。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("in(1).ready=1")])]),t._v(":同时,"),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 也表示准备好接收 "),s("strong",[s("code",[t._v("io.in(1)")])]),t._v(" 的数据,因为它是有效的。在这种情况下,由于 "),s("strong",[s("code",[t._v("io.out.ready")])]),t._v(" 被设置为 "),s("strong",[s("code",[t._v("true")])]),t._v(","),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 知道输出端已经准备好接收数据,所以它将 "),s("strong",[s("code",[t._v("io.in(1)")])]),t._v(" 的 "),s("strong",[s("code",[t._v("ready")])]),t._v(" 也置为 "),s("strong",[s("code",[t._v("1")])]),t._v("。")])])])]),t._v(" "),s("p",[t._v("这里的关键是 "),s("strong",[s("code",[t._v("ready")])]),t._v(" 信号表示的是接收能力而非当前的数据有效性。即使 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 当前没有标记为有效,"),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 也表明它准备好从该输入接收数据,这就是为什么在 "),s("strong",[s("code",[t._v("io.in(1)")])]),t._v(" 有效时,"),s("strong",[s("code",[t._v("io.in(0).ready")])]),t._v(" 也会是 "),s("strong",[s("code",[t._v("1")])]),t._v("。")])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("同时激活两个输入")]),t._v(":")]),t._v(" "),s("ul",[s("li",[t._v("接下来,测试同时激活两个输入,即 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 和 "),s("strong",[s("code",[t._v("io.in(1)")])]),t._v(" 都设置为有效。由于 "),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 的静态优先级策略,预期 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 的数据(即优先级更高的输入)会被传递到 "),s("strong",[s("code",[t._v("io.out")])]),t._v("。")]),t._v(" "),s("li",[t._v("当两个输入 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 和 "),s("strong",[s("code",[t._v("io.in(1)")])]),t._v(" 都被设置为有效时,"),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 会根据其内部逻辑来选择一个输入。对于普通的 "),s("strong",[s("code",[t._v("Arbiter")])]),t._v(",它将优先选择索引较低的输入,即 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v("。")]),t._v(" "),s("li",[t._v("由于 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 被选中,"),s("strong",[s("code",[t._v("io.in(1)")])]),t._v(" 的 "),s("strong",[s("code",[t._v("ready")])]),t._v(" 信号将会被置为 "),s("strong",[s("code",[t._v("false")])]),t._v(",而 "),s("strong",[s("code",[t._v("io.in(0).ready")])]),t._v(" 会是 "),s("strong",[s("code",[t._v("true")])]),t._v(",表示 "),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 准备接受 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 的数据。")]),t._v(" "),s("li",[t._v("在此情况下,即使您设置了 "),s("strong",[s("code",[t._v("io.in(1).bits")])]),t._v(",这个数据也不会被 "),s("strong",[s("code",[t._v("Arbiter")])]),t._v(" 选择,因为 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 有更高的优先级。")])])]),t._v(" "),s("li",[s("p",[s("strong",[t._v("只激活第一个输入")]),t._v(":")]),t._v(" "),s("ul",[s("li",[t._v("最后,测试只激活 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v("。即使之前 "),s("strong",[s("code",[t._v("io.in(1)")])]),t._v(" 被激活过,在这一步中只有 "),s("strong",[s("code",[t._v("io.in(0)")])]),t._v(" 有效,所以只有它的数据应该被传递到 "),s("strong",[s("code",[t._v("io.out")])]),t._v("。")])])])])]),t._v(" "),s("li",[s("p",[s("strong",[s("code",[t._v("RRArbiter")])]),t._v(":这是一个循环(round-robin)仲裁器,它按照循环的顺序为请求者提供服务,确保了长期的公平性。当一个请求被服务后,"),s("strong",[s("code",[t._v("RRArbiter")])]),t._v(" 会记住最后被服务的请求,并在下一个服务周期中优先考虑下一个请求者。这样可以确保即使在高负载下,所有请求者也能获得均等的服务机会。")]),t._v(" "),s("p",[t._v("示例代码如下:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" rrArbiter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Module"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" RRArbiter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nrrArbiter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" producer0\nrrArbiter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" producer1\nconsumer "),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" rrArbiter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out\n")])])])])]),t._v(" "),s("p",[t._v("注:Ariter 是组合电路,不需要step(1)")]),t._v(" "),s("h2",{attrs:{id:"misc-function-blocks"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#misc-function-blocks"}},[t._v("#")]),t._v(" Misc Function Blocks")]),t._v(" "),s("h3",{attrs:{id:"bitwise-utilities"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#bitwise-utilities"}},[t._v("#")]),t._v(" Bitwise Utilities")]),t._v(" "),s("h3",{attrs:{id:"popcount"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#popcount"}},[t._v("#")]),t._v(" PopCount")]),t._v(" "),s("p",[t._v("PopCount returns the number of high (1) bits in the input as a "),s("code",[t._v("**UInt**")]),t._v(".")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit using PopCount")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PopCount"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Integer.parseInt is used create an Integer from a binary specification")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"00000000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"00001111"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"11001010"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"11111111"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("in"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b0"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1111"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v("\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b11001010"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v("\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b11111111"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),t._v("\n")])])]),s("h3",{attrs:{id:"reverse"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#reverse"}},[t._v("#")]),t._v(" Reverse")]),t._v(" "),s("p",[t._v("Reverse returns the bit-reversed input")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit using Reverse")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Reverse"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Integer.parseInt is used create an Integer from a binary specification")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"01010101"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=0b")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"00001111"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=0b")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"11110000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=0b")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"11001010"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=0b")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("in"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1010101"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b10101010\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1111"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b11110000\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b11110000"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1111\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b11001010"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1010011\n")])])]),s("h3",{attrs:{id:"onehot-encoding-utilities"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#onehot-encoding-utilities"}},[t._v("#")]),t._v(" OneHot encoding utilities")]),t._v(" "),s("h3",{attrs:{id:"uinttooh"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#uinttooh"}},[t._v("#")]),t._v(" "),s("code",[t._v("UIntToOH")])]),t._v(" "),s("p",[t._v("UInt to OneHot")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit using UIntToOH")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" UIntToOH"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=0b")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=0b")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=0b")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("15.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=0b")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b10\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b100000000\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1000000000000000\n")])])]),s("h3",{attrs:{id:"ohtouint"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ohtouint"}},[t._v("#")]),t._v(" "),s("code",[t._v("OHToUInt")])]),t._v(" "),s("p",[t._v("OneHot to UInt")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit using OHToUInt")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" OHToUInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0000 0000 0000 0001"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("replace"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('" "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0000 0000 1000 0000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("replace"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('" "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"1000 0000 0000 0001"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("replace"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('" "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Some invalid inputs:")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// None high")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0000 0000 0000 0000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("replace"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('" "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Multiple high")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Integer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("parseInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0001 0100 0010 0000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("replace"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('" "')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in=0b')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toBinaryString")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b10000000"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),t._v("\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1000000000000001"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v("\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b0"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nin"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("b1010000100000"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("15")]),t._v("\n")])])]),s("h3",{attrs:{id:"mux"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#mux"}},[t._v("#")]),t._v(" MUX")]),t._v(" "),s("h3",{attrs:{id:"prioritymux"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#prioritymux"}},[t._v("#")]),t._v(" "),s("code",[t._v("**PriorityMux**")])]),t._v(" "),s("p",[t._v("Outputs the value associated with the lowest-index asserted select signal.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit using PriorityMux")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_sels "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_bits "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" PriorityMux"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Select higher index only")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in_sels=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Select both - arbitration needed")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in_sels=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Select lower index only")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in_sels=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nin_sels"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),t._v("\nin_sels"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\nin_sels"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\n")])])]),s("p",[s("strong",[s("code",[t._v("PriorityMux")])]),t._v(" 会根据 "),s("strong",[s("code",[t._v("in_sels")])]),t._v(" 中的布尔值,从左到右(即从索引 0 开始)检查哪个输入是选中的,并输出第一个选中输入对应的 "),s("strong",[s("code",[t._v("in_bits")])]),t._v(" 值。因此,同时使 "),s("strong",[s("code",[t._v("in_sels(0)")])]),t._v(" 和 "),s("strong",[s("code",[t._v("in_sels(1)")])]),t._v(" 为 "),s("strong",[s("code",[t._v("true")])]),t._v(" 时,由于 "),s("strong",[s("code",[t._v("in_sels(0)")])]),t._v(" 的优先级更高,"),s("strong",[s("code",[t._v("io.out")])]),t._v(" 应该输出 "),s("strong",[s("code",[t._v("in_bits(0)")])]),t._v(" 的值,即 "),s("strong",[s("code",[t._v("10.U")])]),t._v("。")]),t._v(" "),s("h3",{attrs:{id:"onehot-mux-mux1h"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#onehot-mux-mux1h"}},[t._v("#")]),t._v(" OneHot Mux: "),s("code",[t._v("**Mux1H**")])]),t._v(" "),s("p",[t._v("An "),s("code",[t._v("**Mux1H**")]),t._v(" provides an efficient implementation when it is guaranteed that exactly one of the select signals will be high. Behavior is undefined if the assumption is not true.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit using Mux1H")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_sels "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" in_bits "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Mux1H"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_bits"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20.")]),t._v("U"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Select index 1")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in_sels=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Select index 0")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in_sels=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Select none (invalid)")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in_sels=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Select both (invalid)")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"in_sels=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in_sels"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", out=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nin_sels"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),t._v("\nin_sels"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\nin_sels"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nin_sels"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" out"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),t._v("\n")])])]),s("h3",{attrs:{id:"counter"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#counter"}},[t._v("#")]),t._v(" "),s("code",[t._v("**Counter**")])]),t._v(" "),s("p",[t._v("A counter that can be incremented once every cycle, up to some specified limit, at which point it overflows. Note that it is "),s("strong",[t._v("not")]),t._v(" a Module, and its value is accessible.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("test"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Module "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Example circuit with two counters")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" io "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" IO"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" Bundle "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" count "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Input"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Bool"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" totalCycles "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Output"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Assuming 32-bit is enough for cycle count")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Counter for controlled increments")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" controlledCounter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Counter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 3-count Counter (outputs range [0...2])")]),t._v("\n when"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n controlledCounter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("inc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" controlledCounter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Counter for total cycles, counting up to (2^32)-1")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" totalCycleCounter "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Counter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("math"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("pow"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n totalCycleCounter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("inc"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Increment every cycle")]),t._v("\n io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("totalCycles "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" totalCycleCounter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("value\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" c "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"start: controlled counter value=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", total cycles=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("totalCycles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"step 1: controlled counter value=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", total cycles=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("totalCycles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"step 2: controlled counter value=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", total cycles=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("totalCycles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"step without increment: controlled counter value=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", total cycles=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("totalCycles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("poke"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("B"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("clock"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string-interpolation"}},[s("span",{pre:!0,attrs:{class:"token id function"}},[t._v("s")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"step again: controlled counter value=')]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v(", total cycles=")]),s("span",{pre:!0,attrs:{class:"token interpolation"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("${")]),s("span",{pre:!0,attrs:{class:"token expression"}},[t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("totalCycles"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("peek"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("litValue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")])]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"')])]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nstart"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" controlled counter value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" total cycles"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nstep "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" controlled counter value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" total cycles"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nstep "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" controlled counter value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" total cycles"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("\nstep without increment"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" controlled counter value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" total cycles"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("\nstep again"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" controlled counter value"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" total cycles"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v("\n")])])]),s("p",[t._v("在 Chisel 中创建一个计数器时,如果您传递的参数是 "),s("code",[t._v("n")]),t._v(",那么计数器能够表示的计数范围是从0到 n-1。所以,当您使用 "),s("code",[t._v("Counter(n)")]),t._v(" 时,计数器的实际最大计数值是 n-1。")])])}),[],!1,null,null,null);s.default=p.exports}}]); \ No newline at end of file diff --git a/assets/js/41.3133f986.js b/assets/js/41.3133f986.js new file mode 100644 index 0000000..eae651d --- /dev/null +++ b/assets/js/41.3133f986.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{329:function(t,s,a){"use strict";a.r(s);var n=a(14),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-03-05-3-4-higher-order-functions"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-03-05-3-4-higher-order-functions"}},[t._v("#")]),t._v(" 2024.03.05-3.4 Higher-Order Functions")]),t._v(" "),s("h2",{attrs:{id:"a-tale-of-two-firs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#a-tale-of-two-firs"}},[t._v("#")]),t._v(" A Tale of Two FIRs")]),t._v(" "),s("p",[t._v("From the last module, we had the convolution part of the FIR filter written like this:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" muls "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("in "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" regs"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" scan "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Wire"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Vec"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" UInt"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.")]),t._v("W"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("<-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until length"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" muls"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\nio"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" scan"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("length "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("p",[t._v("As a recap, the idea is to multiply each element of "),s("code",[t._v("**io.in**")]),t._v(" with the corresponding element of "),s("code",[t._v("**io.consts**")]),t._v(", and store it in "),s("code",[t._v("**muls**")]),t._v(". Then, the elements in "),s("code",[t._v("**muls**")]),t._v(" are accumulated into "),s("code",[t._v("**scan**")]),t._v(", with "),s("code",[t._v("**scan(0) = muls(0)**")]),t._v(", "),s("code",[t._v("**scan(1) = scan(0) + muls(1) = muls(0) + muls(1)**")]),t._v(", and in general "),s("code",[t._v("**scan(n) = scan(n-1) + muls(n) = muls(0) + ... + muls(n-1) + muls(n)**")]),t._v(". The last element in "),s("code",[t._v("**scan**")]),t._v(" (equal to the sum of all "),s("code",[t._v("**muls**")]),t._v(") is assigned to "),s("code",[t._v("**io.out**")]),t._v(".")]),t._v(" "),s("p",[t._v("However, it's very verbose for what might be considered quite a simple operation. In fact, all that could be written in one line:")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("taps zip io"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("consts"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" b "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reduce"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("ul",[s("li",[t._v("假设 "),s("strong",[s("code",[t._v("taps")])]),t._v(" 是所有样本的列表,其中 "),s("strong",[s("code",[t._v("taps(0) = io.in")])]),t._v(","),s("strong",[s("code",[t._v("taps(1) = regs(0)")])]),t._v(" 等等。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v("(taps zip io.consts)")])]),t._v(" 将两个列表 "),s("strong",[s("code",[t._v("taps")])]),t._v(" 和 "),s("strong",[s("code",[t._v("io.consts")])]),t._v(" 合并成一个列表,其中每个元素是一个元组,这个元组包含了在相应位置的输入元素。具体来说,它的值将是 "),s("strong",[s("code",[t._v("[(taps(0), io.consts(0)), (taps(1), io.consts(1)), ..., (taps(n), io.consts(n))]")])]),t._v("。记住,在 Scala 中点号是可选的,所以这等同于 "),s("strong",[s("code",[t._v("(taps.zip(io.consts))")])]),t._v("。")]),t._v(" "),s("li",[s("strong",[s("code",[t._v(".map { case (a, b) => a * b }")])]),t._v(" 对列表中的元素应用一个匿名函数(接收两个元素的元组并返回它们的乘积),并返回结果。在这个情况下,结果等价于在冗长示例中的 "),s("strong",[s("code",[t._v("muls")])]),t._v(",其值为 "),s("strong",[s("code",[t._v("[taps(0) * io.consts(0), taps(1) * io.consts(1), ..., taps(n) * io.consts(n)]")])]),t._v("。")]),t._v(" "),s("li",[t._v("最后,"),s("strong",[s("code",[t._v(".reduce(_ + _)")])]),t._v(" 同样应用一个函数(元素的加法)到列表的元素上。然而,它接收两个参数:第一个是当前的累加值,第二个是列表元素(在第一次迭代中,它只是将前两个元素相加)。这些由括号中的两个下划线表示。那么结果,假设是从左到右的遍历,将会是 "),s("strong",[s("code",[t._v("(((muls(0) + muls(1)) + muls(2)) + ...) + muls(n)")])]),t._v(",更深层次括号内的结果先被计算。这就是卷积的输出结果。")])]),t._v(" "),s("h2",{attrs:{id:"functions-as-arguments"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#functions-as-arguments"}},[t._v("#")]),t._v(" Functions as Arguments")]),t._v(" "),s("p",[t._v("Formally, functions like "),s("code",[t._v("**map**")]),t._v(" and "),s("code",[t._v("**reduce**")]),t._v(" are called "),s("em",[t._v("higher-order functions")]),t._v(" : they are functions that take functions as arguments. As it turns out (and hopefully, as you can see from the above example), these are very powerful constructs that encapsulate a general computational pattern, allowing you to concentrate on the application logic instead of flow control, and resulting in very concise code.")]),t._v(" "),s("ul",[s("li",[t._v("对于每个参数只引用一次的函数,您"),s("em",[t._v("可以")]),t._v("使用下划线("),s("strong",[s("code",[t._v("_")])]),t._v(")来引用每个参数。在上面的例子中,"),s("strong",[s("code",[t._v("reduce")])]),t._v(" 函数接受两个参数,可以被指定为 "),s("strong",[s("code",[t._v("_ + _")])]),t._v("。虽然这很方便,但它受制于一组额外的复杂规则,所以如果不起作用,您可以尝试:")]),t._v(" "),s("li",[t._v("明确指定输入参数列表。"),s("strong",[s("code",[t._v("reduce")])]),t._v(" 可以被明确写成 "),s("strong",[s("code",[t._v("(a, b) => a + b")])]),t._v(",通用形式是把参数列表放在括号里,后面跟着 "),s("strong",[s("code",[t._v("=>")])]),t._v(",然后是引用这些参数的函数体。")]),t._v(" "),s("li",[t._v("当需要解包元组时,使用 "),s("strong",[s("code",[t._v("case")])]),t._v(" 语句,如 "),s("strong",[s("code",[t._v("case (a, b) => a * b")])]),t._v("。这接收一个参数,一个两个元素的元组,并将其解包到变量 "),s("strong",[s("code",[t._v("a")])]),t._v(" 和 "),s("strong",[s("code",[t._v("b")])]),t._v(" 中,然后可以在函数体中使用它们。")])]),t._v(" "),s("h3",{attrs:{id:"practice-in-scala"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#practice-in-scala"}},[t._v("#")]),t._v(" Practice in Scala")]),t._v(" "),s("p",[t._v("Scala 集合 API 中的主要类,如"),s("code",[t._v("**List**")]),t._v("。这些高阶函数是这些 API 的一部分。实际上,上面的示例使用了"),s("code",[t._v("**List**")]),t._v("上的"),s("code",[t._v("**map**")]),t._v("和"),s("code",[t._v("**reduce**")]),t._v(" API。在这一节中,我们将通过示例和练习熟悉这些方法。在这些示例中,我们将对 Scala 数字("),s("code",[t._v("**Int**")]),t._v(")操作,以简化和明确表示,但因为 Chisel 运算符的行为类似,所以这些概念应该是通用的。")]),t._v(" "),s("h3",{attrs:{id:"example-map"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-map"}},[t._v("#")]),t._v(" Example: map")]),t._v(" "),s("p",[s("strong",[s("code",[t._v("List[A].map")])]),t._v(" 有类型签名 "),s("strong",[s("code",[t._v("map[B](f: (A) ⇒ B): List[B]")])]),t._v("。现在,将类型 A 和 B 视为 "),s("strong",[s("code",[t._v("Int")])]),t._v(" 或 "),s("strong",[s("code",[t._v("UInt")])]),t._v(",意味着它们可以是软件或硬件类型。它接受一个类型为 "),s("strong",[s("code",[t._v("(f: (A) ⇒ B)")])]),t._v(" 的参数,或者一个接受类型为 A(与输入列表的元素类型相同)的一个参数并返回类型为 B 的值的函数。"),s("strong",[s("code",[t._v("map")])]),t._v(" 然后返回一个新的类型为 B(参数函数的返回类型)的列表。")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// explicit argument list in function")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// equivalent to the above, but implicit arguments")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("toString "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// the output element type can be different from the input element type")]),t._v("\n\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("7")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("case")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" y"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" x"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("y "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// this unpacks a tuple, note use of curly braces")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Related: Scala has a syntax for constructing lists of sequential numbers")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" to "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// to is inclusive , the end point is part of the result")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// until is exclusive at the end, the end point is not part of the result")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Those largely behave like lists, and can be useful for generating indices:")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("val")]),t._v(" myList "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"d"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("myList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// output:")]),t._v("\nList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("12")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("21")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("32")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nRange "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" to "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\nRange "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v(" until "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\nVector"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" d"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"example-zipwithindex"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-zipwithindex"}},[t._v("#")]),t._v(" Example: "),s("code",[t._v("**zipWithIndex**")])]),t._v(" "),s("p",[s("code",[t._v("**List.zipWithIndex**")]),t._v(" has type signature "),s("code",[t._v("**zipWithIndex: List[(A, Int)]**")]),t._v(". It takes no arguments, but returns a list where each element is a tuple of the original elements, and the index (with the first one being zero). So "),s("code",[t._v('**List("a", "b", "c", "d").zipWithIndex**')]),t._v(" would return "),s("code",[t._v('**List(("a", 0), ("b", 1), ("c", 2), ("d", 3))**')])]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("zipWithIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// note indices start at zero")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"d"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("zipWithIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"a"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"b"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"c"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"d"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"e"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"f"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"g"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"h"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("zipWithIndex"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// tuples nest")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// output:")]),t._v("\nList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("d"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nList"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("d"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("f"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("g"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("h"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"example-reduce"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-reduce"}},[t._v("#")]),t._v(" Example: "),s("code",[t._v("**reduce**")])]),t._v(" "),s("p",[s("code",[t._v("List[A].map")]),t._v(" has type signature similar to "),s("code",[t._v("reduce(op: (A, A) ⇒ A): A")]),t._v(". (it's actually more lenient, "),s("code",[t._v("A")]),t._v(" only has to be a supertype of the List type, but we're not going to deal with that syntax here)")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reduce"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("a"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("=>")]),t._v(" a "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" b"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// returns the sum of all the elements")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reduce"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// returns the product of all the elements")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reduce"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// you can chain reduce onto the result of a map")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("map"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reduce"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// returns the product of the double of the elements of the input list.")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// output:")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("24")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("14")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("384")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Important note: reduce will fail with an empty list")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("Int")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reduce"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"example-fold"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example-fold"}},[t._v("#")]),t._v(" Example: "),s("code",[t._v("**fold**")])]),t._v(" "),s("p",[s("code",[t._v("**List[A].fold**")]),t._v(" is very similar to reduce, except that you can specify the initial accumulation value. It has type signature similar to "),s("code",[t._v("**fold(z: A)(op: (A, A) ⇒ A): A**")]),t._v(". (like "),s("code",[t._v("**reduce**")]),t._v(", the type of "),s("code",[t._v("**A**")]),t._v(" is also more lenient). Notably, it takes two argument lists, the first ("),s("code",[t._v("**z**")]),t._v(") is the initial value, and the second is the accumulation function. Unlike "),s("code",[t._v("**reduce**")]),t._v(", it will not fail with an empty list, instead returning the initial value directly.")]),t._v(" "),s("div",{staticClass:"language-scala extra-class"},[s("pre",{pre:!0,attrs:{class:"language-scala"}},[s("code",[t._v("println"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fold"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// equivalent to the sum using reduce")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fold"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// like above, but accumulation starts at 1")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fold"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" _"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// unlike reduce, does not fail on an empty input")]),t._v("\nprintln"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("List"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fold"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// returns the double the product of the elements of the input list")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// output:")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("48")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/42.be5554aa.js b/assets/js/42.be5554aa.js new file mode 100644 index 0000000..979a1dd --- /dev/null +++ b/assets/js/42.be5554aa.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{330:function(t,s,e){"use strict";e.r(s);var a=e(14),i=Object(a.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"一生一芯计划"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#一生一芯计划"}},[this._v("#")]),this._v(" 一生一芯计划")]),this._v(" "),t("p",[t("RouterLink",{attrs:{to:"/Chip/Chip/一生一芯计划 f5bd1f85d07845b49dba8983a4450ec6/预学习阶段 69d0978e03dc4aa088d048cc6e4ec34e.html"}},[this._v("预学习阶段")])],1)])}),[],!1,null,null,null);s.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/43.65548e10.js b/assets/js/43.65548e10.js new file mode 100644 index 0000000..cd7f113 --- /dev/null +++ b/assets/js/43.65548e10.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{331:function(t,s,n){"use strict";n.r(s);var r=n(14),a=Object(r.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"预学习阶段"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#预学习阶段"}},[this._v("#")]),this._v(" 预学习阶段")])])}),[],!1,null,null,null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/44.9ddffe77.js b/assets/js/44.9ddffe77.js new file mode 100644 index 0000000..e0d2a10 --- /dev/null +++ b/assets/js/44.9ddffe77.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{333:function(t,s,r){"use strict";r.r(s);var a=r(14),e=Object(a.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"soc-design"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#soc-design"}},[t._v("#")]),t._v(" SoC Design")]),t._v(" "),s("h2",{attrs:{id:"一生一芯计划"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#一生一芯计划"}},[t._v("#")]),t._v(" "),s("RouterLink",{attrs:{to:"/Chip/Chip/一生一芯计划.html"}},[t._v("一生一芯计划")])],1),t._v(" "),s("h2",{attrs:{id:"_2023-11-07-verilog语法"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2023-11-07-verilog语法"}},[t._v("#")]),t._v(" "),s("RouterLink",{attrs:{to:"/Chip/Chip/2023.11.07-Verilog语法.html"}},[t._v("2023.11.07-Verilog语法")])],1),t._v(" "),s("h2",{attrs:{id:"_2024-02-21-chisel"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-21-chisel"}},[t._v("#")]),t._v(" "),s("RouterLink",{attrs:{to:"/Chip/Chip/2024.02.21-Chisel.html"}},[t._v("2024.02.21-Chisel")])],1)])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/45.0e5a3890.js b/assets/js/45.0e5a3890.js new file mode 100644 index 0000000..56202d4 --- /dev/null +++ b/assets/js/45.0e5a3890.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{332:function(t,s,n){"use strict";n.r(s);var a=n(14),p=Object(a.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-02-22-752-打开转盘锁-bfs"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-22-752-打开转盘锁-bfs"}},[t._v("#")]),t._v(" 2024.02.22-752.打开转盘锁(BFS)")]),t._v(" "),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v('/*\n * @lc app=leetcode.cn id=752 lang=cpp\n *\n * [752] 打开转盘锁\n *\n * https://leetcode.cn/problems/open-the-lock/description/\n *\n * algorithms\n * Medium (52.77%)\n * Likes: 653\n * Dislikes: 0\n * Total Accepted: 128.3K\n * Total Submissions: 243.1K\n * Testcase Example: \'["0201","0101","0102","1212","2002"]\\n"0202"\'\n *\n * 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: \'0\', \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\',\n * \'9\' 。每个拨轮可以自由旋转:例如把 \'9\' 变为 \'0\',\'0\' 变为 \'9\' 。每次旋转都只能旋转一个拨轮的一位数字。\n *\n * 锁的初始数字为 \'0000\' ,一个代表四个拨轮的数字的字符串。\n *\n * 列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。\n *\n * 字符串 target 代表可以解锁的数字,你需要给出解锁需要的最小旋转次数,如果无论如何不能解锁,返回 -1 。\n *\n *\n *\n * 示例 1:\n *\n *\n * 输入:deadends = ["0201","0101","0102","1212","2002"], target = "0202"\n * 输出:6\n * 解释:\n * 可能的移动序列为 "0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202"。\n * 注意 "0000" -> "0001" -> "0002" -> "0102" -> "0202" 这样的序列是不能解锁的,\n * 因为当拨动到 "0102" 时这个锁就会被锁定。\n *\n *\n * 示例 2:\n *\n *\n * 输入: deadends = ["8888"], target = "0009"\n * 输出:1\n * 解释:把最后一位反向旋转一次即可 "0000" -> "0009"。\n *\n *\n * 示例 3:\n *\n *\n * 输入: deadends = ["8887","8889","8878","8898","8788","8988","7888","9888"],\n * target = "8888"\n * 输出:-1\n * 解释:无法旋转到目标数字且不被锁定。\n *\n *\n *\n *\n * 提示:\n *\n *\n * 1 <= deadends.length <= 500\n * deadends[i].length == 4\n * target.length == 4\n * target 不在 deadends 之中\n * target 和 deadends[i] 仅由若干位数字组成\n *\n *\n */')]),t._v("\n")])])]),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("openLock")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("vector"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("string"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("deadends"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" string target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" num "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n queue"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("string"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" q"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n set"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("string"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("visited")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deadends"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deadends"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n q"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("q"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("empty")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" ssize "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" q"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" ssize"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" i"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n string str "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" q"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("front")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n q"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("pop")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// if (visited.find(str) != visited.end())")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// continue;")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" num"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n string up "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("turnUp")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n string down "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("turnDown")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("up"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n q"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("up"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("up"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("down"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n q"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("push")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("down"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n visited"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("down"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n num"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n string "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("turnUp")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("string str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" old "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" nnew "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("old "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token char"}},[t._v("'9'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("old "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token char"}},[t._v("'0'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n string newString "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n newString"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nnew"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" newString"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n string "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("turnDown")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("string str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" old "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),t._v(" nnew "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("old "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token char"}},[t._v("'0'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("old "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token char"}},[t._v("'9'")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n string newString "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n newString"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("index"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" nnew"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" newString"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("h2",{attrs:{id:"hint"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#hint"}},[t._v("#")]),t._v(" Hint:")]),t._v(" "),s("ol",[s("li",[t._v("修改"),s("code",[t._v("string")]),t._v("的某一个字符直接使用"),s("code",[t._v("[]")]),t._v("索引修改即可")]),t._v(" "),s("li",[t._v("字符’0‘到’1‘直接加一")]),t._v(" "),s("li",[t._v("**"),s("code",[t._v("deadends")]),t._v("**中的字符串以及已经访问过的字符串应该在尝试加入队列之前就被过滤掉,以防止它们被进一步处理。而不是从队列中拿出来的时候检查是不是在"),s("code",[t._v("visited")]),t._v("中")]),t._v(" "),s("li",[t._v("起始的"),s("code",[t._v("“0000”")]),t._v("也要检查")]),t._v(" "),s("li",[t._v("使用双向BFS可以加快速度,但是queue修改为set,如下:")])]),t._v(" "),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("openLock")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("vector"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("string"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("deadends"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" string target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n unordered_set"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("string"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("dead")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deadends"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" deadends"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n unordered_set"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("string"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" begin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" end"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("set1"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("set2"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" step "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n begin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"0000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n end"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("target"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("begin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("empty")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&&")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!")]),t._v("end"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("empty")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 优化搜索,总是从较小的集合开始扩展")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("begin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" end"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n set1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("end"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n set2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("begin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n set1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("begin"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n set2 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v("end"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n unordered_set"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("string"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("auto")]),t._v(" it "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" set1"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("begin")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" it "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" set1"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("it"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n string str "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("it"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("set2"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" set2"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" step"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("continue")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 标记为已访问")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" j "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" j "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("j"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n string up "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("turnUp")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n string down "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("turnDown")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("str"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" j"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("up"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("up"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("down"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" dead"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("end")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("down"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n step"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("set1 "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 更新当前正在扩展的集合")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("-")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 如果没有找到有效路径")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("ol",[s("li",[t._v("创建一个临时集合("),s("strong",[s("code",[t._v("temp")])]),t._v(")的原因是在每一轮搜索中,我们需要更新当前层次的节点。由于在遍历当前层次的节点时不能直接修改正在遍历的集合(这会影响迭代器的有效性),因此我们先将新发现的节点存储在一个临时集合中。在当前层次的所有节点都遍历完毕后,我们再用这个临时集合来更新主集合,为下一轮搜索做准备。")])])])}),[],!1,null,null,null);s.default=p.exports}}]); \ No newline at end of file diff --git a/assets/js/46.432b8545.js b/assets/js/46.432b8545.js new file mode 100644 index 0000000..82a5fbf --- /dev/null +++ b/assets/js/46.432b8545.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{334:function(t,e,s){"use strict";s.r(e);var a=s(14),o=Object(a.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"_2024-03-05-二叉树"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2024-03-05-二叉树"}},[this._v("#")]),this._v(" 2024.03.05-二叉树")]),this._v(" "),t("p",[t("RouterLink",{attrs:{to:"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-104 二叉树的最大深度 c6649929175d46038db921b552f2a235.html"}},[this._v("2024.03.05-104.二叉树的最大深度")])],1),this._v(" "),t("p",[t("RouterLink",{attrs:{to:"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-543 二叉树的直径 9db6d046b0954b45b96ca749922a2ece.html"}},[this._v("2024.03.05-543.二叉树的直径")])],1)])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/assets/js/47.2cf6c2de.js b/assets/js/47.2cf6c2de.js new file mode 100644 index 0000000..e96dbfa --- /dev/null +++ b/assets/js/47.2cf6c2de.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{336:function(t,s,n){"use strict";n.r(s);var a=n(14),e=Object(a.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"_2024-03-05-104-二叉树的最大深度"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2024-03-05-104-二叉树的最大深度"}},[t._v("#")]),t._v(" 2024.03.05-104.二叉树的最大深度")]),t._v(" "),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n * @lc app=leetcode.cn id=104 lang=cpp\n *\n * [104] 二叉树的最大深度\n *\n * https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/\n *\n * algorithms\n * Easy (77.10%)\n * Likes: 1786\n * Dislikes: 0\n * Total Accepted: 1.2M\n * Total Submissions: 1.6M\n * Testcase Example: '[3,9,20,null,null,15,7]'\n *\n * 给定一个二叉树 root ,返回其最大深度。\n *\n * 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。\n *\n *\n *\n * 示例 1:\n *\n *\n *\n *\n *\n *\n * 输入:root = [3,9,20,null,null,15,7]\n * 输出:3\n *\n *\n * 示例 2:\n *\n *\n * 输入:root = [1,null,2]\n * 输出:2\n *\n *\n *\n *\n * 提示:\n *\n *\n * 树中节点的数量在 [0, 10^4] 区间内。\n * -100 <= Node.val <= 100\n *\n *\n */")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// @lc code=start")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Definition for a binary tree node.\n * struct TreeNode {\n * int val;\n * TreeNode *left;\n * TreeNode *right;\n * TreeNode() : val(0), left(nullptr), right(nullptr) {}\n * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}\n * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}\n * };\n */")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// @lc code=end")]),t._v("\n")])])]),s("ol",[s("li",[t._v("递归:分解成左右子树")])]),t._v(" "),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxDepth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TreeNode "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v("root"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("nullptr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" tempLeft "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxDepth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v("left"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" tempRight "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxDepth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v("right"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tempLeft"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tempRight"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),s("ol",[s("li",[t._v("遍历:进入节点(前序)加深度,离开节点(后序)减深度,叶子结点处更新结果")])]),t._v(" "),s("div",{staticClass:"language-cpp extra-class"},[s("pre",{pre:!0,attrs:{class:"language-cpp"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("maxDepth")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TreeNode"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" root"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("traverse")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("traverse")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TreeNode"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" node"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("nullptr")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n res "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("temp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n temp"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("traverse")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v("left"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("traverse")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v("right"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n temp"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("--")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/48.d772ece1.js b/assets/js/48.d772ece1.js new file mode 100644 index 0000000..e7fa163 --- /dev/null +++ b/assets/js/48.d772ece1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{335:function(t,n,s){"use strict";s.r(n);var a=s(14),e=Object(a.a)({},(function(){var t=this,n=t._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"_2024-03-05-543-二叉树的直径"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_2024-03-05-543-二叉树的直径"}},[t._v("#")]),t._v(" 2024.03.05-543.二叉树的直径")]),t._v(" "),n("div",{staticClass:"language-cpp extra-class"},[n("pre",{pre:!0,attrs:{class:"language-cpp"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*\n * @lc app=leetcode.cn id=543 lang=cpp\n *\n * [543] 二叉树的直径\n *\n * https://leetcode.cn/problems/diameter-of-binary-tree/description/\n *\n * algorithms\n * Easy (59.72%)\n * Likes: 1495\n * Dislikes: 0\n * Total Accepted: 387.9K\n * Total Submissions: 649.5K\n * Testcase Example: '[1,2,3,4,5]'\n *\n * 给你一棵二叉树的根节点,返回该树的 直径 。\n * \n * 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。\n * \n * 两节点之间路径的 长度 由它们之间边数表示。\n * \n * \n * \n * 示例 1:\n * \n * \n * 输入:root = [1,2,3,4,5]\n * 输出:3\n * 解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。\n * \n * \n * 示例 2:\n * \n * \n * 输入:root = [1,2]\n * 输出:1\n * \n * \n * \n * \n * 提示:\n * \n * \n * 树中节点数目在范围 [1, 10^4] 内\n * -100 <= Node.val <= 100\n * \n * \n */")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// @lc code=start")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Definition for a binary tree node.\n * struct TreeNode {\n * int val;\n * TreeNode *left;\n * TreeNode *right;\n * TreeNode() : val(0), left(nullptr), right(nullptr) {}\n * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}\n * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}\n * };\n */")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Solution")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("diameterOfBinaryTree")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("traverse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("root"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// cal the maxDepth")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("traverse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("TreeNode"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("*")]),t._v(" node"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("&")]),t._v(" res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("nullptr")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" leftMax "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("traverse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v("left"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" rightMax "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("traverse")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("node"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v("right"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" nodeMax "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("leftMax"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("rightMax"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n res "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("max")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("res"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("leftMax"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v("rightMax"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" nodeMax"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// @lc code=end")]),t._v("\n")])])])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/49.c4474539.js b/assets/js/49.c4474539.js new file mode 100644 index 0000000..b0a34d2 --- /dev/null +++ b/assets/js/49.c4474539.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{337:function(t,e,a){"use strict";a.r(e);var s=a(14),r=Object(s.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"leetcode"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#leetcode"}},[t._v("#")]),t._v(" LeetCode")]),t._v(" "),e("h2",{attrs:{id:"_2024-02-22-752-打开转盘锁-bfs"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_2024-02-22-752-打开转盘锁-bfs"}},[t._v("#")]),t._v(" "),e("RouterLink",{attrs:{to:"/LeetCode/LeetCode 7ab5681b0c504f10bc22ecab0af35e7e/2024 02 22-752 打开转盘锁(BFS) abab666d7cbf48d2b1656f11166d33f2.html"}},[t._v("2024.02.22-752.打开转盘锁(BFS)")])],1),t._v(" "),e("h2",{attrs:{id:"_2024-03-05-二叉树"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_2024-03-05-二叉树"}},[t._v("#")]),t._v(" "),e("RouterLink",{attrs:{to:"/LeetCode/LeetCode 7ab5681b0c504f10bc22ecab0af35e7e/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab.html"}},[t._v("2024.03.05-二叉树")])],1)])}),[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/5.89fa5293.js b/assets/js/5.89fa5293.js new file mode 100644 index 0000000..dfbf787 --- /dev/null +++ b/assets/js/5.89fa5293.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{280:function(t,e,a){},294:function(t,e,a){"use strict";a(280)},305:function(t,e,a){"use strict";a.r(e);var s={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}},mounted(){this.$parent&&this.$parent.loadTabs&&this.$parent.loadTabs()}},i=(a(294),a(14)),n=Object(i.a)(s,(function(){return(0,this._self._c)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"759a7d02",null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/50.481f57bc.js b/assets/js/50.481f57bc.js new file mode 100644 index 0000000..ec9c744 --- /dev/null +++ b/assets/js/50.481f57bc.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{339:function(t,s,e){"use strict";e.r(s);var r=e(14),l=Object(r.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"hello-vuepress"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#hello-vuepress"}},[this._v("#")]),this._v(" Hello VuePress")])])}),[],!1,null,null,null);s.default=l.exports}}]); \ No newline at end of file diff --git a/assets/js/51.cedde56b.js b/assets/js/51.cedde56b.js new file mode 100644 index 0000000..53fbaf1 --- /dev/null +++ b/assets/js/51.cedde56b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{338:function(t,l,s){"use strict";s.r(l);var o=s(14),r=Object(o.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"helloworld"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#helloworld"}},[this._v("#")]),this._v(" Helloworld")])])}),[],!1,null,null,null);l.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/52.4621fe38.js b/assets/js/52.4621fe38.js new file mode 100644 index 0000000..4d4cfc8 --- /dev/null +++ b/assets/js/52.4621fe38.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{340:function(a,t,s){"use strict";s.r(t);var r=s(14),e=Object(r.a)({},(function(){var a=this,t=a._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"daf"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#daf"}},[a._v("#")]),a._v(" daf")]),a._v(" "),t("h2",{attrs:{id:"fg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fg"}},[a._v("#")]),a._v(" fg")]),a._v(" "),t("h3",{attrs:{id:"fg-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fg-2"}},[a._v("#")]),a._v(" fg")]),a._v(" "),t("h2",{attrs:{id:"fggds"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#fggds"}},[a._v("#")]),a._v(" fggds")]),a._v(" "),t("h1",{attrs:{id:"adsfg"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#adsfg"}},[a._v("#")]),a._v(" adsfg")]),a._v(" "),t("h1",{attrs:{id:"d"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#d"}},[a._v("#")]),a._v(" d")])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/6.983e3923.js b/assets/js/6.983e3923.js new file mode 100644 index 0000000..07735f4 --- /dev/null +++ b/assets/js/6.983e3923.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{281:function(e,t,a){},295:function(e,t,a){"use strict";a(281)},306:function(e,t,a){"use strict";a.r(t);var o={name:"CodeGroup",data:()=>({codeTabs:[],activeCodeTabIndex:-1}),watch:{activeCodeTabIndex(e){this.activateCodeTab(e)}},mounted(){this.loadTabs()},methods:{changeCodeTab(e){this.activeCodeTabIndex=e},loadTabs(){this.codeTabs=(this.$slots.default||[]).filter(e=>Boolean(e.componentOptions)).map((e,t)=>(""===e.componentOptions.propsData.active&&(this.activeCodeTabIndex=t),{title:e.componentOptions.propsData.title,elm:e.elm})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0),this.activateCodeTab(0)},activateCodeTab(e){this.codeTabs.forEach(e=>{e.elm&&e.elm.classList.remove("theme-code-block__active")}),this.codeTabs[e].elm&&this.codeTabs[e].elm.classList.add("theme-code-block__active")}}},s=(a(295),a(14)),c=Object(s.a)(o,(function(){var e=this,t=e._self._c;return t("ClientOnly",[t("div",{staticClass:"theme-code-group"},[t("div",{staticClass:"theme-code-group__nav"},[t("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(a,o){return t("li",{key:a.title,staticClass:"theme-code-group__li"},[t("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(a.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?t("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)])}),[],!1,null,"deefee04",null);t.default=c.exports}}]); \ No newline at end of file diff --git a/assets/js/7.a85c5b80.js b/assets/js/7.a85c5b80.js new file mode 100644 index 0000000..2096463 --- /dev/null +++ b/assets/js/7.a85c5b80.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{307:function(t,e,s){"use strict";s.r(e);const o=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."];var n={methods:{getMsg:()=>o[Math.floor(Math.random()*o.length)]}},h=s(14),i=Object(h.a)(n,(function(){var t=this._self._c;return t("div",{staticClass:"theme-container"},[t("div",{staticClass:"theme-default-content"},[t("h1",[this._v("404")]),this._v(" "),t("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),t("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/assets/js/app.af1cb6a5.js b/assets/js/app.af1cb6a5.js new file mode 100644 index 0000000..da2b4c5 --- /dev/null +++ b/assets/js/app.af1cb6a5.js @@ -0,0 +1,16 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],l=e[1],c=e[2],f=0,p=[];f
    '};function i(t,e,n){return tn?n:t}function o(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=i(t,r.minimum,1),n.status=1===t?null:t;var l=n.render(!e),c=l.querySelector(r.barSelector),u=r.speed,f=r.easing;return l.offsetWidth,a((function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,function(t,e,n){var i;return(i="translate3d"===r.positionUsing?{transform:"translate3d("+o(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(t)+"%,0)"}:{"margin-left":o(t)+"%"}).transition="all "+e+"ms "+n,i}(t,u,f)),1===t?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){s(l,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),e()}),u)}),u)):setTimeout(e,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout((function(){n.status&&(n.trickle(),t())}),r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*i(Math.random()*e,.1,.95)),e=i(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always((function(){0==--e?(t=0,n.done()):n.set((t-e)/t)})),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var i,a=e.querySelector(r.barSelector),l=t?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(i=e.querySelector(r.spinnerSelector))&&p(i),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(e),e},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&p(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(t,e){return e.toUpperCase()})),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,i=t.length,o=e.charAt(0).toUpperCase()+e.slice(1);i--;)if((r=t[i]+o)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,i,o=arguments;if(2==o.length)for(n in e)void 0!==(i=e[n])&&e.hasOwnProperty(n)&&r(t,n,i);else r(t,o[1],o[2])}}();function l(t,e){return("string"==typeof t?t:f(t)).indexOf(" "+e+" ")>=0}function c(t,e){var n=f(t),r=n+e;l(n,e)||(t.className=r.substring(1))}function u(t,e){var n,r=f(t);l(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function f(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function p(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=i)},function(t,e,n){"use strict";var r=n(0),i=n(46).f,o=n(12),a=n(91),s=n(32),l=n(61),c=n(119);t.exports=function(t,e){var n,u,f,p,h,d=t.target,v=t.global,m=t.stat;if(n=v?r:m?r[d]||s(d,{}):r[d]&&r[d].prototype)for(u in e){if(p=e[u],f=t.dontCallGetSet?(h=i(n,u))&&h.value:n[u],!c(v?u:d+(m?".":"#")+u,t.forced)&&void 0!==f){if(typeof p==typeof f)continue;l(p,f)}(t.sham||f&&f.sham)&&o(p,"sham",!0),a(n,u,p,t)}}},function(t,e,n){"use strict";var r=n(25),i=Function.prototype.call;t.exports=r?i.bind(i):function(){return i.apply(i,arguments)}},function(t,e,n){"use strict";var r=n(3);t.exports=!r((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,e,n){"use strict";t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){"use strict";var r=n(47),i=n(48);t.exports=function(t){return r(i(t))}},function(t,e,n){"use strict";var r=n(0),i=n(1),o=function(t){return i(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?o(r[t]):r[t]&&r[t][e]}},function(t,e,n){"use strict";var r=n(1),i=n(101),o=TypeError;t.exports=function(t){if(r(t))return t;throw new o(i(t)+" is not a function")}},function(t,e,n){"use strict";var r=n(0),i=n(56),o=n(8),a=n(58),s=n(54),l=n(53),c=r.Symbol,u=i("wks"),f=l?c.for||c:c&&c.withoutSetter||a;t.exports=function(t){return o(u,t)||(u[t]=s&&o(c,t)?c[t]:f("Symbol."+t)),u[t]}},function(t,e,n){"use strict";var r=n(57),i=n(0),o=n(32),a=t.exports=i["__core-js_shared__"]||o("__core-js_shared__",{});(a.versions||(a.versions=[])).push({version:"3.36.0",mode:r?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.36.0/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,e,n){"use strict";var r=n(0),i=Object.defineProperty;t.exports=function(t,e){try{i(r,t,{value:e,configurable:!0,writable:!0})}catch(n){r[t]=e}return e}},function(t,e,n){"use strict";var r=n(48),i=Object;t.exports=function(t){return i(r(t))}},function(t,e,n){"use strict";var r=n(7),i=String,o=TypeError;t.exports=function(t){if(r(t))return t;throw new o(i(t)+" is not an object")}},function(t,e,n){"use strict";var r=n(116);t.exports=function(t){return r(t.length)}},function(t,e,n){var r=n(143),i=n(10),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(t){return i(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=l},function(t,e,n){var r=n(9)(n(6),"Map");t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(163),i=n(170),o=n(172),a=n(173),s=n(174);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(4),i=n(43),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!i(t))||(a.test(t)||!o.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(11),i=n(10);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e){t.exports=function(t){return t}},function(t,e,n){"use strict";var r=n(23),i=n(33),o=n(35),a=n(138),s=n(140);r({target:"Array",proto:!0,arity:1,forced:n(3)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(t){return t instanceof TypeError}}()},{push:function(t){var e=i(this),n=o(e),r=arguments.length;s(n+r);for(var l=0;l0&&r[0]<4?1:+(r[0]+r[1])),!i&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=+r[1]),t.exports=i},function(t,e,n){"use strict";var r=n(31);t.exports=function(t,e){return r[t]||(r[t]=e||{})}},function(t,e,n){"use strict";t.exports=!1},function(t,e,n){"use strict";var r=n(2),i=0,o=Math.random(),a=r(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++i+o,36)}},function(t,e,n){"use strict";var r=n(5),i=n(3),o=n(103);t.exports=!r&&!i((function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},function(t,e,n){"use strict";t.exports={}},function(t,e,n){"use strict";var r=n(8),i=n(110),o=n(46),a=n(15);t.exports=function(t,e,n){for(var s=i(e),l=a.f,c=o.f,u=0;uu))return!1;var p=l.get(t),h=l.get(e);if(p&&h)return p==e&&h==t;var d=-1,v=!0,m=2&n?new r:void 0;for(l.set(t,e),l.set(e,t);++d-1&&t%1==0&&t]/;t.exports=function(t){var e,n=""+t,i=r.exec(n);if(!i)return n;var o="",a=0,s=0;for(a=i.index;a=e||n<0||m&&t-c>=o}function E(){var t=h();if(C(t))return _(t);s=setTimeout(E,function(t){var n=e-(t-l);return m?p(n,o-(t-c)):n}(t))}function _(t){return s=void 0,g&&r?y(t):(r=i=void 0,a)}function x(){var t=h(),n=C(t);if(r=arguments,i=this,l=t,n){if(void 0===s)return b(l);if(m)return s=setTimeout(E,e),y(l)}return void 0===s&&(s=setTimeout(E,e)),a}return e=v(e)||0,d(n)&&(u=!!n.leading,o=(m="maxWait"in n)?f(v(n.maxWait)||0,e):o,g="trailing"in n?!!n.trailing:g),x.cancel=function(){void 0!==s&&clearTimeout(s),c=0,r=l=i=s=void 0},x.flush=function(){return void 0===s?a:_(h())},x}},function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},function(t,e,n){"use strict";var r=n(1),i=n(15),o=n(93),a=n(32);t.exports=function(t,e,n,s){s||(s={});var l=s.enumerable,c=void 0!==s.name?s.name:e;if(r(n)&&o(n,c,s),s.global)l?t[e]=n:a(e,n);else{try{s.unsafe?t[e]&&(l=!0):delete t[e]}catch(t){}l?t[e]=n:i.f(t,e,{value:n,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},function(t,e,n){"use strict";var r=n(132),i=String;t.exports=function(t){if("Symbol"===r(t))throw new TypeError("Cannot convert a Symbol value to a string");return i(t)}},function(t,e,n){"use strict";var r=n(2),i=n(3),o=n(1),a=n(8),s=n(5),l=n(105).CONFIGURABLE,c=n(106),u=n(107),f=u.enforce,p=u.get,h=String,d=Object.defineProperty,v=r("".slice),m=r("".replace),g=r([].join),y=s&&!i((function(){return 8!==d((function(){}),"length",{value:8}).length})),b=String(String).split("String"),C=t.exports=function(t,e,n){"Symbol("===v(h(e),0,7)&&(e="["+m(h(e),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!a(t,"name")||l&&t.name!==e)&&(s?d(t,"name",{value:e,configurable:!0}):t.name=e),y&&n&&a(n,"arity")&&t.length!==n.arity&&d(t,"length",{value:n.arity});try{n&&a(n,"constructor")&&n.constructor?s&&d(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(t){}var r=f(t);return a(r,"source")||(r.source=g(b,"string"==typeof e?e:"")),t};Function.prototype.toString=C((function(){return o(this)&&p(this).source||c(this)}),"toString")},function(t,e,n){var r=n(83);t.exports=function(t,e,n){var i=null==t?void 0:r(t,e);return void 0===i?n:i}},function(t,e,n){t.exports=n(240)},function(t,e,n){"use strict";var r=n(23),i=n(120).left,o=n(121),a=n(55);r({target:"Array",proto:!0,forced:!n(122)&&a>79&&a<83||!o("reduce")},{reduce:function(t){var e=arguments.length;return i(this,t,e,e>1?arguments[1]:void 0)}})},function(t,e,n){"use strict";var r={}.propertyIsEnumerable,i=Object.getOwnPropertyDescriptor,o=i&&!r.call({1:2},1);e.f=o?function(t){var e=i(this,t);return!!e&&e.enumerable}:r},function(t,e,n){"use strict";var r=n(24),i=n(7),o=n(51),a=n(100),s=n(102),l=n(30),c=TypeError,u=l("toPrimitive");t.exports=function(t,e){if(!i(t)||o(t))return t;var n,l=a(t,u);if(l){if(void 0===e&&(e="default"),n=r(l,t,e),!i(n)||o(n))return n;throw new c("Can't convert object to primitive value")}return void 0===e&&(e="number"),s(t,e)}},function(t,e,n){"use strict";t.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},function(t,e,n){"use strict";var r=n(29),i=n(49);t.exports=function(t,e){var n=t[e];return i(n)?void 0:r(n)}},function(t,e,n){"use strict";var r=String;t.exports=function(t){try{return r(t)}catch(t){return"Object"}}},function(t,e,n){"use strict";var r=n(24),i=n(1),o=n(7),a=TypeError;t.exports=function(t,e){var n,s;if("string"===e&&i(n=t.toString)&&!o(s=r(n,t)))return s;if(i(n=t.valueOf)&&!o(s=r(n,t)))return s;if("string"!==e&&i(n=t.toString)&&!o(s=r(n,t)))return s;throw new a("Can't convert object to primitive value")}},function(t,e,n){"use strict";var r=n(0),i=n(7),o=r.document,a=i(o)&&i(o.createElement);t.exports=function(t){return a?o.createElement(t):{}}},function(t,e,n){"use strict";var r=n(5),i=n(3);t.exports=r&&i((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(t,e,n){"use strict";var r=n(5),i=n(8),o=Function.prototype,a=r&&Object.getOwnPropertyDescriptor,s=i(o,"name"),l=s&&"something"===function(){}.name,c=s&&(!r||r&&a(o,"name").configurable);t.exports={EXISTS:s,PROPER:l,CONFIGURABLE:c}},function(t,e,n){"use strict";var r=n(2),i=n(1),o=n(31),a=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(t){return a(t)}),t.exports=o.inspectSource},function(t,e,n){"use strict";var r,i,o,a=n(108),s=n(0),l=n(7),c=n(12),u=n(8),f=n(31),p=n(109),h=n(60),d=s.TypeError,v=s.WeakMap;if(a||f.state){var m=f.state||(f.state=new v);m.get=m.get,m.has=m.has,m.set=m.set,r=function(t,e){if(m.has(t))throw new d("Object already initialized");return e.facade=t,m.set(t,e),e},i=function(t){return m.get(t)||{}},o=function(t){return m.has(t)}}else{var g=p("state");h[g]=!0,r=function(t,e){if(u(t,g))throw new d("Object already initialized");return e.facade=t,c(t,g,e),e},i=function(t){return u(t,g)?t[g]:{}},o=function(t){return u(t,g)}}t.exports={set:r,get:i,has:o,enforce:function(t){return o(t)?i(t):r(t,{})},getterFor:function(t){return function(e){var n;if(!l(e)||(n=i(e)).type!==t)throw new d("Incompatible receiver, "+t+" required");return n}}}},function(t,e,n){"use strict";var r=n(0),i=n(1),o=r.WeakMap;t.exports=i(o)&&/native code/.test(String(o))},function(t,e,n){"use strict";var r=n(56),i=n(58),o=r("keys");t.exports=function(t){return o[t]||(o[t]=i(t))}},function(t,e,n){"use strict";var r=n(28),i=n(2),o=n(111),a=n(118),s=n(34),l=i([].concat);t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(s(t)),n=a.f;return n?l(e,n(t)):e}},function(t,e,n){"use strict";var r=n(112),i=n(117).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},function(t,e,n){"use strict";var r=n(2),i=n(8),o=n(27),a=n(113).indexOf,s=n(60),l=r([].push);t.exports=function(t,e){var n,r=o(t),c=0,u=[];for(n in r)!i(s,n)&&i(r,n)&&l(u,n);for(;e.length>c;)i(r,n=e[c++])&&(~a(u,n)||l(u,n));return u}},function(t,e,n){"use strict";var r=n(27),i=n(114),o=n(35),a=function(t){return function(e,n,a){var s=r(e),l=o(s);if(0===l)return!t&&-1;var c,u=i(a,l);if(t&&n!=n){for(;l>u;)if((c=s[u++])!=c)return!0}else for(;l>u;u++)if((t||u in s)&&s[u]===n)return t||u||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},function(t,e,n){"use strict";var r=n(62),i=Math.max,o=Math.min;t.exports=function(t,e){var n=r(t);return n<0?i(n+e,0):o(n,e)}},function(t,e,n){"use strict";var r=Math.ceil,i=Math.floor;t.exports=Math.trunc||function(t){var e=+t;return(e>0?i:r)(e)}},function(t,e,n){"use strict";var r=n(62),i=Math.min;t.exports=function(t){var e=r(t);return e>0?i(e,9007199254740991):0}},function(t,e,n){"use strict";t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,e,n){"use strict";e.f=Object.getOwnPropertySymbols},function(t,e,n){"use strict";var r=n(3),i=n(1),o=/#|\.prototype\./,a=function(t,e){var n=l[s(t)];return n===u||n!==c&&(i(e)?r(e):!!e)},s=a.normalize=function(t){return String(t).replace(o,".").toLowerCase()},l=a.data={},c=a.NATIVE="N",u=a.POLYFILL="P";t.exports=a},function(t,e,n){"use strict";var r=n(29),i=n(33),o=n(47),a=n(35),s=TypeError,l="Reduce of empty array with no initial value",c=function(t){return function(e,n,c,u){var f=i(e),p=o(f),h=a(f);if(r(n),0===h&&c<2)throw new s(l);var d=t?h-1:0,v=t?-1:1;if(c<2)for(;;){if(d in p){u=p[d],d+=v;break}if(d+=v,t?d<0:h<=d)throw new s(l)}for(;t?d>=0:h>d;d+=v)d in p&&(u=n(u,p[d],d,f));return u}};t.exports={left:c(!1),right:c(!0)}},function(t,e,n){"use strict";var r=n(3);t.exports=function(t,e){var n=[][t];return!!n&&r((function(){n.call(null,e||function(){return 1},1)}))}},function(t,e,n){"use strict";var r=n(0),i=n(16);t.exports="process"===i(r.process)},function(t,e,n){"use strict";var r=n(23),i=n(0),o=n(124),a=n(125),s=i.WebAssembly,l=7!==new Error("e",{cause:7}).cause,c=function(t,e){var n={};n[t]=a(t,e,l),r({global:!0,constructor:!0,arity:1,forced:l},n)},u=function(t,e){if(s&&s[t]){var n={};n[t]=a("WebAssembly."+t,e,l),r({target:"WebAssembly",stat:!0,constructor:!0,arity:1,forced:l},n)}};c("Error",(function(t){return function(e){return o(t,this,arguments)}})),c("EvalError",(function(t){return function(e){return o(t,this,arguments)}})),c("RangeError",(function(t){return function(e){return o(t,this,arguments)}})),c("ReferenceError",(function(t){return function(e){return o(t,this,arguments)}})),c("SyntaxError",(function(t){return function(e){return o(t,this,arguments)}})),c("TypeError",(function(t){return function(e){return o(t,this,arguments)}})),c("URIError",(function(t){return function(e){return o(t,this,arguments)}})),u("CompileError",(function(t){return function(e){return o(t,this,arguments)}})),u("LinkError",(function(t){return function(e){return o(t,this,arguments)}})),u("RuntimeError",(function(t){return function(e){return o(t,this,arguments)}}))},function(t,e,n){"use strict";var r=n(25),i=Function.prototype,o=i.apply,a=i.call;t.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(o):function(){return a.apply(o,arguments)})},function(t,e,n){"use strict";var r=n(28),i=n(8),o=n(12),a=n(52),s=n(63),l=n(61),c=n(129),u=n(130),f=n(131),p=n(134),h=n(135),d=n(5),v=n(57);t.exports=function(t,e,n,m){var g=m?2:1,y=t.split("."),b=y[y.length-1],C=r.apply(null,y);if(C){var E=C.prototype;if(!v&&i(E,"cause")&&delete E.cause,!n)return C;var _=r("Error"),x=e((function(t,e){var n=f(m?e:t,void 0),r=m?new C(t):new C;return void 0!==n&&o(r,"message",n),h(r,x,r.stack,2),this&&a(E,this)&&u(r,this,x),arguments.length>g&&p(r,arguments[g]),r}));if(x.prototype=E,"Error"!==b?s?s(x,_):l(x,_,{name:!0}):d&&"stackTraceLimit"in C&&(c(x,C,"stackTraceLimit"),c(x,C,"prepareStackTrace")),l(x,C),!v)try{E.name!==b&&o(E,"name",b),E.constructor=x}catch(t){}return x}}},function(t,e,n){"use strict";var r=n(2),i=n(29);t.exports=function(t,e,n){try{return r(i(Object.getOwnPropertyDescriptor(t,e)[n]))}catch(t){}}},function(t,e,n){"use strict";var r=n(128),i=String,o=TypeError;t.exports=function(t){if(r(t))return t;throw new o("Can't set "+i(t)+" as a prototype")}},function(t,e,n){"use strict";var r=n(7);t.exports=function(t){return r(t)||null===t}},function(t,e,n){"use strict";var r=n(15).f;t.exports=function(t,e,n){n in t||r(t,n,{configurable:!0,get:function(){return e[n]},set:function(t){e[n]=t}})}},function(t,e,n){"use strict";var r=n(1),i=n(7),o=n(63);t.exports=function(t,e,n){var a,s;return o&&r(a=e.constructor)&&a!==n&&i(s=a.prototype)&&s!==n.prototype&&o(t,s),t}},function(t,e,n){"use strict";var r=n(92);t.exports=function(t,e){return void 0===t?arguments.length<2?"":e:r(t)}},function(t,e,n){"use strict";var r=n(133),i=n(1),o=n(16),a=n(30)("toStringTag"),s=Object,l="Arguments"===o(function(){return arguments}());t.exports=r?o:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=s(t),a))?n:l?o(e):"Object"===(r=o(e))&&i(e.callee)?"Arguments":r}},function(t,e,n){"use strict";var r={};r[n(30)("toStringTag")]="z",t.exports="[object z]"===String(r)},function(t,e,n){"use strict";var r=n(7),i=n(12);t.exports=function(t,e){r(e)&&"cause"in e&&i(t,"cause",e.cause)}},function(t,e,n){"use strict";var r=n(12),i=n(136),o=n(137),a=Error.captureStackTrace;t.exports=function(t,e,n,s){o&&(a?a(t,e):r(t,"stack",i(n,s)))}},function(t,e,n){"use strict";var r=n(2),i=Error,o=r("".replace),a=String(new i("zxcasd").stack),s=/\n\s*at [^:]*:[^\n]*/,l=s.test(a);t.exports=function(t,e){if(l&&"string"==typeof t&&!i.prepareStackTrace)for(;e--;)t=o(t,s,"");return t}},function(t,e,n){"use strict";var r=n(3),i=n(26);t.exports=!r((function(){var t=new Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",i(1,7)),7!==t.stack)}))},function(t,e,n){"use strict";var r=n(5),i=n(139),o=TypeError,a=Object.getOwnPropertyDescriptor,s=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=s?function(t,e){if(i(t)&&!a(t,"length").writable)throw new o("Cannot set read only .length");return t.length=e}:function(t,e){return t.length=e}},function(t,e,n){"use strict";var r=n(16);t.exports=Array.isArray||function(t){return"Array"===r(t)}},function(t,e,n){"use strict";var r=TypeError;t.exports=function(t){if(t>9007199254740991)throw r("Maximum allowed index exceeded");return t}},function(t,e,n){var r=n(64),i=n(142);t.exports=function t(e,n,o,a,s){var l=-1,c=e.length;for(o||(o=i),s||(s=[]);++l0&&o(u)?n>1?t(u,n-1,o,a,s):r(s,u):a||(s[s.length]=u)}return s}},function(t,e,n){var r=n(13),i=n(36),o=n(4),a=r?r.isConcatSpreadable:void 0;t.exports=function(t){return o(t)||i(t)||!!(a&&t&&t[a])}},function(t,e,n){var r=n(11),i=n(10);t.exports=function(t){return i(t)&&"[object Arguments]"==r(t)}},function(t,e,n){var r=n(13),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=a.call(t);return r&&(e?t[s]=n:delete t[s]),i}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r=n(147),i=n(203),o=n(44),a=n(4),s=n(213);t.exports=function(t){return"function"==typeof t?t:null==t?o:"object"==typeof t?a(t)?i(t[0],t[1]):r(t):s(t)}},function(t,e,n){var r=n(148),i=n(202),o=n(82);t.exports=function(t){var e=i(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(66),i=n(70);t.exports=function(t,e,n,o){var a=n.length,s=a,l=!o;if(null==t)return!s;for(t=Object(t);a--;){var c=n[a];if(l&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++a-1}},function(t,e,n){var r=n(18);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var r=n(17);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(17),i=n(37),o=n(39);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!i||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new o(a)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(68),i=n(160),o=n(38),a=n(69),s=/^\[object .+?Constructor\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,f=c.hasOwnProperty,p=RegExp("^"+u.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||i(t))&&(r(t)?p:s).test(a(t))}},function(t,e,n){var r,i=n(161),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!o&&o in t}},function(t,e,n){var r=n(6)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(164),i=n(17),o=n(37);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},function(t,e,n){var r=n(165),i=n(166),o=n(167),a=n(168),s=n(169);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(72),i=n(225),o=n(230),a=n(73),s=n(231),l=n(40);t.exports=function(t,e,n){var c=-1,u=i,f=t.length,p=!0,h=[],d=h;if(n)p=!1,u=o;else if(f>=200){var v=e?null:s(t);if(v)return l(v);p=!1,u=a,d=new r}else d=e?[]:h;t:for(;++c-1}},function(t,e,n){var r=n(227),i=n(228),o=n(229);t.exports=function(t,e,n){return e==e?o(t,e,n):r(t,i,n)}},function(t,e){t.exports=function(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o=0&&Math.floor(e)===e&&isFinite(t)}function v(t){return a(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function m(t){return null==t?"":Array.isArray(t)||p(t)&&t.toString===f?JSON.stringify(t,g,2):String(t)}function g(t,e){return e&&e.__v_isRef?e.value:e}function y(t){var e=parseFloat(t);return isNaN(e)?t:e}function b(t,e){for(var n=Object.create(null),r=t.split(","),i=0;i-1)return t.splice(r,1)}}var _=Object.prototype.hasOwnProperty;function x(t,e){return _.call(t,e)}function A(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var w=/-(\w)/g,O=A((function(t){return t.replace(w,(function(t,e){return e?e.toUpperCase():""}))})),S=A((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),k=/\B([A-Z])/g,B=A((function(t){return t.replace(k,"-$1").toLowerCase()}));var $=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function j(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function P(t,e){for(var n in e)t[n]=e[n];return t}function F(t){for(var e={},n=0;n0,Q=X&&X.indexOf("edge/")>0;X&&X.indexOf("android");var tt=X&&/iphone|ipad|ipod|ios/.test(X);X&&/chrome\/\d+/.test(X),X&&/phantomjs/.test(X);var et,nt=X&&X.match(/firefox\/(\d+)/),rt={}.watch,it=!1;if(J)try{var ot={};Object.defineProperty(ot,"passive",{get:function(){it=!0}}),window.addEventListener("test-passive",null,ot)}catch(t){}var at=function(){return void 0===et&&(et=!J&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),et},st=J&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function lt(t){return"function"==typeof t&&/native code/.test(t.toString())}var ct,ut="undefined"!=typeof Symbol&<(Symbol)&&"undefined"!=typeof Reflect&<(Reflect.ownKeys);ct="undefined"!=typeof Set&<(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var ft=null;function pt(t){void 0===t&&(t=null),t||ft&&ft._scope.off(),ft=t,t&&t._scope.on()}var ht=function(){function t(t,e,n,r,i,o,a,s){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t}(),dt=function(t){void 0===t&&(t="");var e=new ht;return e.text=t,e.isComment=!0,e};function vt(t){return new ht(void 0,void 0,void 0,String(t))}function mt(t){var e=new ht(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}"function"==typeof SuppressedError&&SuppressedError;var gt=0,yt=[],bt=function(){function t(){this._pending=!1,this.id=gt++,this.subs=[]}return t.prototype.addSub=function(t){this.subs.push(t)},t.prototype.removeSub=function(t){this.subs[this.subs.indexOf(t)]=null,this._pending||(this._pending=!0,yt.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(t){var e=this.subs.filter((function(t){return t}));for(var n=0,r=e.length;n0&&(Xt((c=t(c,"".concat(n||"","_").concat(r)))[0])&&Xt(f)&&(p[u]=vt(f.text+c[0].text),c.shift()),p.push.apply(p,c)):l(c)?Xt(f)?p[u]=vt(f.text+c):""!==c&&p.push(vt(c)):Xt(c)&&Xt(f)?p[u]=vt(f.text+c.text):(s(e._isVList)&&a(c.tag)&&o(c.key)&&a(n)&&(c.key="__vlist".concat(n,"_").concat(r,"__")),p.push(c)));return p}(t):void 0}function Xt(t){return a(t)&&a(t.text)&&!1===t.isComment}function Yt(t,e){var n,r,o,s,l=null;if(i(t)||"string"==typeof t)for(l=new Array(t.length),n=0,r=t.length;n0,s=e?!!e.$stable:!a,l=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&i&&i!==r&&l===i.$key&&!a&&!i.$hasNormal)return i;for(var c in o={},e)e[c]&&"$"!==c[0]&&(o[c]=me(t,n,c,e[c]))}else o={};for(var u in n)u in o||(o[u]=ge(n,u));return e&&Object.isExtensible(e)&&(e._normalized=o),G(o,"$stable",s),G(o,"$key",l),G(o,"$hasNormal",a),o}function me(t,e,n,r){var o=function(){var e=ft;pt(t);var n=arguments.length?r.apply(null,arguments):r({}),o=(n=n&&"object"==typeof n&&!i(n)?[n]:Jt(n))&&n[0];return pt(e),n&&(!o||1===n.length&&o.isComment&&!de(o))?void 0:n};return r.proxy&&Object.defineProperty(e,n,{get:o,enumerable:!0,configurable:!0}),o}function ge(t,e){return function(){return t[e]}}function ye(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};G(e,"_v_attr_proxy",!0),be(e,t.$attrs,r,t,"$attrs")}return t._attrsProxy},get listeners(){t._listenersProxy||be(t._listenersProxy={},t.$listeners,r,t,"$listeners");return t._listenersProxy},get slots(){return function(t){t._slotsProxy||Ee(t._slotsProxy={},t.$scopedSlots);return t._slotsProxy}(t)},emit:$(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach((function(n){return Rt(t,e,n)}))}}}function be(t,e,n,r,i){var o=!1;for(var a in e)a in t?e[a]!==n[a]&&(o=!0):(o=!0,Ce(t,a,r,i));for(var a in t)a in e||(o=!0,delete t[a]);return o}function Ce(t,e,n,r){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return n[r][e]}})}function Ee(t,e){for(var n in e)t[n]=e[n];for(var n in t)n in e||delete t[n]}var _e=null;function xe(t,e){return(t.__esModule||ut&&"Module"===t[Symbol.toStringTag])&&(t=t.default),u(t)?e.extend(t):t}function Ae(t){if(i(t))for(var e=0;edocument.createEvent("Event").timeStamp&&(cn=function(){return un.now()})}var fn=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function pn(){var t,e;for(ln=cn(),an=!0,en.sort(fn),sn=0;snsn&&en[n].id>t.id;)n--;en.splice(n+1,0,t)}else en.push(t);on||(on=!0,Me(pn))}}function dn(t,e){if(t){for(var n=Object.create(null),r=ut?Reflect.ownKeys(t):Object.keys(t),i=0;i-1)if(o&&!x(i,"default"))a=!1;else if(""===a||a===B(t)){var l=Vn(String,i.type);(l<0||s-1:"string"==typeof t?t.split(",").indexOf(e)>-1:!!h(t)&&t.test(e)}function Yn(t,e){var n=t.cache,r=t.keys,i=t._vnode,o=t.$vnode;for(var a in n){var s=n[a];if(s){var l=s.name;l&&!e(l)&&Zn(n,a,r,i)}}o.componentOptions.children=void 0}function Zn(t,e,n,r){var i=t[e];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),t[e]=null,E(n,e)}Wn.prototype._init=function(t){var e=this;e._uid=Hn++,e._isVue=!0,e.__v_skip=!0,e._scope=new zt(!0),e._scope.parent=void 0,e._scope._vm=!0,t&&t._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),r=e._parentVnode;n.parent=e.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(e,t):e.$options=$n(Gn(e.constructor),t||{},e),e._renderProxy=e,e._self=e,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._provided=n?n._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(e),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&Je(t,e)}(e),function(t){t._vnode=null,t._staticTrees=null;var e=t.$options,n=t.$vnode=e._parentVnode,i=n&&n.context;t.$slots=pe(e._renderChildren,i),t.$scopedSlots=n?ve(t.$parent,n.data.scopedSlots,t.$slots):r,t._c=function(e,n,r,i){return we(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return we(t,e,n,r,i,!0)};var o=n&&n.data;Pt(t,"$attrs",o&&o.attrs||r,null,!0),Pt(t,"$listeners",e._parentListeners||r,null,!0)}(e),tn(e,"beforeCreate",void 0,!1),function(t){var e=dn(t.$options.inject,t);e&&(kt(!1),Object.keys(e).forEach((function(n){Pt(t,n,e[n])})),kt(!0))}(e),Mn(e),function(t){var e=t.$options.provide;if(e){var n=c(e)?e.call(t):e;if(!u(n))return;for(var r=Ut(t),i=ut?Reflect.ownKeys(n):Object.keys(n),o=0;o1?j(n):n;for(var r=j(arguments,1),i='event handler for "'.concat(t,'"'),o=0,a=n.length;oparseInt(this.max)&&Zn(t,e[0],e,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)Zn(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",(function(e){Yn(t,(function(t){return Xn(e,t)}))})),this.$watch("exclude",(function(e){Yn(t,(function(t){return!Xn(e,t)}))}))},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=Ae(t),n=e&&e.componentOptions;if(n){var r=Jn(n),i=this.include,o=this.exclude;if(i&&(!r||!Xn(i,r))||o&&r&&Xn(o,r))return e;var a=this.cache,s=this.keys,l=null==e.key?n.Ctor.cid+(n.tag?"::".concat(n.tag):""):e.key;a[l]?(e.componentInstance=a[l].componentInstance,E(s,l),s.push(l)):(this.vnodeToCache=e,this.keyToCache=l),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return U}};Object.defineProperty(t,"config",e),t.util={warn:xn,extend:P,mergeOptions:$n,defineReactive:Pt},t.set=Ft,t.delete=Lt,t.nextTick=Me,t.observable=function(t){return jt(t),t},t.options=Object.create(null),N.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,P(t.options.components,tr),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=j(arguments,1);return n.unshift(this),c(t.install)?t.install.apply(t,n):c(t)&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=$n(this.options,t),this}}(t),Kn(t),function(t){N.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&p(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&c(n)&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(Wn),Object.defineProperty(Wn.prototype,"$isServer",{get:at}),Object.defineProperty(Wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Wn,"FunctionalRenderContext",{value:vn}),Wn.version="2.7.16";var er=b("style,class"),nr=b("input,textarea,option,select,progress"),rr=b("contenteditable,draggable,spellcheck"),ir=b("events,caret,typing,plaintext-only"),or=b("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ar="http://www.w3.org/1999/xlink",sr=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},lr=function(t){return sr(t)?t.slice(6,t.length):""},cr=function(t){return null==t||!1===t};function ur(t){for(var e=t.data,n=t,r=t;a(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=fr(r.data,e));for(;a(n=n.parent);)n&&n.data&&(e=fr(e,n.data));return function(t,e){if(a(t)||a(e))return pr(t,hr(e));return""}(e.staticClass,e.class)}function fr(t,e){return{staticClass:pr(t.staticClass,e.staticClass),class:a(t.class)?[t.class,e.class]:e.class}}function pr(t,e){return t?e?t+" "+e:t:e||""}function hr(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,i=t.length;r-1?Dr(t,e,n):or(e)?cr(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):rr(e)?t.setAttribute(e,function(t,e){return cr(e)||"false"===e?"false":"contenteditable"===t&&ir(e)?e:"true"}(e,n)):sr(e)?cr(n)?t.removeAttributeNS(ar,lr(e)):t.setAttributeNS(ar,e,n):Dr(t,e,n)}function Dr(t,e,n){if(cr(n))t.removeAttribute(e);else{if(Y&&!Z&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var r=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",r)};t.addEventListener("input",r),t.__ieph=!0}t.setAttribute(e,n)}}var Ir={create:Tr,update:Tr};function Mr(t,e){var n=e.elm,r=e.data,i=t.data;if(!(o(r.staticClass)&&o(r.class)&&(o(i)||o(i.staticClass)&&o(i.class)))){var s=ur(e),l=n._transitionClasses;a(l)&&(s=pr(s,hr(l))),s!==n._prevClass&&(n.setAttribute("class",s),n._prevClass=s)}}var Rr,Nr={create:Mr,update:Mr};function zr(t,e,n){var r=Rr;return function i(){var o=e.apply(null,arguments);null!==o&&Hr(t,i,n,r)}}var Ur=je&&!(nt&&Number(nt[1])<=53);function qr(t,e,n,r){if(Ur){var i=ln,o=e;e=o._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return o.apply(this,arguments)}}Rr.addEventListener(t,e,it?{capture:n,passive:r}:n)}function Hr(t,e,n,r){(r||Rr).removeEventListener(t,e._wrapper||e,n)}function Gr(t,e){if(!o(t.data.on)||!o(e.data.on)){var n=e.data.on||{},r=t.data.on||{};Rr=e.elm||t.elm,function(t){if(a(t.__r)){var e=Y?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}a(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(n),Gt(n,r,qr,Hr,zr,e.context),Rr=void 0}}var Wr,Kr={create:Gr,update:Gr,destroy:function(t){return Gr(t,Ar)}};function Jr(t,e){if(!o(t.data.domProps)||!o(e.data.domProps)){var n,r,i=e.elm,l=t.data.domProps||{},c=e.data.domProps||{};for(n in(a(c.__ob__)||s(c._v_attr_proxy))&&(c=e.data.domProps=P({},c)),l)n in c||(i[n]="");for(n in c){if(r=c[n],"textContent"===n||"innerHTML"===n){if(e.children&&(e.children.length=0),r===l[n])continue;1===i.childNodes.length&&i.removeChild(i.childNodes[0])}if("value"===n&&"PROGRESS"!==i.tagName){i._value=r;var u=o(r)?"":String(r);Xr(i,u)&&(i.value=u)}else if("innerHTML"===n&&mr(i.tagName)&&o(i.innerHTML)){(Wr=Wr||document.createElement("div")).innerHTML="".concat(r,"");for(var f=Wr.firstChild;i.firstChild;)i.removeChild(i.firstChild);for(;f.firstChild;)i.appendChild(f.firstChild)}else if(r!==l[n])try{i[n]=r}catch(t){}}}}function Xr(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var n=t.value,r=t._vModifiers;if(a(r)){if(r.number)return y(n)!==y(e);if(r.trim)return n.trim()!==e.trim()}return n!==e}(t,e))}var Yr={create:Jr,update:Jr},Zr=A((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var r=t.split(n);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Qr(t){var e=ti(t.style);return t.staticStyle?P(t.staticStyle,e):e}function ti(t){return Array.isArray(t)?F(t):"string"==typeof t?Zr(t):t}var ei,ni=/^--/,ri=/\s*!important$/,ii=function(t,e,n){if(ni.test(e))t.style.setProperty(e,n);else if(ri.test(n))t.style.setProperty(B(e),n.replace(ri,""),"important");else{var r=ai(e);if(Array.isArray(n))for(var i=0,o=n.length;i-1?e.split(ci).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" ".concat(t.getAttribute("class")||""," ");n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function fi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(ci).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" ".concat(t.getAttribute("class")||""," "),r=" "+e+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function pi(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&P(e,hi(t.name||"v")),P(e,t),e}return"string"==typeof t?hi(t):void 0}}var hi=A((function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}})),di=J&&!Z,vi="transition",mi="transitionend",gi="animation",yi="animationend";di&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(vi="WebkitTransition",mi="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(gi="WebkitAnimation",yi="webkitAnimationEnd"));var bi=J?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Ci(t){bi((function(){bi(t)}))}function Ei(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),ui(t,e))}function _i(t,e){t._transitionClasses&&E(t._transitionClasses,e),fi(t,e)}function xi(t,e,n){var r=wi(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s="transition"===i?mi:yi,l=0,c=function(){t.removeEventListener(s,u),n()},u=function(e){e.target===t&&++l>=a&&c()};setTimeout((function(){l0&&(n="transition",u=a,f=o.length):"animation"===e?c>0&&(n="animation",u=c,f=l.length):f=(n=(u=Math.max(a,c))>0?a>c?"transition":"animation":null)?"transition"===n?o.length:l.length:0,{type:n,timeout:u,propCount:f,hasTransform:"transition"===n&&Ai.test(r[vi+"Property"])}}function Oi(t,e){for(;t.length1}function Pi(t,e){!0!==e.data.show&&ki(e)}var Fi=function(t){var e,n,r={},c=t.modules,u=t.nodeOps;for(e=0;ed?C(t,o(n[g+1])?null:n[g+1].elm,n,h,g,r):h>g&&_(e,f,d)}(f,v,g,n,c):a(g)?(a(t.text)&&u.setTextContent(f,""),C(f,null,g,0,g.length-1,n)):a(v)?_(v,0,v.length-1):a(t.text)&&u.setTextContent(f,""):t.text!==e.text&&u.setTextContent(f,e.text),a(d)&&a(h=d.hook)&&a(h=h.postpatch)&&h(t,e)}}}function O(t,e,n){if(s(n)&&a(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,a.selected!==o&&(a.selected=o);else if(D(Ii(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));i||(t.selectedIndex=-1)}}function Di(t,e){return e.every((function(e){return!D(e,t)}))}function Ii(t){return"_value"in t?t._value:t.value}function Mi(t){t.target.composing=!0}function Ri(t){t.target.composing&&(t.target.composing=!1,Ni(t.target,"input"))}function Ni(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function zi(t){return!t.componentInstance||t.data&&t.data.transition?t:zi(t.componentInstance._vnode)}var Ui={model:Li,show:{bind:function(t,e,n){var r=e.value,i=(n=zi(n)).data&&n.data.transition,o=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;r&&i?(n.data.show=!0,ki(n,(function(){t.style.display=o}))):t.style.display=r?o:"none"},update:function(t,e,n){var r=e.value;!r!=!e.oldValue&&((n=zi(n)).data&&n.data.transition?(n.data.show=!0,r?ki(n,(function(){t.style.display=t.__vOriginalDisplay})):Bi(n,(function(){t.style.display="none"}))):t.style.display=r?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}}},qi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Hi(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Hi(Ae(e.children)):t}function Gi(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var r in i)e[O(r)]=i[r];return e}function Wi(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Ki=function(t){return t.tag||de(t)},Ji=function(t){return"show"===t.name},Xi={name:"transition",props:qi,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Ki)).length){0;var r=this.mode;0;var i=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return i;var o=Hi(i);if(!o)return i;if(this._leaving)return Wi(t,i);var a="__transition-".concat(this._uid,"-");o.key=null==o.key?o.isComment?a+"comment":a+o.tag:l(o.key)?0===String(o.key).indexOf(a)?o.key:a+o.key:o.key;var s=(o.data||(o.data={})).transition=Gi(this),c=this._vnode,u=Hi(c);if(o.data.directives&&o.data.directives.some(Ji)&&(o.data.show=!0),u&&u.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(o,u)&&!de(u)&&(!u.componentInstance||!u.componentInstance._vnode.isComment)){var f=u.data.transition=P({},s);if("out-in"===r)return this._leaving=!0,Wt(f,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Wi(t,i);if("in-out"===r){if(de(o))return c;var p,h=function(){p()};Wt(s,"afterEnter",h),Wt(s,"enterCancelled",h),Wt(f,"delayLeave",(function(t){p=t}))}}return i}}},Yi=P({tag:String,moveClass:String},qi);function Zi(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function Qi(t){t.data.newPos=t.elm.getBoundingClientRect()}function to(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate(".concat(r,"px,").concat(i,"px)"),o.transitionDuration="0s"}}delete Yi.mode;var eo={Transition:Xi,TransitionGroup:{props:Yi,beforeMount:function(){var t=this,e=this._update;this._update=function(n,r){var i=Ye(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,r)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=Gi(this),s=0;s-1?yr[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:yr[t]=/HTMLUnknownElement/.test(e.toString())},P(Wn.options.directives,Ui),P(Wn.options.components,eo),Wn.prototype.__patch__=J?Fi:L,Wn.prototype.$mount=function(t,e){return function(t,e,n){var r;t.$el=e,t.$options.render||(t.$options.render=dt),tn(t,"beforeMount"),r=function(){t._update(t._render(),n)},new He(t,r,L,{before:function(){t._isMounted&&!t._isDestroyed&&tn(t,"beforeUpdate")}},!0),n=!1;var i=t._preWatchers;if(i)for(var o=0;o=0&&(e=t.slice(r),t=t.slice(0,r));var i=t.indexOf("?");return i>=0&&(n=t.slice(i+1),t=t.slice(0,i)),{path:t,query:n,hash:e}}(i.path||""),c=e&&e.path||"/",u=l.path?xo(l.path,c,n||i.append):c,f=function(t,e,n){void 0===e&&(e={});var r,i=n||co;try{r=i(t||"")}catch(t){r={}}for(var o in e){var a=e[o];r[o]=Array.isArray(a)?a.map(lo):lo(a)}return r}(l.query,i.query,r&&r.options.parseQuery),p=i.hash||l.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:u,query:f,hash:p}}var qo,Ho=function(){},Go={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,i=n.resolve(this.to,r,this.append),o=i.location,a=i.route,s=i.href,l={},c=n.options.linkActiveClass,u=n.options.linkExactActiveClass,f=null==c?"router-link-active":c,p=null==u?"router-link-exact-active":u,h=null==this.activeClass?f:this.activeClass,d=null==this.exactActiveClass?p:this.exactActiveClass,v=a.redirectedFrom?po(null,Uo(a.redirectedFrom),null,n):a;l[d]=yo(r,v,this.exactPath),l[h]=this.exact||this.exactPath?l[d]:function(t,e){return 0===t.path.replace(fo,"/").indexOf(e.path.replace(fo,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=l[d]?this.ariaCurrentValue:null,g=function(t){Wo(t)&&(e.replace?n.replace(o,Ho):n.push(o,Ho))},y={click:Wo};Array.isArray(this.event)?this.event.forEach((function(t){y[t]=g})):y[this.event]=g;var b={class:l},C=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:s,route:a,navigate:g,isActive:l[h],isExactActive:l[d]});if(C){if(1===C.length)return C[0];if(C.length>1||!C.length)return 0===C.length?t():t("span",{},C)}if("a"===this.tag)b.on=y,b.attrs={href:s,"aria-current":m};else{var E=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=zo(u.path,s.params),l(u,s,a)}if(s.path){s.params={};for(var h=0;h-1}function Aa(t,e){return xa(t)&&t._isRouter&&(null==e||t.type===e)}function wa(t,e,n){var r=function(i){i>=t.length?n():t[i]?e(t[i],(function(){r(i+1)})):r(i+1)};r(0)}function Oa(t){return function(e,n,r){var i=!1,o=0,a=null;Sa(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){i=!0,o++;var l,c=$a((function(e){var i;((i=e).__esModule||Ba&&"Module"===i[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:qo.extend(e),n.components[s]=e,--o<=0&&r()})),u=$a((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=xa(t)?t:new Error(e),r(a))}));try{l=t(c,u)}catch(t){u(t)}if(l)if("function"==typeof l.then)l.then(c,u);else{var f=l.component;f&&"function"==typeof f.then&&f.then(c,u)}}})),i||r()}}function Sa(t,e){return ka(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function ka(t){return Array.prototype.concat.apply([],t)}var Ba="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function $a(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ja=function(t,e){this.router=t,this.base=function(t){if(!t)if(Ko){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=vo,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Pa(t,e,n,r){var i=Sa(t,(function(t,r,i,o){var a=function(t,e){"function"!=typeof t&&(t=qo.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,i,o)})):n(a,r,i,o)}));return ka(r?i.reverse():i)}function Fa(t,e){if(e)return function(){return t.apply(e,arguments)}}ja.prototype.listen=function(t){this.cb=t},ja.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},ja.prototype.onError=function(t){this.errorCbs.push(t)},ja.prototype.transitionTo=function(t,e,n){var r,i=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var o=this.current;this.confirmTransition(r,(function(){i.updateRoute(r),e&&e(r),i.ensureURL(),i.router.afterHooks.forEach((function(t){t&&t(r,o)})),i.ready||(i.ready=!0,i.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!i.ready&&(Aa(t,ya.redirected)&&o===vo||(i.ready=!0,i.readyErrorCbs.forEach((function(e){e(t)}))))}))},ja.prototype.confirmTransition=function(t,e,n){var r=this,i=this.current;this.pending=t;var o,a,s=function(t){!Aa(t)&&xa(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},l=t.matched.length-1,c=i.matched.length-1;if(yo(t,i)&&l===c&&t.matched[l]===i.matched[c])return this.ensureURL(),t.hash&&aa(this.router,i,t,!1),s(((a=Ea(o=i,t,ya.duplicated,'Avoided redundant navigation to current location: "'+o.fullPath+'".')).name="NavigationDuplicated",a));var u=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=va&&n;r&&this.listeners.push(oa());var i=function(){var n=t.current,i=Ta(t.base);t.current===vo&&i===t._startLocation||t.transitionTo(i,(function(t){r&&aa(e,t,n,!0)}))};window.addEventListener("popstate",i),this.listeners.push((function(){window.removeEventListener("popstate",i)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){ma(Ao(r.base+t.fullPath)),aa(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){ga(Ao(r.base+t.fullPath)),aa(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ta(this.base)!==this.current.fullPath){var e=Ao(this.base+this.current.fullPath);t?ma(e):ga(e)}},e.prototype.getCurrentLocation=function(){return Ta(this.base)},e}(ja);function Ta(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf(Ao(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var Va=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ta(t);if(!/^\/#/.test(e))return window.location.replace(Ao(t+"/#"+e)),!0}(this.base)||Da()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=va&&e;n&&this.listeners.push(oa());var r=function(){var e=t.current;Da()&&t.transitionTo(Ia(),(function(r){n&&aa(t.router,r,e,!0),va||Na(r.fullPath)}))},i=va?"popstate":"hashchange";window.addEventListener(i,r),this.listeners.push((function(){window.removeEventListener(i,r)}))}},e.prototype.push=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){Ra(t.fullPath),aa(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,i=this.current;this.transitionTo(t,(function(t){Na(t.fullPath),aa(r.router,t,i,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ia()!==e&&(t?Ra(e):Na(e))},e.prototype.getCurrentLocation=function(){return Ia()},e}(ja);function Da(){var t=Ia();return"/"===t.charAt(0)||(Na("/"+t),!1)}function Ia(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Ma(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function Ra(t){va?ma(Ma(t)):window.location.hash=t}function Na(t){va?ga(Ma(t)):window.location.replace(Ma(t))}var za=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Aa(t,ya.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ja),Ua=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Yo(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!va&&!1!==t.fallback,this.fallback&&(e="hash"),Ko||(e="abstract"),this.mode=e,e){case"history":this.history=new La(this,t.base);break;case"hash":this.history=new Va(this,t.base,this.fallback);break;case"abstract":this.history=new za(this,t.base);break;default:0}},qa={currentRoute:{configurable:!0}};Ua.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},qa.currentRoute.get=function(){return this.history&&this.history.current},Ua.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof La||n instanceof Va){var r=function(t){n.setupListeners(),function(t){var r=n.current,i=e.options.scrollBehavior;va&&i&&"fullPath"in t&&aa(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Ua.prototype.beforeEach=function(t){return Ga(this.beforeHooks,t)},Ua.prototype.beforeResolve=function(t){return Ga(this.resolveHooks,t)},Ua.prototype.afterEach=function(t){return Ga(this.afterHooks,t)},Ua.prototype.onReady=function(t,e){this.history.onReady(t,e)},Ua.prototype.onError=function(t){this.history.onError(t)},Ua.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Ua.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Ua.prototype.go=function(t){this.history.go(t)},Ua.prototype.back=function(){this.go(-1)},Ua.prototype.forward=function(){this.go(1)},Ua.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Ua.prototype.resolve=function(t,e,n){var r=Uo(t,e=e||this.history.current,n,this),i=this.match(r,e),o=i.redirectedFrom||i.fullPath;return{location:r,route:i,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?Ao(t+"/"+r):r}(this.history.base,o,this.mode),normalizedTo:r,resolved:i}},Ua.prototype.getRoutes=function(){return this.matcher.getRoutes()},Ua.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==vo&&this.history.transitionTo(this.history.getCurrentLocation())},Ua.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==vo&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Ua.prototype,qa);var Ha=Ua;function Ga(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Ua.install=function t(e){if(!t.installed||qo!==e){t.installed=!0,qo=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",Eo),e.component("RouterLink",Go);var i=e.config.optionMergeStrategies;i.beforeRouteEnter=i.beforeRouteLeave=i.beforeRouteUpdate=i.created}},Ua.version="3.6.5",Ua.isNavigationFailure=Aa,Ua.NavigationFailureType=ya,Ua.START_LOCATION=vo,Ko&&window.Vue&&window.Vue.use(Ua);n(96);n(123),n(45);var Wa={"components/AlgoliaSearchBox":()=>Promise.all([n.e(0),n.e(13)]).then(n.bind(null,304)),"components/DropdownLink":()=>Promise.all([n.e(0),n.e(14)]).then(n.bind(null,256)),"components/DropdownTransition":()=>Promise.all([n.e(0),n.e(19)]).then(n.bind(null,244)),"components/Home":()=>Promise.all([n.e(0),n.e(16)]).then(n.bind(null,282)),"components/Navbar":()=>Promise.all([n.e(0),n.e(1)]).then(n.bind(null,301)),"components/NavLink":()=>n.e(21).then(n.bind(null,243)),"components/NavLinks":()=>Promise.all([n.e(0),n.e(12)]).then(n.bind(null,267)),"components/Page":()=>Promise.all([n.e(0),n.e(11)]).then(n.bind(null,283)),"components/PageEdit":()=>Promise.all([n.e(0),n.e(17)]).then(n.bind(null,269)),"components/PageNav":()=>Promise.all([n.e(0),n.e(15)]).then(n.bind(null,270)),"components/Sidebar":()=>Promise.all([n.e(0),n.e(10)]).then(n.bind(null,284)),"components/SidebarButton":()=>Promise.all([n.e(0),n.e(20)]).then(n.bind(null,285)),"components/SidebarGroup":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,268)),"components/SidebarLink":()=>Promise.all([n.e(0),n.e(18)]).then(n.bind(null,257)),"components/SidebarLinks":()=>Promise.all([n.e(0),n.e(3)]).then(n.bind(null,255)),"global-components/Badge":()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,309)),"global-components/CodeBlock":()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,305)),"global-components/CodeGroup":()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,306)),"layouts/404":()=>n.e(7).then(n.bind(null,307)),"layouts/Layout":()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,308)),NotFound:()=>n.e(7).then(n.bind(null,307)),Layout:()=>Promise.all([n.e(0),n.e(1),n.e(2)]).then(n.bind(null,308))},Ka={"v-24bb7ebd":()=>n.e(27).then(n.bind(null,310)),"v-7dafa10a":()=>n.e(28).then(n.bind(null,311)),"v-a58f3c46":()=>n.e(29).then(n.bind(null,312)),"v-5d13207a":()=>n.e(30).then(n.bind(null,313)),"v-0d8d83a2":()=>n.e(31).then(n.bind(null,314)),"v-35f865e3":()=>n.e(32).then(n.bind(null,315)),"v-a9403a88":()=>n.e(33).then(n.bind(null,316)),"v-4ee6a7be":()=>n.e(34).then(n.bind(null,317)),"v-0fdaead2":()=>n.e(35).then(n.bind(null,318)),"v-7a52cd1c":()=>n.e(36).then(n.bind(null,319)),"v-1f5c1928":()=>n.e(37).then(n.bind(null,320)),"v-0336f3a3":()=>n.e(22).then(n.bind(null,321)),"v-37363e9f":()=>n.e(23).then(n.bind(null,322)),"v-1a4c9076":()=>n.e(24).then(n.bind(null,323)),"v-8b703502":()=>n.e(25).then(n.bind(null,324)),"v-15268365":()=>n.e(39).then(n.bind(null,325)),"v-61daed62":()=>n.e(38).then(n.bind(null,326)),"v-38972c5d":()=>n.e(26).then(n.bind(null,327)),"v-51674b5d":()=>n.e(40).then(n.bind(null,328)),"v-42a01c36":()=>n.e(41).then(n.bind(null,329)),"v-2f3fb204":()=>n.e(42).then(n.bind(null,330)),"v-4d37d972":()=>n.e(43).then(n.bind(null,331)),"v-59d1cbe7":()=>n.e(45).then(n.bind(null,332)),"v-5820d42c":()=>n.e(44).then(n.bind(null,333)),"v-604dc25c":()=>n.e(46).then(n.bind(null,334)),"v-0a7098b3":()=>n.e(48).then(n.bind(null,335)),"v-179da348":()=>n.e(47).then(n.bind(null,336)),"v-14b38dcc":()=>n.e(49).then(n.bind(null,337)),"v-2f1ebe3a":()=>n.e(51).then(n.bind(null,338)),"v-2832db09":()=>n.e(50).then(n.bind(null,339)),"v-05642c0c":()=>n.e(52).then(n.bind(null,340))};function Ja(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const Xa=/-(\w)/g,Ya=Ja(t=>t.replace(Xa,(t,e)=>e?e.toUpperCase():"")),Za=/\B([A-Z])/g,Qa=Ja(t=>t.replace(Za,"-$1").toLowerCase()),ts=Ja(t=>t.charAt(0).toUpperCase()+t.slice(1));function es(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(ts(Ya(e))):t(ts(e))||t(Qa(e))}const ns=Object.assign({},Wa,Ka),rs=t=>ns[t],is=t=>Ka[t],os=t=>Wa[t],as=t=>Wn.component(t);function ss(t){return es(is,t)}function ls(t){return es(os,t)}function cs(t){return es(rs,t)}function us(t){return es(as,t)}function fs(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!us(t)&&cs(t)){const e=await cs(t)();Wn.component(t,e.default)}}))}function ps(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var hs=n(87),ds=n.n(hs),vs=n(88),ms=n.n(vs),gs={created(){if(this.siteMeta=this.$site.headTags.filter(([t])=>"meta"===t).map(([t,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(t=e)?t.map(t=>{let e="{e+=` ${n}="${ms()(t[n])}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=bs(this.$canonicalUrl)}var t},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.getMergedMetaTags();this.currentMetaTags=Cs(t,this.currentMetaTags)},getMergedMetaTags(){const t=this.$page.frontmatter.meta||[];return ds()([{name:"description",content:this.$description}],t,this.siteMeta,Es)},updateCanonicalLink(){ys(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",bs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){Cs(null,this.currentMetaTags),ys()}};function ys(){const t=document.querySelector("link[rel='canonical']");t&&t.remove()}function bs(t=""){return t?``:""}function Cs(t,e){if(e&&[...e].filter(t=>t.parentNode===document.head).forEach(t=>document.head.removeChild(t)),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}function Es(t){for(const e of["name","property","itemprop"])if(t.hasOwnProperty(e))return t[e]+e;return JSON.stringify(t)}var _s=n(89),xs={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(_s)()((function(){this.setActiveHash()}),300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),i=window.innerHeight+n;for(let t=0;t=o.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},As=n(22),ws=n.n(As),Os=[gs,xs,{mounted(){ws.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Wn.component(t.name)||ws.a.start(),n()}),this.$router.afterEach(()=>{ws.a.done(),this.isSidebarOpen=!1})}}],Ss={name:"GlobalLayout",computed:{layout(){const t=this.getLayout();return ps("layout",t),Wn.component(t)}},methods:{getLayout(){if(this.$page.path){const t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},ks=n(14),Bs=Object(ks.a)(Ss,(function(){return(0,this._self._c)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Bs,"mixins",Os);const $s=[{name:"v-24bb7ebd",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-24bb7ebd").then(n)}},{path:"/Chip/Chip/2023.11.07-Verilog语法.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95.html"},{path:"/Chip/Chip/2023.11.07-Verilog语法.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95.html"},{name:"v-7dafa10a",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/1.Verilog%20%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-7dafa10a").then(n)}},{path:"/Chip/Chip/2023.11.07-Verilog语法/1.Verilog 基础语法.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/1.Verilog%20%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95.html"},{path:"/Chip/Chip/2023.11.07-Verilog语法/1.Verilog 基础语法.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/1.Verilog%20%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95.html"},{name:"v-a58f3c46",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/10.Verilog%20%E5%A4%9A%E8%B7%AF%E5%88%86%E6%94%AF%E8%AF%AD%E5%8F%A5.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-a58f3c46").then(n)}},{path:"/Chip/Chip/2023.11.07-Verilog语法/10.Verilog 多路分支语句.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/10.Verilog%20%E5%A4%9A%E8%B7%AF%E5%88%86%E6%94%AF%E8%AF%AD%E5%8F%A5.html"},{path:"/Chip/Chip/2023.11.07-Verilog语法/10.Verilog 多路分支语句.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/10.Verilog%20%E5%A4%9A%E8%B7%AF%E5%88%86%E6%94%AF%E8%AF%AD%E5%8F%A5.html"},{name:"v-5d13207a",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2.Verilog%20%E6%95%B0%E5%80%BC%E8%A1%A8%E7%A4%BA.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-5d13207a").then(n)}},{path:"/Chip/Chip/2023.11.07-Verilog语法/2.Verilog 数值表示.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2.Verilog%20%E6%95%B0%E5%80%BC%E8%A1%A8%E7%A4%BA.html"},{path:"/Chip/Chip/2023.11.07-Verilog语法/2.Verilog 数值表示.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2.Verilog%20%E6%95%B0%E5%80%BC%E8%A1%A8%E7%A4%BA.html"},{name:"v-0d8d83a2",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.15-Vivado.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-0d8d83a2").then(n)}},{path:"/Chip/Chip/2023.11.07-Verilog语法/2023.11.15-Vivado.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.15-Vivado.html"},{path:"/Chip/Chip/2023.11.07-Verilog语法/2023.11.15-Vivado.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.15-Vivado.html"},{name:"v-35f865e3",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.16-%E9%98%BB%E5%A1%9E%E4%B8%8E%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B5%8B%E5%80%BC.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-35f865e3").then(n)}},{path:"/Chip/Chip/2023.11.07-Verilog语法/2023.11.16-阻塞与非阻塞赋值.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.16-%E9%98%BB%E5%A1%9E%E4%B8%8E%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B5%8B%E5%80%BC.html"},{path:"/Chip/Chip/2023.11.07-Verilog语法/2023.11.16-阻塞与非阻塞赋值.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.16-%E9%98%BB%E5%A1%9E%E4%B8%8E%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B5%8B%E5%80%BC.html"},{name:"v-a9403a88",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/3.Verilog%20%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-a9403a88").then(n)}},{path:"/Chip/Chip/2023.11.07-Verilog语法/3.Verilog 数据类型.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/3.Verilog%20%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html"},{path:"/Chip/Chip/2023.11.07-Verilog语法/3.Verilog 数据类型.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/3.Verilog%20%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html"},{name:"v-4ee6a7be",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/4.Verilog%20%E8%A1%A8%E8%BE%BE%E5%BC%8F.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-4ee6a7be").then(n)}},{path:"/Chip/Chip/2023.11.07-Verilog语法/4.Verilog 表达式.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/4.Verilog%20%E8%A1%A8%E8%BE%BE%E5%BC%8F.html"},{path:"/Chip/Chip/2023.11.07-Verilog语法/4.Verilog 表达式.html",redirect:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/4.Verilog%20%E8%A1%A8%E8%BE%BE%E5%BC%8F.html"},{name:"v-0fdaead2",path:"/Chip/Chip/2024.02.21-Chisel.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-0fdaead2").then(n)}},{name:"v-7a52cd1c",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.21-1%20Introduction%20to%20Scala.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-7a52cd1c").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.21-1 Introduction to Scala.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.21-1%20Introduction%20to%20Scala.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.21-1 Introduction to Scala.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.21-1%20Introduction%20to%20Scala.html"},{name:"v-1f5c1928",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1%20First%20Chisel%20Module.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-1f5c1928").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1 First Chisel Module.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1%20First%20Chisel%20Module.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1 First Chisel Module.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1%20First%20Chisel%20Module.html"},{name:"v-0336f3a3",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2%20Combinational%20Logic.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-0336f3a3").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2 Combinational Logic.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2%20Combinational%20Logic.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2 Combinational Logic.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2%20Combinational%20Logic.html"},{name:"v-37363e9f",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3%20Control%20Flow.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-37363e9f").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3 Control Flow.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3%20Control%20Flow.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3 Control Flow.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3%20Control%20Flow.html"},{name:"v-1a4c9076",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4%20Sequential%20Logic.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-1a4c9076").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4 Sequential Logic.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4%20Sequential%20Logic.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4 Sequential Logic.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4%20Sequential%20Logic.html"},{name:"v-8b703502",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5%20FIR%20Filter.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-8b703502").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5 FIR Filter.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5%20FIR%20Filter.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5 FIR Filter.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5%20FIR%20Filter.html"},{name:"v-15268365",path:"/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2%20Generators%20Collections.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-15268365").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2 Generators Collections.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2%20Generators%20Collections.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2 Generators Collections.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2%20Generators%20Collections.html"},{name:"v-61daed62",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6%20More%20on%20ChiselTest.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-61daed62").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6 More on ChiselTest.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6%20More%20on%20ChiselTest.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6 More on ChiselTest.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6%20More%20on%20ChiselTest.html"},{name:"v-38972c5d",path:"/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1%20Generators%20Parameters.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-38972c5d").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1 Generators Parameters.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1%20Generators%20Parameters.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1 Generators Parameters.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1%20Generators%20Parameters.html"},{name:"v-51674b5d",path:"/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3%20Interlude%20Chisel%20Standard%20Library.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-51674b5d").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3 Interlude Chisel Standard Library.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3%20Interlude%20Chisel%20Standard%20Library.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3 Interlude Chisel Standard Library.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3%20Interlude%20Chisel%20Standard%20Library.html"},{name:"v-42a01c36",path:"/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4%20Higher-Order%20Functions.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-42a01c36").then(n)}},{path:"/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4 Higher-Order Functions.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4%20Higher-Order%20Functions.html"},{path:"/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4 Higher-Order Functions.html",redirect:"/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4%20Higher-Order%20Functions.html"},{name:"v-2f3fb204",path:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-2f3fb204").then(n)}},{path:"/Chip/Chip/一生一芯计划.html",redirect:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92.html"},{path:"/Chip/Chip/一生一芯计划.html",redirect:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92.html"},{name:"v-4d37d972",path:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92/%E9%A2%84%E5%AD%A6%E4%B9%A0%E9%98%B6%E6%AE%B5.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-4d37d972").then(n)}},{path:"/Chip/Chip/一生一芯计划/预学习阶段.html",redirect:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92/%E9%A2%84%E5%AD%A6%E4%B9%A0%E9%98%B6%E6%AE%B5.html"},{path:"/Chip/Chip/一生一芯计划/预学习阶段.html",redirect:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92/%E9%A2%84%E5%AD%A6%E4%B9%A0%E9%98%B6%E6%AE%B5.html"},{name:"v-59d1cbe7",path:"/LeetCode/LeetCode/2024%2002%2022-752%20%E6%89%93%E5%BC%80%E8%BD%AC%E7%9B%98%E9%94%81%EF%BC%88BFS%EF%BC%89%20abab666d7cbf48d2b1656f11166d33f2.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-59d1cbe7").then(n)}},{path:"/LeetCode/LeetCode/2024 02 22-752 打开转盘锁(BFS) abab666d7cbf48d2b1656f11166d33f2.html",redirect:"/LeetCode/LeetCode/2024%2002%2022-752%20%E6%89%93%E5%BC%80%E8%BD%AC%E7%9B%98%E9%94%81%EF%BC%88BFS%EF%BC%89%20abab666d7cbf48d2b1656f11166d33f2.html"},{path:"/LeetCode/LeetCode/2024 02 22-752 打开转盘锁(BFS) abab666d7cbf48d2b1656f11166d33f2.html",redirect:"/LeetCode/LeetCode/2024%2002%2022-752%20%E6%89%93%E5%BC%80%E8%BD%AC%E7%9B%98%E9%94%81%EF%BC%88BFS%EF%BC%89%20abab666d7cbf48d2b1656f11166d33f2.html"},{name:"v-5820d42c",path:"/Chip/",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-5820d42c").then(n)}},{path:"/Chip/index.html",redirect:"/Chip/"},{name:"v-604dc25c",path:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-604dc25c").then(n)}},{path:"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab.html",redirect:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab.html"},{path:"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab.html",redirect:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab.html"},{name:"v-0a7098b3",path:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-543%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84%209db6d046b0954b45b96ca749922a2ece.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-0a7098b3").then(n)}},{path:"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-543 二叉树的直径 9db6d046b0954b45b96ca749922a2ece.html",redirect:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-543%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84%209db6d046b0954b45b96ca749922a2ece.html"},{path:"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-543 二叉树的直径 9db6d046b0954b45b96ca749922a2ece.html",redirect:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-543%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84%209db6d046b0954b45b96ca749922a2ece.html"},{name:"v-179da348",path:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-104%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6%20c6649929175d46038db921b552f2a235.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-179da348").then(n)}},{path:"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-104 二叉树的最大深度 c6649929175d46038db921b552f2a235.html",redirect:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-104%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6%20c6649929175d46038db921b552f2a235.html"},{path:"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-104 二叉树的最大深度 c6649929175d46038db921b552f2a235.html",redirect:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-104%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6%20c6649929175d46038db921b552f2a235.html"},{name:"v-14b38dcc",path:"/LeetCode/",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-14b38dcc").then(n)}},{path:"/LeetCode/index.html",redirect:"/LeetCode/"},{name:"v-2f1ebe3a",path:"/about/",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-2f1ebe3a").then(n)}},{path:"/about/index.html",redirect:"/about/"},{name:"v-2832db09",path:"/",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-2832db09").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-05642c0c",path:"/test.html",component:Bs,beforeEnter:(t,e,n)=>{fs("Layout","v-05642c0c").then(n)}},{path:"*",component:Bs}],js={title:"Hello World --from OutisLi",description:"",base:"/Blog/",headTags:[],pages:[{title:"2023.11.07-Verilog语法",frontmatter:{},regularPath:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95.html",relativePath:"Chip/Chip/2023.11.07-Verilog语法.md",key:"v-24bb7ebd",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95.html",createdTime:170972353e4},{title:"1. Verilog 基础语法",frontmatter:{},regularPath:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/1.Verilog%20%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95.html",relativePath:"Chip/Chip/2023.11.07-Verilog语法/1.Verilog 基础语法.md",key:"v-7dafa10a",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/1.Verilog%20%E5%9F%BA%E7%A1%80%E8%AF%AD%E6%B3%95.html",headers:[{level:2,title:"格式",slug:"格式"},{level:3,title:"不换行(不推荐)",slug:"不换行-不推荐"},{level:3,title:"换行(推荐)",slug:"换行-推荐"},{level:2,title:"注释",slug:"注释"},{level:2,title:"标识符与关键字",slug:"标识符与关键字"},{level:3,title:"实例",slug:"实例"}],createdTime:170972353e4},{title:"10. Verilog 多路分支语句",frontmatter:{},regularPath:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/10.Verilog%20%E5%A4%9A%E8%B7%AF%E5%88%86%E6%94%AF%E8%AF%AD%E5%8F%A5.html",relativePath:"Chip/Chip/2023.11.07-Verilog语法/10.Verilog 多路分支语句.md",key:"v-a58f3c46",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/10.Verilog%20%E5%A4%9A%E8%B7%AF%E5%88%86%E6%94%AF%E8%AF%AD%E5%8F%A5.html",headers:[{level:3,title:"关键词:case,选择器",slug:"关键词-case-选择器"},{level:2,title:"case 语句",slug:"case-语句"},{level:3,title:"case 语句支持嵌套使用。",slug:"case-语句支持嵌套使用。"},{level:3,title:"实例",slug:"实例"},{level:3,title:"例如,对 4 路选择器的 case 语句进行扩展,举例如下:",slug:"例如-对-4-路选择器的-case-语句进行扩展-举例如下"},{level:2,title:"casex/casez 语句",slug:"casex-casez-语句"},{level:3,title:"例如用 casez 语句来实现一个 4bit 控制端的 4 路选择选择器。",slug:"例如用-casez-语句来实现一个-4bit-控制端的-4-路选择选择器。"}],createdTime:170972353e4},{title:"2. Verilog 数值表示",frontmatter:{},regularPath:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2.Verilog%20%E6%95%B0%E5%80%BC%E8%A1%A8%E7%A4%BA.html",relativePath:"Chip/Chip/2023.11.07-Verilog语法/2.Verilog 数值表示.md",key:"v-5d13207a",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2.Verilog%20%E6%95%B0%E5%80%BC%E8%A1%A8%E7%A4%BA.html",headers:[{level:2,title:"数值种类",slug:"数值种类"},{level:2,title:"整数数值表示方法",slug:"整数数值表示方法"},{level:3,title:"指明位宽:",slug:"指明位宽"},{level:3,title:"不指明位宽:",slug:"不指明位宽"},{level:3,title:"负数表示",slug:"负数表示"},{level:2,title:"实数表示方法",slug:"实数表示方法"},{level:3,title:"十进制:",slug:"十进制"},{level:3,title:"科学计数法:",slug:"科学计数法"},{level:2,title:"字符串表示方法",slug:"字符串表示方法"}],createdTime:170972353e4},{title:"2023.11.15-Vivado",frontmatter:{},regularPath:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.15-Vivado.html",relativePath:"Chip/Chip/2023.11.07-Verilog语法/2023.11.15-Vivado.md",key:"v-0d8d83a2",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.15-Vivado.html",headers:[{level:2,title:"1. RTL Schematic & Synthesis Schematic",slug:"_1-rtl-schematic-synthesis-schematic"},{level:2,title:"2. Project汇总中的LUT,FF,IO,BUFG",slug:"_2-project汇总中的lut-ff-io-bufg"},{level:2,title:"3. FPGA的组成构造",slug:"_3-fpga的组成构造"}],createdTime:170972353e4},{title:"2023.11.16-阻塞与非阻塞赋值",frontmatter:{},regularPath:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.16-%E9%98%BB%E5%A1%9E%E4%B8%8E%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B5%8B%E5%80%BC.html",relativePath:"Chip/Chip/2023.11.07-Verilog语法/2023.11.16-阻塞与非阻塞赋值.md",key:"v-35f865e3",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/2023.11.16-%E9%98%BB%E5%A1%9E%E4%B8%8E%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B5%8B%E5%80%BC.html",headers:[{level:3,title:"阻塞赋值(Blocking Assignment)",slug:"阻塞赋值-blocking-assignment"},{level:3,title:"非阻塞赋值(Non-Blocking Assignment)",slug:"非阻塞赋值-non-blocking-assignment"}],createdTime:170972353e4},{title:"3. Verilog 数据类型",frontmatter:{},regularPath:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/3.Verilog%20%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html",relativePath:"Chip/Chip/2023.11.07-Verilog语法/3.Verilog 数据类型.md",key:"v-a9403a88",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/3.Verilog%20%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B.html",headers:[{level:2,title:"线网(wire)",slug:"线网-wire"},{level:2,title:"寄存器(reg)",slug:"寄存器-reg"},{level:2,title:"向量",slug:"向量"},{level:2,title:"整数,实数,时间寄存器变量",slug:"整数-实数-时间寄存器变量"},{level:3,title:"整数(integer)",slug:"整数-integer"},{level:3,title:"实数(real)",slug:"实数-real"},{level:3,title:"时间(time)",slug:"时间-time"},{level:3,title:"数组",slug:"数组"},{level:2,title:"存储器",slug:"存储器"},{level:2,title:"参数",slug:"参数"},{level:2,title:"字符串",slug:"字符串"}],createdTime:170972353e4},{title:"4. Verilog 表达式",frontmatter:{},regularPath:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/4.Verilog%20%E8%A1%A8%E8%BE%BE%E5%BC%8F.html",relativePath:"Chip/Chip/2023.11.07-Verilog语法/4.Verilog 表达式.md",key:"v-4ee6a7be",path:"/Chip/Chip/2023.11.07-Verilog%E8%AF%AD%E6%B3%95/4.Verilog%20%E8%A1%A8%E8%BE%BE%E5%BC%8F.html",headers:[{level:3,title:"表达式",slug:"表达式"},{level:2,title:"实例",slug:"实例"},{level:3,title:"操作数",slug:"操作数"},{level:2,title:"实例",slug:"实例-2"},{level:3,title:"操作符",slug:"操作符"},{level:3,title:"算术操作符",slug:"算术操作符"},{level:2,title:"实例",slug:"实例-3"},{level:2,title:"实例",slug:"实例-4"},{level:2,title:"实例",slug:"实例-5"},{level:2,title:"实例",slug:"实例-6"},{level:3,title:"关系操作符",slug:"关系操作符"},{level:2,title:"实例",slug:"实例-7"},{level:3,title:"等价操作符",slug:"等价操作符"},{level:2,title:"实例",slug:"实例-8"},{level:3,title:"逻辑操作符",slug:"逻辑操作符"},{level:2,title:"实例",slug:"实例-9"},{level:3,title:"按位操作符",slug:"按位操作符"},{level:2,title:"实例",slug:"实例-10"},{level:3,title:"归约操作符",slug:"归约操作符"},{level:3,title:"移位操作符",slug:"移位操作符"},{level:2,title:"实例",slug:"实例-11"},{level:3,title:"拼接操作符",slug:"拼接操作符"},{level:2,title:"实例",slug:"实例-12"},{level:3,title:"条件操作符",slug:"条件操作符"},{level:2,title:"实例",slug:"实例-13"}],createdTime:170972353e4},{title:"2024.02.21-Chisel",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel.html",relativePath:"Chip/Chip/2024.02.21-Chisel.md",key:"v-0fdaead2",path:"/Chip/Chip/2024.02.21-Chisel.html",createdTime:170972353e4},{title:"2024.02.21-1. Introduction to Scala",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.02.21-1%20Introduction%20to%20Scala.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.02.21-1 Introduction to Scala.md",key:"v-7a52cd1c",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.21-1%20Introduction%20to%20Scala.html",headers:[{level:2,title:"Variables and Constants - `var` and `val`",slug:"variables-and-constants-var-and-val"},{level:2,title:"Conditionals",slug:"conditionals"},{level:2,title:"Methods (Functions)",slug:"methods-functions"},{level:2,title:"Overloading Functions",slug:"overloading-functions"},{level:3,title:"Recursive and Nested Functions",slug:"recursive-and-nested-functions"},{level:3,title:"Named Parameters and Parameter Defaults",slug:"named-parameters-and-parameter-defaults"},{level:2,title:"Lists",slug:"lists"},{level:2,title:"`for` Statement",slug:"for-statement"},{level:2,title:"Packages and Imports",slug:"packages-and-imports"},{level:2,title:"Class",slug:"class"},{level:3,title:"Creating an Instance of a Class",slug:"creating-an-instance-of-a-class"},{level:2,title:"Code Blocks",slug:"code-blocks"},{level:3,title:"Parameterized Code Blocks",slug:"parameterized-code-blocks"}],createdTime:170972353e4},{title:"2024.02.23-2.1 First Chisel Module",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1%20First%20Chisel%20Module.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1 First Chisel Module.md",key:"v-1f5c1928",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.23-2.1%20First%20Chisel%20Module.html",headers:[{level:2,title:"Setup",slug:"setup"},{level:2,title:"Example Module",slug:"example-module"},{level:3,title:"Generate Verilog",slug:"generate-verilog"},{level:3,title:"Generate Firrtl",slug:"generate-firrtl"},{level:2,title:"Example Tester",slug:"example-tester"},{level:2,title:'Appendix: A Note on "printf" Debugging',slug:"appendix-a-note-on-printf-debugging"}],createdTime:170972353e4},{title:"2024.02.24-2.2 Combinational Logic",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2%20Combinational%20Logic.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2 Combinational Logic.md",key:"v-0336f3a3",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.24-2.2%20Combinational%20Logic.html",headers:[{level:2,title:"Common Operators",slug:"common-operators"},{level:2,title:"Mux and Concatenation",slug:"mux-and-concatenation"},{level:2,title:"MAC: multiply accumulate function",slug:"mac-multiply-accumulate-function"},{level:2,title:"Arbiter",slug:"arbiter"},{level:2,title:"Parameterized Adder",slug:"parameterized-adder"}],createdTime:170972353e4},{title:"2024.02.25-2.3 Control Flow",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3%20Control%20Flow.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3 Control Flow.md",key:"v-37363e9f",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.25-2.3%20Control%20Flow.html",headers:[{level:2,title:"Last Connect Semantics",slug:"last-connect-semantics"},{level:2,title:"when, elsewhen, and otherwise",slug:"when-elsewhen-and-otherwise"},{level:2,title:"The Wire Construct",slug:"the-wire-construct"},{level:3,title:"Exercise: Polynomial",slug:"exercise-polynomial"},{level:3,title:"Exercise: Finite State Machine",slug:"exercise-finite-state-machine"}],createdTime:170972353e4},{title:"2024.02.26-2.4 Sequential Logic",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4%20Sequential%20Logic.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4 Sequential Logic.md",key:"v-1a4c9076",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.26-2.4%20Sequential%20Logic.html",headers:[{level:2,title:"Registers",slug:"registers"},{level:3,title:"RegInit",slug:"reginit"},{level:3,title:"RegNext",slug:"regnext"},{level:2,title:"Shift Register",slug:"shift-register"},{level:3,title:"Parameterized Shift Register",slug:"parameterized-shift-register"},{level:2,title:"Appendix: Explicit clock and reset",slug:"appendix-explicit-clock-and-reset"},{level:3,title:"Example: Multi-Clock Module",slug:"example-multi-clock-module"}],createdTime:170972353e4},{title:"2024.02.28-2.5 FIR Filter",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5%20FIR%20Filter.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5 FIR Filter.md",key:"v-8b703502",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.28-2.5%20FIR%20Filter.html",headers:[{level:2,title:"FIR Filter Generator",slug:"fir-filter-generator"}],createdTime:170972353e4},{title:"2024.03.03-3.2 Generators: Collections",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2%20Generators%20Collections.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2 Generators Collections.md",key:"v-15268365",path:"/Chip/Chip/2024.02.21-Chisel/2024.03.03-3.2%20Generators%20Collections.html",headers:[{level:2,title:"Generators and Collections",slug:"generators-and-collections"},{level:3,title:"FIR Golden Model",slug:"fir-golden-model"},{level:3,title:"Seq",slug:"seq"},{level:3,title:"寄存器",slug:"寄存器"},{level:3,title:"Poke",slug:"poke"},{level:3,title:"更新寄存器",slug:"更新寄存器"},{level:3,title:"计算输出",slug:"计算输出"},{level:3,title:"Test circuit using the golden model",slug:"test-circuit-using-the-golden-model"},{level:3,title:"Example: Parameterized FIR Generator",slug:"example-parameterized-fir-generator"},{level:3,title:"Test a bunch of different sized FIR filters",slug:"test-a-bunch-of-different-sized-fir-filters"},{level:2,title:"Hardware Collections",slug:"hardware-collections"},{level:3,title:"Example: Add run-time configurable taps to our FIR",slug:"example-add-run-time-configurable-taps-to-our-fir"},{level:3,title:"Example: 32-bit RISC-V Processor",slug:"example-32-bit-risc-v-processor"}],createdTime:170972353e4},{title:"2024.02.29-2.6 More on ChiselTest",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6%20More%20on%20ChiselTest.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6 More on ChiselTest.md",key:"v-61daed62",path:"/Chip/Chip/2024.02.21-Chisel/2024.02.29-2.6%20More%20on%20ChiselTest.html",headers:[{level:2,title:"Modules with Decoupled Interfaces",slug:"modules-with-decoupled-interfaces"},{level:3,title:"EnqueueNow and expectDequeueNow",slug:"enqueuenow-and-expectdequeuenow"},{level:3,title:"EnqueueSeq and DequeueSeq",slug:"enqueueseq-and-dequeueseq"},{level:2,title:"Fork and Join",slug:"fork-and-join"}],createdTime:170972353e4},{title:"2024.03.01-3.1 Generators: Parameters",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1%20Generators%20Parameters.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1 Generators Parameters.md",key:"v-38972c5d",path:"/Chip/Chip/2024.02.21-Chisel/2024.03.01-3.1%20Generators%20Parameters.html",headers:[{level:2,title:"Parameter Passing",slug:"parameter-passing"},{level:3,title:"Example: Parameterized Scala Object",slug:"example-parameterized-scala-object"},{level:3,title:"Example: Parameterized Chisel Object",slug:"example-parameterized-chisel-object"},{level:3,title:"Example: Parameterized 4-input Sort",slug:"example-parameterized-4-input-sort"},{level:2,title:"Option and Defualt Arguments",slug:"option-and-defualt-arguments"},{level:3,title:"Options for Parameters with Defaults",slug:"options-for-parameters-with-defaults"},{level:2,title:"Match/Case Statements",slug:"match-case-statements"},{level:3,title:"Example: Value Matching",slug:"example-value-matching"},{level:3,title:"Example: Multiple Value Matching",slug:"example-multiple-value-matching"},{level:3,title:"Example: Type Matching",slug:"example-type-matching"},{level:3,title:"Example: Multiple Type Matching",slug:"example-multiple-type-matching"},{level:3,title:"Example: Type Matching and Erasure",slug:"example-type-matching-and-erasure"},{level:2,title:"IOs with Optional Fields",slug:"ios-with-optional-fields"},{level:3,title:"Example: Optional IO with Option",slug:"example-optional-io-with-option"},{level:3,title:"Example: Optional IO with Zero-Width Wires",slug:"example-optional-io-with-zero-width-wires"},{level:2,title:"Implicits",slug:"implicits"},{level:3,title:"Implicit Arguments",slug:"implicit-arguments"},{level:3,title:"Example: Implicit Cats",slug:"example-implicit-cats"},{level:3,title:"Example: Implicit Logging",slug:"example-implicit-logging"},{level:3,title:"Implicit Conversions",slug:"implicit-conversions"},{level:3,title:"Example: Implicit Conversion",slug:"example-implicit-conversion"}],createdTime:170972353e4},{title:"2024.03.04-3.3 Interlude: Chisel Standard Library",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3%20Interlude%20Chisel%20Standard%20Library.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3 Interlude Chisel Standard Library.md",key:"v-51674b5d",path:"/Chip/Chip/2024.02.21-Chisel/2024.03.04-3.3%20Interlude%20Chisel%20Standard%20Library.html",headers:[{level:2,title:"Decoupled: A Standard Ready-Valid Interface",slug:"decoupled-a-standard-ready-valid-interface"},{level:3,title:"组件",slug:"组件"},{level:3,title:"数据传输",slug:"数据传输"},{level:3,title:"使用场景",slug:"使用场景"},{level:3,title:"代码示例",slug:"代码示例"},{level:2,title:"Queue",slug:"queue"},{level:2,title:"Arbiter",slug:"arbiter"},{level:2,title:"Misc Function Blocks",slug:"misc-function-blocks"},{level:3,title:"Bitwise Utilities",slug:"bitwise-utilities"},{level:3,title:"PopCount",slug:"popcount"},{level:3,title:"Reverse",slug:"reverse"},{level:3,title:"OneHot encoding utilities",slug:"onehot-encoding-utilities"},{level:3,title:"UIntToOH",slug:"uinttooh"},{level:3,title:"OHToUInt",slug:"ohtouint"},{level:3,title:"MUX",slug:"mux"},{level:3,title:"**PriorityMux**",slug:"prioritymux"},{level:3,title:"OneHot Mux: **Mux1H**",slug:"onehot-mux-mux1h"},{level:3,title:"**Counter**",slug:"counter"}],createdTime:170972353e4},{title:"2024.03.05-3.4 Higher-Order Functions",frontmatter:{},regularPath:"/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4%20Higher-Order%20Functions.html",relativePath:"Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4 Higher-Order Functions.md",key:"v-42a01c36",path:"/Chip/Chip/2024.02.21-Chisel/2024.03.05-3.4%20Higher-Order%20Functions.html",headers:[{level:2,title:"A Tale of Two FIRs",slug:"a-tale-of-two-firs"},{level:2,title:"Functions as Arguments",slug:"functions-as-arguments"},{level:3,title:"Practice in Scala",slug:"practice-in-scala"},{level:3,title:"Example: map",slug:"example-map"},{level:3,title:"Example: **zipWithIndex**",slug:"example-zipwithindex"},{level:3,title:"Example: **reduce**",slug:"example-reduce"},{level:3,title:"Example: **fold**",slug:"example-fold"}],createdTime:170972353e4},{title:"一生一芯计划",frontmatter:{},regularPath:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92.html",relativePath:"Chip/Chip/一生一芯计划.md",key:"v-2f3fb204",path:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92.html",createdTime:170972353e4},{title:"预学习阶段",frontmatter:{},regularPath:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92/%E9%A2%84%E5%AD%A6%E4%B9%A0%E9%98%B6%E6%AE%B5.html",relativePath:"Chip/Chip/一生一芯计划/预学习阶段.md",key:"v-4d37d972",path:"/Chip/Chip/%E4%B8%80%E7%94%9F%E4%B8%80%E8%8A%AF%E8%AE%A1%E5%88%92/%E9%A2%84%E5%AD%A6%E4%B9%A0%E9%98%B6%E6%AE%B5.html",createdTime:170972353e4},{title:"2024.02.22-752.打开转盘锁(BFS)",frontmatter:{},regularPath:"/LeetCode/LeetCode/2024%2002%2022-752%20%E6%89%93%E5%BC%80%E8%BD%AC%E7%9B%98%E9%94%81%EF%BC%88BFS%EF%BC%89%20abab666d7cbf48d2b1656f11166d33f2.html",relativePath:"LeetCode/LeetCode/2024 02 22-752 打开转盘锁(BFS) abab666d7cbf48d2b1656f11166d33f2.md",key:"v-59d1cbe7",path:"/LeetCode/LeetCode/2024%2002%2022-752%20%E6%89%93%E5%BC%80%E8%BD%AC%E7%9B%98%E9%94%81%EF%BC%88BFS%EF%BC%89%20abab666d7cbf48d2b1656f11166d33f2.html",headers:[{level:2,title:"Hint:",slug:"hint"}],createdTime:170972353e4},{title:"SoC Design",frontmatter:{},regularPath:"/Chip/",relativePath:"Chip/README.md",key:"v-5820d42c",path:"/Chip/",headers:[{level:2,title:"一生一芯计划",slug:"一生一芯计划"},{level:2,title:"2023.11.07-Verilog语法",slug:"_2023-11-07-verilog语法"},{level:2,title:"2024.02.21-Chisel",slug:"_2024-02-21-chisel"}],createdTime:170972353e4},{title:"2024.03.05-二叉树",frontmatter:{},regularPath:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab.html",relativePath:"LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab.md",key:"v-604dc25c",path:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab.html",createdTime:170972353e4},{title:"2024.03.05-543.二叉树的直径",frontmatter:{},regularPath:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-543%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84%209db6d046b0954b45b96ca749922a2ece.html",relativePath:"LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-543 二叉树的直径 9db6d046b0954b45b96ca749922a2ece.md",key:"v-0a7098b3",path:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-543%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E7%9B%B4%E5%BE%84%209db6d046b0954b45b96ca749922a2ece.html",createdTime:170972353e4},{title:"2024.03.05-104.二叉树的最大深度",frontmatter:{},regularPath:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-104%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6%20c6649929175d46038db921b552f2a235.html",relativePath:"LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/2024 03 05-104 二叉树的最大深度 c6649929175d46038db921b552f2a235.md",key:"v-179da348",path:"/LeetCode/LeetCode/2024%2003%2005-%E4%BA%8C%E5%8F%89%E6%A0%91%206b922d49986f4faf85bc9106cd12c5ab/2024%2003%2005-104%20%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6%20c6649929175d46038db921b552f2a235.html",createdTime:170972353e4},{title:"LeetCode",frontmatter:{},regularPath:"/LeetCode/",relativePath:"LeetCode/README.md",key:"v-14b38dcc",path:"/LeetCode/",headers:[{level:2,title:"2024.02.22-752.打开转盘锁(BFS)",slug:"_2024-02-22-752-打开转盘锁-bfs"},{level:2,title:"2024.03.05-二叉树",slug:"_2024-03-05-二叉树"}],createdTime:170972353e4},{title:"Helloworld",frontmatter:{},regularPath:"/about/",relativePath:"about/README.md",key:"v-2f1ebe3a",path:"/about/",createdTime:170972353e4},{title:"Home",frontmatter:{home:!0,heroText:"Hero 标题",tagline:"Hero 副标题",actionText:"快速上手 →",actionLink:"/zh/guide/",features:[{title:"简洁至上",details:"以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。"},{title:"Vue驱动",details:"享受 Vue + webpack 的开发体验,在 Markdown 中使用 Vue 组件,同时可以使用 Vue 来开发自定义主题。"},{title:"高性能",details:"VuePress 为每个页面预渲染生成静态的 HTML,同时在页面被加载的时候,将作为 SPA 运行。"}],footer:"MIT Licensed | Copyright © 2018-present Evan You"},regularPath:"/",relativePath:"README.md",key:"v-2832db09",path:"/",createdTime:170972353e4},{title:"daf",frontmatter:{},regularPath:"/test.html",relativePath:"test.md",key:"v-05642c0c",path:"/test.html",headers:[{level:2,title:"fg",slug:"fg"},{level:3,title:"fg",slug:"fg-2"},{level:2,title:"fggds",slug:"fggds"}],createdTime:170972353e4}],themeConfig:{logo:"/assets/img/good.png",nav:[{text:"Home",link:"/"},{text:"LeetCode",items:[{text:"二叉树",items:[{text:"Installation",link:"/language/chinese/"},{text:"xxx",link:"/language/japanese/"}]},{text:"滑动窗口",items:[{text:"Installation",link:"/language/chinese/"},{text:"xxx",link:"/language/japanese/"}]}]},{text:"Chip",items:[{text:"一生一芯",items:[{text:"预学习",link:"/Chip/Chip/一生一芯计划.md"},{text:"B阶段",link:"/language/japanese/"},{text:"A阶段",link:"/language/japanese/"}]},{text:"Chisel",items:[{text:"Bootcamp",link:"/Chip/Chip/2024.02.21-Chisel.md"},{text:"xxx",link:"/language/japanese/"}]},{text:"Verilog",items:[{text:"Basic",link:"/Chip/Chip/2023.11.07-Verilog语法.md"},{text:"xxx",link:"/language/japanese/"}]}]},{text:"External",link:"https://google.com"}],sidebarDepth:2,displayAllHeaders:!1,activeHeaderLinks:!0}};n(234);Wn.component("Badge",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,309))),Wn.component("CodeBlock",()=>Promise.all([n.e(0),n.e(5)]).then(n.bind(null,305))),Wn.component("CodeGroup",()=>Promise.all([n.e(0),n.e(6)]).then(n.bind(null,306)));n(235),n(236),n(237);var Ps=[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({siteData:t,options:e})=>{t.themeConfig.sidebar={"/LeetCode/LeetCode/2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab/":[{title:"2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab",collapsable:!1,sidebarDepth:1,children:["2024 03 05-104 二叉树的最大深度 c6649929175d46038db921b552f2a235","2024 03 05-543 二叉树的直径 9db6d046b0954b45b96ca749922a2ece"]}],"/Chip/Chip/2023.11.07-Verilog语法/":[{title:"2023.11.07-Verilog语法",collapsable:!1,sidebarDepth:1,children:["1.Verilog 基础语法","10.Verilog 多路分支语句","2.Verilog 数值表示","2023.11.15-Vivado","2023.11.16-阻塞与非阻塞赋值","3.Verilog 数据类型","4.Verilog 表达式"]}],"/Chip/Chip/2024.02.21-Chisel/":[{title:"2024 02 21 Chisel",collapsable:!1,sidebarDepth:1,children:["2024.02.21-1 Introduction to Scala","2024.02.23-2.1 First Chisel Module","2024.02.24-2.2 Combinational Logic","2024.02.25-2.3 Control Flow","2024.02.26-2.4 Sequential Logic","2024.02.28-2.5 FIR Filter","2024.02.29-2.6 More on ChiselTest","2024.03.01-3.1 Generators Parameters","2024.03.03-3.2 Generators Collections","2024.03.04-3.3 Interlude Chisel Standard Library","2024.03.05-3.4 Higher-Order Functions"]}],"/LeetCode/LeetCode/":[{title:"Leet Code",collapsable:!1,sidebarDepth:1,children:["2024 02 22-752 打开转盘锁(BFS) abab666d7cbf48d2b1656f11166d33f2","2024 03 05-二叉树 6b922d49986f4faf85bc9106cd12c5ab"]}],"/Chip/Chip/一生一芯计划/":[{title:"一生一芯计划",collapsable:!1,sidebarDepth:1,children:["预学习阶段"]}],"/Chip/Chip/":[{title:"Chip",collapsable:!1,sidebarDepth:1,children:["2023.11.07-Verilog语法","2024.02.21-Chisel","一生一芯计划"]}],"/LeetCode/":[{title:"Leet Code",collapsable:!1,sidebarDepth:1,children:[""]}],"/about/":[{title:"About",collapsable:!1,sidebarDepth:1,children:[""]}],"/Chip/":[{title:"Chip",collapsable:!1,sidebarDepth:1,children:[""]}]}},({Vue:t})=>{const{ignoredElements:e}=t.config;e.every(t=>"/^mjx-/"!==t.toString())&&e.push(/^mjx-/)}],Fs=[];class Ls extends class{constructor(){this.store=new Wn({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Wn.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}{}Object.assign(Ls.prototype,{getPageAsyncComponent:ss,getLayoutAsyncComponent:ls,getAsyncComponent:cs,getVueComponent:us});var Ts={install(t){const e=new Ls;t.$vuepress=e,t.prototype.$vuepress=e}};function Vs(t,e){const n=e.toLowerCase();return t.options.routes.some(t=>t.path.toLowerCase()===n)}var Ds={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return ps("pageKey",e),Wn.component(e)||Wn.component(e,ss(e)),Wn.component(e)?t(e):t("")}},Is={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:["content__"+e.slotKey]},n()[e.slotKey])},Ms={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},Rs=(n(238),n(239),Object(ks.a)(Ms,(function(){var t=this._self._c;return t("span",[t("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[t("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),t("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),t("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),Ns={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Wn.config.productionTip=!1,Wn.use(Ha),Wn.use(Ts),Wn.mixin(function(t,e,n=Wn){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e});Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),i=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),o={};return Object.keys(i).reduce((t,e)=>(e.startsWith("$")&&(t[e]=i[e].get),t),o),{computed:o}}(t=>class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:t}=this.$page.frontmatter;return"string"==typeof t&&t}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Wn.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(t.hash)}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Vs(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Vs(t,n)?r(n):r()}else r();else{const n=e.path+"/",i=e.path+".html";Vs(t,i)?r(i):Vs(t,n)?r(n):r()}})}(n);const r={};try{await Promise.all(Ps.filter(t=>"function"==typeof t).map(e=>e({Vue:Wn,options:r,router:n,siteData:js,isServer:t})))}catch(t){console.error(t)}return{app:new Wn(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("RouterView",{ref:"layout"}),t("div",{class:"global-ui"},Fs.map(e=>t(e)))])})),router:n}}(!1).then(({app:t,router:e})=>{e.onReady(()=>{t.$mount("#app")})})}]); \ No newline at end of file diff --git a/assets/js/vendors~docsearch.9b93fcb7.js b/assets/js/vendors~docsearch.9b93fcb7.js new file mode 100644 index 0000000..9ce88d7 --- /dev/null +++ b/assets/js/vendors~docsearch.9b93fcb7.js @@ -0,0 +1,3 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{302:function(t,e,n){ +/*! docsearch 2.6.3 | © Algolia | github.com/algolia/docsearch */ +var r;"undefined"!=typeof self&&self,r=function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:r})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=22)}([function(t,e,n){"use strict";var r,i=n(1);function s(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,r){t&&(n.isArray(t)?e[r]=[].concat(t):n.isObject(t)&&(e[r]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(r,i){n&&(n=e.call(null,r,i,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(r,i){if(e.call(null,r,i,t))return n=!0,!1})),n):n},getUniqueId:(r=0,function(){return r++}),templatify:function(t){if(this.isFunction(t))return t;var e=i.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return(n?"":".")+t+e},escapeHighlightedString:function(t,e,n){e=e||"";var r=document.createElement("div");r.appendChild(document.createTextNode(e)),n=n||"";var i=document.createElement("div");i.appendChild(document.createTextNode(n));var o=document.createElement("div");return o.appendChild(document.createTextNode(t)),o.innerHTML.replace(RegExp(s(r.innerHTML),"g"),e).replace(RegExp(s(i.innerHTML),"g"),n)}}},function(t,e,n){"use strict";t.exports={element:null}},function(t,e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString;t.exports=function(t,e,i){if("[object Function]"!==r.call(e))throw new TypeError("iterator must be a function");var s=t.length;if(s===+s)for(var o=0;o was loaded but did not call our provided callback"),JSONPScriptError:s("JSONPScriptError"," + + diff --git a/test.html b/test.html new file mode 100644 index 0000000..c2c8720 --- /dev/null +++ b/test.html @@ -0,0 +1,90 @@ + + + + + + daf | Hello World --from OutisLi + + + + + + + + +
    + + +