Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
43002b01
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
大约 1 年 前同步成功
通知
1183
Star
3914
Fork
526
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
XiangShan
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
43002b01
编写于
9月 30, 2019
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
device,AXI4VGA: add FBHelper for emu
上级
096a786a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
53 addition
and
6 deletion
+53
-6
src/main/scala/device/AXI4VGA.scala
src/main/scala/device/AXI4VGA.scala
+38
-1
src/test/csrc/device.cpp
src/test/csrc/device.cpp
+11
-1
src/test/csrc/vga.cpp
src/test/csrc/vga.cpp
+3
-3
src/test/scala/top/SimMMIO.scala
src/test/scala/top/SimMMIO.scala
+1
-1
未找到文件。
src/main/scala/device/AXI4VGA.scala
浏览文件 @
43002b01
...
...
@@ -52,7 +52,36 @@ class VGACtrl extends AXI4SlaveModule(new AXI4Lite, new VGACtrlBundle) with HasV
io
.
extra
.
get
.
sync
:=
sync
}
class
AXI4VGA
extends
Module
with
HasVGAConst
{
class
FBHelper
extends
BlackBox
with
HasBlackBoxInline
{
val
io
=
IO
(
new
Bundle
{
val
clk
=
Input
(
Clock
())
val
valid
=
Input
(
Bool
())
val
pixel
=
Input
(
UInt
(
32.
W
))
val
sync
=
Input
(
Bool
())
})
setInline
(
"FBHelper.v"
,
s
"""
|import "DPI-C" function void put_pixel(input int pixel);
|import "DPI-C" function void vmem_sync();
|
|module FBHelper (
| input clk,
| input valid,
| input [31:0] pixel,
| input sync
|);
|
| always@(posedge clk) begin
| if (valid) put_pixel(pixel);
| if (sync) vmem_sync();
| end
|
|endmodule
"""
.
stripMargin
)
}
class
AXI4VGA
(
sim
:
Boolean
=
false
)
extends
Module
with
HasVGAConst
{
val
AXIidBits
=
2
// need a 50MHz clock
val
io
=
IO
(
new
Bundle
{
...
...
@@ -108,4 +137,12 @@ class AXI4VGA extends Module with HasVGAConst {
io
.
vga
.
r
:=
Mux
(
videoValid
,
color
(
23
,
20
),
0.
U
)
io
.
vga
.
g
:=
Mux
(
videoValid
,
color
(
15
,
12
),
0.
U
)
io
.
vga
.
b
:=
Mux
(
videoValid
,
color
(
7
,
4
),
0.
U
)
if
(
sim
)
{
val
fbHelper
=
Module
(
new
FBHelper
)
fbHelper
.
io
.
clk
:=
clock
fbHelper
.
io
.
valid
:=
videoValid
fbHelper
.
io
.
pixel
:=
color
fbHelper
.
io
.
sync
:=
ctrl
.
io
.
extra
.
get
.
sync
}
}
src/test/csrc/device.cpp
浏览文件 @
43002b01
...
...
@@ -14,7 +14,7 @@ void uart_putc(char c);
void
init_uart
(
void
);
static
struct
timeval
boot
=
{};
static
uint
64_t
vmem
[
0x400000
/
sizeof
(
uint64_t
)
];
static
uint
32_t
vmem
[
800
*
600
];
void
init_device
(
void
)
{
init_sdl
();
...
...
@@ -55,6 +55,16 @@ uint32_t uptime(void) {
return
s
*
1000
+
(
us
+
500
)
/
1000
;
}
extern
"C"
void
put_pixel
(
uint32_t
pixel
)
{
static
int
i
=
0
;
vmem
[
i
++
]
=
pixel
;
if
(
i
>=
800
*
600
)
i
=
0
;
}
extern
"C"
void
vmem_sync
(
void
)
{
update_screen
(
vmem
);
}
extern
"C"
void
device_helper
(
uint8_t
req_wen
,
uint64_t
req_addr
,
uint64_t
req_wdata
,
uint8_t
req_wmask
,
uint64_t
*
resp_rdata
)
{
switch
(
req_addr
)
{
...
...
src/test/csrc/vga.cpp
浏览文件 @
43002b01
...
...
@@ -4,8 +4,8 @@
#define SCREEN_PORT 0x100 // Note that this is not the standard
#define SCREEN_MMIO 0x4100
#define SCREEN_H
32
0
#define SCREEN_W
4
00
#define SCREEN_H
60
0
#define SCREEN_W
8
00
static
SDL_Window
*
window
;
...
...
@@ -25,7 +25,7 @@ uint32_t screen_size(void) {
void
init_sdl
()
{
SDL_Init
(
SDL_INIT_VIDEO
);
SDL_CreateWindowAndRenderer
(
SCREEN_W
*
2
,
SCREEN_H
*
2
,
0
,
&
window
,
&
renderer
);
SDL_CreateWindowAndRenderer
(
SCREEN_W
,
SCREEN_H
,
0
,
&
window
,
&
renderer
);
SDL_SetWindowTitle
(
window
,
"NOOP"
);
texture
=
SDL_CreateTexture
(
renderer
,
SDL_PIXELFORMAT_ARGB8888
,
SDL_TEXTUREACCESS_STATIC
,
SCREEN_W
,
SCREEN_H
);
...
...
src/test/scala/top/SimMMIO.scala
浏览文件 @
43002b01
...
...
@@ -36,7 +36,7 @@ class SimMMIO extends Module {
val
uart
=
Module
(
new
AXI4UART
)
val
timer
=
Module
(
new
AXI4Timer
)
val
vga
=
Module
(
new
AXI4VGA
)
val
vga
=
Module
(
new
AXI4VGA
(
sim
=
true
)
)
uart
.
io
.
in
<>
xbar
.
io
.
out
(
0
).
toAXI4Lite
()
timer
.
io
.
in
<>
xbar
.
io
.
out
(
1
).
toAXI4Lite
()
vga
.
io
.
in
.
fb
<>
xbar
.
io
.
out
(
2
).
toAXI4Lite
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录