Source file simple_dual_port_ram.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
open Base
open Hardcaml
open Signal
let create
?read_latency
?arch
?(byte_write_width = Byte_write_width.Full)
?memory_optimization
?cascade_height
?simulation_name
~build_mode
()
~clock
~clear
~size
~write_address
~write_enable
~data
~read_address
~read_enable
=
let _, q =
Dual_port_ram.create
?read_latency
?arch
?memory_optimization
?cascade_height
?simulation_name
~byte_write_width
~build_mode
()
~clock
~clear
~size
~port_a:{ Ram_port.write_enable; address = write_address; read_enable = gnd; data }
~port_b:
{ Ram_port.write_enable =
(match byte_write_width with
| Full -> gnd
| B8 ->
assert (width data % 8 = 0);
zero (width data / 8)
| B9 ->
assert (width data % 9 = 0);
zero (width data / 9))
; address = read_address
; read_enable
; data = zero (width data)
}
in
q
;;