Merge branch 'master' of ssh://github.com/phm19a/upsilon

This commit is contained in:
Peter McGoron 2023-01-30 13:54:58 +00:00
commit f88e0ef15c
1 changed files with 114 additions and 34 deletions

View File

@ -49,24 +49,93 @@ static void set_value(V val, unsigned name) {
int main(int argc, char **argv) { int main(int argc, char **argv) {
init(argc, argv); init(argc, argv);
int Con, // Continue option for user
P = 3, // Default P value
I = 0, // Default I value
Delay = 20, // Default Delay value
SetPt = 10000, // Default SetPt value
Status = 1, // Default Status value
Option_Picked; // Option user picked
do
{
mod = new ModType; mod = new ModType;
Transfer func = Transfer{150, 0, 2, 1.1, 10, -1}; Transfer func = Transfer{150, 0, 2, 1.1, 10, -1};
mod->clk = 0; mod->clk = 0;
// Replace CONTROL_LOOP_P with an int P and the number with char or string seed // Testing this char for P value
char Data_Change_S = '0b11010111000010100011110101110000101000111';
// Default value for P, some type of error where it won't accept any string, int | Try char next time
set_value(0b11010111000010100011110101110000101000111, CONTROL_LOOP_P); set_value(0b11010111000010100011110101110000101000111, CONTROL_LOOP_P);
/* Constant values must be sized to 64 bits, or else the compiler
* will think they are 32 bit and silently mess things up // Default value
*/
// Replace CONTROL_LOOP_I with int I
set_value((V)6 << CONSTS_FRAC, CONTROL_LOOP_I); set_value((V)6 << CONSTS_FRAC, CONTROL_LOOP_I);
set_value(20, CONTROL_LOOP_DELAY); set_value(Delay, CONTROL_LOOP_DELAY);
set_value(10000, CONTROL_LOOP_SETPT); set_value(SetPt, CONTROL_LOOP_SETPT);
set_value(1, CONTROL_LOOP_STATUS); set_value(Status, CONTROL_LOOP_STATUS);
// Menu
do
{
printf("%15s\n", "Menu");
printf("1) Set Control loop P Current value: %d\n", P);
printf("2) Set Control loop I Current value: %d\n", I);
printf("3) Set Delay Current value: %d\n", Delay);
printf("4) Set setpoint Current value: %d\n", SetPt);
printf("5) Set status Current value: %d\n", Status);
printf("6) Continue\n");
// Checks for what option user picks
scanf("%d", &Option_Picked);
// Clears unix screen
system("clear");
switch (Option_Picked)
{
case 1:
// This case doesn't work for some reason? Need further time to figure it out
printf("Please input new Control Loop P value: ");
scanf("%d", &P);
set_value(P, CONTROL_LOOP_P);
break;
case 2:
printf("Please input new Control Loop I value: ");
scanf("%d", &I);
set_value(I, CONTROL_LOOP_I);
break;
case 3:
printf("Please input new delay value: ");
scanf("%d", &Delay);
set_value(Delay, CONTROL_LOOP_DELAY);
break;
case 4:
printf("Please input new setpoint value: ");
scanf("%d", &SetPt);
set_value(SetPt, CONTROL_LOOP_SETPT);
break;
case 5:
printf("Please input new status value: ");
scanf("%d", &Status);
set_value(Status, CONTROL_LOOP_STATUS);
break;
}
} while (Option_Picked != 6);
mod->curset = 0; mod->curset = 0;
for (int tick = 0; tick < 500000; tick++) { // Resets Con to 1 to activate for loop
Con = 1;
for (int tick = 0; Con == 1; tick++) {
run_clock(); run_clock();
if (mod->request && !mod->fulfilled) { if (mod->request && !mod->fulfilled) {
/* Verilator values are not sign-extended to the /* Verilator values are not sign-extended to the
@ -84,9 +153,20 @@ int main(int argc, char **argv) {
if (mod->finish_cmd) { if (mod->finish_cmd) {
mod->start_cmd = 0; mod->start_cmd = 0;
} }
// After 100000 ticks shows user prompt, might make tick to be changable for user.
if (tick % 100000 == 0 && tick != 0)
{
printf("Continue? (0 for exit, 1 for yes, 2 to return to menu)\n");
scanf("%d", &Con);
} }
}
// Clears unix screen
system("clear");
mod->final(); mod->final();
delete mod; delete mod;
} while (Con == 2);
return 0; return 0;
} }