diff --git a/.pic/Basic Verilog structures/concatenation/fig_01.drawio.png b/.pic/Basic Verilog structures/concatenation/fig_01.drawio.png
deleted file mode 100644
index c3265e4..0000000
Binary files a/.pic/Basic Verilog structures/concatenation/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/concatenation/fig_01.drawio.svg b/.pic/Basic Verilog structures/concatenation/fig_01.drawio.svg
new file mode 100644
index 0000000..2566845
--- /dev/null
+++ b/.pic/Basic Verilog structures/concatenation/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/concatenation/fig_02.drawio.png b/.pic/Basic Verilog structures/concatenation/fig_02.drawio.png
deleted file mode 100644
index d8cc32b..0000000
Binary files a/.pic/Basic Verilog structures/concatenation/fig_02.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/concatenation/fig_02.drawio.svg b/.pic/Basic Verilog structures/concatenation/fig_02.drawio.svg
new file mode 100644
index 0000000..403c7f4
--- /dev/null
+++ b/.pic/Basic Verilog structures/concatenation/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/concatenation/fig_03.drawio.png b/.pic/Basic Verilog structures/concatenation/fig_03.drawio.png
deleted file mode 100644
index 797586f..0000000
Binary files a/.pic/Basic Verilog structures/concatenation/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/concatenation/fig_03.drawio.svg b/.pic/Basic Verilog structures/concatenation/fig_03.drawio.svg
new file mode 100644
index 0000000..c21b67b
--- /dev/null
+++ b/.pic/Basic Verilog structures/concatenation/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_01.drawio.png b/.pic/Basic Verilog structures/controllers/fig_01.drawio.png
deleted file mode 100644
index 15147c9..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_01.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_01.drawio.svg
new file mode 100644
index 0000000..ec25e75
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_02.drawio.png b/.pic/Basic Verilog structures/controllers/fig_02.drawio.png
deleted file mode 100644
index 70e3035..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_02.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_02.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_02.drawio.svg
new file mode 100644
index 0000000..17d1982
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_03.drawio.png b/.pic/Basic Verilog structures/controllers/fig_03.drawio.png
deleted file mode 100644
index 34c894a..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_03.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_03.drawio.svg
new file mode 100644
index 0000000..7866ceb
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_04.drawio.png b/.pic/Basic Verilog structures/controllers/fig_04.drawio.png
deleted file mode 100644
index 387222f..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_04.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_04.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_04.drawio.svg
new file mode 100644
index 0000000..ad97fc2
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_04.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_05.drawio.png b/.pic/Basic Verilog structures/controllers/fig_05.drawio.png
deleted file mode 100644
index 976ea25..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_05.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_05.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_05.drawio.svg
new file mode 100644
index 0000000..384b67c
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_05.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_06.drawio.png b/.pic/Basic Verilog structures/controllers/fig_06.drawio.png
deleted file mode 100644
index 8cc9fa9..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_06.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_06.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_06.drawio.svg
new file mode 100644
index 0000000..622c866
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_06.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_07.drawio.png b/.pic/Basic Verilog structures/controllers/fig_07.drawio.png
deleted file mode 100644
index 569000b..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_07.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_07.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_07.drawio.svg
new file mode 100644
index 0000000..aeb594a
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_07.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_08.drawio.png b/.pic/Basic Verilog structures/controllers/fig_08.drawio.png
deleted file mode 100644
index 919cd95..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_08.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_08.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_08.drawio.svg
new file mode 100644
index 0000000..9a1f581
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_08.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/controllers/fig_09.drawio.png b/.pic/Basic Verilog structures/controllers/fig_09.drawio.png
deleted file mode 100644
index 2b45098..0000000
Binary files a/.pic/Basic Verilog structures/controllers/fig_09.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/controllers/fig_09.drawio.svg b/.pic/Basic Verilog structures/controllers/fig_09.drawio.svg
new file mode 100644
index 0000000..6b03acb
--- /dev/null
+++ b/.pic/Basic Verilog structures/controllers/fig_09.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_01.drawio.png b/.pic/Basic Verilog structures/modules/fig_01.drawio.png
deleted file mode 100644
index ab3deae..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_01.drawio.svg b/.pic/Basic Verilog structures/modules/fig_01.drawio.svg
new file mode 100644
index 0000000..c9d4ecd
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_02.drawio.png b/.pic/Basic Verilog structures/modules/fig_02.drawio.png
deleted file mode 100644
index 82870c5..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_02.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_02.drawio.svg b/.pic/Basic Verilog structures/modules/fig_02.drawio.svg
new file mode 100644
index 0000000..094490a
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_03.drawio.png b/.pic/Basic Verilog structures/modules/fig_03.drawio.png
deleted file mode 100644
index f736598..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_03.drawio.svg b/.pic/Basic Verilog structures/modules/fig_03.drawio.svg
new file mode 100644
index 0000000..8f92373
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_04.drawio.png b/.pic/Basic Verilog structures/modules/fig_04.drawio.png
deleted file mode 100644
index b7033f5..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_04.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_04.drawio.svg b/.pic/Basic Verilog structures/modules/fig_04.drawio.svg
new file mode 100644
index 0000000..6cf1471
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_04.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_05.drawio.png b/.pic/Basic Verilog structures/modules/fig_05.drawio.png
deleted file mode 100644
index bbe563e..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_05.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_05.drawio.svg b/.pic/Basic Verilog structures/modules/fig_05.drawio.svg
new file mode 100644
index 0000000..fcf374a
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_05.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_06.drawio.png b/.pic/Basic Verilog structures/modules/fig_06.drawio.png
deleted file mode 100644
index 3423950..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_06.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_06.drawio.svg b/.pic/Basic Verilog structures/modules/fig_06.drawio.svg
new file mode 100644
index 0000000..f38e193
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_06.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_07.drawio.png b/.pic/Basic Verilog structures/modules/fig_07.drawio.png
deleted file mode 100644
index bd89b94..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_07.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_07.drawio.svg b/.pic/Basic Verilog structures/modules/fig_07.drawio.svg
new file mode 100644
index 0000000..cd878d3
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_07.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_08.drawio.png b/.pic/Basic Verilog structures/modules/fig_08.drawio.png
deleted file mode 100644
index 5b0bbd5..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_08.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_08.drawio.svg b/.pic/Basic Verilog structures/modules/fig_08.drawio.svg
new file mode 100644
index 0000000..a55282c
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_08.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_09.drawio.png b/.pic/Basic Verilog structures/modules/fig_09.drawio.png
deleted file mode 100644
index 35df915..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_09.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_09.drawio.svg b/.pic/Basic Verilog structures/modules/fig_09.drawio.svg
new file mode 100644
index 0000000..61ecc17
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_09.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/modules/fig_10.drawio.png b/.pic/Basic Verilog structures/modules/fig_10.drawio.png
deleted file mode 100644
index 362fdf9..0000000
Binary files a/.pic/Basic Verilog structures/modules/fig_10.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/modules/fig_10.drawio.svg b/.pic/Basic Verilog structures/modules/fig_10.drawio.svg
new file mode 100644
index 0000000..501226b
--- /dev/null
+++ b/.pic/Basic Verilog structures/modules/fig_10.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_01.drawio.png b/.pic/Basic Verilog structures/multiplexors/fig_01.drawio.png
deleted file mode 100644
index e81db96..0000000
Binary files a/.pic/Basic Verilog structures/multiplexors/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_01.drawio.svg b/.pic/Basic Verilog structures/multiplexors/fig_01.drawio.svg
new file mode 100644
index 0000000..b229d56
--- /dev/null
+++ b/.pic/Basic Verilog structures/multiplexors/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_02.drawio.png b/.pic/Basic Verilog structures/multiplexors/fig_02.drawio.png
deleted file mode 100644
index fcebdc1..0000000
Binary files a/.pic/Basic Verilog structures/multiplexors/fig_02.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_02.drawio.svg b/.pic/Basic Verilog structures/multiplexors/fig_02.drawio.svg
new file mode 100644
index 0000000..199f1a1
--- /dev/null
+++ b/.pic/Basic Verilog structures/multiplexors/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_03.drawio.png b/.pic/Basic Verilog structures/multiplexors/fig_03.drawio.png
deleted file mode 100644
index f8ed3da..0000000
Binary files a/.pic/Basic Verilog structures/multiplexors/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_03.drawio.svg b/.pic/Basic Verilog structures/multiplexors/fig_03.drawio.svg
new file mode 100644
index 0000000..e345093
--- /dev/null
+++ b/.pic/Basic Verilog structures/multiplexors/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_04.drawio.png b/.pic/Basic Verilog structures/multiplexors/fig_04.drawio.png
deleted file mode 100644
index 6154d6c..0000000
Binary files a/.pic/Basic Verilog structures/multiplexors/fig_04.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_04.drawio.svg b/.pic/Basic Verilog structures/multiplexors/fig_04.drawio.svg
new file mode 100644
index 0000000..b7da9d8
--- /dev/null
+++ b/.pic/Basic Verilog structures/multiplexors/fig_04.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_05.drawio.png b/.pic/Basic Verilog structures/multiplexors/fig_05.drawio.png
deleted file mode 100644
index 176697f..0000000
Binary files a/.pic/Basic Verilog structures/multiplexors/fig_05.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/multiplexors/fig_05.drawio.svg b/.pic/Basic Verilog structures/multiplexors/fig_05.drawio.svg
new file mode 100644
index 0000000..688aa58
--- /dev/null
+++ b/.pic/Basic Verilog structures/multiplexors/fig_05.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/registers/fig_01.drawio.png b/.pic/Basic Verilog structures/registers/fig_01.drawio.png
deleted file mode 100644
index bf1e368..0000000
Binary files a/.pic/Basic Verilog structures/registers/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/registers/fig_01.drawio.svg b/.pic/Basic Verilog structures/registers/fig_01.drawio.svg
new file mode 100644
index 0000000..76cda86
--- /dev/null
+++ b/.pic/Basic Verilog structures/registers/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/registers/fig_02.drawio.png b/.pic/Basic Verilog structures/registers/fig_02.drawio.png
deleted file mode 100644
index a65e24d..0000000
Binary files a/.pic/Basic Verilog structures/registers/fig_02.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/registers/fig_02.drawio.svg b/.pic/Basic Verilog structures/registers/fig_02.drawio.svg
new file mode 100644
index 0000000..69e384f
--- /dev/null
+++ b/.pic/Basic Verilog structures/registers/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/registers/fig_03.drawio.png b/.pic/Basic Verilog structures/registers/fig_03.drawio.png
deleted file mode 100644
index 4a3aad3..0000000
Binary files a/.pic/Basic Verilog structures/registers/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/registers/fig_03.drawio.svg b/.pic/Basic Verilog structures/registers/fig_03.drawio.svg
new file mode 100644
index 0000000..484049e
--- /dev/null
+++ b/.pic/Basic Verilog structures/registers/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/registers/fig_04.drawio.png b/.pic/Basic Verilog structures/registers/fig_04.drawio.png
deleted file mode 100644
index eef8ade..0000000
Binary files a/.pic/Basic Verilog structures/registers/fig_04.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/registers/fig_04.drawio.svg b/.pic/Basic Verilog structures/registers/fig_04.drawio.svg
new file mode 100644
index 0000000..5785ae0
--- /dev/null
+++ b/.pic/Basic Verilog structures/registers/fig_04.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/registers/fig_05.drawio.png b/.pic/Basic Verilog structures/registers/fig_05.drawio.png
deleted file mode 100644
index 324b2bf..0000000
Binary files a/.pic/Basic Verilog structures/registers/fig_05.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/registers/fig_05.drawio.svg b/.pic/Basic Verilog structures/registers/fig_05.drawio.svg
new file mode 100644
index 0000000..6e68c28
--- /dev/null
+++ b/.pic/Basic Verilog structures/registers/fig_05.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/registers/fig_06.drawio.png b/.pic/Basic Verilog structures/registers/fig_06.drawio.png
deleted file mode 100644
index c3eedf9..0000000
Binary files a/.pic/Basic Verilog structures/registers/fig_06.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/registers/fig_06.drawio.svg b/.pic/Basic Verilog structures/registers/fig_06.drawio.svg
new file mode 100644
index 0000000..db77663
--- /dev/null
+++ b/.pic/Basic Verilog structures/registers/fig_06.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Basic Verilog structures/registers/fig_07.drawio.png b/.pic/Basic Verilog structures/registers/fig_07.drawio.png
deleted file mode 100644
index 7e8cd5b..0000000
Binary files a/.pic/Basic Verilog structures/registers/fig_07.drawio.png and /dev/null differ
diff --git a/.pic/Basic Verilog structures/registers/fig_07.drawio.svg b/.pic/Basic Verilog structures/registers/fig_07.drawio.svg
new file mode 100644
index 0000000..ce64e12
--- /dev/null
+++ b/.pic/Basic Verilog structures/registers/fig_07.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/FPGA_and_gate_transistor.drawio.png b/.pic/Introduction/How FPGA works/FPGA_and_gate_transistor.drawio.png
deleted file mode 100644
index 8839a8e..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_and_gate_transistor.drawio.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_ang_gate.png b/.pic/Introduction/How FPGA works/FPGA_ang_gate.png
deleted file mode 100644
index e7a738d..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_ang_gate.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_d_flip_flop.png b/.pic/Introduction/How FPGA works/FPGA_d_flip_flop.png
deleted file mode 100644
index 22e250b..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_d_flip_flop.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_lut_scheme.drawio.png b/.pic/Introduction/How FPGA works/FPGA_lut_scheme.drawio.png
deleted file mode 100644
index 673a790..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_lut_scheme.drawio.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_initial.drawio.png b/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_initial.drawio.png
deleted file mode 100644
index 9ac6159..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_initial.drawio.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_output.drawio.png b/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_output.drawio.png
deleted file mode 100644
index faeee8e..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_output.drawio.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_path.drawio.png b/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_path.drawio.png
deleted file mode 100644
index b84466b..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_mux6in1_onehot_path.drawio.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_mux_symbol.png b/.pic/Introduction/How FPGA works/FPGA_mux_symbol.png
deleted file mode 100644
index 768f5c7..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_mux_symbol.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_not_gate.png b/.pic/Introduction/How FPGA works/FPGA_not_gate.png
deleted file mode 100644
index 74d9371..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_not_gate.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_or_gate.png b/.pic/Introduction/How FPGA works/FPGA_or_gate.png
deleted file mode 100644
index 3af577b..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_or_gate.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_or_gate_tree.drawio.png b/.pic/Introduction/How FPGA works/FPGA_or_gate_tree.drawio.png
deleted file mode 100644
index d4c7d0e..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_or_gate_tree.drawio.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/FPGA_xor_gate.png b/.pic/Introduction/How FPGA works/FPGA_xor_gate.png
deleted file mode 100644
index 83fe29b..0000000
Binary files a/.pic/Introduction/How FPGA works/FPGA_xor_gate.png and /dev/null differ
diff --git a/.pic/Introduction/How FPGA works/fig_01.drawio.svg b/.pic/Introduction/How FPGA works/fig_01.drawio.svg
new file mode 100644
index 0000000..9f7bd12
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_02.drawio.svg b/.pic/Introduction/How FPGA works/fig_02.drawio.svg
new file mode 100644
index 0000000..289f5f7
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_03.drawio.svg b/.pic/Introduction/How FPGA works/fig_03.drawio.svg
new file mode 100644
index 0000000..45df624
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_04.drawio.svg b/.pic/Introduction/How FPGA works/fig_04.drawio.svg
new file mode 100644
index 0000000..2c1d8e4
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_04.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_05.drawio.svg b/.pic/Introduction/How FPGA works/fig_05.drawio.svg
new file mode 100644
index 0000000..3d4408f
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_05.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_06.drawio.svg b/.pic/Introduction/How FPGA works/fig_06.drawio.svg
new file mode 100644
index 0000000..e76db74
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_06.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_07.drawio.svg b/.pic/Introduction/How FPGA works/fig_07.drawio.svg
new file mode 100644
index 0000000..b101b85
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_07.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_08.drawio.svg b/.pic/Introduction/How FPGA works/fig_08.drawio.svg
new file mode 100644
index 0000000..7f3756b
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_08.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_09.drawio.svg b/.pic/Introduction/How FPGA works/fig_09.drawio.svg
new file mode 100644
index 0000000..48fa843
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_09.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_10.drawio.svg b/.pic/Introduction/How FPGA works/fig_10.drawio.svg
new file mode 100644
index 0000000..3e2524b
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_10.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_11.drawio.svg b/.pic/Introduction/How FPGA works/fig_11.drawio.svg
new file mode 100644
index 0000000..000b08a
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_11.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/fig_12.drawio.svg b/.pic/Introduction/How FPGA works/fig_12.drawio.svg
new file mode 100644
index 0000000..97e07ac
--- /dev/null
+++ b/.pic/Introduction/How FPGA works/fig_12.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/How FPGA works/FPGA_logic_cell.png b/.pic/Introduction/How FPGA works/fig_15.png
similarity index 100%
rename from .pic/Introduction/How FPGA works/FPGA_logic_cell.png
rename to .pic/Introduction/How FPGA works/fig_15.png
diff --git a/.pic/Labs/lab_01_adder/column_add_bin.drawio.png b/.pic/Labs/lab_01_adder/column_add_bin.drawio.png
deleted file mode 100644
index a96bb2d..0000000
Binary files a/.pic/Labs/lab_01_adder/column_add_bin.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/column_add_bin.drawio.svg b/.pic/Labs/lab_01_adder/column_add_bin.drawio.svg
new file mode 100644
index 0000000..f8f2e28
--- /dev/null
+++ b/.pic/Labs/lab_01_adder/column_add_bin.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_01_adder/column_add_bin_transparent.drawio.png b/.pic/Labs/lab_01_adder/column_add_bin_transparent.drawio.png
deleted file mode 100644
index 8b13979..0000000
Binary files a/.pic/Labs/lab_01_adder/column_add_bin_transparent.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/column_add_dec.drawio.png b/.pic/Labs/lab_01_adder/column_add_dec.drawio.png
deleted file mode 100644
index 26ca608..0000000
Binary files a/.pic/Labs/lab_01_adder/column_add_dec.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/column_add_dec.drawio.svg b/.pic/Labs/lab_01_adder/column_add_dec.drawio.svg
new file mode 100644
index 0000000..f7abc00
--- /dev/null
+++ b/.pic/Labs/lab_01_adder/column_add_dec.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_01_adder/column_add_dec_transparent.drawio.png b/.pic/Labs/lab_01_adder/column_add_dec_transparent.drawio.png
deleted file mode 100644
index 070eac6..0000000
Binary files a/.pic/Labs/lab_01_adder/column_add_dec_transparent.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/fig_01.drawio.png b/.pic/Labs/lab_01_adder/fig_01.drawio.png
deleted file mode 100644
index b91e3f9..0000000
Binary files a/.pic/Labs/lab_01_adder/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/fig_01.drawio.svg b/.pic/Labs/lab_01_adder/fig_01.drawio.svg
new file mode 100644
index 0000000..6d6898c
--- /dev/null
+++ b/.pic/Labs/lab_01_adder/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_01_adder/fig_01_transparent.drawio.png b/.pic/Labs/lab_01_adder/fig_01_transparent.drawio.png
deleted file mode 100644
index 59d3a8f..0000000
Binary files a/.pic/Labs/lab_01_adder/fig_01_transparent.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/fig_02.drawio.png b/.pic/Labs/lab_01_adder/fig_02.drawio.png
deleted file mode 100644
index 4f29471..0000000
Binary files a/.pic/Labs/lab_01_adder/fig_02.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/fig_02.drawio.svg b/.pic/Labs/lab_01_adder/fig_02.drawio.svg
new file mode 100644
index 0000000..74aa0c2
--- /dev/null
+++ b/.pic/Labs/lab_01_adder/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_01_adder/fig_02_transparent.drawio.png b/.pic/Labs/lab_01_adder/fig_02_transparent.drawio.png
deleted file mode 100644
index 1b5d874..0000000
Binary files a/.pic/Labs/lab_01_adder/fig_02_transparent.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/fig_05.drawio.png b/.pic/Labs/lab_01_adder/fig_05.drawio.png
deleted file mode 100644
index c8ea7f6..0000000
Binary files a/.pic/Labs/lab_01_adder/fig_05.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/fig_05.drawio.svg b/.pic/Labs/lab_01_adder/fig_05.drawio.svg
new file mode 100644
index 0000000..ba9c229
--- /dev/null
+++ b/.pic/Labs/lab_01_adder/fig_05.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_01_adder/fig_05_transparent.drawio.png b/.pic/Labs/lab_01_adder/fig_05_transparent.drawio.png
deleted file mode 100644
index 92d6dcc..0000000
Binary files a/.pic/Labs/lab_01_adder/fig_05_transparent.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_01_adder/fig_06_transparent.drawio.png b/.pic/Labs/lab_01_adder/fig_06_transparent.drawio.png
deleted file mode 100644
index a16908d..0000000
Binary files a/.pic/Labs/lab_01_adder/fig_06_transparent.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_02_alu/fig_01.drawio.png b/.pic/Labs/lab_02_alu/fig_01.drawio.png
deleted file mode 100644
index 7bc8a0d..0000000
Binary files a/.pic/Labs/lab_02_alu/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_02_alu/fig_01.drawio.svg b/.pic/Labs/lab_02_alu/fig_01.drawio.svg
new file mode 100644
index 0000000..5de4675
--- /dev/null
+++ b/.pic/Labs/lab_02_alu/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_02_alu/fig_02.drawio.png b/.pic/Labs/lab_02_alu/fig_02.drawio.png
deleted file mode 100644
index 8e4e59a..0000000
Binary files a/.pic/Labs/lab_02_alu/fig_02.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_02_alu/fig_02.drawio.svg b/.pic/Labs/lab_02_alu/fig_02.drawio.svg
new file mode 100644
index 0000000..fdaff3a
--- /dev/null
+++ b/.pic/Labs/lab_02_alu/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_02_alu/fig_03.drawio.png b/.pic/Labs/lab_02_alu/fig_03.drawio.png
deleted file mode 100644
index 5010a23..0000000
Binary files a/.pic/Labs/lab_02_alu/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_02_alu/fig_03.drawio.svg b/.pic/Labs/lab_02_alu/fig_03.drawio.svg
new file mode 100644
index 0000000..6a0dcbf
--- /dev/null
+++ b/.pic/Labs/lab_02_alu/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_03_memory/fig_01.drawio.png b/.pic/Labs/lab_03_memory/fig_01.drawio.png
deleted file mode 100644
index b900d6b..0000000
Binary files a/.pic/Labs/lab_03_memory/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_03_memory/fig_01.drawio.svg b/.pic/Labs/lab_03_memory/fig_01.drawio.svg
new file mode 100644
index 0000000..ec715f4
--- /dev/null
+++ b/.pic/Labs/lab_03_memory/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_03_memory/fig_03.drawio.png b/.pic/Labs/lab_03_memory/fig_03.drawio.png
deleted file mode 100644
index 7090b81..0000000
Binary files a/.pic/Labs/lab_03_memory/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_03_memory/fig_03.drawio.svg b/.pic/Labs/lab_03_memory/fig_03.drawio.svg
new file mode 100644
index 0000000..2bf54c5
--- /dev/null
+++ b/.pic/Labs/lab_03_memory/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_06_dp/fig_01.drawio.png b/.pic/Labs/lab_06_dp/fig_01.drawio.png
deleted file mode 100644
index 2c31ae2..0000000
Binary files a/.pic/Labs/lab_06_dp/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_06_dp/fig_01.drawio.svg b/.pic/Labs/lab_06_dp/fig_01.drawio.svg
new file mode 100644
index 0000000..d3e2e97
--- /dev/null
+++ b/.pic/Labs/lab_06_dp/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_06_dp/fig_02.drawio.png b/.pic/Labs/lab_06_dp/fig_02.drawio.png
deleted file mode 100644
index 872b971..0000000
Binary files a/.pic/Labs/lab_06_dp/fig_02.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_06_dp/fig_02.drawio.svg b/.pic/Labs/lab_06_dp/fig_02.drawio.svg
new file mode 100644
index 0000000..2810694
--- /dev/null
+++ b/.pic/Labs/lab_06_dp/fig_02.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_08_lsu/fig_01.drawio.png b/.pic/Labs/lab_08_lsu/fig_01.drawio.png
deleted file mode 100644
index 8da5b42..0000000
Binary files a/.pic/Labs/lab_08_lsu/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_08_lsu/fig_01.drawio.svg b/.pic/Labs/lab_08_lsu/fig_01.drawio.svg
new file mode 100644
index 0000000..2af4e1b
--- /dev/null
+++ b/.pic/Labs/lab_08_lsu/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_08_lsu/fig_03.drawio.png b/.pic/Labs/lab_08_lsu/fig_03.drawio.png
deleted file mode 100644
index 4931d74..0000000
Binary files a/.pic/Labs/lab_08_lsu/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_08_lsu/fig_03.drawio.svg b/.pic/Labs/lab_08_lsu/fig_03.drawio.svg
new file mode 100644
index 0000000..c5e2545
--- /dev/null
+++ b/.pic/Labs/lab_08_lsu/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_10_irq/fig_03.drawio.png b/.pic/Labs/lab_10_irq/fig_03.drawio.png
deleted file mode 100644
index 781d995..0000000
Binary files a/.pic/Labs/lab_10_irq/fig_03.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_10_irq/fig_03.drawio.svg b/.pic/Labs/lab_10_irq/fig_03.drawio.svg
new file mode 100644
index 0000000..0116964
--- /dev/null
+++ b/.pic/Labs/lab_10_irq/fig_03.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_10_irq/fig_04.drawio.png b/.pic/Labs/lab_10_irq/fig_04.drawio.png
deleted file mode 100644
index c837bca..0000000
Binary files a/.pic/Labs/lab_10_irq/fig_04.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_10_irq/fig_04.drawio.svg b/.pic/Labs/lab_10_irq/fig_04.drawio.svg
new file mode 100644
index 0000000..0c19a48
--- /dev/null
+++ b/.pic/Labs/lab_10_irq/fig_04.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_10_irq/fig_05.drawio.png b/.pic/Labs/lab_10_irq/fig_05.drawio.png
deleted file mode 100644
index 40b67f0..0000000
Binary files a/.pic/Labs/lab_10_irq/fig_05.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_10_irq/fig_05.drawio.svg b/.pic/Labs/lab_10_irq/fig_05.drawio.svg
new file mode 100644
index 0000000..fd13990
--- /dev/null
+++ b/.pic/Labs/lab_10_irq/fig_05.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_11_irq_integration/fig_01.drawio.png b/.pic/Labs/lab_11_irq_integration/fig_01.drawio.png
deleted file mode 100644
index 7ce3ba2..0000000
Binary files a/.pic/Labs/lab_11_irq_integration/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_11_irq_integration/fig_01.drawio.svg b/.pic/Labs/lab_11_irq_integration/fig_01.drawio.svg
new file mode 100644
index 0000000..f8b9483
--- /dev/null
+++ b/.pic/Labs/lab_11_irq_integration/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Labs/lab_12_periph/fig_01.drawio.png b/.pic/Labs/lab_12_periph/fig_01.drawio.png
deleted file mode 100644
index 01fc77f..0000000
Binary files a/.pic/Labs/lab_12_periph/fig_01.drawio.png and /dev/null differ
diff --git a/.pic/Labs/lab_12_periph/fig_01.drawio.svg b/.pic/Labs/lab_12_periph/fig_01.drawio.svg
new file mode 100644
index 0000000..85dde01
--- /dev/null
+++ b/.pic/Labs/lab_12_periph/fig_01.drawio.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.pic/Introduction/About FPGA/EP2.jpg b/.pic/Other/About FPGA/EP2.jpg
similarity index 100%
rename from .pic/Introduction/About FPGA/EP2.jpg
rename to .pic/Other/About FPGA/EP2.jpg
diff --git a/.pic/Introduction/About FPGA/TinyFPGA.jpg b/.pic/Other/About FPGA/TinyFPGA.jpg
similarity index 100%
rename from .pic/Introduction/About FPGA/TinyFPGA.jpg
rename to .pic/Other/About FPGA/TinyFPGA.jpg
diff --git a/.pic/Introduction/About FPGA/beatles.jpg b/.pic/Other/About FPGA/beatles.jpg
similarity index 100%
rename from .pic/Introduction/About FPGA/beatles.jpg
rename to .pic/Other/About FPGA/beatles.jpg
diff --git a/.pic/Introduction/About FPGA/cyclone4.jpg b/.pic/Other/About FPGA/cyclone4.jpg
similarity index 100%
rename from .pic/Introduction/About FPGA/cyclone4.jpg
rename to .pic/Other/About FPGA/cyclone4.jpg
diff --git a/.pic/Introduction/About FPGA/ice.jpg b/.pic/Other/About FPGA/ice.jpg
similarity index 100%
rename from .pic/Introduction/About FPGA/ice.jpg
rename to .pic/Other/About FPGA/ice.jpg
diff --git a/Basic Verilog structures/Concatenation.md b/Basic Verilog structures/Concatenation.md
index 20003e9..8e67025 100644
--- a/Basic Verilog structures/Concatenation.md
+++ b/Basic Verilog structures/Concatenation.md
@@ -6,7 +6,7 @@
Предположим, у нас есть следующий набор сигналов:
-
+
```SystemVerilog
@@ -25,7 +25,7 @@ logic [5:0] e;
- на его следующие 2 бита подавались биты `[4:3]` сигнала `c`
- на младшие 2 бита подавался сигнал `d`
-
+
Это можно сделать путем 4 непрерывных присваиваний:
@@ -58,7 +58,7 @@ assign e = {a, b, c[4:3], d};
Кроме того, возможна и обратная ситуация. Предположим, мы хотим подать отдельные биты сигнала `e` на различные провода:
-
+
```SystemVerilog
logic a;
@@ -105,4 +105,3 @@ logic [7:0] e;
assign e = { {3{c[4:3]}}, a, b};
```
-
diff --git a/Basic Verilog structures/Controllers.md b/Basic Verilog structures/Controllers.md
index ea2d299..77d1b47 100644
--- a/Basic Verilog structures/Controllers.md
+++ b/Basic Verilog structures/Controllers.md
@@ -86,19 +86,19 @@ endmodule
Для начала, добавим на структурную схему входы и выходы модуля:
-
+
В первую очередь, спецификация вводит понятия **запрос на чтение** и **запрос на запись**. Создадим вспомогательные провода, которые будут сигнализировать о том, что произошел **запрос на чтение** или **запрос на запись**:
-
+
Далее, спецификация накладывает ограничение на допустимые адреса и значения. Поэтому создадим вспомогательные сигналы, сигнализирующие о том, что текущий адрес соответствует одному из регистров контроллера, а данные для записи соответствуют диапазону допустимых значений этих регистров:
-
+
Теперь, когда подготовительные работы выполнены, начнем с реализации сброса этого контроллера. Сброс может произойти в двух случаях: когда `rst_i == 1` либо же в случае **запроса на запись** единицы по адресу `0x24`. Создадим вспомогательный провод `rst`, который будет равен единице в случае, если произойдет любое из этих событий. Этот сигнал будет сбрасывать все созданные в данном модуле регистры.
-
+
Продолжим описание контроллера, создав первый из **архитектурных регистров** — `led_val`. Запись в этот регистр возможна только в случае выполнения трех условий:
@@ -108,7 +108,7 @@ endmodule
Создадим вспомогательный сигнал `val_en`, который будет равен единице только в случае выполнения этих трех условий:
-
+
Теперь реализация регистра `lev_val` становится совершенно тривиальной задачей, ведь у нас есть:
@@ -116,11 +116,11 @@ endmodule
* сигнал разрешения записи в регистр `val_en`;
* сигнал данных для записи в регистр `write_data_i`(из которого мы будем брать только младшие 16 бит данных).
-
+
Аналогичным образом реализуем еще один **архитектурный регистр** `led_mode`:
-
+
Два этих регистра должны управлять поведением выходного сигнала `led_o` следующим образом:
@@ -140,7 +140,7 @@ endmodule
* счетчик досчитал до 20 миллионов (`cntr >= 32'd20_000_000`);
* в остальных ситуациях, счетчик инкрементирует свое значение.
-
+
Последним этапом описания контроллера будет добавление логики управления выходным сигналом `read_data_o`.
@@ -154,4 +154,4 @@ endmodule
Таким образом, итоговая схема примет вид:
-
+
diff --git a/Basic Verilog structures/Modules.md b/Basic Verilog structures/Modules.md
index 1e5b0aa..38314b2 100644
--- a/Basic Verilog structures/Modules.md
+++ b/Basic Verilog structures/Modules.md
@@ -10,7 +10,7 @@
Определим наш модуль:
-
+
```SystemVerilog
module
@@ -21,7 +21,7 @@ endmodule
У всякого модуля должно быть название. Назовём его `box`. В круглых скобках пишутся имена портов, их направление и типы. Если модуль не имеет ни входов, ни выходов, внутри скобок ничего не пишется. После них всегда ставится точка с запятой.
-
+
```SystemVerilog
module box();
@@ -32,7 +32,7 @@ endmodule
Модуль без входов и выходов (портов) — это просто коробка, которая никак не взаимодействует с внешним миром. Подключим к нему два входных сигнала `a, b` и один выходной `q`. Для объявления портов, необходимо указать направление порта (вход это или выход), и тип используемого сигнала. В рамках данного курса лабораторных работ в качестве типа и входов и выходов будет использоваться тип `logic`, о котором будет рассказано чуть позже.
-
+
```SystemVerilog
module box(
@@ -47,7 +47,7 @@ endmodule
Внутри модуля могут быть объявления сигналов, параметров, констант и т.п., о которых другой модуль не узнает. Объявим внутри модуля `box` провод `c`.
-
+
```SystemVerilog
module box(
@@ -66,7 +66,7 @@ endmodule
Подключим провод `c` ко входу `a`. Для этого используется конструкция `assign c = a;`. Такая конструкция называется **непрерывным присваиванием**. Если очень сильно упростить, то непрерывное присваивание схоже со спайкой двух проводов. После подобного присваивания, провод `c` всегда будет иметь то же значение, что и `a` — как только входной сигнал `a` изменит свое значение, внутренний провод `c` также изменит свое значение (проводу `c` будет **непрерывно присваиваться** значение входа `a`).
-
+
```SystemVerilog
module box(
@@ -91,7 +91,7 @@ endmodule
К примеру, мы можем присвоить проводу `с` значение выхода логического вентиля. Пусть нам нужно, чтобы к сигналу `c` был подключен результат операции `a ИЛИ b`.
-
+
Такую схему можно реализовать следующим описанием:
@@ -112,7 +112,7 @@ endmodule
Пусть в схеме имеется ещё один логический вентиль - Исключающее ИЛИ. На него подаётся результат операции `a ИЛИ b`, то есть `c`, а также входной сигнал `b`. Результат операции `c ИСКЛЮЧАЮЩЕЕ ИЛИ b` подаётся на выход `q` нашего модуля.
-
+
```SystemVerilog
module box(
@@ -182,7 +182,7 @@ endmodule
Допустим, у нас есть модуль `inv`, который подает на выход инверсию входа, и мы хотим реализовать модуль `top`, который хочет использовать функционал модуля `inv` следующим образом:
-
+
Опишем `inv`:
@@ -223,7 +223,7 @@ endmodule
Мы можем подключить сколько угодно экземпляров одного модуля, поэтому у каждого из экземпляра должно быть свое уникальное имя. Пусть `c` подаётся на логический вентиль И вместе со входом `b`. Результат операции И тоже пойдет на инвертор, а затем на выход `q` модуля top.
-
+
Тогда в нашем описании добавится подключение второго модуля `inv` и провод `c`.
@@ -293,4 +293,4 @@ ___
Обратите внимание, что вход `a` модуля `top` является двухразрядным: нулевой его бит идет на вход `a` модуля `or`, первый бит идет на вход `b` модуля `or`.
-
+
diff --git a/Basic Verilog structures/Multiplexors.md b/Basic Verilog structures/Multiplexors.md
index 0975bfa..7da124f 100644
--- a/Basic Verilog structures/Multiplexors.md
+++ b/Basic Verilog structures/Multiplexors.md
@@ -4,11 +4,11 @@
Иными словами, мультиплексор — это переключатель (коммутатор), соединяющий выход с одним из множества входов.
-
+
Для начала создадим простой двухвходовой мультиплексор. Предположим, на `Y` нам необходимо передать один из сигналов — `D0` или `D1` в зависимости от значения управляющего сигнала `S`: когда `S==0`, на `Y` подается сигнал `D0`, в противном случае — `D1`.
-
+
На языке SystemVerilog это можно описать несколькими способами. Первый — с помощью **[тернарного условного оператора](https://ru.wikipedia.org/wiki/Тернарная_условная_операция)**:
@@ -49,7 +49,7 @@ assign Y = S==1 ? D1 : D0;
Данное выражение говорит нам, что если `S==1`, то `Y` присваивается значение `D1`, в противном случае — значение `D0`.
-
+
Также мультиплексор можно описать через конструкцию `if-else` в блоке `always`.
@@ -137,7 +137,7 @@ end // (так же как каждый begin должен ок
Рассмотрим вариант посложнее и опишем следующую схему:
-
+
Здесь уже используется мультиплексор 4в1. Управляющий сигнал `S` в данном случае двухбитный. В блоке `case` мы перечисляем всевозможные варианты значений `S` и описываем выход мультиплексора.
@@ -269,4 +269,4 @@ endmodule
Как, по-вашему, описать на языке SystemVerilog схему, приведённую ниже?
-
+
diff --git a/Basic Verilog structures/Registers.md b/Basic Verilog structures/Registers.md
index 04340ba..9d45f86 100644
--- a/Basic Verilog structures/Registers.md
+++ b/Basic Verilog structures/Registers.md
@@ -6,7 +6,7 @@
logic reg_name;
```
-
+
У регистра может быть несколько входов и один выход. Основных входов, без которых не может существовать регистр два: вход данных и вход тактирующего синхроимпульса. На рисунке они обозначены как `D` и `clk`. Опциональный вход сигнала сброса (`rst`) позволяет обнулять содержимое регистра вне зависимости от входных данных и может работать как с тактовым синхроимпульсом (синхронный сброс), так и без него (асинхронный сброс).
@@ -18,11 +18,11 @@ logic reg_name;
Поскольку все сигналы в цифровой схеме передаются по цепям, удобно представлять, что к выходу регистра всегда неявно подключен провод, с именем, совпадающим с именем регистра, поэтому вы можете использовать имя регистра в дальнейшей цифровой логике:
-
+
Итак, мы добавили регистр на холст схемы, но как соединить его с какой-то логикой? Предположим, у нас есть сигнал тактового синхроимпульса и данные, которые мы хотим записать:
-
+
Данной схеме соответствует код:
@@ -40,7 +40,7 @@ modulе rеg_ехаmрlе(
Очевидно, мы хотим подключить сигнал `clk` ко входу тактирующего сигнала регистра, вход `data` ко входу данных, а выход регистра к выходу `reg_data`:
-
+
Запись в регистр возможна только по фронту тактирующего синхроимпульса. **Фронт** — это переход сигнала из нуля в единицу (**положительный фронт**), либо из единицы в ноль (**отрицательный фронт**).
@@ -116,7 +116,7 @@ modulе rеg_ехаmрlе(
Итоговая схема регистра со сбросом и сигналом разрешения записи:
-
+
Помимо прочего есть еще одно важное правило, которое необходимо знать при описании регистра:
@@ -126,7 +126,7 @@ modulе rеg_ехаmрlе(
В блоке присваивания регистру можно описывать и комбинационную логику, стоящую перед ним, например схему:
-
+
можно описать как
@@ -214,4 +214,4 @@ modulе rеg_ехаmрlе(
Как, по-вашему, описать на языке SystemVerilog схему, приведённую ниже?
-
+
diff --git a/Introduction/How FPGA works.md b/Introduction/How FPGA works.md
index a0e516c..284a623 100644
--- a/Introduction/How FPGA works.md
+++ b/Introduction/How FPGA works.md
@@ -43,25 +43,25 @@
Логический вентиль **И** принимает два входа и выдает на выход значение `1` только в том случае, если оба входа равны `1`. Если хотя бы один из входов `0`, то на выходе будет `0`. На схемах, логический вентиль **И** отображается следующим образом:
-
+
_Рисунок 1. Обозначение логического вентиля **И**._
Логический вентиль **ИЛИ** принимает два входа и выдает на выход значение `1` в случае, если хотя бы один из входов равен `1`. Если оба входа равны `0`, то на выходе будет `0`. На схемах, логический вентиль **ИЛИ** отображается следующим образом:
-
+
_Рисунок 2. Обозначение логического вентиля **ИЛИ**._
Логический вентиль **Исключающее ИЛИ** принимает два входа и выдает на выход значение `1` в случае, если значения входов не равны между собой (один из них равен `1`, а другой `0`). Если значения входов равны между собой (оба равны `0` или оба равны `1`), то на выходе будет `0`. На схемах, логический вентиль **Исключающее ИЛИ** отображается следующим образом:
-
+
_Рисунок 3. Обозначение логического вентиля **Исключающее ИЛИ**._
Логический вентиль **НЕ** — самый простой. Он принимает один вход и подает на выход его инверсию. Если на вход пришло значение `0`, то на выходе будет `1`, если на вход пришло значение `1`, то на выходе будет `0`. Он обозначается на схемах следующим образом:
-
+
_Рисунок 4. Обозначение логического вентиля **НЕ**._
@@ -71,7 +71,7 @@ _Рисунок 4. Обозначение логического вентиля
На приведенном ниже рисунке показан способ построения логического вентиля **И** на базе двух транзисторов. Подача значения `1` на вход **А** или **B** "открывает" соответствующий транзистор. Если оба транзистора открыты, на выход идет **напряжение питания** (`1` в контексте **цифровых значений**). В случае, если хотя бы на одном входе **А** или **B** будет значение `0`, соответствующий транзистор будет закрыт (можно считать, что он превратится в разрыв цепи). В этом случае выход будет подключен к **земле** (`0` в контексте цифровых значений). Как вы видите, напряжение на выход подается от **источников постоянного питания** или **земли**, а не от входов вентиля, именно этим и обеспечивается постоянное обновление напряжения и устойчивость **цифровых схем** к помехам.
-
+
_Рисунок 5. Обозначение логического вентиля **Схема логического вентиля И, построенного на транзисторах**._
@@ -85,7 +85,7 @@ _Рисунок 5. Обозначение логического вентиля
Схематически, мультиплексор обозначается следующим образом:
-
+
_Рисунок 6. Обозначение Мультиплексора._
@@ -97,19 +97,19 @@ _Рисунок 6. Обозначение Мультиплексора._
Посмотрим, как можно реализовать мультиплексор с управляющим сигналом, использующим `one-hot`-кодирование, используя только логические вентили **И**, **ИЛИ**:
-
+
_Рисунок 7. Реализация мультиплексора, использующего one-hot кодирование._
Если мы выставим значение управляющего сигнала, равное `000010`, означающее что только **первый** бит этого сигнала (**счет ведется с нуля**) будет равен **единице** (`sel[1] = 1`), то увидим, что на один из входов каждого логического вентиля **И** будет подано значение `0`. Исключением будет логический вентиль **И** для входа `b`, на вход которого будет подано значение `1`. Это означает, что все логические вентили **И** (кроме первого, на который подается вход `b`) будут выдавать на выход `0` (см. [Логические вентили](#логические-вентили)) вне зависимости от того, что было подано на входы a,c,d,e и f. Единственным входом, который будет на что-то влиять окажется вход `b`. Когда он равен `1`, на выходе соответствующего логического вентиля **И** окажется значение `1`. Когда он равен `0` на выходе **И** окажется значение `0`. Иными словами, выход **И** будет повторять значение `b`.
-
+
_Рисунок 8. Реализация мультиплексора, использующего one-hot кодирование._
Логический вентиль **ИЛИ** на данной схеме имеет больше двух входов. Подобный вентиль может быть создан в виде каскада логических вентилей **ИЛИ**:
-
+
_Рисунок 9. Реализация многоходового логического **ИЛИ**._
@@ -117,7 +117,7 @@ _Рисунок 9. Реализация многоходового логиче
Но для нашей схемы мультиплексора гарантируется, что каждый вход **ИЛИ** кроме одного будет равняться `0` (поскольку выход каждого **И** кроме одного будет равен `0`). Это означает, что выход **многовходового ИЛИ** будет зависеть только от **одного** входа (в случае, когда `sel = 000010` — от входа `b`).
-
+
_Рисунок 10. Реализация мультиплексора, использующего one-hot кодирование._
@@ -133,7 +133,7 @@ _Рисунок 10. Реализация мультиплексора, испо
Представьте мультиплексор с четырьмя входными сигналами, и двухбитным управляющим сигналом (обратите внимание, что в теперь это сигнал не использует `one-hot`-кодирование). Но теперь, вместо того чтобы выставлять входные сигналы во внешний мир, давайте подключим их к программируемой памяти. Это означает, что мы можем "запрограммировать" каждый из входов на какое-то константное значение. Поместим то, что у нас получилось в отдельный блок и вот, мы получили двухвходовую **Таблицу подстановки** (далее **LUT**).
-
+
_Рисунок 11. Реализация таблицы подстановки (Look-Up Table, LUT)._
@@ -157,9 +157,9 @@ _Рисунок 11. Реализация таблицы подстановки (
**D-триггер** — это цифровой элемент, способный хранить один бит информации. В базовом варианте у этого элемента есть два входа и один выход. Один из входов подает значение, которое будет записано в **D-триггер**, второй вход управляет записью (обычно он называется `clk` или `clock` и подключается к тактирующему синхроимпульсу схемы). Когда управляющий сигнал меняет свое значение с `0` на `1` (либо с `1` на `0`, зависит от схемы), в **D-триггер** записывается значение сигнала данных. Обычно, описывая **D-триггер**, говорится, что он строится из двух защелок, которые в свою очередь строятся из **RS-триггеров**, однако в конечном итоге, все эти элементы строятся на базе логических вентилей **И**/**ИЛИ**, **НЕ**:
-
+
-_Рисунок 12. Реализация D-триггера[[2]](https://www.build-electronic-circuits.com/d-flip-flop/)._
+_Рисунок 12. Реализация D-триггера._
## Арифметика
@@ -167,7 +167,7 @@ _Рисунок 12. Реализация D-триггера[[2]](https://www.bui
Все эти блоки могут быть реализованы через логические вентили, например так можно реализовать сумматор:
-
+
_Рисунок 13. Реализация полного однобитного сумматора._
@@ -181,7 +181,7 @@ _Рисунок 13. Реализация полного однобитного

-_Рисунок 14. Схема логической ячейки[[3]](https://en.wikipedia.org/wiki/Field-programmable_gate_array)._
+_Рисунок 14. Схема логической ячейки[[2]](https://en.wikipedia.org/wiki/Field-programmable_gate_array)._
Может показаться запутанным, но все достаточно просто. Логический блок представляет собой цепочку операций: `логическая функция, реализованная через LUT -> арифметическая операция -> Запись в D-триггер`. Каждый из мультиплексоров определяет то, будет ли пропущен какой-либо из этих этапов.
Таким образом, конфигурируя каждый логический блок, можно получить следующие вариации кусочка цифровой схемы:
@@ -196,7 +196,7 @@ _Рисунок 14. Схема логической ячейки[[3]](https://en
А вот реальный пример использования логического блока в ПЛИС `xc7a100tcsg324-1` при реализации Арифметико-логического устройства (АЛУ), подключенного к периферии отладочной платы `Nexys-7`:
-
+
_Рисунок 15. Пример использования логической ячейки._
@@ -223,5 +223,4 @@ _Рисунок 15. Пример использования логической
## Источники
1. Alchitry, Ell C / [How Does an FPGA Work?](https://learn.sparkfun.com/tutorials/how-does-an-fpga-work/all)
-2. Omar Muñoz Urias / [The D Flip-Flop (Quickstart Tutorial)](https://www.build-electronic-circuits.com/d-flip-flop/)
-3. [Field-programmable gate array](https://en.wikipedia.org/wiki/Field-programmable_gate_array)
+2. [Field-programmable gate array](https://en.wikipedia.org/wiki/Field-programmable_gate_array)
diff --git a/Labs/01. Adder/README.md b/Labs/01. Adder/README.md
index 32c4eee..11f399f 100644
--- a/Labs/01. Adder/README.md
+++ b/Labs/01. Adder/README.md
@@ -22,7 +22,7 @@
Давайте начнем с примера и сложим в столбик какую-нибудь пару чисел, например 42 и 79:
-
+
```text
2 + 9 = 11 ➨ 1 пишем, 1 "в уме"
@@ -36,7 +36,7 @@
Теперь попробуем сделать то же самое, только в двоичной системе исчисления. К примеру, над числами 3 и 5. Три в двоичной системе записывается как 011. Пять записывается как 101.
-
+
Поскольку в двоичной системе всего две цифры: 0 и 1, один разряд не может превысить 1. Складывая числа 1 и 1, вы получаете 2, что не умещается в один разряд, поэтому мы пишем 0 и держим 1 "в уме". Это снова перенос разряда. Поскольку в двоичной арифметике разряд называют битом, перенос разряда называют переносом бита, а сам разряд, который перенесли — битом переноса.
@@ -58,25 +58,25 @@

-*Таблица истинности одноразрядного сложения*
+_Таблица истинности одноразрядного сложения._
-`S` — это цифра, записываемая в столбце сложения под числами `a` и `b`. `C` (*carry*, перенос) — это цифра, записываемая левее, если произошел перенос разряда. Как мы видим, перенос разряда происходит только в случае, когда оба числа одновременно равны единице. При этом в этот момент значение `S` обращается в `0`, и результат записывается как `10`, что в двоичной системе означает `2`. Кроме того, `S = 0` и в случае, когда оба операнда одновременно равны нулю. Вы можете заметить, что `S` равно нулю в тех случаях, когда `а` и `b` равны, и не равно нулю в противоположном случае. Подобным свойством обладает логическая операция **Исключающее ИЛИ** (**eXclusive OR**, **XOR**):
+`S` — это цифра, записываемая в столбце сложения под числами `a` и `b`. `C` (_carry_, перенос) — это цифра, записываемая левее, если произошел перенос разряда. Как мы видим, перенос разряда происходит только в случае, когда оба числа одновременно равны единице. При этом в этот момент значение `S` обращается в `0`, и результат записывается как `10`, что в двоичной системе означает `2`. Кроме того, `S = 0` и в случае, когда оба операнда одновременно равны нулю. Вы можете заметить, что `S` равно нулю в тех случаях, когда `а` и `b` равны, и не равно нулю в противоположном случае. Подобным свойством обладает логическая операция **Исключающее ИЛИ** (**eXclusive OR**, **XOR**):

-*Таблица истинности операции Исключающее ИЛИ (XOR)*
+_Таблица истинности операции Исключающее ИЛИ (XOR)._
Для бита переноса всё ещё проще — он описывается операцией логическое И:

-*Таблица истинности операции И*
+_Таблица истинности операции И._
Давайте нарисуем цифровую схему, связывающую входные и выходные сигналы с помощью логических элементов, соответствующих ожидаемому поведению:
-
+
-*Рисунок 1. Цифровая схема устройства, складывающего два операнда с сохранением переноса (полусумматора)*
+_Рисунок 1. Цифровая схема устройства, складывающего два операнда с сохранением переноса (полусумматора)._
Вроде все замечательно, но есть проблема. В описании полного однобитного сумматора сказано, что у него есть три входа, а в наших таблицах истинности и на схеме выше их только два. На самом деле, на каждом этапе сложения в столбик мы всегда складывали три числа: цифру верхнего числа, цифру нижнего числа, и единицу в случае переноса разряда из предыдущего столбца (если с предыдущего разряда не было переноса, прибавление нуля неявно опускалось).
@@ -84,7 +84,7 @@

-*Таблица истинности сигналов полного однобитного сумматора*
+_Таблица истинности сигналов полного однобитного сумматора._
Поскольку теперь у нас есть и входной и выходной биты переноса, для их различия добавлены индексы “in” и “out”.
@@ -98,9 +98,9 @@
Цифровая схема устройства с описанным поведением выглядит следующим образом:
-
+
-*Рисунок 2. Цифровая схема полного однобитного сумматора*
+_Рисунок 2. Цифровая схема полного однобитного сумматора._
## Практика
@@ -150,15 +150,15 @@ module half_adder(
endmodule
```
-*Листинг 1. SystemVerilog-код модуля half_adder*
+_Листинг 1. SystemVerilog-код модуля half_adder._
По данному коду, САПР может реализовать следующую схему:

-*Рисунок 3. Цифровая схема модуля half_adder, сгенерированная САПР Vivado*
+_Рисунок 3. Цифровая схема модуля half_adder, сгенерированная САПР Vivado._
-Схема похожа на рис. 1, но как проверить, что эта схема не содержит ошибок и делает именно то, что от нее ожидается?
+Схема похожа на _рис. 1_, но как проверить, что эта схема не содержит ошибок и делает именно то, что от нее ожидается?
Для этого необходимо провести моделирование этой схемы. Во время моделирования на вход схемы подаются входные воздействия. Каждое изменение входных сигналов схемы приводит к каскадному изменению состояния внутренних цепей, которые в итоге меняют выходные сигналы.
@@ -191,13 +191,13 @@ module testbench(); // <- Не имеет ни входов, ни
endmodule
```
-*Листинг 2. SystemVerilog-код тестбенча для модуля example*
+_Листинг 2. SystemVerilog-код тестбенча для модуля example._

-*Рисунок 4. Временная диаграмма, моделирующая работу схемы с рис.3*
+_Рисунок 4. Временная диаграмма, моделирующая работу схемы с рис. 3._
-В данной лабораторной работе вам предстоит реализовать схему полного однобитного сумматора (*рис. 2*).
+В данной лабораторной работе вам предстоит реализовать схему полного однобитного сумматора (_рис. 2_).
### Полный четырехбитный сумматор
@@ -207,18 +207,19 @@ endmodule
Давайте посмотрим, как это будет выглядеть на схеме (для простоты, внутренняя логика однобитного сумматора скрыта, но вы должны помнить, что каждый прямоугольник — это та же самая схема с рис. 2).
-
-*Рисунок 5. Схема четырехбитного сумматора*
+
+
+_Рисунок 5. Схема четырехбитного сумматора._
Фиолетовой линией на схеме показаны провода, соединяющие выходной бит переноса сумматора предыдущего разряда, с входным битом переноса сумматора следующего разряда.
-Как же реализовать модуль, состоящий из цепочки других модулей? Половину этой задачи мы уже сделали, когда писали тестбенч к однобитному полусумматору в *Листинге 2* — мы создавали модуль внутри другого модуля и подключали к нему провода. Теперь надо сделать то же самое, только с чуть большим числом модулей.
+Как же реализовать модуль, состоящий из цепочки других модулей? Половину этой задачи мы уже сделали, когда писали тестбенч к однобитному полусумматору в _Листинге 2_ — мы создавали модуль внутри другого модуля и подключали к нему провода. Теперь надо сделать то же самое, только с чуть большим числом модулей.
Для того, чтобы описать четырехбитный сумматор, необходимо подключить четыре однобитных подобно тому, как было описано в [`документе`](../../Basic%20Verilog%20structures/Modules.md#иерархия-модулей), который вы изучали перед лабораторной работой.

-*Рисунок 6. Схема четырехбитного сумматора, сгенерированная САПР Vivado*
+_Рисунок 6. Схема четырехбитного сумматора, сгенерированная САПР Vivado._
Схема может показаться запутанной, но (если присмотреться) вы увидите, как от шин A, B и S отходят линии к каждому из сумматоров, а бит переноса передается от предыдущего сумматора к следующему.
@@ -242,7 +243,7 @@ module fulladder4(

-*Рисунок 7. Пример использования конструкции generate for*
+_Рисунок 7. Пример использования конструкции generate for._
Как вы можете догадаться, в этом примере создано 3 модуля, имена которых оканчиваются на значение итератора, по которому шел цикл, а к самим модулям подключены соответствующие итератору провода из шин. Разумеется, для своих целей вы можете использовать и **i+1** и двойные циклы.
@@ -275,13 +276,13 @@ module fulladder32(
1. Согласно [руководству по созданию проекта в Vivado](../../Vivado%20Basics/Vivado%20trainer.md):
1. Создайте проект;
2. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder`.
-2. Опишите в файле модуль `fulladder`, схема которого представлена на *[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.png)*.
+2. Опишите в файле модуль `fulladder`, схема которого представлена на _[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.svg)_.
3. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder`.
4. Вставьте содержимое файла [`tb_fulladder.sv`](tb_fulladder.sv), расположенного рядом с данным документом.
5. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
6. Убедитесь по сигналам временной диаграммы, что модуль работает корректно.
7. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder4`.
-8. Опишите модуль `fulladder4`, схема которого представлена на *Рис. 5 и 6*, используя [`иерархию модулей`](../../Basic%20Verilog%20structures/Modules.md#%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9), чтобы в нем выполнялось поразрядное сложение двух 4-разрядных чисел и входного бита переноса. Некоторые входы и выходы модуля будет необходимо описать в виде `векторов`.
+8. Опишите модуль `fulladder4`, схема которого представлена на _Рис. 5 и 6_, используя [`иерархию модулей`](../../Basic%20Verilog%20structures/Modules.md#%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9), чтобы в нем выполнялось поразрядное сложение двух 4-разрядных чисел и входного бита переноса. Некоторые входы и выходы модуля будет необходимо описать в виде `векторов`.
9. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 4-го разряда.
10. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder4`.
11. Вставьте содержимое файла [`tb_fulladder4.sv`](tb_fulladder4.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`.
diff --git a/Labs/02. Arithmetic-logic unit/README.md b/Labs/02. Arithmetic-logic unit/README.md
index c4a7215..345b2ab 100644
--- a/Labs/02. Arithmetic-logic unit/README.md
+++ b/Labs/02. Arithmetic-logic unit/README.md
@@ -26,27 +26,27 @@
Обычно АЛУ представляет собой комбинационную схему (то есть без элементов памяти), на входы которой поступают информационные (операнды) и управляющие (код операции) сигналы, в ответ на что на выходе появляется результат заданной операции. АЛУ бывает не комбинационной схемой, но это скорее исключение.
-
+
-*Рисунок 1. Структурное обозначение элемента АЛУ[1, стр. 305].*
+_Рисунок 1. Структурное обозначение элемента АЛУ[1, стр. 305]._
-На рис. 1 изображен пример АЛУ, используемый в книге "Цифровая схемотехника и архитектура компьютера" Харрис и Харрис. На входы `A` и `B` поступают операнды с разрядностью *N*. На трехбитный вход `F` подается код операции. Например, если туда подать `000`, то на выходе `Y` появится результат операции *логическое И* между битами операндов `A` и `B`. Если на `F` подать `010`, то на выходе появится результат сложения. Это лишь пример, разрядность и коды могут отличаться в зависимости от количества выполняемых операций и архитектуры.
+На рис. 1 изображен пример АЛУ, используемый в книге "Цифровая схемотехника и архитектура компьютера" Харрис и Харрис. На входы `A` и `B` поступают операнды с разрядностью _N_. На трехбитный вход `F` подается код операции. Например, если туда подать `000`, то на выходе `Y` появится результат операции _логическое И_ между битами операндов `A` и `B`. Если на `F` подать `010`, то на выходе появится результат сложения. Это лишь пример, разрядность и коды могут отличаться в зависимости от количества выполняемых операций и архитектуры.
Существует несколько подходов к реализации АЛУ, отличающиеся внутренней организацией. В лабораторных работах применяется повсеместно используемый подход мультиплексирования операций, то есть подключения нескольких операционных устройств (которые выполняют какие-то операции, например сложения, логическое И и т.п.) к мультиплексору, который будет передавать результат нужного операционного устройства на выходы АЛУ.
-Рассмотрим на примере все того же АЛУ MIPS из книги Харрисов. На рис. 2, в левой его части, изображена внутренняя организация этого АЛУ, справа – таблица соответствия кодов операциям. На выходе схемы (внизу) стоит четырехвходовый мультиплексор, управляемый двумя из трех битов `F`. К его входам подключены *N* логических И (побитовое И *N*-разрядных операндов), *N* логических ИЛИ, *N*-разрядный сумматор и Zero Extend – устройство делающее из однобитного числа *N*-битное число, дополняя нулями слева.
+Рассмотрим на примере все того же АЛУ MIPS из книги Харрисов. На рис. 2, в левой его части, изображена внутренняя организация этого АЛУ, справа – таблица соответствия кодов операциям. На выходе схемы (внизу) стоит четырехвходовый мультиплексор, управляемый двумя из трех битов `F`. К его входам подключены _N_ логических И (побитовое И _N_-разрядных операндов), _N_ логических ИЛИ, _N_-разрядный сумматор и Zero Extend – устройство делающее из однобитного числа _N_-битное число, дополняя нулями слева.
-К одному из входов этих операционных устройств подключен `A` без изменений, а ко второму подключен выход двухвходового мультиплексора, управляемого оставшимся битом *F*. То есть `F[2]` определяет, что будет вторым операндом: `B` или `~B`. Вдобавок `F[2]` подается на входной перенос сумматора, то есть, когда `F[2] == 1` на выходе сумматора появляется результат операции `A + ~B + 1`, что (с учетом [дополнительного кода](https://ru.wikipedia.org/wiki/Дополнительный_код)) эквивалентно `A – B`.
+К одному из входов этих операционных устройств подключен `A` без изменений, а ко второму подключен выход двухвходового мультиплексора, управляемого оставшимся битом _F_. То есть `F[2]` определяет, что будет вторым операндом: `B` или `~B`. Вдобавок `F[2]` подается на входной перенос сумматора, то есть, когда `F[2] == 1` на выходе сумматора появляется результат операции `A + ~B + 1`, что (с учетом [дополнительного кода](https://ru.wikipedia.org/wiki/Дополнительный_код)) эквивалентно `A – B`.
-
+
-*Рисунок 2. Структурная схема АЛУ MIPS[1, стр. 305].*
+_Рисунок 2. Структурная схема АЛУ MIPS[1, стр. 305]._
Посмотрим, что произойдет, если на вход `F` такого АЛУ подать `111`. Будет выполняться операция `SLT`(сокращение от `Set Less Then`) – выдать `1`, если `A` меньше `B`, в противном случае — выдать `0`. Биты `F[1:0]` переключат мультиплексор на выход блока Zero Extend. На вход Zero Extend поступает старший бит выхода сумматора, этот бит отвечает за знак результата. Так как `F[2] == 1`, сумматор вычисляет `A + ~B + 1`, то есть `A – B`, значит, если `A < B`, то результат вычитания будет отрицательный, а старший бит `Y[N-1] == 1`. Если `A` не меньше `B`, то разность будет неотрицательна, а `Y[N-1] == 0`, как и требуется от этой операции.
-
+
-*Рисунок 3. Пример исполнения операции АЛУ.*
+_Рисунок 3. Пример исполнения операции АЛУ._
Преимущество такой организации АЛУ в его простой модификации, настройке под нужные коды операций, читаемости кода и масштабируемости. Можно легко добавить или убрать требуемые операции. Подумайте, как бы вы обновили данную схему, если бы от вас потребовалось расширить её функционал операциями XOR (Исключающее ИЛИ) и (SGE операция "больше либо равно")?
@@ -224,7 +224,7 @@ endmodule
| OR | 0 0 110 |result_o = a_i \| b_i | Побитовое логическое **ИЛИ** |
| AND | 0 0 111 |result_o = a_i & b_i | Побитовое логическое **И** |
-*Таблица 1. Список вычислительных операций.*
+_Таблица 1. Список вычислительных операций._
В первой таблице перечислены операции, вычисляющие значение сигнала `flag_o`. **При любом коде операции `alu_op_i` не входящим в эту таблицу, сигнал `flag_o` должен быть равен нулю**.
@@ -237,11 +237,11 @@ endmodule
| LTU | 1 1 110 | flag_o = a_i < b_i | Беззнаковое сравнение **<** |
| GEU | 1 1 111 | flag_o = a_i ≥ b_i | Беззнаковое сравнение **≥** |
-*Таблица 2. Список операций сравнения.*
+_Таблица 2. Список операций сравнения._
**Выражения в этих двух таблицах приведены для примера. Не все из них можно просто переписать — часть этих выражений надо дополнить. Чтобы вы не копировали выражения, в них вставлены неподдерживаемые символы.**
-Несмотря на разделение на вычислительные операции, и операции сравнения, в *Таблице 1* (вычислительных операция) оказалось две операции `SLTS` и `SLTU`, которые выполняют сравнения. В итоге у нас есть две похожие пары инструкций:
+Несмотря на разделение на вычислительные операции, и операции сравнения, в _Таблице 1_ (вычислительных операция) оказалось две операции `SLTS` и `SLTU`, которые выполняют сравнения. В итоге у нас есть две похожие пары инструкций:
- `LTS`
- `LTU`
diff --git a/Labs/03. Register file and memory/README.md b/Labs/03. Register file and memory/README.md
index e7673ef..ca0c7a9 100644
--- a/Labs/03. Register file and memory/README.md
+++ b/Labs/03. Register file and memory/README.md
@@ -50,9 +50,9 @@
Так же возможна реализация, в которой вход `write_data` и выход `read_data` объединены в единый вход/выход `data`. В этом случае операции чтения и записи разделены во времени и используют для этого один единый порт ввода-вывода (`inout`, двунаправленный порт) `data`.
-
+
-*Рисунок 1. Примеры блоков ПЗУ и ОЗУ.*
+_Рисунок 1. Примеры блоков ПЗУ и ОЗУ._
Кроме того, различают память с **синхронным** и **асинхронным** чтением. В первом случае, перед выходным сигналом шины данных ставится дополнительный регистр, в который по тактовому синхроимпульсу записываются запрашиваемые данные. Такой способ может очень сильно сократить **критический путь** цифровой схемы, но требует дополнительный такт на доступ в память. В свою очередь, асинхронное чтение позволяет получить данные, не дожидаясь очередного синхроимпульса, но такой способ увеличивает критический путь.
@@ -64,15 +64,15 @@

-*Рисунок 2. Структурная схема логического блока в ПЛИС[[1]](https://en.wikipedia.org/wiki/Field-programmable_gate_array).*
+_Рисунок 2. Структурная схема логического блока в ПЛИС[[1]](https://en.wikipedia.org/wiki/Field-programmable_gate_array)._
В логическом блоке есть **таблицы подстановки** (Look Up Table, LUT), которые представляют собой не что иное как память, которая переконфигурируется под нужды хранения, а не реализацию логики. Таким образом, трехвходовой LUT может выступать в роли восьмиразрядной памяти.
Однако LUT будет сложно приспособить под многопортовую память: посмотрим на схему еще раз: три входа LUT формируют адрес одной из восьми ячеек. Это означает, что среди этих восьми ячеек нельзя обратиться к двум из них одновременно.
-Для реализации многопортовой памяти небольшого размера лучше воспользоваться расположенным в логическом блоке D-триггером (**DFF** на *рис. 2*). Несмотря на то, что D-триггер позволяет воспроизвести только 1 разряд элемента памяти, он не ограничивает реализацию по портам.
+Для реализации многопортовой памяти небольшого размера лучше воспользоваться расположенным в логическом блоке D-триггером (**DFF** на _рис. 2_). Несмотря на то, что D-триггер позволяет воспроизвести только 1 разряд элемента памяти, он не ограничивает реализацию по портам.
-Таким образом, плюс распределенной памяти относительно регистровой заключается в лучшей утилизации ресурсов: одним трёхвходовым LUT можно описать до 8 бит распределенной памяти, в то время как одним D-триггером можно описать только один бит регистровой памяти. Предположим, что в ПЛИС размещены логические блоки, структура которых изображена на *рис. 2* и нам необходимо реализовать 1KiB памяти. Мы можем реализовать распределенную память, используя 64 логических блока (в каждом блоке два трёхвходовых LUT), либо регистровую память, используя 1024 логических блока.
+Таким образом, плюс распределенной памяти относительно регистровой заключается в лучшей утилизации ресурсов: одним трёхвходовым LUT можно описать до 8 бит распределенной памяти, в то время как одним D-триггером можно описать только один бит регистровой памяти. Предположим, что в ПЛИС размещены логические блоки, структура которых изображена на _рис. 2_ и нам необходимо реализовать 1KiB памяти. Мы можем реализовать распределенную память, используя 64 логических блока (в каждом блоке два трёхвходовых LUT), либо регистровую память, используя 1024 логических блока.
Минусом является ограниченность в реализации многопортовой памяти.
diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md
index 2e83efe..2aab3e8 100644
--- a/Labs/05. Main decoder/README.md
+++ b/Labs/05. Main decoder/README.md
@@ -75,17 +75,19 @@ SYSTEM-инструкции используются для доступа к с

-*Таблица 3. Инструкции набора RV32I с приведением их типов, функционального описания и примеров использования.*
+_Таблица 3. Инструкции набора RV32I с приведением их типов, функционального описания и примеров использования._
Обратите внимание на операции `slli`, `srli` и `srai` (операции сдвига на константную величину). У этих инструкций немного измененный формат кодирования **I\***. Формат кодирования **I** предоставляет 12-битную константу. Сдвиг 32-битного числа более, чем на 31 не имеет смысла. Для кодирования числа 31 требуется всего 5 бит. Выходит, что из 12 бит константы используется только 5 бит для операции сдвига, а оставшиеся 7 бит – не используются. А, главное (какое совпадение!), эти 7 бит находятся ровно в том же месте, где у других инструкций находится поле `func7`. Поэтому, чтобы у инструкций `slli`, `srli` и `srai` использующих формат **I** не пропадала эта часть поля, к ней относятся как к полю `func7`.
### Предлагаемая микроархитектура процессора RISC-V
-Ниже приводится микроархитектура процессора RISC-V. Регистр `PC` (Program Counter – счетчик команд) подключен к адресному входу памяти инструкций. Считываемая инструкция декодируется основным дешифратором, после чего он выставляет управляющие сигналы для всех блоков процессора (мультиплексоры, АЛУ, интерфейс взаимодействия с памятью).
+На _рис. 1_ приводится микроархитектура ядра процессора RISC-V. Регистр `PC` (Program Counter – счетчик команд) подключен к адресному входу памяти инструкций. Считываемая инструкция декодируется основным дешифратором, после чего он выставляет управляющие сигналы для всех блоков процессора (мультиплексоры, АЛУ, интерфейс взаимодействия с памятью).
Приведенная архитектура не является заданием для текущей лабораторной работы, лишь отражает то, как в дальнейшем будет подключаться и использоваться реализуемый в данной лабораторной основной дешифратор.
-
+
+
+_Рисунок 1. Микроархитектура будущего процессорного ядра._
Предложенная микроархитектура процессора `CYBERcobra 3000 Pro 2.0` из прошлой лабораторной имеет схожую структуру, с некоторыми изменениями.
diff --git a/Labs/06. Datapath/README.md b/Labs/06. Datapath/README.md
index cde6898..5c33389 100644
--- a/Labs/06. Datapath/README.md
+++ b/Labs/06. Datapath/README.md
@@ -40,7 +40,9 @@ module riscv_core (
endmodule
```
-
+
+
+_Рисунок 1. Микроархитектура ядра процессора RISC-V._
В отличие от реализованного ранее процессора с архитектурой CYBERcobra, в данном модуле отсутствует память (она подключается извне, а значит у этого модуля должны быть сигналы интерфейса памяти).
@@ -67,7 +69,9 @@ module riscv_unit(
endmodule
```
-
+
+
+_Рисунок 2. Микроархитектура процессора._
Обратите внимание на регистр `stall`. Этот регистр и будет управлять разрешением на запись в программный счетчик `PC`. Поскольку мы используем блочную память, расположенную прямо в ПЛИС, доступ к ней осуществляется за 1 такт, а значит, что при обращении в память, нам необходимо "отключить" программный счетчик ровно на 1 такт. Если бы использовалась действительно "внешняя" память (например чип DDR3), то вместо этого регистра появилась бы другая логика, выставляющая на вход ядра `stall_i` единицу пока идет обращение в память.
diff --git a/Labs/08. Load-store unit/README.md b/Labs/08. Load-store unit/README.md
index 2cbd60d..2ee8fcf 100644
--- a/Labs/08. Load-store unit/README.md
+++ b/Labs/08. Load-store unit/README.md
@@ -31,9 +31,9 @@
Модуль загрузки и сохранения (**Load/Store Unit** – **LSU**) служит для исполнения инструкций типа `LOAD` и `STORE`: является прослойкой между внешним устройством – памятью, и ядром процессора. **LSU** считывает содержимое из памяти данных или записывает в нее требуемые значения, преобразуя 8- и 16-битные данные в знаковые или беззнаковые 32-битные числа для регистров процессора. В процессорах с **RISC** архитектурой с помощью **LSU** осуществляется обмен данными между регистрами общего назначения и памятью данных.
-
+
-_Рисунок 1. Место LSU в микроархитектуре RISC-процессора_
+_Рисунок 1. Место LSU в микроархитектуре RISC-процессора._
### Интерфейс процессора и блока загрузки/сохранения
@@ -177,11 +177,11 @@ _Рисунок 1. Место LSU в микроархитектуре RISC-пр
- стать равным единице в тот же такт, когда пришел сигнал `core_req_i`
- удерживать это значение до тех пор, пока не придет сигнал `mem_ready_i`, но не менее 1 такта (т.е. даже если сигнал `mem_ready_i` будет равен единице, `core_req_i` должен подняться хотя бы на 1 такт).
-Для реализации подобного функционала вам потребуется вспомогательный регистр `stall_reg`, каждый такт записывающий значение выхода `core_stall_o` и следующая таблица истинности для этого выхода:
+Для реализации подобного функционала вам потребуется вспомогательный регистр `stall_reg`, каждый такт записывающий значение выхода `core_stall_o` и таблица истинности для этого выхода, представленная на _рис. 2_.

-_Рисунок 2. Таблица истинности выхода `core_stall_o`_
+_Рисунок 2. Таблица истинности выхода `core_stall_o`._
---
@@ -215,9 +215,9 @@ module riscv_lsu(
```
-
+
-_Рисунок 3. Структурная схема модуля `riscv_lsu`_
+_Рисунок 3. Структурная схема модуля `riscv_lsu`._
---
@@ -234,4 +234,3 @@ _Рисунок 3. Структурная схема модуля `riscv_lsu`_
2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_lsu`).
4. Во время симуляции, вы должны прожать "Run All" и убедиться, что в логе есть сообщение о завершении теста!
-
diff --git a/Labs/09. LSU Integration/README.md b/Labs/09. LSU Integration/README.md
index c949907..f467553 100644
--- a/Labs/09. LSU Integration/README.md
+++ b/Labs/09. LSU Integration/README.md
@@ -1,8 +1,10 @@
# Лабораторная работа 9 "Интеграция блока загрузки и сохранения"
-После реализации блока загрузки и сохранения, его необходимо интегрировать в процессорную систему. Ниже представлена схема, иллюстрирующая интеграцию компонентов:
+После реализации блока загрузки и сохранения, его необходимо интегрировать в процессорную систему. На _рис. 1_ представлена схема, иллюстрирующая интеграцию компонентов:
-
+
+
+_Рисунок 1. Подключение LSU в процессорную систему._
## Задание
diff --git a/Labs/10. Interrupt subsystem/README.md b/Labs/10. Interrupt subsystem/README.md
index e1b7385..28f6552 100644
--- a/Labs/10. Interrupt subsystem/README.md
+++ b/Labs/10. Interrupt subsystem/README.md
@@ -96,7 +96,7 @@ _Таблица 1. Регистры контроля и состояния ма
|1110011 | 110 | I | csrrsi rd, csr, rs1 | Чтение и Установка бит CSR| rd = csr, csr = csr \| imm |
|1110011 | 111 | I | csrrci rd, csr, rs1 | Чтение и Очистка бит CSR | rd = csr, csr = csr & ~imm |
-_Таблица 2. Список инструкций для работы с регистрами контроля и статуса_
+_Таблица 2. Список инструкций для работы с регистрами контроля и статуса._
Для удобства программирования на языке ассемблера RISC-V существуют псевдоинструкции для работы с CS-регистрами.
@@ -105,7 +105,7 @@ _Таблица 2. Список инструкций для работы с ре
| csrr rd, csr | csrrs rd, csr, x0 | Чтение CSR | rd = csr |
| csrw csr, rs1 | csrrw x0, csr, rs1 | Запись CSR | csr = rs1 |
-_Таблица 3. Псевдоинструкции для работы с регистрами контроля и статуса_
+_Таблица 3. Псевдоинструкции для работы с регистрами контроля и статуса._
Операция логического ИЛИ нулевого регистра с содержимым CS-регистра не меняет его содержимого, поэтому при использовании инструкции `csrr` происходит только операция чтения. Подобным образом реализована псевдоинструкция `csrw`.
@@ -120,7 +120,7 @@ _Таблица 3. Псевдоинструкции для работы с ре
|0x341 | MRW | mepc | Регистр, хранящий адрес перехваченной инструкции. |
|0x342 | MRW | mcause | Причина перехвата |
-_Таблица 4. Список регистров, подлежащих реализации в рамках лабораторной работы_
+_Таблица 4. Список регистров, подлежащих реализации в рамках лабораторной работы._
По адресу `0x304` должен располагаться регистр, позволяющий маскировать прерывания. Например, если на 5-ом входе системы прерывания генерируется прерывание, то процессор отреагирует на него только в том случае, если 5-ый бит регистра `mie` будет равен 1.
@@ -143,7 +143,7 @@ _Таблица 4. Список регистров, подлежащих реа

-_Таблица 5. Кодирование причины перехвата в регистре `mcause`_
+_Таблица 5. Кодирование причины перехвата в регистре `mcause`._
Нас интересуют части, выделенные красным. В первую очередь то, как кодируется старший бит регистра `mcause`. Он зависит от типа причины перехвата (`1` в случае прерывания, `0` в случае исключения). Оставшиеся 31 бит регистра отводятся под коды различных причин. Поскольку мы создаем учебный процессор, который не будет использован в реальной жизни, он не будет поддерживать большую часть прерываний/исключений (таких как невыровненный доступ к памяти, таймеры и т.п.). В рамках данного курса мы должны поддерживать исключение по нелегальной инструкции (код 0x02) и должны уметь поддерживать прерывания периферийных устройств (под которые зарезервированы коды начиная с 16-го). В рамках данной лабораторной работы процессор будет поддерживать только один источник прерывания, поэтому для кодирования причины прерывания нам потребуется только первый код из диапазона _"Designated for platform use"_.
@@ -187,7 +187,7 @@ _Таблица 5. Кодирование причины перехвата в
Контроллер прерываний позволит обрабатывать входящие запросы на прерывания: маски́ровать их, выбирать один запрос из нескольких, а также игнорировать запросы во время обработки текущего прерывания.
-
+
_Рисунок 3. Место разрабатываемых блоков в структуре процессора._
@@ -197,9 +197,9 @@ _Рисунок 3. Место разрабатываемых блоков в с
Рассмотрим один из возможных вариантов организации блока **Control and Status Registers**. Основная работа по описанию схемы блока состоит в описании мультиплексора и демультиплексора. Мультиплексор подает на выход **read_data_o** значение регистра, который соответствует пришедшему адресу. В свою же очередь, демультиплексор маршрутизирует сигнал разрешения на запись **write_enable_i** (en) на тот же регистр.
-
+
-_Рисунок 4. Структурная схема контроллера CS-регистров_
+_Рисунок 4. Структурная схема контроллера CS-регистров._
3-битный вход **opcode_i** определяет операцию, которая будет производиться над содержимым CSR по адресу **addr_i**.
@@ -211,9 +211,9 @@ _Рисунок 4. Структурная схема контроллера CS-
Рассмотрим один из возможных способов реализации простейшего контроллера прерываний, представленного на _рис. 5_.
-
+
-_Рисунок 5. Структурная схема контроллера прерываний_
+_Рисунок 5. Структурная схема контроллера прерываний._
Контроллер состоит из логики:
diff --git a/Labs/11. Interrupt integration/README.md b/Labs/11. Interrupt integration/README.md
index f96c401..32026ac 100644
--- a/Labs/11. Interrupt integration/README.md
+++ b/Labs/11. Interrupt integration/README.md
@@ -1,13 +1,16 @@
# Лабораторная работа 11 "Интеграция подсистемы прерываний"
-После реализации подсистемы прерываний, её необходимо интегрировать в процессорную систему. Для этого необходимо обновить модуль `riscv_core` по приведенной ниже схеме:
+После реализации подсистемы прерываний, её необходимо интегрировать в процессорную систему. Для этого необходимо обновить модуль `riscv_core` по схеме, приведенной на _рис. 1_:
-
+
+
+_Рисунок 1. Интеграция подсистемы прерываний в ядро процессора._
Схема без выделения новых частей относительно старой версии модуля
-
+
+_Рисунок 1. Схема без выделения новых частей относительно старой версии модуля._
diff --git a/Labs/12. Peripheral units/README.md b/Labs/12. Peripheral units/README.md
index 693c0ef..de56541 100644
--- a/Labs/12. Peripheral units/README.md
+++ b/Labs/12. Peripheral units/README.md
@@ -50,7 +50,7 @@
На рисунке ниже представлен способ подключения процессора к памяти инструкций и данных, а также 255 периферийным устройствам.
-
+
_Рисунок 1. Итоговая структура процессорной системы._
diff --git a/Other/FPGA Listing.md b/Other/FPGA Listing.md
index 2c2768f..a626750 100644
--- a/Other/FPGA Listing.md
+++ b/Other/FPGA Listing.md
@@ -4,7 +4,7 @@
Ну, раз хочешь под [ПЛИС](https://marsohod.org/index.php/ourblog/11-blog/265-fpga) проектировать, то мы просто не могли пройти мимо. Не очень дорогая, но невероятно универсальная для цифровой электроники вещь. Можно назвать не иначе, как конструктором Lego для взрослых, только детальки имеют нанометровые размеры, и ты можешь сделать все что угодно. Ну, пока «пластилин» не закончится, она ведь не резиновая, хотя современные дешевые ПЛИС позволяют разворачивать на себе относительно большие проекты.
-
+
Гибкость! Гибкость помогает реализовать просто гигантский полет фантазии. Хочешь, [нейроночку](https://habr.com/ru/post/349750/) [запусти](https://cyberleninka.ru/article/n/ustroystvo-na-osnove-plis-dlya-raspoznavaniya-rukopisnyh-tsifr-na-izobrazheniyah). Хочешь, [книжку небольшую](https://www.amazon.com/Designing-Video-Game-Hardware-Verilog/dp/1728619440) прочитай за недельку, да видео-игру запили. Или крутую обработку каких-нибудь данных для студенческого проекта или курсовой. Или процессор разверни, да не один, а сразу несколько, и все они зачем-то будут общаться друг с другом, [вон сколько](https://opencores.org/projects?expanded=Processor&language=Verilog) бесплатных доступно для скачивания. Да-да, для скачивания. [Процессор можно описать](https://ru.wikipedia.org/wiki/Soft-микропроцессор), например, на verilog (что ты и делаешь на лабах по АПС вообще-то) и просто скачать его код и развернуть у себя на отладке. Или [клеточный автомат](https://marsohod.org/projects/marsohod2/276-2014-09-04-09-57-27) реализуй, просто так, по-приколу. Или [измеритель дивергенции](http://www.mindspring.com/~tomtitor/index.html), почему нет. Или вот, в [интернетах ваших](https://marsohod.org), не менее 60 проектов различного уровня сложности, все в одном месте, и многое прям сделать хочется. ПЛИС — это настолько шикарная вещь, что легендарные the Beatles даже песню написали о желании приобрести ее. Так что не тормози, скорее заимей себе такую. Во-первых, это весело, а во-вторых это тебе точно пригодится в будущем.
@@ -22,7 +22,7 @@
### Altera Cyclone IV EP4CE6 FPGA Development Board
-
+
**~3040 рублей**
@@ -36,7 +36,7 @@
### Отладочная плата с ПЛИС Altera EP2C5T144
-
+
**~ 1100 рублей**
@@ -46,7 +46,7 @@
### TinyFPGA BX
-
+
**~ 2900 рублей**
@@ -56,7 +56,7 @@
### iCEBreaker FPGA
-
+
**~ 5500 рублей**