Difference between revisions of "BITL MCU"

From DiLab
Jump to: navigation, search
(Calendar)
(14.11.2022)
(30 intermediate revisions by the same user not shown)
Line 8: Line 8:
 
[[#{{CURRENTDAY2}}.{{CURRENTMONTH}}.{{CURRENTYEAR}} | Today <small>(if there is a class)</small>]]
 
[[#{{CURRENTDAY2}}.{{CURRENTMONTH}}.{{CURRENTYEAR}} | Today <small>(if there is a class)</small>]]
 
</big>
 
</big>
 +
 
'''Course: Introduction to Processors'''
 
'''Course: Introduction to Processors'''
 +
===Introduction===
 +
The course is about low level hardware architecture of the computers and the programming at that level. In particular, we study ARM Assembly programming language and techniques while discussing the microprocessor resources and features that implement the instructions. The students learn how to develop a code in Assembly and what to consider when implementing efficient programs in higher level languages.
  
 
+
===Deliverables===
 
+
* All assignments are due by the end of the day on the due date, unless otherwise specified.
  
 
=Calendar=
 
=Calendar=
Line 22: Line 25:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====03.09.2021====
+
====05.09.2022====
 
11:10
 
11:10
 
|
 
|
Line 34: Line 37:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====14.09.2021====
+
====09.09.2022====
 +
11:10
 +
|
 +
{| width='100%' style='background-color:#ddd;'
 +
|<big>'''Lab'''</big>
 +
|}
 +
Programming a microcontroller - Raspberry Pi Pico.
 +
 
 +
|
 +
 
 +
|- style='vertical-align: top;'
 +
|
 +
 
 +
====12.09.2022====
 
11:10
 
11:10
 
|
 
|
Line 46: Line 62:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====17.09.2021====
+
====16.09.2022====
 
11:10
 
11:10
 
|
 
|
Line 52: Line 68:
 
|<big>'''Lab :: Quiz 1'''</big>
 
|<big>'''Lab :: Quiz 1'''</big>
 
|}
 
|}
'''Lab'''
 
 
Practicing the conversion between the systems with different bases
 
  
 
'''Quiz 1'''
 
'''Quiz 1'''
  
 
Decimal, binary, octal and hexadecimal systems.  
 
Decimal, binary, octal and hexadecimal systems.  
 +
 +
'''Lab'''
 +
 +
Quiz review. Practicing the conversion between the systems with different bases
  
 
|
 
|
Line 65: Line 82:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====21.09.2021====
+
 
 +
====19.09.2022====
 
11:10
 
11:10
 
|
 
|
Line 77: Line 95:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====24.09.2021====
+
====23.09.2022====
 
11:10
 
11:10
 
|
 
|
Line 83: Line 101:
 
|<big>'''Lab :: Quiz 2'''</big>
 
|<big>'''Lab :: Quiz 2'''</big>
 
|}
 
|}
'''Lab'''
 
 
Exercises with the two's complement
 
  
 
'''Quiz 2'''
 
'''Quiz 2'''
  
 
Two's complement.
 
Two's complement.
 +
 +
'''Lab'''
 +
 +
Quiz review. Exercises with the two's complement
  
 
|
 
|
Line 96: Line 115:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====28.09.2021====
+
 
 +
====26.09.2022====
 
11:10
 
11:10
 
|
 
|
Line 108: Line 128:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====01.10.2021====
+
====30.09.2022====
 
11:10
 
11:10
 
|
 
|
Line 121: Line 141:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====05.10.2021====
+
====03.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 133: Line 153:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====08.10.2021====
+
====07.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 146: Line 166:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====12.10.2021====
+
====10.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 155: Line 175:
  
 
|
 
|
 
+
* HW1 announced
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====15.10.2021====
+
 
 +
====14.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 171: Line 192:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====19.10.2021====
+
====17.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 183: Line 204:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====22.10.2021====
+
====21.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 189: Line 210:
 
|<big>'''Lab :: Quiz 3'''</big>
 
|<big>'''Lab :: Quiz 3'''</big>
 
|}
 
|}
'''Lab'''
 
 
 
'''Quiz 3'''
 
'''Quiz 3'''
  
 
Code comprehension.
 
Code comprehension.
  
 +
'''Lab'''
 +
 +
Quiz review.
 
|
 
|
 
* '''Due''' '''HW1''' - Arithmetic progression
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
  
====26.10.2021====
+
====24.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 211: Line 231:
  
 
|
 
|
 +
* '''Due''' '''HW1'''
  
 +
* HW2 announced
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====29.10.2021====
+
 
 +
====28.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 228: Line 251:
 
|
 
|
  
====02.11.2021====
+
====31.10.2022====
 
11:10
 
11:10
 
|
 
|
Line 240: Line 263:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====05.11.2021====
+
====04.11.2022====
 
11:10
 
11:10
 
|
 
|
Line 246: Line 269:
 
|<big>'''Lab'''</big>
 
|<big>'''Lab'''</big>
 
|}
 
|}
TBD
+
Practice passing parameters and working with buffers.
 
 
 
|
 
|
 
* '''Due''' '''HW2''' - Matrix multiplication
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====09.11.2021====
+
 
 +
====07.11.2022====
 
11:10
 
11:10
 
|
 
|
Line 263: Line 284:
  
 
|
 
|
 +
 +
* '''Due''' '''HW2'''
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====12.11.2021====
+
 
 +
====11.11.2022====
 
11:10
 
11:10
 
|
 
|
Line 281: Line 305:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====16.11.2021====
+
====14.11.2022====
 
11:10
 
11:10
 
|
 
|
Line 292: Line 316:
 
* '''Due''' '''M1P1''' - Midterm 1 programming task 1, tested
 
* '''Due''' '''M1P1''' - Midterm 1 programming task 1, tested
 
* '''Due''' '''M1P2''' - Midterm 1 programming task 2, tested
 
* '''Due''' '''M1P2''' - Midterm 1 programming task 2, tested
 
+
* Project announced
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====23.11.2021====
+
 
 +
====21.11.2022====
 
11:10
 
11:10
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Lab'''</big>
+
|<big>'''Inline Assembly'''</big>
 
|}
 
|}
TBD
+
Including Assembly in C code. Inline code and Assembly code operands. Tasks for the compiler, linker and loader.  Dynamic loaders and libraries.
  
 
|
 
|
 
 
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====26.11.2021====
+
 
 +
====25.11.2022====
 
11:10
 
11:10
 
|
 
|
 
{| width='100%' style='background-color:#ddd;'
 
{| width='100%' style='background-color:#ddd;'
|<big>'''Inline Assembly'''</big>
+
|<big>'''Lab'''</big>
 
|}
 
|}
Including Assembly in C code. Inline code and Assembly code operands. Tasks for the compiler, linker and loader.  Dynamic loaders and libraries.  
+
Midterm review.
  
 
|
 
|
Line 320: Line 344:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====30.11.2021====
+
 
 +
====28.11.2022====
 
11:10
 
11:10
 
|
 
|
Line 327: Line 352:
 
|}
 
|}
 
Execution time for instructions. Case study for code optimization. Leveraging the documentation and specification of instructions. Reordering the code. Unrolling loops.  Taking advantage of branch prediction. Cache memory and the code performance.
 
Execution time for instructions. Case study for code optimization. Leveraging the documentation and specification of instructions. Reordering the code. Unrolling loops.  Taking advantage of branch prediction. Cache memory and the code performance.
 +
 +
Documentation: [http://download.intel.com/design/intelxscale/27347302.pdf Intel XScale R Core Developer’s Manual].
 +
 +
The section and focus:
 +
* A.2.1.2 — Processor execution pipe diagram. Instruction and data flow description.
 +
* 10.4 — Instruction execution time. For example, multiplication vs. addition.
 +
* 5 — Branch prediction mechanism
 +
* 4 and 6 — Cache memory. Instruction cache and Data cache.
 +
* A.3–A.5 — Optimizations as suggested by Intel.
  
 
|
 
|
 
+
Due: Choose the format of your exam: Project vs. Test.
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====03.12.2021====
+
 
 +
====02.12.2022====
 
11:10
 
11:10
 
|
 
|
Line 341: Line 376:
  
 
|
 
|
 
* '''Due By midnight''' '''Proj''' - Project
 
  
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====13-22.12.2021====
+
 
 +
====12-22.12.2022====
  
 
|
 
|
Line 357: Line 391:
 
|- style='vertical-align: top;'
 
|- style='vertical-align: top;'
 
|
 
|
====16.12.2021====
+
====16.12.2022====
 
11:10
 
11:10
 
|
 
|
Line 363: Line 397:
 
|<big>'''Exam'''</big>
 
|<big>'''Exam'''</big>
 
|}
 
|}
 +
<!--
 
Data representation in memory.  
 
Data representation in memory.  
 
Assembly code comprehension.  
 
Assembly code comprehension.  
 
Multiple choice questions and a programming task.
 
Multiple choice questions and a programming task.
 
+
-->
 
|
 
|
* '''Due''' '''ExamP1''' - Exam programming task, tested
+
* All deliverables due
 
+
<!--
 +
* '''Due by midnight''' '''ExP1''' - Exam programming task, tested
 +
* '''Due by midnight''' '''Proj''' - Project
 +
-->
 
|}
 
|}
  
 
=Assignments=
 
=Assignments=
* Homework HW1 is available from e-Studijas
+
* Homeworks are available from e-Studijas
  
  
 
{{MCU_resources}}
 
{{MCU_resources}}

Revision as of 22:52, 10 November 2022

Shortcuts: Calendar | Assignments | Resources | Today (if there is a class)

Course: Introduction to Processors

Introduction

The course is about low level hardware architecture of the computers and the programming at that level. In particular, we study ARM Assembly programming language and techniques while discussing the microprocessor resources and features that implement the instructions. The students learn how to develop a code in Assembly and what to consider when implementing efficient programs in higher level languages.

Deliverables

  • All assignments are due by the end of the day on the due date, unless otherwise specified.

Calendar

Date Topic, content Deliverables

05.09.2022

11:10

Introduction

Microprocessors and microcontrollers. Applications. Architectures. Coourse outline.

09.09.2022

11:10

Lab

Programming a microcontroller - Raspberry Pi Pico.

12.09.2022

11:10

Hexadecimal arithmetic

Representation of non-negative numbers in hardware, registers and memory. Decimal, binary, octal, and hexadecimal systems. Converting between the systems.

16.09.2022

11:10

Lab :: Quiz 1

Quiz 1

Decimal, binary, octal and hexadecimal systems.

Lab

Quiz review. Practicing the conversion between the systems with different bases


19.09.2022

11:10

Two's complement

Representing negative numbers in hardware. Register size, and why it is important. Methods for encoding negative numbers: packed, signed, bias, one's complement and two's complement. Converting between the value and two's complement in binary and hexadecimal systems.

23.09.2022

11:10

Lab :: Quiz 2

Quiz 2

Two's complement.

Lab

Quiz review. Exercises with the two's complement


26.09.2022

11:10

Processor architecture

Architecture of a processor. Registers, register file, ALU, datapath. CISC vs. RISC architectures. x86 architecture as CISC representative. ARM architecture as RISC. Instruction encoding.

30.09.2022

11:10

Lab

Developing and testing a simple Assembly program. Using cross-compilation tools. Introduction to the Make system.


03.10.2022

11:10

Computing environment

Environment and tools for compiling and debugging Assembly programs. Compiler, preprocessor, assembly, linker, loader, debugger. Cross-compilation and toolchains. Emulators and virtual machines.

07.10.2022

11:10

Lab

Advanced features of the Make system.


10.10.2022

11:10

ARM Assembly and arithmetic

Introduction to ARM Assembly language and programming. Instruction types. Arithmetic instructions. MOV, ADD, SUB. MVN, ADC, SBC, RSB, RSC. Barrel Shifter.

  • HW1 announced

14.10.2022

11:10

Lab

Evaluating and following the code "on paper".


17.10.2022

11:10

Flow control and tests

Flow control in Assembly. Branch instructions. B, BL, BX, BLX. Working directly with PC register. CPSR flags. Condition field. Bit operations. AND, ORR, EOR, BIC, shift and rotation. CMP, CMN, TST, TEQ. Fast flags and the S postfix.

21.10.2022

11:10

Lab :: Quiz 3

Quiz 3

Code comprehension.

Lab

Quiz review.

24.10.2022

11:10

Memory instructions

Reading and writing data to memory. Memory access instructions. STR, LDR, STRB, STRH, LDRB, LDRH, LDRSB, LDRSH. Addressing modes: offset, pre-indexed and post-indexed. Using barrel shifter with addressing. Data alignment in memory.

  • Due HW1
  • HW2 announced

28.10.2022

11:10

Lab

Debugging Assembly programs. Gnu debugger gdb.


31.10.2022

11:10

Calling subroutines and interfacing with C

Variable types in C: static, automatic and dynamic. Calling subroutines and parameter passing conventions. Parameters and return value. Stack and registers. Saving the registers, the context. Loading and storing multiple registers: LDM, STM. Interfacing between Assembly and C.

04.11.2022

11:10

Lab

Practice passing parameters and working with buffers.

07.11.2022

11:10

Symbols

Symbol encoding in hardware and software. Code tables. ASCII. EBCDIC. ISO code tables. Foreign letter symbols. UTF-8, UTF-16. Strings in C and memory. Converting values to symbols and strings.

  • Due HW2

11.11.2022

11:10

Midterm

Data representation in memory. Assembly code comprehension. Two programming tasks.


14.11.2022

11:10

Expressions and Macro commands

Expressions in Assembly. Operators in expressions. Constants. Assigning values to symbols. Directives: .set, .equiv, .eqv. Conditional compilation. Directives .if, .ifdef, .endif., ifb, .ifc, .ifeqs. More conditionals .ifeq, .ifge, .ifne and others. Macro commands: .macro, .endm., .rept. Recursive macros. Local macros. Macros across sections.

  • Due M1P1 - Midterm 1 programming task 1, tested
  • Due M1P2 - Midterm 1 programming task 2, tested
  • Project announced

21.11.2022

11:10

Inline Assembly

Including Assembly in C code. Inline code and Assembly code operands. Tasks for the compiler, linker and loader. Dynamic loaders and libraries.

25.11.2022

11:10

Lab

Midterm review.

28.11.2022

11:10

Optimizations

Execution time for instructions. Case study for code optimization. Leveraging the documentation and specification of instructions. Reordering the code. Unrolling loops. Taking advantage of branch prediction. Cache memory and the code performance.

Documentation: Intel XScale R Core Developer’s Manual.

The section and focus:

  • A.2.1.2 — Processor execution pipe diagram. Instruction and data flow description.
  • 10.4 — Instruction execution time. For example, multiplication vs. addition.
  • 5 — Branch prediction mechanism
  • 4 and 6 — Cache memory. Instruction cache and Data cache.
  • A.3–A.5 — Optimizations as suggested by Intel.

Due: Choose the format of your exam: Project vs. Test.

02.12.2022

11:10

Lab

Review of the course topics

12-22.12.2022

Exam week

Time for exams

16.12.2022

11:10

Exam
  • All deliverables due

Assignments

  • Homeworks are available from e-Studijas


Resources

Tutorials

Make

GDB

Remote debugging example

Debugging myprog with a parameter 10.

  • First, start the qemu emulator, providing the communications port (12345), and run it in background (&).
    • Before you do this, make sure that the port is not in use by anyone or anything.
  • Then start the gdb-multiarch with the name of the program and
  • Use the gdb command "remote target" with address (localhost) and the port (12345).
  • Finally start the program execution with "continue". Perhaps, you may want to set some breakpoints before that.
$ qemu-arm -L /usr/arm-linux-gnueabi -g 12345 myprog 10 &
$ gdb-multiarch myprog
    (gdb) target remote localhost:12345
    (gdb) continue

A few essential GDB commands

GDB command Shortcut Description
run Run the program from the beginning
continue c Continue (or start) the execution of the program
step s Execute the current line from the source. If there is a function call, step into it.

This command can have a parameter n that tells how many steps to make.

next n Execute the current line from the source. If there is a function call, stop after running it.

This command can have a parameter n that tells how many steps to make.

break <x> b <x>

Set a "breakpoint" to <x>, where <x> could be:

  • line_number in the current source code file
  • filename:line_number
  • function_name
  • filename:function_name
  • *address
  • ...and many others
list l Shows the source code (lines). Could be followed by a function_name or file:line_number
info registers i r Prints all registers and their values. Can be followed by one or more register names.
set step mode on Set running mode such that "step" will enter the code that has no debug information available.

Using "off" instead of "on" resets this mode.

ARM

Xscale

Insights