# Extra Credit Research Projects¶

In case you feel you need some extra points to help offset exam grades you are not happy with, here are some research projects you can work on to earn some extra credit. The points available can be up to a full letter grade, but only if you do a really good job putting together a project report. One or two pages of notes will earn some points, but not that many. Treat this like a professional research project and write a professional report to get full points.

You may be asked to make a short presentation on your project on the last day of class, when we have the final group project presentations.

## Project Requirements¶

Each project will need to be documented using Microsoft Word or reStructuredText is you want to try that. You should include figures you snarf from the internet (properly, you should note where you got them). The report should have the following sections:

• Introduction - explain what the project is seeking to do
• Research - where did you find the information needed to complete the project
• Experiments - what experiments did you conduct. What were you trying to find out? If you produce code for this project, include the code and explain how you set it up and ran it.
• Results - what were your findings
• Conclusions - why would any of this material be of interest to a person studying computer architecture assembly language?

Of course, you should make the report presentable, and run it through the spell checker at least! You can use your document to make your presentation, or set up a PowerPoint presentation. All material should end up checked in to your GitHub homework repository, under “ExtraCredit” to get the extra credit.

Note

this is an individual effort, not a team effort. do your own research and come up with your own results.

Here are the research projects:

## how does multi-core work¶

When your processor has multiple cores, you might wonder how it boots up and how each core gets assigned something to do. This project seeks to explore that issue.

Basically, you need to research what really happens when a multi-core processor first powers up, and find out how we can set up individual programs for each core to process. You should focus on the pentium processor, although you can look into the Arm for this if you choose.

Here is an Intel document on multi-core architecture that explains things pretty well. It is a bit dated, but still good reading.

You can find similar documentation for doing this on the ARM, which has four cores on the chip.

You should build some example code that shows how we can get the processor to run a program on a specific core in your machine. This can be done in C/C++ and these is code on the Internet showing how to do this. Demonstrate your code in the Linux VM for the Pentium, or on the Raspberry Pi for the ARM.

Note

You will need to configure your VM to use at least two processors for this to work with Pentium. code Those settings can be made while the machine is powered down.)

## Exploring Intel Micro-Ops¶

Intel is pretty quiet about what actually goes on inside the chip, especially when it comes to the micro-operations used to actually do the work inside the machine. Lately, though, a number of researchers have constructed “cycle-accurate” simulators for the Pentium family of chips, and these simulators set up what they think is a good approximation of the micro-operations actually at work in the chip. One such simulator is MARSSx86, which is hosted on Github.

This project will explore those micro-ops and describe how they work. You can get the needed information from the PTLsim manual:

Of course, the code itself is a good source for information, although it is a very complex C++ program. The code you need to examine is in the core/ooo-core subdirectory, and in x86/uopimpl.cpp.

You do not need to study all the micro-operations listed here, just those that we have studied in this class. Specifically, those needed to implement the standard structures and do some simple math and logic operations on data.

## Exploring Assembly Language on the ARM¶

Using the techniques we used to identify the most important AVR instructions needed to let us set up our standard structures, perform a similar experiment using the ARM processor on the Raspberry PI. If you need one of these systems to do this work, I will lend one out.

This project should show assembly language similar to that presented in the C Program Tear-Down lecture, only this code needs to be in ARM assenbly language, not Pentium code as we used in that lecture.

## Exploring an AVR Simulator¶

There is a neat open-source project that implements a full AVR processor simulator. The project is called simavr. The code for this project has been run successfully on both Mac and Linux. There have been efforts to get it running on PC systems as well.

If you want to try this project, you can set up VirtualBox on your PC so you can load up a Linux system in a virtual machine. I usually do this using another tool named Vagrant, which lets you spin up a Linux vurtual machine with minimal effort. This is a good way to practice running Linux, especially if you do not own a spare machine to experiment with.

Another option is to try to get this project running on a Raspberry Pi, which runs LInux! Hmmm, thta might be fun!

## TinyFPGA¶

I have several TinyFPGA boards coming in from SParkfun, and I am willing to let a group of you try to get some code running on these boards. They can be programmed using Verilog and all development tools are based on Python. All necessary documentation is available on the Sparkfun website. THis project will requre a written report detailing what you needed to do to get the board running, and th experiment you elected to do.

Nothing fancy is required for this project. Although the board is fully capable of being used to build a real simulator for the AVR as we attempted to do for this class, all you need to do is try to get something simple running, like a blinking light, perhaps.

If you need additional hardware, I will provif that.

## Other Topics¶

I am willing to let you do research on project of your own choosing. In this case, you need to write up a short proposal and submit it for approval. Remember it should be related to the material we have been studying.