203
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										203
									
								
								index.html
									
									
									
									
									
								
							| @@ -217,10 +217,11 @@ | ||||
|                 </section> | ||||
|                 <section data-transition="fade-in slide-out"> | ||||
|                     <h2>What is an Emulator?</h2> | ||||
|                     <img src="media/bbs-example.png"> | ||||
|                     <img src="media/vt100-MA-4352.png"> | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>Emulation Depends on your Goals!</h2> | ||||
|                     <p class="fragment">Emulation is a lie</p> | ||||
|                 </section> | ||||
|                 <!-- <section> | ||||
|                     <h2>Renode Is Many of These</h2> | ||||
| @@ -233,11 +234,7 @@ | ||||
|             </section> | ||||
|  | ||||
|             <section> | ||||
|                 <section data-transition="fade-out"> | ||||
|                     <h2>What is a Computer?</h2> | ||||
|                     <img class="fragment" src="media/bluenrg-block-diagram.png"> | ||||
|                 </section> | ||||
|                 <section data-transition="fade"> | ||||
|                 <section data-transition="slide-in fade-out"> | ||||
|                     <h2>What is a Computer?</h2> | ||||
|                     <ul> | ||||
|                         <li>A system of devices</li> | ||||
| @@ -292,10 +289,11 @@ | ||||
|                             IRQ -> cpu@0 | ||||
|  | ||||
|                         cpu: CPU.CortexM @ sysbus | ||||
|                             nvic: nvic | ||||
|                             cpuType: "cortex-m0+" | ||||
|                             PerformanceInMips: 24 | ||||
|                             nvic: nvic | ||||
|                     </code></pre> | ||||
|                     bluenrg-1.repl | ||||
|                 </section> | ||||
|             </section> | ||||
|  | ||||
| @@ -412,10 +410,11 @@ | ||||
|                             cpuType: "cortex-m0+" | ||||
|                             PerformanceInMips: 24 | ||||
|                     </code></pre> | ||||
|                     bluenrg-1.repl | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>Setting up Renode</h2> | ||||
|                     <pre data-id="code-animation"><code data-trim> | ||||
|                     <pre data-id="code-animation"><code data-trim data-line-numbers="|1|2|3-5|6|"> | ||||
|                         machine LoadPlatformDescription @bluenrg-1.repl | ||||
|                         sysbus LoadBinary @BLE_Chat_Server.bin 0x10040000 | ||||
|                         cpu VectorTableOffset 0x10040000 | ||||
| @@ -464,151 +463,96 @@ | ||||
|                     <h2>Modify an Existing Block</h2> | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>Example Serial Port: LiteX UART</h2> | ||||
|                     <pre class="code-animation"><code class="cs" data-trim data-line-numbers="|132-140|118-126|125|20-33"> | ||||
|                     <h2>Example Serial Port: AxiUartLite</h2> | ||||
|                     <pre class="code-animation"><code class="cs" data-trim data-line-numbers="|80-83|55-61|35-45|39-45"> | ||||
|                         // | ||||
|                         // Copyright (c) 2010-2018 Antmicro | ||||
|                         // | ||||
|                         // This file is licensed under the MIT License. | ||||
|                         // Full license text is available in 'licenses/MIT.txt'. | ||||
|                         // | ||||
|                     using System.Collections.Generic; | ||||
|                         using System; | ||||
|                         using Antmicro.Renode.Peripherals.Bus; | ||||
|                     using Antmicro.Renode.Core.Structure.Registers; | ||||
|                         using System.Collections.Generic; | ||||
|                         using Antmicro.Renode.Core; | ||||
|                         using Antmicro.Renode.Logging; | ||||
|                         using Antmicro.Renode.Peripherals.Miscellaneous; | ||||
|                         using Antmicro.Migrant; | ||||
|                          | ||||
|                         namespace Antmicro.Renode.Peripherals.UART | ||||
|                         { | ||||
|                         public class LiteX_UART : UARTBase, IDoubleWordPeripheral, IBytePeripheral, IKnownSize | ||||
|                             [AllowedTranslations(AllowedTranslation.ByteToDoubleWord)] | ||||
|                             public class AxiUartLite : IDoubleWordPeripheral, IUART, IKnownSize | ||||
|                             { | ||||
|                             public LiteX_UART(Machine machine) : base(machine) | ||||
|                                 public AxiUartLite() | ||||
|                                 { | ||||
|                                 IRQ = new GPIO(); | ||||
|                                 var registersMap = new Dictionary<long, DoubleWordRegister> | ||||
|                                 { | ||||
|                                     {(long)Registers.RxTx, new DoubleWordRegister(this) | ||||
|                                     .WithValueField(0, 8, | ||||
|                                         writeCallback: (_, value) =>  | ||||
|                                             this.TransmitCharacter((byte)value), | ||||
|                                         valueProviderCallback: _ => { | ||||
|                                             if(!TryGetCharacter(out var character)) | ||||
|                                             { | ||||
|                                                 this.Log(LogLevel.Warning, "Empty Rx FIFO."); | ||||
|                                     readFifo = new Queue<uint>(); | ||||
|                                 } | ||||
|                                             return character; | ||||
|                                         }) | ||||
|                                     }, | ||||
|                                     {(long)Registers.TxFull, new DoubleWordRegister(this) | ||||
|                                         .WithFlag(0, FieldMode.Read) //tx is never full | ||||
|                                     }, | ||||
|                                     {(long)Registers.RxEmpty, new DoubleWordRegister(this) | ||||
|                                         .WithFlag(0, FieldMode.Read, valueProviderCallback: _ => Count == 0) | ||||
|                                     }, | ||||
|                                     {(long)Registers.EventPending, new DoubleWordRegister(this) | ||||
|                                         // `txEventPending` implements `WriteOneToClear` semantics to avoid fake warnings | ||||
|                                         // `txEventPending` is generated on the falling edge of TxFull; in our case it means never | ||||
|                                         .WithFlag(0, FieldMode.Read | FieldMode.WriteOneToClear, valueProviderCallback: _ => false, name: "txEventPending") | ||||
|                                         .WithFlag(1, out rxEventPending, FieldMode.Read | FieldMode.WriteOneToClear, name: "rxEventPending") | ||||
|                                         .WithWriteCallback((_, __) => UpdateInterrupts()) | ||||
|                                     }, | ||||
|                                     {(long)Registers.EventEnable, new DoubleWordRegister(this) | ||||
|                                         .WithFlag(0, name: "txEventEnabled") | ||||
|                                         .WithFlag(1, out rxEventEnabled) | ||||
|                                         .WithWriteCallback((_, __) => UpdateInterrupts()) | ||||
|                                     }, | ||||
|                                 }; | ||||
|                          | ||||
|                                 registers = new DoubleWordRegisterCollection(this, registersMap); | ||||
|                                 public void WriteChar(byte value) | ||||
|                                 { | ||||
|                                     readFifo.Enqueue(value); | ||||
|                                 } | ||||
|                          | ||||
|                                 public void Reset() | ||||
|                                 { | ||||
|                                     readFifo.Clear(); | ||||
|                                 } | ||||
|                          | ||||
|                                 public uint ReadDoubleWord(long offset) | ||||
|                                 { | ||||
|                                 return registers.Read(offset); | ||||
|                             } | ||||
|                      | ||||
|                             public byte ReadByte(long offset) | ||||
|                                     switch((Register)offset) | ||||
|                                     { | ||||
|                                 if(offset % 4 != 0) | ||||
|                                     case Register.RxFIFO: | ||||
|                                         if(readFifo.Count == 0) | ||||
|                                         { | ||||
|                                     // in the current configuration, only the lowest byte | ||||
|                                     // contains a meaningful data | ||||
|                                             this.Log(LogLevel.Warning, "Trying to read from empty fifo."); | ||||
|                                             return 0; | ||||
|                                         } | ||||
|                                 return (byte)ReadDoubleWord(offset); | ||||
|                                         return readFifo.Dequeue(); | ||||
|                                     case Register.Status: | ||||
|                                         // Tx FIFO Empty | Rx FIFO Valid Data | ||||
|                                         return (1u << 2) | (readFifo.Count == 0 ? 0 : 1u); | ||||
|                                     default: | ||||
|                                         this.LogUnhandledRead(offset); | ||||
|                                         return 0; | ||||
|                                     } | ||||
|                      | ||||
|                             public override void Reset() | ||||
|                             { | ||||
|                                 base.Reset(); | ||||
|                                 registers.Reset(); | ||||
|                      | ||||
|                                 UpdateInterrupts(); | ||||
|                                 } | ||||
|                          | ||||
|                                 public void WriteDoubleWord(long offset, uint value) | ||||
|                                 { | ||||
|                                 registers.Write(offset, value); | ||||
|                                     switch((Register)offset) | ||||
|                                     { | ||||
|                                     case Register.TxFIFO: | ||||
|                                         CharReceived?.Invoke((byte)value); | ||||
|                                         break; | ||||
|                                     default: | ||||
|                                         this.LogUnhandledWrite(offset, value); | ||||
|                                         break; | ||||
|                                     } | ||||
|                                 } | ||||
|                          | ||||
|                             public void WriteByte(long offset, byte value) | ||||
|                                 [field: Transient] | ||||
|                                 public event Action<byte> CharReceived; | ||||
|                          | ||||
|                                 public long Size { get { return 0x10; } } | ||||
|                                 public Bits StopBits { get { return Bits.One; } } | ||||
|                                 public Parity ParityBit { get { return Parity.None; } } | ||||
|                                 public uint BaudRate { get { return 0; } } | ||||
|                          | ||||
|                                 private readonly Queue<uint> readFifo; | ||||
|                          | ||||
|                                 private enum Register | ||||
|                                 { | ||||
|                                 if(offset % 4 != 0) | ||||
|                                 { | ||||
|                                     // in the current configuration, only the lowest byte | ||||
|                                     // contains a meaningful data | ||||
|                                     return; | ||||
|                                 } | ||||
|                      | ||||
|                                 WriteDoubleWord(offset, value); | ||||
|                             } | ||||
|                              | ||||
|                             public long Size => 0x100; | ||||
|                      | ||||
|                             public GPIO IRQ { get; private set; } | ||||
|                      | ||||
|                             public override Bits StopBits => Bits.One; | ||||
|                      | ||||
|                             public override Parity ParityBit => Parity.None; | ||||
|                      | ||||
|                             public override uint BaudRate => 115200; | ||||
|                      | ||||
|                             protected override void CharWritten() | ||||
|                             { | ||||
|                                 UpdateInterrupts(); | ||||
|                             } | ||||
|                      | ||||
|                             protected override void QueueEmptied() | ||||
|                             { | ||||
|                                 UpdateInterrupts(); | ||||
|                             } | ||||
|                      | ||||
|                             private void UpdateInterrupts() | ||||
|                             { | ||||
|                                 // rxEventPending is latched | ||||
|                                 rxEventPending.Value = (Count != 0); | ||||
|                      | ||||
|                                 // tx fifo is never full, so `txEventPending` is always false | ||||
|                                 var eventPending = (rxEventEnabled.Value && rxEventPending.Value); | ||||
|                                 IRQ.Set(eventPending); | ||||
|                             } | ||||
|                      | ||||
|                             private IFlagRegisterField rxEventEnabled; | ||||
|                             private IFlagRegisterField rxEventPending; | ||||
|                             private readonly DoubleWordRegisterCollection registers; | ||||
|                      | ||||
|                             private enum Registers : long | ||||
|                             { | ||||
|                                 RxTx = 0x0, | ||||
|                                 TxFull = 0x04, | ||||
|                                 RxEmpty = 0x08, | ||||
|                                 EventStatus = 0x0c, | ||||
|                                 EventPending = 0x10, | ||||
|                                 EventEnable = 0x14, | ||||
|                                     RxFIFO = 0x0, | ||||
|                                     TxFIFO = 0x4, | ||||
|                                     Status = 0x8, | ||||
|                                     Control = 0xC | ||||
|                                 } | ||||
|                             } | ||||
|                         }                         | ||||
|                     </code></pre> | ||||
|                     AxiUartLite.cs | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>Steps to Set Up a Serial Port</h2> | ||||
| @@ -629,10 +573,12 @@ | ||||
|                 <section> | ||||
|                     <h2>Peripheral Rapid Development</h2> | ||||
|                     <img src="media/hardware-20191117-cropped.jpg"> | ||||
|                     Betrusted Prototype | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>Peripheral Rapid Development</h2> | ||||
|                     <video class="r-stretch" data-autoplay src="media/Renode-20191117-trimmed.m4v"></video> | ||||
|                     <p>Hackaday Supercon 2019</p> | ||||
|                 </section> | ||||
|                 <section data-transition="fade-out"> | ||||
|                     <h2>Advantages of Emulation</h2> | ||||
| @@ -642,6 +588,11 @@ | ||||
|                     <h2>Advantages of Emulation</h2> | ||||
|                     <img src="media/renode-xous-double-uart-tiled.png"> | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>Getting Hardware to Users</h2> | ||||
|                     <img src="media/betrusted-engine-block-diagram.png" class="r-stretch"> | ||||
|                     <p>Betrusted ENGINE</p> | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>Getting Hardware to Users</h2> | ||||
|                     <img src="media/betrusted-wycheproof-patch.png"> | ||||
| @@ -650,6 +601,9 @@ | ||||
|                     <h2>Getting Hardware to Users</h2> | ||||
|                     <img src="media/betrusted-wycheproof-patch-fix.png"> | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>Emulation brings more eyes to the project</h2> | ||||
|                 </section> | ||||
|             </section> | ||||
|             <!--  | ||||
|             <section> | ||||
| @@ -722,7 +676,7 @@ | ||||
|             <section> | ||||
|                 <section> | ||||
|                     <h2>Robot Framework: Running Tests in CI</h2> | ||||
|                     <pre class="code-animation"><code class="robot" data-trim data-line-numbers="|1-6|8-18|20-26|28-40"> | ||||
|                     <pre class="code-animation"><code class="robot" data-trim data-line-numbers="|1-6|8-18|20-26|28-40|39-40"> | ||||
|                             *** Settings *** | ||||
|                                 Suite Setup                   Setup | ||||
|                                 Suite Teardown                Teardown | ||||
| @@ -764,6 +718,7 @@ | ||||
|                                 Wait For Line On Uart   | ||||
|                                 ...     x 9.997213 , y 4.997410 , z -4.999803 | ||||
|                     </code></pre> | ||||
|                     <p>LIS2DS12.robot</p> | ||||
|                 </section> | ||||
|             </section> | ||||
|             <section> | ||||
| @@ -772,7 +727,7 @@ | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>SVD: Standard Chip Documentation</h2> | ||||
|                     <pre class="code-animation"><code class="xml" data-trim data-line-numbers="|3-9|25-87|27-31|39-57|43|46-47|48-56"> | ||||
|                     <pre class="code-animation"><code class="xml" data-trim data-line-numbers="|3-9|25-87|27-31|31|39-57|41|43|46-47|48-56"> | ||||
|                         <?xml version='1.0' encoding='utf-8'?> | ||||
|                         <device xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.1" xsi:noNamespaceSchemaLocation="CMSIS-SVD_Schema_1_1_draft.xsd"> | ||||
|                             <vendor>STMicroelectronics</vendor> | ||||
| @@ -862,6 +817,7 @@ | ||||
|                             </peripherals> | ||||
|                         </device> | ||||
|                         </code></pre> | ||||
|                         <p>BlueNRG2.svd</p> | ||||
|                 </section> | ||||
|                 <section> | ||||
|                     <h2>SVD: Using with Renode</h2> | ||||
| @@ -895,6 +851,15 @@ | ||||
|                     <img src="media/renode-multi-system.png"> | ||||
|                 </section> | ||||
|             </section> | ||||
|             <section> | ||||
|                 <h2>Other Features</h2> | ||||
|                 <ul> | ||||
|                     <li>Loading peripherals at runtime</li> | ||||
|                     <li>Adding custom instructions to Risc-V</li> | ||||
|                     <li>Python hooks for memory access</li> | ||||
|                     <li>Networking</li> | ||||
|                 </ul> | ||||
|             </section> | ||||
|             <section> | ||||
|                 <h2>Renode is Free Software</h2> | ||||
|                 Give it a try! | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								media/betrusted-engine-block-diagram.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								media/betrusted-engine-block-diagram.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 48 KiB | 
							
								
								
									
										
											BIN
										
									
								
								media/frame.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								media/frame.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 2.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								media/vt100-MA-4352.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								media/vt100-MA-4352.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 135 KiB | 
							
								
								
									
										
											BIN
										
									
								
								media/vt100-MA-4356.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								media/vt100-MA-4356.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 76 KiB | 
		Reference in New Issue
	
	Block a user