Last active
August 20, 2017 19:50
-
-
Save robertoalcantara/ce0e922f8fd4db2dcfe6acb5b5527ace to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
element CPU1() { //sincrono | |
#clkscale 1000 | |
mode sleep: -5; //consumo de unidades de energia por 1k ciclo de clk | |
mode active_slow: -50; | |
mode active_fast: -100; | |
mode disable: 0; | |
} | |
element TEMP() { //assincrono | |
#timescale 1ms | |
mode enable: -5; // consumo do SPI + sensor. -5 unidades de energia por tempo unidade de tempo (1ms) | |
mode disable: 0; | |
} | |
element AD_MIC(){ //assincrono | |
#timescale 1ms | |
mode enable: -2; // consumo conversor AD | |
mode disable: 0; | |
} | |
element MIC(){ //assincrono | |
#timescale 1ms | |
mode enable: -20; // analogico do MIC, a cada 100ns ativo gasta 20 unidades de energia a cada 1ms | |
mode disable: -3; // pre-amp do MIC possui um consumo constante. A cada 100ns gasta 3 unidades de energia | |
} | |
element BATTERY(){ //assíncrono | |
#timescale 7s | |
mode running: -1; //self discharge 1 unidade de energia a cada 7s | |
mode disable: 0; | |
} | |
element CHARGER() { //assincrono | |
#timescale 60s | |
mode enable: +1; | |
mode disable: 0; | |
} | |
element LED() { | |
#timescale 100ms | |
mode enable: -10; | |
mode disable: 0; | |
} | |
element RADIO(){ | |
#timescale 1ms | |
mode tx: -35; | |
mode rx: -10; | |
mode disable: 0; | |
} | |
//define os parametros inicias do modelo | |
startup { | |
#timescale 1us //quando nao definido, 1 us é o padrão | |
$ENERGY = 50000; | |
ON_AMOST = 0; | |
MIC.disable(); | |
CPU1.disable(); | |
AD_MIC.disable(); | |
TEMP.disable(); | |
RADIO.rx(); | |
CHARGER.disable(); | |
BATTERY.running(); | |
} | |
task AMOST_MIC ( TMR(25us) || ON_AMOST_MIC ) { | |
0: ON_AMOST_MIC = 1; //no momento 0 faz tudo em paralelo | |
0: AD_MIC.enable() | |
0: MIC.enable() | |
0: CPU1.active_fast(); | |
$48: ON_AMOST_MIC=0; //no ciclo de clock 48 faz isso em paralelo: | |
$48: MIC.disable(); | |
$48: AD_MIC.disable(); //os perifericos permanecerama ativos pelos 48 ciclos; | |
$48: CPU1.disable(); | |
} | |
task AMOST_TEMPERATURA ( TMR(5s) || ON_AMOST_TEMP ) { | |
#timescale 1ms; | |
0: ON_AMOST_TEMP = 1; | |
0: TEMP.enable() //esse sensor so fica pronto depois de 50ms | |
50: CPU1.active_slow(); //50ms depois de iniciar a cpu comeca a fazer algo | |
$10: ON_AMOST_TEMP=0; //computacao foi realizada em 10 ciclos lentos | |
$10: CPU1.disable(); | |
} | |
//a ideia aqui eh modelar uma tarefa que o seu tempo de execucao de pior caso raramente | |
//é atingido, e dá p/ estimar estatisticamente qdo ocorrerá. | |
task AUDIO_ANALISYS ( TMR(100ms) || ON_AUDIO_AN ) { | |
#timescale 1ms; | |
0: ON_AUDIO_AN = 1; | |
0: CPU1.active_fast(); //computacao fft realizada em 2400 ciclos | |
$2400,99.9% { //no ciclo 2400, 99,9% das vezes faz isso | |
CPU1.disable(); | |
ON_AUDIO_AN = 0; | |
} | |
$2400,0.1%: CPU1.active_slow(); | |
$8000: CPU1.disable(); //alguma computacao que demorou 8000-2400 ciclos de clock | |
$8000: LED_ENABLE = 1; | |
$8000: SIG_TX_DATA = 1; | |
$8000: ON_AUDIO_AN = 0; | |
} | |
task LED( LED_ENABLE ) { | |
#timescale 1s | |
0:LED.enable(); | |
5:LED.disable(); | |
5:LED_ENABLE = 0; | |
} | |
task TX_DATA( SIG_TX_DATA) { | |
#timescale 1ms | |
0: RADIO.tx(); | |
0: CPU1.active_fast(); | |
$28: CPU1.disable(); | |
$28 + 2000 + RANDOM(0,5000) { //radio fica ativo de 28 ciclos+ 2 a 7 segundos | |
RADIO.disable(); | |
SIG_TX_DATA = 0; | |
} | |
} | |
task RX_DATA( INTERRUPT(RX) ) { | |
0: CPU1.active_slow(); | |
$30,99.99%: { //30 ciclos para testar os dados | |
CPU1.disable(); | |
INTERRUPT(RX) = 0; | |
} | |
$330: CPU1.disable(); | |
$330: INTERRUPT(RX) = 0; | |
} | |
task CHARGER_EN( TMR(12h) || CHAR_RUN ) { | |
#timescale 1h | |
0: CHARGER.enable(); | |
0: CHAR_RUN = 1; | |
1: CHARGER.disable(); //recarregou durante 1h, 60 unidades de energia. (1 minuto = 1 uniddes). Vai recarregar novamente 12h depois. | |
1: CHAR_RUN = 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment