{"id":87,"date":"2020-02-21T18:53:35","date_gmt":"2020-02-21T18:53:35","guid":{"rendered":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/?p=87"},"modified":"2020-02-21T18:53:35","modified_gmt":"2020-02-21T18:53:35","slug":"melodees-status-update-for-2-22-2020","status":"publish","type":"post","link":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/2020\/02\/21\/melodees-status-update-for-2-22-2020\/","title":{"rendered":"Melodee&#8217;s Status Update for 2\/22\/2020"},"content":{"rendered":"<p><b>Progress<\/b><\/p>\n<p><span style=\"font-weight: 400\">This week I continued working on the Python firmware logic. A few changes occurred with our protocol while I was writing it that slowed down my progress.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We realized that technically tiles do not need a clock line. Originally, we planned that a tile\u2019s top and left clocks would be driven by their top and left neighbors through two clock lines. Doing so would indicate to the tile when to read from the data line of its sides. But instead, we could have the neighbor tiles\u2019 data lines be always high by default, and then go low for a clock cycle when it\u2019s ready to send data. The main tile would then determine when to read from its neighbors through its internal clock. For example, let\u2019s say that a clock cycle is 1 second. If a tile\u2019s top neighbor goes from low to high, and the tile detects this internally at timestamp 15s, the tile will be prepared to read from the tile at timestamps 16.5s, 17.5s, etc.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We also realized that we needed to change the order of bits sent in a word. Originally, this order was:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Bit 0 &#8211; Live bit (high to indicate that the tile is alive)<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Bit 1 &#8211; Sending bit (low to indicate that the tile is about to send a message)<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Bits 2-7 &#8211; Message<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Bit 8 &#8211; Parity bit (for error checking)<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">But we decided to switch the live and sending bits. The reason we did so was that the sending bit\u2019s job was to indicate to the neighbor that it should expect a message to be sent via the next 8 clock cycles. When the sending bit is high, the neighbor knows that whatever series of messages the tile was sending is now complete.<\/span><\/p>\n<p><span style=\"font-weight: 400\">It\u2019s important that the sending bit be in the beginning of the word, so that for the neighbor\u2019s perspective, if the tile is not in the middle of a message, and suddenly the data line goes low (after being high), it knows that a new message is starting.<\/span><\/p>\n<p><span style=\"font-weight: 400\">This method is useful for the case that a child is sending a parent the current topology from the child\u2019s perspective in a series of messages. If the parent realizes that one of the messages was corrupted (through checking the parity bit), the parent would need to send a \u201cresend\u201d request message to the child. The child is then expected to start over from the beginning of the series of messages. While the child is processing the resend request, it might still be sending data to the parent in parallel. How would the parent know that the child processed the resend request and has started sending the data from the beginning? If the child sends a high after it finishes a word, the parent knows that the child completed (or interrupted) sending the series of messages. Then when the child is low again, the parent knows that the child has begun resending the series of messages.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Current progress can be found under \u201ctileFirmware.py\u201d and \u201ctileFirmwareSimulator.py\u201d of our repository: <\/span><a href=\"https:\/\/github.com\/melodeeli98\/codeblox-capstone\"><span style=\"font-weight: 400\">https:\/\/github.com\/melodeeli98\/codeblox-capstone<\/span><\/a><\/p>\n<p><b>Schedule<\/b><\/p>\n<p><span style=\"font-weight: 400\">Right now, I am scheduled to complete the code by next Monday (2\/24). Because of these protocol changes, I am a little behind schedule. I plan to spend extra time this weekend catching up, and will have the code complete and tested by Monday night.<\/span><\/p>\n<p><span style=\"font-weight: 400\">According to the Gantt chart, I am scheduled to start working on the C simulator of tiles next week. I hope to be able to start this on time.<\/span><\/p>\n<p><b>Goals for next week:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Complete and test the Python firmware code.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Begin working on C simulator of tiles.<\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Progress This week I continued working on the Python firmware logic. A few changes occurred with our protocol while I was writing it that slowed down my progress. We realized that technically tiles do not need a clock line. Originally, we planned that a tile\u2019s top and left clocks would be driven by their top and left neighbors through two clock lines. Doing so would indicate to the tile when to read from the data line of its sides. But&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/2020\/02\/21\/melodees-status-update-for-2-22-2020\/\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":265,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6,8],"tags":[],"_links":{"self":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/posts\/87"}],"collection":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/users\/265"}],"replies":[{"embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/comments?post=87"}],"version-history":[{"count":1,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/posts\/87\/revisions"}],"predecessor-version":[{"id":88,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/posts\/87\/revisions\/88"}],"wp:attachment":[{"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/media?parent=87"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/categories?post=87"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/course.ece.cmu.edu\/~ece500\/projects\/s20-teamb5\/wp-json\/wp\/v2\/tags?post=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}