Skip to content

Commit 5a44c06

Browse files
committed
Add Veryl
1 parent 2409807 commit 5a44c06

8 files changed

Lines changed: 743 additions & 0 deletions

File tree

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,6 +1310,9 @@
13101310
[submodule "vendor/grammars/verilog.tmbundle"]
13111311
path = vendor/grammars/verilog.tmbundle
13121312
url = https://github.com/textmate/verilog.tmbundle
1313+
[submodule "vendor/grammars/veryl"]
1314+
path = vendor/grammars/veryl
1315+
url = https://github.com/veryl-lang/veryl.git
13131316
[submodule "vendor/grammars/vsc-ember-syntax"]
13141317
path = vendor/grammars/vsc-ember-syntax
13151318
url = https://github.com/lifeart/vsc-ember-syntax.git

grammars.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,6 +1164,8 @@ vendor/grammars/typst-grammar:
11641164
- source.typst
11651165
vendor/grammars/verilog.tmbundle:
11661166
- source.verilog
1167+
vendor/grammars/veryl:
1168+
- source.veryl
11671169
vendor/grammars/vsc-ember-syntax:
11681170
- inline.hbs
11691171
- inline.template

lib/linguist/languages.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8103,6 +8103,14 @@ Verilog:
81038103
codemirror_mode: verilog
81048104
codemirror_mime_type: text/x-verilog
81058105
language_id: 387
8106+
Veryl:
8107+
type: programming
8108+
color: "#27a357"
8109+
extensions:
8110+
- ".veryl"
8111+
tm_scope: source.veryl
8112+
ace_mode: text
8113+
language_id: 735748450
81068114
Vim Help File:
81078115
type: prose
81088116
color: "#199f4b"

samples/Veryl/fifo.veryl

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
pub module fifo #(
2+
param WIDTH : u32 = 8 ,
3+
param TYPE : type = logic<WIDTH> ,
4+
param DEPTH : u32 = 8 ,
5+
param THRESHOLD : u32 = DEPTH ,
6+
param FLAG_FF_OUT : bool = true ,
7+
param DATA_FF_OUT : bool = true ,
8+
param RESET_RAM : bool = false ,
9+
param RESET_DATA_FF : bool = true ,
10+
param CLEAR_DATA : bool = false ,
11+
param PUSH_ON_CLEAR : bool = false ,
12+
param MATCH_COUNT_WIDTH: u32 = 0 ,
13+
const COUNTER : type = logic<$clog2(DEPTH + 1)>,
14+
) (
15+
i_clk : input clock ,
16+
i_rst : input reset ,
17+
i_clear : input logic ,
18+
o_empty : output logic ,
19+
o_almost_full: output logic ,
20+
o_full : output logic ,
21+
o_word_count : output COUNTER,
22+
i_push : input logic ,
23+
i_data : input TYPE ,
24+
i_pop : input logic ,
25+
o_data : output TYPE ,
26+
) {
27+
const RAM_WORDS: u32 = if DATA_FF_OUT ? DEPTH - 1 : DEPTH;
28+
29+
var clear_data: logic;
30+
31+
always_comb {
32+
clear_data = CLEAR_DATA && i_clear;
33+
}
34+
35+
//--------------------------------------------------------------
36+
// controller
37+
//--------------------------------------------------------------
38+
const RAM_POINTER_WIDTH: u32 = if RAM_WORDS >= 2 ? $clog2(RAM_WORDS) : 1;
39+
40+
var write_pointer: logic<RAM_POINTER_WIDTH>;
41+
var write_to_ff : logic ;
42+
var write_to_ram : logic ;
43+
var read_pointer : logic<RAM_POINTER_WIDTH>;
44+
var read_from_ram: logic ;
45+
46+
inst u_controller: fifo_controller #(
47+
TYPE ,
48+
DEPTH ,
49+
THRESHOLD ,
50+
FLAG_FF_OUT ,
51+
DATA_FF_OUT ,
52+
PUSH_ON_CLEAR ,
53+
RAM_WORDS ,
54+
RAM_POINTER_WIDTH ,
55+
MATCH_COUNT_WIDTH ,
56+
) (
57+
i_clk ,
58+
i_rst ,
59+
i_clear ,
60+
o_empty ,
61+
o_almost_full ,
62+
o_full ,
63+
i_push ,
64+
i_data ,
65+
i_pop ,
66+
o_word_count ,
67+
o_write_pointer: write_pointer,
68+
o_write_to_ff : write_to_ff ,
69+
o_write_to_ram : write_to_ram ,
70+
o_read_pointer : read_pointer ,
71+
o_read_from_ram: read_from_ram,
72+
73+
);
74+
75+
//--------------------------------------------------------------
76+
// RAM
77+
//--------------------------------------------------------------
78+
var ram_read_data: TYPE;
79+
80+
if RAM_WORDS >= 1 :g_ram {
81+
inst u_ram: ram #(
82+
WORD_SIZE : RAM_WORDS ,
83+
ADDRESS_WIDTH: RAM_POINTER_WIDTH,
84+
DATA_TYPE : TYPE ,
85+
BUFFER_OUT : 0 ,
86+
USE_RESET : RESET_RAM ,
87+
) (
88+
i_clk ,
89+
i_rst ,
90+
i_clr : clear_data ,
91+
i_mea : '1 ,
92+
i_wea : write_to_ram ,
93+
i_adra: write_pointer,
94+
i_da : i_data ,
95+
i_meb : '1 ,
96+
i_adrb: read_pointer ,
97+
o_qb : ram_read_data,
98+
);
99+
} else :g_no_ram {
100+
always_comb {
101+
ram_read_data = 0 as TYPE;
102+
}
103+
}
104+
105+
//--------------------------------------------------------------
106+
// output control
107+
//--------------------------------------------------------------
108+
if DATA_FF_OUT :g_data_out {
109+
var data_out: TYPE;
110+
111+
always_comb {
112+
o_data = data_out;
113+
}
114+
115+
if RESET_DATA_FF :g {
116+
always_ff {
117+
if_reset {
118+
data_out = 0 as TYPE;
119+
} else if clear_data {
120+
data_out = 0 as TYPE;
121+
} else if write_to_ff {
122+
data_out = i_data;
123+
} else if read_from_ram {
124+
data_out = ram_read_data;
125+
}
126+
}
127+
} else {
128+
always_ff {
129+
if clear_data {
130+
data_out = 0 as TYPE;
131+
} else if write_to_ff {
132+
data_out = i_data;
133+
} else if read_from_ram {
134+
data_out = ram_read_data;
135+
}
136+
}
137+
}
138+
} else {
139+
always_comb {
140+
o_data = ram_read_data;
141+
}
142+
}
143+
}

0 commit comments

Comments
 (0)