44
55import functools
66import math
7+ from collections import defaultdict
78
89import veriloggen .core .vtypes as vtypes
910from veriloggen .seq .seq import Seq
@@ -1315,7 +1316,7 @@ def __init__(self, m, name, clk, rst, datawidth=32, addrwidth=32,
13151316
13161317 # default values
13171318 self .wresp .bresp .assign (0 )
1318- if wresp .buser is not None :
1319+ if self . wresp .buser is not None :
13191320 self .wresp .buser .assign (user_value )
13201321 self .rdata .rresp .assign (0 )
13211322 if self .rdata .ruser is not None :
@@ -1709,6 +1710,8 @@ def connect(self, ports, name):
17091710 if not self .noio :
17101711 raise ValueError ('I/O ports can not be connected to others.' )
17111712
1713+ ports = defaultdict (lambda : None , ports )
1714+
17121715 if '_' .join ([name , 'awid' ]) in ports :
17131716 awid = ports ['_' .join ([name , 'awid' ])]
17141717 else :
@@ -1731,13 +1734,14 @@ def connect(self, ports, name):
17311734 if self .waddr .awid is not None :
17321735 self .waddr .awid .connect (awid if awid is not None else 0 )
17331736 self .waddr .awaddr .connect (awaddr )
1734- self .waddr .awlen .connect (awlen )
1735- self .waddr .awsize .connect (awsize )
1736- self .waddr .awburst .connect (awburst )
1737- self .waddr .awlock .connect (awlock )
1737+ self .waddr .awlen .connect (awlen if awlen is not None else 0 )
1738+ self .waddr .awsize .connect (awsize if awsize is not None else
1739+ int (math .log (self .datawidth // 8 )))
1740+ self .waddr .awburst .connect (awburst if awburst is not None else BURST_INCR )
1741+ self .waddr .awlock .connect (awlock if awlock is not None else 0 )
17381742 self .waddr .awcache .connect (awcache )
17391743 self .waddr .awprot .connect (awprot )
1740- self .waddr .awqos .connect (awqos )
1744+ self .waddr .awqos .connect (awqos if awqos is not None else 0 )
17411745 if self .waddr .awuser is not None :
17421746 self .waddr .awuser .connect (awuser if awuser is not None else 0 )
17431747 self .waddr .awvalid .connect (awvalid )
@@ -1755,7 +1759,7 @@ def connect(self, ports, name):
17551759
17561760 self .wdata .wdata .connect (wdata )
17571761 self .wdata .wstrb .connect (wstrb )
1758- self .wdata .wlast .connect (wlast )
1762+ self .wdata .wlast .connect (wlast if wlast is not None else 1 )
17591763 if self .wdata .wuser is not None :
17601764 self .wdata .wuser .connect (wuser if wuser is not None else 0 )
17611765 self .wdata .wvalid .connect (wvalid )
@@ -1803,13 +1807,14 @@ def connect(self, ports, name):
18031807 if self .raddr .arid is not None :
18041808 self .raddr .arid .connect (arid if arid is not None else 0 )
18051809 self .raddr .araddr .connect (araddr )
1806- self .raddr .arlen .connect (arlen )
1807- self .raddr .arsize .connect (arsize )
1808- self .raddr .arburst .connect (arburst )
1809- self .raddr .arlock .connect (arlock )
1810+ self .raddr .arlen .connect (arlen if arlen is not None else 0 )
1811+ self .raddr .arsize .connect (arsize if arsize is not None else
1812+ int (math .log (self .datawidth // 8 )))
1813+ self .raddr .arburst .connect (arburst if arburst is not None else BURST_INCR )
1814+ self .raddr .arlock .connect (arlock if arlock is not None else 0 )
18101815 self .raddr .arcache .connect (arcache )
18111816 self .raddr .arprot .connect (arprot )
1812- self .raddr .arqos .connect (arqos )
1817+ self .raddr .arqos .connect (arqos if arqos is not None else 0 )
18131818 if self .raddr .aruser is not None :
18141819 self .raddr .aruser .connect (aruser if aruser is not None else 0 )
18151820 self .raddr .arvalid .connect (arvalid )
@@ -1833,7 +1838,8 @@ def connect(self, ports, name):
18331838 rid .connect (self .rdata .rid if self .rdata .rid is not None else 0 )
18341839 rdata .connect (self .rdata .rdata )
18351840 rresp .connect (self .rdata .rresp )
1836- rlast .connect (self .rdata .rlast )
1841+ if rlast is not None :
1842+ rlast .connect (self .rdata .rlast )
18371843 if ruser is not None :
18381844 ruser .connect (self .rdata .ruser if self .rdata .ruser is not None else 0 )
18391845 rvalid .connect (self .rdata .rvalid )
@@ -2186,6 +2192,8 @@ def __init__(self, m, name, clk, rst, datawidth=32, addrwidth=32,
21862192 self .id_width = id_width
21872193 self .user_width = user_width
21882194
2195+ self .noio = True
2196+
21892197 self .mem_datawidth = mem_datawidth
21902198 self .mem_addrwidth = mem_addrwidth
21912199
@@ -2409,137 +2417,6 @@ def _make_fsm(self, write_delay=10, read_delay=10, sleep=4):
24092417 self .fsm .If (self .rdata .rvalid , self .rdata .rready ,
24102418 read_count == 0 ).goto_init ()
24112419
2412- def connect (self , ports , name ):
2413- if '_' .join ([name , 'awid' ]) in ports :
2414- awid = ports ['_' .join ([name , 'awid' ])]
2415- else :
2416- awid = None
2417- awaddr = ports ['_' .join ([name , 'awaddr' ])]
2418- awlen = ports ['_' .join ([name , 'awlen' ])]
2419- awsize = ports ['_' .join ([name , 'awsize' ])]
2420- awburst = ports ['_' .join ([name , 'awburst' ])]
2421- awlock = ports ['_' .join ([name , 'awlock' ])]
2422- awcache = ports ['_' .join ([name , 'awcache' ])]
2423- awprot = ports ['_' .join ([name , 'awprot' ])]
2424- awqos = ports ['_' .join ([name , 'awqos' ])]
2425- if '_' .join ([name , 'awuser' ]) in ports :
2426- awuser = ports ['_' .join ([name , 'awuser' ])]
2427- else :
2428- awuser = None
2429- awvalid = ports ['_' .join ([name , 'awvalid' ])]
2430- awready = ports ['_' .join ([name , 'awready' ])]
2431-
2432- if self .waddr .awid is not None :
2433- self .waddr .awid .connect (awid if awid is not None else 0 )
2434- self .waddr .awaddr .connect (awaddr )
2435- self .waddr .awlen .connect (awlen )
2436- self .waddr .awsize .connect (awsize )
2437- self .waddr .awburst .connect (awburst )
2438- self .waddr .awlock .connect (awlock )
2439- self .waddr .awcache .connect (awcache )
2440- self .waddr .awprot .connect (awprot )
2441- self .waddr .awqos .connect (awqos )
2442- if self .waddr .awuser is not None :
2443- self .waddr .awuser .connect (awuser if awuser is not None else 0 )
2444- self .waddr .awvalid .connect (awvalid )
2445- awready .connect (self .waddr .awready )
2446-
2447- wdata = ports ['_' .join ([name , 'wdata' ])]
2448- wstrb = ports ['_' .join ([name , 'wstrb' ])]
2449- wlast = ports ['_' .join ([name , 'wlast' ])]
2450- if '_' .join ([name , 'wuser' ]) in ports :
2451- wuser = ports ['_' .join ([name , 'wuser' ])]
2452- else :
2453- wuser = None
2454- wvalid = ports ['_' .join ([name , 'wvalid' ])]
2455- wready = ports ['_' .join ([name , 'wready' ])]
2456-
2457- self .wdata .wdata .connect (wdata )
2458- self .wdata .wstrb .connect (wstrb )
2459- self .wdata .wlast .connect (wlast )
2460- if self .wdata .wuser is not None :
2461- self .wdata .wuser .connect (wuser if wuser is not None else 0 )
2462- self .wdata .wvalid .connect (wvalid )
2463- wready .connect (self .wdata .wready )
2464-
2465- if '_' .join ([name , 'bid' ]) in ports :
2466- bid = ports ['_' .join ([name , 'bid' ])]
2467- else :
2468- bid = None
2469- bresp = ports ['_' .join ([name , 'bresp' ])]
2470- if '_' .join ([name , 'buser' ]) in ports :
2471- buser = ports ['_' .join ([name , 'buser' ])]
2472- else :
2473- buser = None
2474- bvalid = ports ['_' .join ([name , 'bvalid' ])]
2475- bready = ports ['_' .join ([name , 'bready' ])]
2476-
2477- if bid is not None :
2478- bid .connect (self .wresp .bid if self .wresp .bid is not None else 0 )
2479- bresp .connect (self .wresp .bresp )
2480- if buser is not None :
2481- buser .connect (self .wresp .buser if self .wresp .buser is not None else 0 )
2482- bvalid .connect (self .wresp .bvalid )
2483- self .wresp .bready .connect (bready )
2484-
2485- if '_' .join ([name , 'arid' ]) in ports :
2486- arid = ports ['_' .join ([name , 'arid' ])]
2487- else :
2488- arid = None
2489- araddr = ports ['_' .join ([name , 'araddr' ])]
2490- arlen = ports ['_' .join ([name , 'arlen' ])]
2491- arsize = ports ['_' .join ([name , 'arsize' ])]
2492- arburst = ports ['_' .join ([name , 'arburst' ])]
2493- arlock = ports ['_' .join ([name , 'arlock' ])]
2494- arcache = ports ['_' .join ([name , 'arcache' ])]
2495- arprot = ports ['_' .join ([name , 'arprot' ])]
2496- arqos = ports ['_' .join ([name , 'arqos' ])]
2497- if '_' .join ([name , 'aruser' ]) in ports :
2498- aruser = ports ['_' .join ([name , 'aruser' ])]
2499- else :
2500- aruser = None
2501- arvalid = ports ['_' .join ([name , 'arvalid' ])]
2502- arready = ports ['_' .join ([name , 'arready' ])]
2503-
2504- if self .raddr .arid is not None :
2505- self .raddr .arid .connect (arid if arid is not None else 0 )
2506- self .raddr .araddr .connect (araddr )
2507- self .raddr .arlen .connect (arlen )
2508- self .raddr .arsize .connect (arsize )
2509- self .raddr .arburst .connect (arburst )
2510- self .raddr .arlock .connect (arlock )
2511- self .raddr .arcache .connect (arcache )
2512- self .raddr .arprot .connect (arprot )
2513- self .raddr .arqos .connect (arqos )
2514- if self .raddr .aruser is not None :
2515- self .raddr .aruser .connect (aruser if aruser is not None else 0 )
2516- self .raddr .arvalid .connect (arvalid )
2517- arready .connect (self .raddr .arready )
2518-
2519- if '_' .join ([name , 'rid' ]) in ports :
2520- rid = ports ['_' .join ([name , 'rid' ])]
2521- else :
2522- rid = None
2523- rdata = ports ['_' .join ([name , 'rdata' ])]
2524- rresp = ports ['_' .join ([name , 'rresp' ])]
2525- rlast = ports ['_' .join ([name , 'rlast' ])]
2526- if '_' .join ([name , 'ruser' ]) in ports :
2527- ruser = ports ['_' .join ([name , 'ruser' ])]
2528- else :
2529- ruser = None
2530- rvalid = ports ['_' .join ([name , 'rvalid' ])]
2531- rready = ports ['_' .join ([name , 'rready' ])]
2532-
2533- if rid is not None :
2534- rid .connect (self .rdata .rid if self .rdata .rid is not None else 0 )
2535- rdata .connect (self .rdata .rdata )
2536- rresp .connect (self .rdata .rresp )
2537- rlast .connect (self .rdata .rlast )
2538- if ruser is not None :
2539- ruser .connect (self .rdata .ruser if self .rdata .ruser is not None else 0 )
2540- rvalid .connect (self .rdata .rvalid )
2541- self .rdata .rready .connect (rready )
2542-
25432420 def read (self , fsm , addr ):
25442421 """ intrinsic for thread """
25452422
0 commit comments