nvboard: remove is_rt and is_output in nvboard_bind_pin() API
* after refactoring the internal implementation, they are unused now
This commit is contained in:
parent
adb4b76976
commit
166f29349d
11
README.md
11
README.md
|
@ -16,10 +16,10 @@ NVBoard(NJU Virtual Board)是基于SDL开发的虚拟FPGA开发板,可以在Ve
|
|||
│ ├── at_scancode.h
|
||||
│ ├── component.h
|
||||
│ ├── configs.h
|
||||
│ ├── constrs.h
|
||||
│ ├── keyboard.h
|
||||
│ ├── macro.h
|
||||
│ ├── nvboard.h
|
||||
│ ├── pins.h
|
||||
│ ├── render.h
|
||||
│ └── vga.h
|
||||
├── pic # NVBoard图片资源
|
||||
|
@ -27,9 +27,10 @@ NVBoard(NJU Virtual Board)是基于SDL开发的虚拟FPGA开发板,可以在Ve
|
|||
├── scripts
|
||||
│ ├── auto_pin_bind.py # 生成引脚绑定代码的脚本
|
||||
│ └── nvboard.mk # NVBoard构建规则
|
||||
└── src # NVBoard源码
|
||||
├── src # NVBoard源码
|
||||
│ ├── component.cpp
|
||||
│ ├── event.cpp
|
||||
│ ├── keyboard.cpp
|
||||
│ ├── nvboard.cpp
|
||||
│ ├── render.cpp
|
||||
│ └── vga.cpp
|
||||
|
@ -55,10 +56,7 @@ NVBoard提供了以下几组API
|
|||
|
||||
- `void nvboard_init()`: 初始化NVBoard
|
||||
- `void nvboard_quit()`: 退出NVBoard
|
||||
- `void nvboard_bind_pin(void *signal, bool is_rt, bool is_output, int len, ...)`: 将HDL的信号signal连接到NVBoard里的引脚上,具体地
|
||||
- `is_rt`为`true`时,表示该信号为实时信号,每个周期都要更新才能正确工作,如键盘和VGA相关信号;
|
||||
`is_rt`为`false`时,表示该信号为普通信号,可以在NVBoard更新画面时才更新,从而提升NVBoard的性能,如拨码开关和LED灯等,无需每个周期都更新
|
||||
- `is_output`为`true`时,表示该信号方向为输出方向(从RTL代码到NVBoard);否则为输入方向(从NVBoard到RTL代码)
|
||||
- `void nvboard_bind_pin(void *signal, int len, ...)`: 将HDL的信号signal连接到NVBoard里的引脚上,具体地
|
||||
- `len`为信号的长度,大于1时为向量信号
|
||||
- 可变参数列表`...`为引脚编号列表,编号为整数;绑定向量信号时,引脚编号列表从MSB到LSB排列
|
||||
- `void nvboard_update()`: 更新NVBoard中各组件的状态,每当电路状态发生改变时都需要调用该函数
|
||||
|
@ -88,6 +86,7 @@ signal (pin1, pin2, ..., pink)
|
|||
~~如果发现脚本中的错误也可以尝试修复一下然后丢pr~~
|
||||
|
||||
可以在`board`目录下的引脚说明文件中查看引脚信息。
|
||||
其中`output`表示该信号方向为输出方向(从RTL代码到NVBoard),`input`为输入方向(从NVBoard到RTL代码)。
|
||||
|
||||
其中,复位引脚`RST`不使用,因为NVBoard在cpp文件中包含一些内部状态,仅复位RTL设计部分会使其与NVBoard状态不一致。
|
||||
一个实现全系统复位效果的简单方法是退出NVBoard并重新运行。RTL设计的复位工作由verilator的wrapper完成,具体见`example/csrc/main.cpp`。
|
||||
|
|
58
board/N4
58
board/N4
|
@ -117,33 +117,33 @@ output SEG7F
|
|||
output SEG7G
|
||||
output DEC7P
|
||||
|
||||
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
|
||||
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_input PS2_CLK
|
||||
rt_input PS2_DAT
|
||||
input PS2_CLK
|
||||
input PS2_DAT
|
||||
|
|
|
@ -8,14 +8,9 @@
|
|||
#include <vga.h>
|
||||
#include <keyboard.h>
|
||||
|
||||
#define BIND_RATE_RT true
|
||||
#define BIND_RATE_SCR false
|
||||
#define BIND_DIR_OUT true
|
||||
#define BIND_DIR_IN false
|
||||
|
||||
void nvboard_init(int vga_clk_cycle = 1);
|
||||
void nvboard_quit();
|
||||
void nvboard_bind_pin(void *signal, bool is_rt, bool is_output, int len, ...);
|
||||
void nvboard_bind_pin(void *signal, int len, ...);
|
||||
void nvboard_update();
|
||||
|
||||
#endif
|
||||
|
|
|
@ -9,21 +9,12 @@ class BoardDescParser():
|
|||
def parseLine(self, lid, lineseg):
|
||||
direction = lineseg[0].strip()
|
||||
pinname = lineseg[1].strip()
|
||||
if direction.startswith('rt_'):
|
||||
is_realtime = True
|
||||
direction = direction[3:]
|
||||
else:
|
||||
is_realtime = False
|
||||
|
||||
if direction == "input":
|
||||
is_output = False
|
||||
elif direction == "output":
|
||||
is_output = True
|
||||
else:
|
||||
if direction != "input" and direction != "output":
|
||||
print(f"Board Line {lid}: Error: Invalid pin direction \"{direction}\"")
|
||||
exit(-1)
|
||||
|
||||
self.pins[pinname] = (is_realtime, is_output)
|
||||
self.pins[pinname] = 1
|
||||
|
||||
def parseFile(self, path):
|
||||
self.pins = {}
|
||||
|
@ -47,12 +38,6 @@ class BoardDescParser():
|
|||
|
||||
def checkPinValid(self, pin):
|
||||
return pin in self.pins
|
||||
|
||||
def getPinRateStr(self, pin):
|
||||
return "BIND_RATE_RT " if self.pins[pin][0] else "BIND_RATE_SCR"
|
||||
|
||||
def getPinDirStr(self, pin):
|
||||
return "BIND_DIR_OUT" if self.pins[pin][1] else "BIND_DIR_IN "
|
||||
|
||||
|
||||
class NxdcParser():
|
||||
|
@ -182,20 +167,14 @@ class AutoBindWriter():
|
|||
if not self.board.checkPinValid(pin):
|
||||
print(f"Error: Invalid pin {pin}")
|
||||
exit(1)
|
||||
ratestr = self.board.getPinRateStr(pin)
|
||||
dirstr = self.board.getPinDirStr(pin)
|
||||
|
||||
self.iw.write(f"nvboard_bind_pin( &top->{signal}, {ratestr}, {dirstr}, 1, {pin});\n")
|
||||
self.iw.write(f"nvboard_bind_pin( &top->{signal}, 1, {pin});\n")
|
||||
|
||||
def bindVec(self, signal, pins):
|
||||
for pin in pins:
|
||||
if not self.board.checkPinValid(pin):
|
||||
print(f"Error: Invalid pin {pin}")
|
||||
exit(1)
|
||||
ratestr = self.board.getPinRateStr(pins[0])
|
||||
dirstr = self.board.getPinDirStr(pins[0])
|
||||
|
||||
self.iw.write(f"nvboard_bind_pin( &top->{signal}, {ratestr}, {dirstr}, {len(pins)}")
|
||||
self.iw.write(f"nvboard_bind_pin( &top->{signal}, {len(pins)}")
|
||||
for pin in pins:
|
||||
self.iw.write(f", {pin}")
|
||||
self.iw.write(");\n")
|
||||
|
|
|
@ -108,7 +108,7 @@ void nvboard_quit(){
|
|||
SDL_Quit();
|
||||
}
|
||||
|
||||
void nvboard_bind_pin(void *signal, bool is_rt, bool is_output, int len, ...) {
|
||||
void nvboard_bind_pin(void *signal, int len, ...) {
|
||||
assert(len < 64);
|
||||
va_list ap;
|
||||
va_start(ap, len);
|
||||
|
|
Loading…
Reference in New Issue