nvboard: seperate real-time pins and non-real-time pins
* only update real-time pins every cycle
This commit is contained in:
parent
9340fec201
commit
e2127f16b7
63
board/N4
63
board/N4
|
@ -1,4 +1,5 @@
|
|||
input CLK
|
||||
input RST
|
||||
|
||||
input BTNC
|
||||
input BTNU
|
||||
|
@ -6,8 +7,6 @@ input BTND
|
|||
input BTNL
|
||||
input BTNR
|
||||
|
||||
input RST
|
||||
|
||||
input SW0
|
||||
input SW1
|
||||
input SW2
|
||||
|
@ -130,34 +129,34 @@ output SEG7F
|
|||
output SEG7G
|
||||
output DEC7P
|
||||
|
||||
output VGA_CLK
|
||||
output VGA_VSYNC
|
||||
output VGA_HSYNC
|
||||
output VGA_BLANK_N
|
||||
output VGA_R0
|
||||
output VGA_R1
|
||||
output VGA_R2
|
||||
output VGA_R3
|
||||
output VGA_R4
|
||||
output VGA_R5
|
||||
output VGA_R6
|
||||
output VGA_R7
|
||||
output VGA_G0
|
||||
output VGA_G1
|
||||
output VGA_G2
|
||||
output VGA_G3
|
||||
output VGA_G4
|
||||
output VGA_G5
|
||||
output VGA_G6
|
||||
output VGA_G7
|
||||
output VGA_B0
|
||||
output VGA_B1
|
||||
output VGA_B2
|
||||
output VGA_B3
|
||||
output VGA_B4
|
||||
output VGA_B5
|
||||
output VGA_B6
|
||||
output VGA_B7
|
||||
rt_output VGA_CLK
|
||||
rt_output VGA_VSYNC
|
||||
rt_output VGA_HSYNC
|
||||
rt_output VGA_BLANK_N
|
||||
rt_output VGA_R0
|
||||
rt_output VGA_R1
|
||||
rt_output VGA_R2
|
||||
rt_output VGA_R3
|
||||
rt_output VGA_R4
|
||||
rt_output VGA_R5
|
||||
rt_output VGA_R6
|
||||
rt_output VGA_R7
|
||||
rt_output VGA_G0
|
||||
rt_output VGA_G1
|
||||
rt_output VGA_G2
|
||||
rt_output VGA_G3
|
||||
rt_output VGA_G4
|
||||
rt_output VGA_G5
|
||||
rt_output VGA_G6
|
||||
rt_output VGA_G7
|
||||
rt_output VGA_B0
|
||||
rt_output VGA_B1
|
||||
rt_output VGA_B2
|
||||
rt_output VGA_B3
|
||||
rt_output VGA_B4
|
||||
rt_output VGA_B5
|
||||
rt_output VGA_B6
|
||||
rt_output VGA_B7
|
||||
|
||||
input PS2_CLK
|
||||
input PS2_DAT
|
||||
rt_input PS2_CLK
|
||||
rt_input PS2_DAT
|
||||
|
|
|
@ -5,10 +5,7 @@
|
|||
#include <vga.h>
|
||||
#include <keyboard.h>
|
||||
|
||||
#define NVBOARD_DIR_input false
|
||||
#define NVBOARD_DIR_output true
|
||||
|
||||
void nvboard_init();
|
||||
void nvboard_quit();
|
||||
void nvboard_bind_pin(void *signal, bool is_output, int len, ...);
|
||||
void nvboard_bind_pin(void *signal, bool is_rt, bool is_output, int len, ...);
|
||||
void nvboard_update();
|
||||
|
|
|
@ -10,7 +10,20 @@ def inout_dict(file_path):
|
|||
line = line.strip(' \n')
|
||||
line = line.split(' ')
|
||||
if len(line) == 2:
|
||||
inout[line[1].replace(' ', '')] = line[0].replace(' ', '')
|
||||
direction = line[0].replace(' ', '')
|
||||
is_real_time_str = 'false'
|
||||
is_output_str = ''
|
||||
if direction.startswith('rt_'):
|
||||
is_real_time_str = 'true'
|
||||
direction = direction[3:]
|
||||
if direction == "input":
|
||||
is_output_str = 'false'
|
||||
elif direction == "output":
|
||||
is_output_str = 'true'
|
||||
else:
|
||||
print("invalid direction")
|
||||
exit(-1)
|
||||
inout[line[1].replace(' ', '')] = (is_output_str, is_real_time_str)
|
||||
line = f.readline()
|
||||
return inout
|
||||
|
||||
|
@ -54,7 +67,8 @@ def bind_pin(f, inout, signal, pin):
|
|||
pin = pin.replace(' ', '')
|
||||
check_pin_valid(inout, pin)
|
||||
signal_addr = "&top->" + signal
|
||||
write_dep(bind_f, "nvboard_bind_pin(" + signal_addr + ", " + "NVBOARD_DIR_" + inout[pin] + ", 1, " + pin + ");\n")
|
||||
strs = inout[pin]
|
||||
write_dep(bind_f, "nvboard_bind_pin(" + signal_addr + ", " + strs[1] + ", " + strs[0] + ", 1, " + pin + ");\n")
|
||||
|
||||
|
||||
def bind_vec_pins(f, inout, signal, pins):
|
||||
|
@ -62,7 +76,8 @@ def bind_vec_pins(f, inout, signal, pins):
|
|||
pins[idx] = pins[idx].replace(' ', '')
|
||||
check_pin_valid(inout, pins[idx])
|
||||
signal_addr = "&top->" + signal
|
||||
write_dep(bind_f, "nvboard_bind_pin(" + signal_addr + ", " + "NVBOARD_DIR_" + inout[pins[0]] + ", " + str(len(pins)))
|
||||
strs = inout[pins[0]]
|
||||
write_dep(bind_f, "nvboard_bind_pin(" + signal_addr + ", " + strs[1] + ", " + strs[0] + ", " + str(len(pins)))
|
||||
for idx in range(len(pins)):
|
||||
write_dep(bind_f, ", " + pins[idx])
|
||||
write_dep(bind_f, ");\n")
|
||||
|
|
|
@ -35,6 +35,7 @@ typedef struct PinMap {
|
|||
} PinMap;
|
||||
|
||||
static PinMap *pin_map = NULL;
|
||||
static PinMap *rt_pin_map = NULL; // real-time pins
|
||||
|
||||
static SDL_Window *main_window = nullptr;
|
||||
static SDL_Renderer *main_renderer = nullptr;
|
||||
|
@ -85,7 +86,7 @@ static void nvboard_update_output(PinMap *p) {
|
|||
}
|
||||
|
||||
void nvboard_update() {
|
||||
for (auto p = pin_map; p != NULL; p = p->next) {
|
||||
for (auto p = rt_pin_map; p != NULL; p = p->next) {
|
||||
if (p->is_output) nvboard_update_output(p);
|
||||
else nvboard_update_input(p);
|
||||
}
|
||||
|
@ -96,6 +97,12 @@ void nvboard_update() {
|
|||
uint64_t now = get_time();
|
||||
if (now - last > 1000000 / FPS) {
|
||||
last = now;
|
||||
|
||||
for (auto p = pin_map; p != NULL; p = p->next) {
|
||||
if (p->is_output) nvboard_update_output(p);
|
||||
else nvboard_update_input(p);
|
||||
}
|
||||
|
||||
SDL_RenderPresent(main_renderer);
|
||||
int ev = read_event();
|
||||
if (ev != -1) { update_components(main_renderer); }
|
||||
|
@ -142,7 +149,7 @@ void nvboard_quit(){
|
|||
SDL_Quit();
|
||||
}
|
||||
|
||||
void nvboard_bind_pin(void *signal, bool is_output, int len, ...) {
|
||||
void nvboard_bind_pin(void *signal, bool is_rt, bool is_output, int len, ...) {
|
||||
PinMap *p = new PinMap;
|
||||
p->is_output = is_output;
|
||||
p->len = len;
|
||||
|
@ -162,6 +169,6 @@ void nvboard_bind_pin(void *signal, bool is_output, int len, ...) {
|
|||
va_end(ap);
|
||||
|
||||
p->signal = signal;
|
||||
p->next = pin_map;
|
||||
pin_map = p;
|
||||
if (is_rt) { p->next = rt_pin_map; rt_pin_map = p; }
|
||||
else { p->next = pin_map; pin_map = p; }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue