Skip to content

Commit 183ec96

Browse files
re-write with Veryl
1 parent 5baa0ea commit 183ec96

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+5332
-2267
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,9 @@ whisper_connect
2222
*.bin
2323
*.dump
2424
*.elf
25+
26+
# Veryl
27+
.build
28+
dependencies
29+
target
30+
**/sim_binary/*.list.rb
Lines changed: 72 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,30 @@
11
# frozen_string_literal: true
22

3-
require_relative 'rice_csr_common'
4-
setup(self)
3+
class << self
4+
def xlen
5+
configuration.bus_width
6+
end
7+
8+
def word_size
9+
@word_size ||= xlen / 8
10+
end
11+
12+
def block_size
13+
@block_size ||= word_size * 4096
14+
end
15+
16+
def byte_address(address)
17+
address * word_size
18+
end
19+
end
520

621
register_block {
7-
name "rice_csr_m_level_xlen#{xlen}"
22+
name "rice_csr_xlen#{xlen}"
823
byte_size block_size
924

25+
#==============================================================
26+
# Machine level registrers
27+
#==============================================================
1028
#
1129
# Machine Information Registers
1230
#
@@ -54,7 +72,7 @@
5472
}
5573
bit_field {
5674
name 'mie'
57-
bit_assignment lsb: 3, width: 1; type :rws; initial_value 0
75+
bit_assignment lsb: 3, width: 1; type :rwhw; initial_value 0
5876
}
5977
bit_field {
6078
name 'spie'
@@ -66,7 +84,7 @@
6684
}
6785
bit_field {
6886
name 'mpie'
69-
bit_assignment lsb: 7, width: 1; type :rws; initial_value 0
87+
bit_assignment lsb: 7, width: 1; type :rwhw; initial_value 0
7088
}
7189
bit_field {
7290
name 'spp'
@@ -78,7 +96,7 @@
7896
}
7997
bit_field {
8098
name 'mpp'
81-
bit_assignment lsb: 11, width: 2; type :rws; initial_value 0
99+
bit_assignment lsb: 11, width: 2; type :rwhw; initial_value 0
82100
}
83101
bit_field {
84102
name 'fs'
@@ -235,7 +253,7 @@
235253
name 'mepc'
236254
offset_address byte_address(0x341)
237255
bit_field {
238-
bit_assignment lsb: 0, width: xlen; type :rws; initial_value 0
256+
bit_assignment lsb: 0, width: xlen; type :rwhw; initial_value 0
239257
}
240258
}
241259

@@ -244,19 +262,19 @@
244262
offset_address byte_address(0x342)
245263
bit_field {
246264
name 'exception_code'
247-
bit_assignment lsb: 0, width: xlen - 1; type :rws; initial_value 0
265+
bit_assignment lsb: 0, width: xlen - 1; type :rwhw; initial_value 0
248266
}
249267
bit_field {
250268
name 'interrupt'
251-
bit_assignment lsb: xlen - 1, width: 1; type :rws; initial_value 0
269+
bit_assignment lsb: xlen - 1, width: 1; type :rwhw; initial_value 0
252270
}
253271
}
254272

255273
register {
256274
name 'mtval'
257275
offset_address byte_address(0x343)
258276
bit_field {
259-
bit_assignment lsb: 0, width: xlen; type :rws; initial_value 0
277+
bit_assignment lsb: 0, width: xlen; type :rwhw; initial_value 0
260278
}
261279
}
262280

@@ -345,4 +363,48 @@
345363
bit_assignment lsb: 2, width: 1; type :rw; initial_value 0
346364
}
347365
}
366+
367+
#==============================================================
368+
# User level registrers
369+
#==============================================================
370+
#
371+
# Unprivileged Counter/Timers
372+
#
373+
register {
374+
name 'cycle'
375+
offset_address byte_address(0xC00)
376+
type :variable_access
377+
bit_field {
378+
bit_assignment lsb: 0, width: xlen; type :ro
379+
}
380+
}
381+
382+
register {
383+
name 'instret'
384+
offset_address byte_address(0xC02)
385+
type :variable_access
386+
bit_field {
387+
bit_assignment lsb: 0, width: xlen; type :ro
388+
}
389+
}
390+
391+
if xlen == 32
392+
register {
393+
name 'cycleh'
394+
offset_address byte_address(0xC80)
395+
type :variable_access
396+
bit_field {
397+
bit_assignment lsb: 0, width: xlen; type :ro
398+
}
399+
}
400+
401+
register {
402+
name 'instreth'
403+
offset_address byte_address(0xC82)
404+
type :variable_access
405+
bit_field {
406+
bit_assignment lsb: 0, width: xlen; type :ro
407+
}
408+
}
409+
end
348410
}

csr/rice_csr_common.rb

Lines changed: 0 additions & 22 deletions
This file was deleted.

csr/rice_csr_u_level.rb

Lines changed: 0 additions & 50 deletions
This file was deleted.

inst/makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ PATH_SCRIPT := $(RICE_ROOT)/script
33
PATH_RTL := $(RICE_ROOT)/rtl
44

55
SOURCE := $(RICE_ROOT)/inst/riscv_inst.yaml
6-
RESULT := $(PATH_RTL)/common/rice_riscv_inst_matcher_pkg.sv
6+
RESULT := $(PATH_RTL)/common/rice_riscv_inst_matcher_pkg.veryl
77

88
$(RESULT): $(SOURCE)
99
ruby $(PATH_SCRIPT)/rb/create_inst_matcher.rb $< $@

rtl/Veryl.lock

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# This file is automatically @generated by Veryl.
2+
# It is not intended for manual editing.
3+
version = 1
4+
5+
[[projects]]
6+
name = "rggen"
7+
dependencies = []
8+
9+
[projects.source]
10+
uuid = "14c7e46d-44a0-52cd-b9a3-70b31bd92d75"
11+
url = "https://github.com/rggen/rggen-veryl-rtl"
12+
path = ""
13+
project = "rggen"
14+
version = "0.5.0"
15+
revision = "1f628ca3183b4dbf7ced84b4139159d4f87ff491"

rtl/Veryl.toml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[project]
2+
name = "rice"
3+
version = "0.1.0"
4+
authors = ["Taichi Ishitani <taichi730@gmail.com>"]
5+
license = "Apache-2.0"
6+
repository = "https://github.com/taichi-ishitani/rice"
7+
8+
[format]
9+
indent_width = 2
10+
11+
[build]
12+
target = {type = "directory", path = "target"}
13+
filelist_type = "flgen"
14+
reset_low_suffix = "_n"
15+
16+
[publish]
17+
bump_commit = true
18+
publish_commit = true
19+
20+
[dependencies]
21+
"rggen" = { github = "rggen/rggen-veryl-rtl", version = "0.5.0" }

rtl/common/rice_bus_if.veryl

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
interface rice_bus_if #(
2+
param ADDRESS_WIDTH: u32 = 32 ,
3+
param DATA_WIDTH : u32 = 32 ,
4+
param STROBE_WIDTH : u32 = DATA_WIDTH / 8,
5+
) {
6+
var request_ready : logic ;
7+
var request_valid : logic ;
8+
var write : logic ;
9+
var address : logic<ADDRESS_WIDTH>;
10+
var strobe : logic<STROBE_WIDTH> ;
11+
var write_data : logic<DATA_WIDTH> ;
12+
var response_ready: logic ;
13+
var response_valid: logic ;
14+
var read_data : logic<DATA_WIDTH> ;
15+
var error : logic ;
16+
17+
function request_ack() -> logic {
18+
return request_ready && request_valid;
19+
}
20+
21+
function read_request_valid() -> logic {
22+
return request_valid && (!write);
23+
}
24+
25+
function read_request_ack() -> logic {
26+
return request_ready && request_valid && (!write);
27+
}
28+
29+
function write_request_valid() -> logic {
30+
return request_valid && write;
31+
}
32+
33+
function write_request_ack() -> logic {
34+
return request_ready && request_valid && write;
35+
}
36+
37+
function response_ack() -> logic {
38+
return response_ready && response_valid;
39+
}
40+
41+
modport master {
42+
request_ready : input ,
43+
request_valid : output,
44+
write : output,
45+
address : output,
46+
strobe : output,
47+
write_data : output,
48+
response_ready : output,
49+
response_valid : input ,
50+
read_data : input ,
51+
error : input ,
52+
request_ack : import,
53+
read_request_valid : import,
54+
read_request_ack : import,
55+
write_request_valid: import,
56+
write_request_ack : import,
57+
response_ack : import,
58+
}
59+
60+
modport slave {
61+
request_ack : import,
62+
read_request_valid : import,
63+
read_request_ack : import,
64+
write_request_valid: import,
65+
write_request_ack : import,
66+
response_ack : import,
67+
..converse(master)
68+
}
69+
70+
modport monitor {
71+
request_ack : import,
72+
read_request_valid : import,
73+
read_request_ack : import,
74+
write_request_valid: import,
75+
write_request_ack : import,
76+
response_ack : import,
77+
..input
78+
}
79+
}

0 commit comments

Comments
 (0)