GPIO Automated Test Bench

In the previous post, Testing like a Pro, I explained some general guidelines to thoroughly verify the behavior of an RTL design. I’ve been working on the test bench for the GPIO over the past week. In this post I’ll explain it’s features and give a block diagram to two ways that can be used to implement this design. The GPIP new automated test bench have the following features:  It’s basic testing sequence is it sets the GPIO direction, writes Read more

Testing like a Pro

We are now using XCFE in Aeste, probably because it’s supposed to be a “light” desktop environment. However, I didn’t fancy it’s looks and absence of keyboard shortcuts similar to Ubuntu. Hence I took some time to make my desktop environment usable and setup some keyboard shortcuts. You can find out how to setup shortcuts from here. Here is a list of the ones that I set and their command names Applications Menu /usr/bin/xfce4-popup-applicationsmenu Take a screenshot xfce4-screenshooter -f Open Read more

Final Week and Some Impressions

This is my last post for the entire internship that I had gone through in AESTE Works. To sum up the work for this week, I did the cleanup and pushing to Github. The porting of FreeRTOS to the latest AEMB2 was not yet complete, but most of the relative issues had been identified and fixed.  The interrupt mechanism used during critical regions might not be useful and maybe the next person to take over from me can think of Read more

Debugging CPU

In this post I’ll explain how I debug the new core of AEMB, and the current bug that I’m facing. Debugging the CPU takes place using the demo program originally attached with AEMB. The waveform generated from the demo program running on the new CPU is compared with the waveform generated by AEMB. This way I try to ensure that the same instructions are executed in the same order with respect to each thread and that write backs are in Read more

CPU Modifications

In the previous post I’ve explained how the threading model of the new AEMB. In this post I will explain all the changes to the old AEMB core that were necessary to accommodate a coarse grained model and sum up with an analysis of how the new threading model affects the performance. To begin with the major change was in the instruction address circuit. The registers holding the possible address for the next instruction were greatly altered. For a list Read more

Coarse-Grained Threading

Finally I’ve changed the threading model of the AEMB. While some instructions are still buggy and hence the demo program doesn’t run properly, I still want to use this post and the next one to explain the changes I’ve made so far. In this post I’ll explain about the design of the new threading model and how is it expected to behave. I will provide pipeline diagrams and actual waveform from the demo program running on it.  The Coarse grained model changes Read more

Modifying Critical Region on FreeRTOS

The critical region is where only one task will run on FreeRTOS and that task will continue to run until it exits the critical region. There will not be any other task running during that phase. For the older AEMB2 with only one active thread, the FreeRTOS will disable the context switching of the thread by disabling the interrupts. Since the interrupts are disabled for the active thread, no task can be switched in and the current running task will Read more

Modifying Interrupt Behaviour

AEMB has just been updated last week. The fix will prevent the tasks from breaking out of their loop. This solves the problem I faced last time where the tasks run and goes into the main function. Therefore, the new AEMB will need to be tested again to check for any more problems. Here is the new output with 2 tasks running with same priority 1. As the output shows, the tasks are both running continuously. However, as there are Read more

Interrupts on Multiple Threads

Continuing from the previous test, an in depth look is taken on the output on AEMB. The GTKWave shows that the AEMB actually stop running anything at all on one thread . This is a huge error and means that the task not only stop running, but the FreeRTOS stops as well. A further investigation found that there are two interrupts that happen concurrently. During the first interrupt, another interrupt happen before the previous interrupt ended. The dark blue line Read more