reggae_eda 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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: []