-
Notifications
You must be signed in to change notification settings - Fork 210
/
lm32_inst.py
46 lines (43 loc) · 1.09 KB
/
lm32_inst.py
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
from migen.fhdl.structure import *
from migen.fhdl import verilog
class LM32:
def __init__(self):
self.inst = Instance("lm32_top",
[("I_ADR_O", BV(32)),
("I_DAT_O", BV(32)),
("I_SEL_O", BV(4)),
("I_CYC_O", BV(1)),
("I_STB_O", BV(1)),
("I_WE_O", BV(1)),
("I_CTI_O", BV(3)),
("I_LOCK_O", BV(1)),
("I_BTE_O", BV(1)),
("D_ADR_O", BV(32)),
("D_DAT_O", BV(32)),
("D_SEL_O", BV(4)),
("D_CYC_O", BV(1)),
("D_STB_O", BV(1)),
("D_WE_O", BV(1)),
("D_CTI_O", BV(3)),
("D_LOCK_O", BV(1)),
("D_BTE_O", BV(1))],
[("interrupt", BV(32)),
("ext_break", BV(1)),
("I_DAT_I", BV(32)),
("I_ACK_I", BV(1)),
("I_ERR_I", BV(1)),
("I_RTY_I", BV(1)),
("D_DAT_I", BV(32)),
("D_ACK_I", BV(1)),
("D_ERR_I", BV(1)),
("D_RTY_I", BV(1))],
clkport="clk_i",
rstport="rst_i",
name="lm32")
def get_fragment(self):
return Fragment(instances=[self.inst])
cpus = [LM32() for i in range(4)]
frag = Fragment()
for cpu in cpus:
frag += cpu.get_fragment()
print(verilog.convert(frag, set([cpus[0].inst.ins["interrupt"], cpus[0].inst.outs["I_WE_O"]])))