reggae_eda 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/assets/Nexys4DDR_Master.xdc +255 -0
- data/assets/fifo.vhd +109 -0
- data/assets/flag_buf.vhd +45 -0
- data/assets/mod_m_counter.vhd +36 -0
- data/assets/slow_ticker.vhd +49 -0
- data/assets/uart.vhd +69 -0
- data/assets/uart_bus_master.vhd +256 -0
- data/assets/uart_rx.vhd +90 -0
- data/assets/uart_tx.vhd +102 -0
- data/bin/reggae +6 -0
- data/lib/reggae.rb +3 -0
- data/lib/reggae/ast.rb +72 -0
- data/lib/reggae/code.rb +55 -0
- data/lib/reggae/compiler.rb +110 -0
- data/lib/reggae/parser.rb +281 -0
- data/lib/reggae/pretty_printer.rb +107 -0
- data/lib/reggae/version.rb +3 -0
- data/lib/reggae/vhdl_generator.rb +973 -0
- data/lib/reggae/visitor.rb +107 -0
- data/tests/regmap.sexp +139 -0
- metadata +64 -0
@@ -0,0 +1,107 @@
|
|
1
|
+
require_relative 'code'
|
2
|
+
|
3
|
+
module Reggae
|
4
|
+
|
5
|
+
class Visitor
|
6
|
+
|
7
|
+
def initialize options={}
|
8
|
+
@indent=-2
|
9
|
+
end
|
10
|
+
|
11
|
+
def inc str=nil
|
12
|
+
say(str) if str
|
13
|
+
@indent+=2
|
14
|
+
end
|
15
|
+
|
16
|
+
def dec
|
17
|
+
@indent-=2
|
18
|
+
end
|
19
|
+
|
20
|
+
def say str
|
21
|
+
puts " "*@indent+str.to_s if @verbose
|
22
|
+
end
|
23
|
+
|
24
|
+
def visit mm
|
25
|
+
inc
|
26
|
+
mm.accept(self,nil)
|
27
|
+
dec
|
28
|
+
end
|
29
|
+
|
30
|
+
def visitMemoryMap mm,args=nil
|
31
|
+
inc "MemoryMap"
|
32
|
+
say mm.name
|
33
|
+
mm.parameters.accept(self,nil)
|
34
|
+
mm.zones.each{|zone| zone.accept(self,nil)}
|
35
|
+
dec
|
36
|
+
end
|
37
|
+
|
38
|
+
def visitParameters params,args=nil
|
39
|
+
inc "Parameters"
|
40
|
+
params.bus.accept(self,nil)
|
41
|
+
params.range.accept(self,nil)
|
42
|
+
dec
|
43
|
+
end
|
44
|
+
|
45
|
+
def visitBus bus,args=nil
|
46
|
+
inc "Bus"
|
47
|
+
say bus.frequency
|
48
|
+
say bus.address_size
|
49
|
+
say bus.data_size
|
50
|
+
dec
|
51
|
+
end
|
52
|
+
|
53
|
+
def visitRange range,args=nil
|
54
|
+
inc "Range"
|
55
|
+
say range.from
|
56
|
+
say range.to
|
57
|
+
dec
|
58
|
+
end
|
59
|
+
|
60
|
+
def visitZone zone,args=nil
|
61
|
+
inc "Zone"
|
62
|
+
say zone.name
|
63
|
+
zone.range.accept(self)
|
64
|
+
zone.registers.each{|reg| reg.accept(self)}
|
65
|
+
zone.subzones.each{|subzone| subzone.accept(self)}
|
66
|
+
dec
|
67
|
+
end
|
68
|
+
|
69
|
+
def visitSubzone zone,args=nil
|
70
|
+
inc "Subzone"
|
71
|
+
say zone.name
|
72
|
+
zone.range.accept(self)
|
73
|
+
zone.registers.each{|reg| reg.accept(self)}
|
74
|
+
dec
|
75
|
+
end
|
76
|
+
|
77
|
+
def visitRegister reg,args=nil
|
78
|
+
inc "Register"
|
79
|
+
say reg.name
|
80
|
+
say reg.address
|
81
|
+
say reg.init
|
82
|
+
reg.bits.each{|bit| bit.accept(self)}
|
83
|
+
reg.bitfields.each{|bitfield| bitfield.accept(self)}
|
84
|
+
|
85
|
+
dec
|
86
|
+
end
|
87
|
+
|
88
|
+
def visitBit bit,args=nil
|
89
|
+
inc "Bit"
|
90
|
+
say bit.position
|
91
|
+
say bit.name
|
92
|
+
say bit.purpose
|
93
|
+
say bit.toggle
|
94
|
+
dec
|
95
|
+
end
|
96
|
+
|
97
|
+
def visitBitfield bitfield,args=nil
|
98
|
+
inc "Bitfield"
|
99
|
+
say bitfield.position
|
100
|
+
say bitfield.name
|
101
|
+
say bitfield.purpose
|
102
|
+
say bitfield.toggle
|
103
|
+
dec
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
data/tests/regmap.sexp
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
(memory_map soc
|
2
|
+
|
3
|
+
(parameters
|
4
|
+
(bus
|
5
|
+
(frequency 100)
|
6
|
+
(address_size 8)
|
7
|
+
(data_size 32)
|
8
|
+
)
|
9
|
+
|
10
|
+
(range 0x0 0x7)
|
11
|
+
)
|
12
|
+
|
13
|
+
(zone ram_instr
|
14
|
+
(range 0x0 0x3)
|
15
|
+
|
16
|
+
(register address
|
17
|
+
(address 0x0)
|
18
|
+
(init 0x0)
|
19
|
+
(bitfield 9..0
|
20
|
+
(name value)
|
21
|
+
)
|
22
|
+
)
|
23
|
+
|
24
|
+
(register datain
|
25
|
+
(address 0x1)
|
26
|
+
(init 0x0)
|
27
|
+
)
|
28
|
+
|
29
|
+
(register dataout
|
30
|
+
(address 0x2)
|
31
|
+
(init 0x0)
|
32
|
+
(sampling true)
|
33
|
+
)
|
34
|
+
|
35
|
+
(register control
|
36
|
+
(address 0x3)
|
37
|
+
(init 0x0)
|
38
|
+
(bit 0
|
39
|
+
(name en)
|
40
|
+
(toggle true)
|
41
|
+
(purpose "write to memory")
|
42
|
+
)
|
43
|
+
(bit 1
|
44
|
+
(name wr)
|
45
|
+
(purpose "write")
|
46
|
+
(toggle true)
|
47
|
+
)
|
48
|
+
(bit 2
|
49
|
+
(name reset)
|
50
|
+
(purpose "reset all bram memory")
|
51
|
+
(toggle true)
|
52
|
+
)
|
53
|
+
(bit 3
|
54
|
+
(name mode)
|
55
|
+
(purpose "mode 0 is access from UART")
|
56
|
+
)
|
57
|
+
)
|
58
|
+
)
|
59
|
+
|
60
|
+
(zone ram_data
|
61
|
+
(range 0x4 0x7)
|
62
|
+
|
63
|
+
(register address
|
64
|
+
(address 0x4)
|
65
|
+
(init 0x0)
|
66
|
+
(bitfield 9..0
|
67
|
+
(name value)
|
68
|
+
)
|
69
|
+
)
|
70
|
+
|
71
|
+
(register datain
|
72
|
+
(address 0x5)
|
73
|
+
(init 0x0)
|
74
|
+
)
|
75
|
+
|
76
|
+
(register dataout
|
77
|
+
(address 0x6)
|
78
|
+
(init 0x0)
|
79
|
+
(sampling true)
|
80
|
+
)
|
81
|
+
|
82
|
+
(register control
|
83
|
+
(address 0x7)
|
84
|
+
(init 0x0)
|
85
|
+
(bit 0
|
86
|
+
(name en)
|
87
|
+
(toggle true)
|
88
|
+
(purpose "write to memory")
|
89
|
+
)
|
90
|
+
(bit 1
|
91
|
+
(name wr)
|
92
|
+
(purpose "write")
|
93
|
+
(toggle true)
|
94
|
+
)
|
95
|
+
(bit 2
|
96
|
+
(name reset)
|
97
|
+
(purpose "reset all bram memory")
|
98
|
+
(toggle true)
|
99
|
+
)
|
100
|
+
(bit 3
|
101
|
+
(name mode)
|
102
|
+
(purpose "mode 0 is access from UART")
|
103
|
+
)
|
104
|
+
)
|
105
|
+
)
|
106
|
+
|
107
|
+
(zone processor
|
108
|
+
(range 0x8 0xc)
|
109
|
+
|
110
|
+
(register boot_address
|
111
|
+
(address 0x8)
|
112
|
+
(init 0x0)
|
113
|
+
(bitfield 9..0
|
114
|
+
(name value)
|
115
|
+
)
|
116
|
+
)
|
117
|
+
|
118
|
+
(register control
|
119
|
+
(address 0x9)
|
120
|
+
(init 0x0)
|
121
|
+
(bit 0
|
122
|
+
(name init)
|
123
|
+
(purpose "set the boot_address")
|
124
|
+
)
|
125
|
+
(bit 1
|
126
|
+
(name go)
|
127
|
+
(purpose "run the processor")
|
128
|
+
)
|
129
|
+
)
|
130
|
+
|
131
|
+
(register status
|
132
|
+
(address 0xa)
|
133
|
+
(init 0x0)
|
134
|
+
(bit 0
|
135
|
+
(name stopped)
|
136
|
+
)
|
137
|
+
)
|
138
|
+
)
|
139
|
+
)
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: reggae_eda
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.6
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jean-Christophe Le Lann
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-05-28 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Generates a bus-based VHDL IP from a register-map specification. An UART-bus
|
14
|
+
master can be added if needed.
|
15
|
+
email: jean-christophe.le_lann@ensta-bretagne.fr
|
16
|
+
executables:
|
17
|
+
- reggae
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- assets/Nexys4DDR_Master.xdc
|
22
|
+
- assets/fifo.vhd
|
23
|
+
- assets/flag_buf.vhd
|
24
|
+
- assets/mod_m_counter.vhd
|
25
|
+
- assets/slow_ticker.vhd
|
26
|
+
- assets/uart.vhd
|
27
|
+
- assets/uart_bus_master.vhd
|
28
|
+
- assets/uart_rx.vhd
|
29
|
+
- assets/uart_tx.vhd
|
30
|
+
- bin/reggae
|
31
|
+
- lib/reggae.rb
|
32
|
+
- lib/reggae/ast.rb
|
33
|
+
- lib/reggae/code.rb
|
34
|
+
- lib/reggae/compiler.rb
|
35
|
+
- lib/reggae/parser.rb
|
36
|
+
- lib/reggae/pretty_printer.rb
|
37
|
+
- lib/reggae/version.rb
|
38
|
+
- lib/reggae/vhdl_generator.rb
|
39
|
+
- lib/reggae/visitor.rb
|
40
|
+
- tests/regmap.sexp
|
41
|
+
homepage: http://www.ensta-bretagne.fr/lelann/reggae
|
42
|
+
licenses:
|
43
|
+
- MIT
|
44
|
+
metadata: {}
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubygems_version: 3.0.6
|
61
|
+
signing_key:
|
62
|
+
specification_version: 4
|
63
|
+
summary: Register-map generator for VHDL
|
64
|
+
test_files: []
|