Skip to content

Commit e02b088

Browse files
committed
refactor(main&makefile): support different processor model.
1 parent ec38ab4 commit e02b088

File tree

2 files changed

+94
-29
lines changed

2 files changed

+94
-29
lines changed

Makefile

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,55 @@
1+
T ?= dummy
2+
MODEL ?= iss
3+
ARGS ?=
4+
15
SIM = sim/build/Simulator
26
TARGET = test/build/$(T).bin
37

4-
all:
8+
.PHONY: all build build-sim build-test
9+
10+
all: build
11+
build: build-sim build-test
12+
13+
build-sim:
514
@echo "-------Build Simulator-------"
615
@$(MAKE) -C sim
16+
17+
build-test:
718
@echo "-------Build Test-------"
819
@$(MAKE) -C test T=$(T)
20+
21+
.PHONY: run iss mc debug itrace ftrace
22+
23+
# Usage:
24+
# make run T=dummy MODEL=mc
25+
# make run T=dummy MODEL=iss ARGS="--itrace"
26+
run: build
927
@echo "-------Start Simulation-------"
10-
@$(SIM) $(T) --batch
28+
@echo " MODEL: $(MODEL)"
29+
@echo " IMAGE: $(TARGET)"
30+
@echo " ARGS: $(ARGS)"
31+
@echo "------------------------------"
32+
@$(SIM) $(MODEL) $(T) $(ARGS)
33+
34+
# run iss
35+
# Usage: make iss T=dummy
36+
iss:
37+
@$(MAKE) run MODEL=iss T=$(T) ARGS="--batch"
38+
39+
mc:
40+
@$(MAKE) run MODEL=mc T=$(T) ARGS=""
1141

1242
debug:
13-
@echo "-------Build Simulator-------"
14-
@$(MAKE) -C sim
15-
@echo "-------Build Test-------"
16-
@$(MAKE) -C test T=$(T)
17-
@echo "-------Start Debugging-------"
18-
@$(SIM) $(T) --debug
43+
@$(MAKE) run MODEL=iss T=$(T) ARGS="--debug"
1944

2045
itrace:
21-
@echo "-------Build Simulator-------"
22-
@$(MAKE) -C sim
23-
@echo "-------Build Test-------"
24-
@$(MAKE) -C test T=$(T)
25-
@echo "-------Start Debugging-------"
26-
@$(SIM) $(T) --itrace
46+
@$(MAKE) run MODEL=iss T=$(T) ARGS="--itrace"
2747

2848
ftrace:
29-
@echo "-------Build Simulator-------"
30-
@$(MAKE) -C sim
31-
@echo "-------Build Test-------"
32-
@$(MAKE) -C test T=$(T)
33-
@echo "-------Start Debugging-------"
34-
@$(SIM) $(T) --ftrace
49+
@$(MAKE) run MODEL=iss T=$(T) ARGS="--ftrace"
3550

36-
unit_test:
37-
@echo "------- Building and Running Simulator Unit Tests -------"
38-
@$(MAKE) -C sim unit_test
51+
.PHONY: clean
3952

4053
clean:
4154
@$(MAKE) -C sim clean
4255
@$(MAKE) -C test clean
43-
44-
.PHONY: clean all unit_test

sim/src/main.c

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,42 @@ int ftrace_enabled = 0;
1010
SymbolTable *sym_table = NULL;
1111
LLVMDisasmContextRef disasm_ctx;
1212

13-
const char *help_string = "Usage: Simulator <img_file> [-d|-b]\n"
14-
"Options:\n"
15-
" -d run in debug mode\n"
16-
" -b run in batch mode\n";
13+
const char *help_string = "Usage: Simulator <model> <img_file> [options]\n"
14+
"Models:\n"
15+
" iss Instruction Set Simulator\n"
16+
" mc Multi-cycle Performance Simulator\n"
17+
" pl Pipeline Performance Simulator\n";
18+
19+
int run_iss_model(int argc, char *argv[]);
20+
int run_mc_model(int argc, char *argv[]);
21+
int run_pl_model(int argc, char *argv[]);
1722

1823
int main(int argc, char *argv[]){
24+
printf("argc: %d\n", argc);
25+
if (argc < 3) {
26+
printf("%s\n", help_string);
27+
}
28+
29+
char *model = argv[1];
30+
31+
if (strcmp(model, "iss") == 0) {
32+
run_iss_model(argc - 1, argv + 1);
33+
}
34+
else if (strcmp(model, "mc") == 0) {
35+
run_mc_model(argc - 1, argv + 1);
36+
}
37+
else if (strcmp(model, "pl") == 0) {
38+
run_pl_model(argc - 1, argv + 1);
39+
}
40+
else {
41+
printf("Error: Unknown model '%s'.\n", model);
42+
return -1;
43+
}
44+
45+
return 0;
46+
}
47+
48+
int run_iss_model(int argc, char *argv[]) {
1949
mem = (uint8_t *)malloc(MEM_SIZE);
2050
check_mem(mem);
2151
memset(mem, 0, MEM_SIZE);
@@ -58,3 +88,27 @@ int main(int argc, char *argv[]){
5888
if(mem) free(mem);
5989
return -1;
6090
}
91+
92+
int run_mc_model(int argc, char *argv[]) {
93+
mem = (uint8_t *)malloc(MEM_SIZE);
94+
check_mem(mem);
95+
memset(mem, 0, MEM_SIZE);
96+
97+
char image_file[128] = "";
98+
sprintf(image_file, "test/build/%s.bin", argv[1]);
99+
load_image(image_file);
100+
101+
// TODO: multi_cycle_cpu_exec()
102+
103+
free(mem);
104+
return 0;
105+
106+
error:
107+
if(mem) free(mem);
108+
return -1;
109+
}
110+
111+
int run_pl_model(int argc, char *argv[]) {
112+
// TODO: pipeline model
113+
return 0;
114+
}

0 commit comments

Comments
 (0)