mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-03 21:09:12 +00:00 
			
		
		
		
	nexus: Add LRAM inference
Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
		
							parent
							
								
									264e924abb
								
							
						
					
					
						commit
						17812a1560
					
				
					 5 changed files with 227 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -9,6 +9,9 @@ $(eval $(call add_share_file,share/nexus,techlibs/nexus/lutrams.txt))
 | 
			
		|||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/brams_init.vh))
 | 
			
		||||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/brams_map.v))
 | 
			
		||||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/brams.txt))
 | 
			
		||||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/lrams_init.vh))
 | 
			
		||||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/lrams_map.v))
 | 
			
		||||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/lrams.txt))
 | 
			
		||||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/arith_map.v))
 | 
			
		||||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/latches_map.v))
 | 
			
		||||
$(eval $(call add_share_file,share/nexus,techlibs/nexus/dsp_map.v))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								techlibs/nexus/lrams.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								techlibs/nexus/lrams.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
bram $__NX_PDPSC512K
 | 
			
		||||
  init 1
 | 
			
		||||
 | 
			
		||||
  abits 14
 | 
			
		||||
  dbits 32
 | 
			
		||||
 | 
			
		||||
  groups 2
 | 
			
		||||
  ports 1 1
 | 
			
		||||
  wrmode 1 0
 | 
			
		||||
  enable 4 1
 | 
			
		||||
  transp 0 0
 | 
			
		||||
  clocks 2 2
 | 
			
		||||
  clkpol 2 2
 | 
			
		||||
endbram
 | 
			
		||||
 | 
			
		||||
match $__NX_PDPSC512K
 | 
			
		||||
  # explicitly requested LRAM only, due to limited availability and
 | 
			
		||||
  # slower Fmax
 | 
			
		||||
  attribute lram
 | 
			
		||||
  shuffle_enable A
 | 
			
		||||
  make_transp
 | 
			
		||||
endmatch
 | 
			
		||||
							
								
								
									
										128
									
								
								techlibs/nexus/lrams_init.vh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								techlibs/nexus/lrams_init.vh
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,128 @@
 | 
			
		|||
.INITVAL_00($sformatf("0x%05120x", permute_init(INIT[0 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_01($sformatf("0x%05120x", permute_init(INIT[1 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_02($sformatf("0x%05120x", permute_init(INIT[2 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_03($sformatf("0x%05120x", permute_init(INIT[3 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_04($sformatf("0x%05120x", permute_init(INIT[4 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_05($sformatf("0x%05120x", permute_init(INIT[5 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_06($sformatf("0x%05120x", permute_init(INIT[6 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_07($sformatf("0x%05120x", permute_init(INIT[7 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_08($sformatf("0x%05120x", permute_init(INIT[8 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_09($sformatf("0x%05120x", permute_init(INIT[9 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_0A($sformatf("0x%05120x", permute_init(INIT[10 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_0B($sformatf("0x%05120x", permute_init(INIT[11 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_0C($sformatf("0x%05120x", permute_init(INIT[12 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_0D($sformatf("0x%05120x", permute_init(INIT[13 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_0E($sformatf("0x%05120x", permute_init(INIT[14 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_0F($sformatf("0x%05120x", permute_init(INIT[15 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_10($sformatf("0x%05120x", permute_init(INIT[16 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_11($sformatf("0x%05120x", permute_init(INIT[17 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_12($sformatf("0x%05120x", permute_init(INIT[18 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_13($sformatf("0x%05120x", permute_init(INIT[19 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_14($sformatf("0x%05120x", permute_init(INIT[20 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_15($sformatf("0x%05120x", permute_init(INIT[21 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_16($sformatf("0x%05120x", permute_init(INIT[22 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_17($sformatf("0x%05120x", permute_init(INIT[23 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_18($sformatf("0x%05120x", permute_init(INIT[24 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_19($sformatf("0x%05120x", permute_init(INIT[25 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_1A($sformatf("0x%05120x", permute_init(INIT[26 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_1B($sformatf("0x%05120x", permute_init(INIT[27 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_1C($sformatf("0x%05120x", permute_init(INIT[28 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_1D($sformatf("0x%05120x", permute_init(INIT[29 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_1E($sformatf("0x%05120x", permute_init(INIT[30 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_1F($sformatf("0x%05120x", permute_init(INIT[31 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_20($sformatf("0x%05120x", permute_init(INIT[32 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_21($sformatf("0x%05120x", permute_init(INIT[33 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_22($sformatf("0x%05120x", permute_init(INIT[34 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_23($sformatf("0x%05120x", permute_init(INIT[35 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_24($sformatf("0x%05120x", permute_init(INIT[36 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_25($sformatf("0x%05120x", permute_init(INIT[37 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_26($sformatf("0x%05120x", permute_init(INIT[38 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_27($sformatf("0x%05120x", permute_init(INIT[39 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_28($sformatf("0x%05120x", permute_init(INIT[40 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_29($sformatf("0x%05120x", permute_init(INIT[41 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_2A($sformatf("0x%05120x", permute_init(INIT[42 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_2B($sformatf("0x%05120x", permute_init(INIT[43 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_2C($sformatf("0x%05120x", permute_init(INIT[44 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_2D($sformatf("0x%05120x", permute_init(INIT[45 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_2E($sformatf("0x%05120x", permute_init(INIT[46 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_2F($sformatf("0x%05120x", permute_init(INIT[47 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_30($sformatf("0x%05120x", permute_init(INIT[48 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_31($sformatf("0x%05120x", permute_init(INIT[49 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_32($sformatf("0x%05120x", permute_init(INIT[50 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_33($sformatf("0x%05120x", permute_init(INIT[51 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_34($sformatf("0x%05120x", permute_init(INIT[52 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_35($sformatf("0x%05120x", permute_init(INIT[53 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_36($sformatf("0x%05120x", permute_init(INIT[54 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_37($sformatf("0x%05120x", permute_init(INIT[55 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_38($sformatf("0x%05120x", permute_init(INIT[56 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_39($sformatf("0x%05120x", permute_init(INIT[57 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_3A($sformatf("0x%05120x", permute_init(INIT[58 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_3B($sformatf("0x%05120x", permute_init(INIT[59 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_3C($sformatf("0x%05120x", permute_init(INIT[60 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_3D($sformatf("0x%05120x", permute_init(INIT[61 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_3E($sformatf("0x%05120x", permute_init(INIT[62 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_3F($sformatf("0x%05120x", permute_init(INIT[63 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_40($sformatf("0x%05120x", permute_init(INIT[64 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_41($sformatf("0x%05120x", permute_init(INIT[65 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_42($sformatf("0x%05120x", permute_init(INIT[66 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_43($sformatf("0x%05120x", permute_init(INIT[67 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_44($sformatf("0x%05120x", permute_init(INIT[68 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_45($sformatf("0x%05120x", permute_init(INIT[69 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_46($sformatf("0x%05120x", permute_init(INIT[70 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_47($sformatf("0x%05120x", permute_init(INIT[71 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_48($sformatf("0x%05120x", permute_init(INIT[72 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_49($sformatf("0x%05120x", permute_init(INIT[73 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_4A($sformatf("0x%05120x", permute_init(INIT[74 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_4B($sformatf("0x%05120x", permute_init(INIT[75 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_4C($sformatf("0x%05120x", permute_init(INIT[76 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_4D($sformatf("0x%05120x", permute_init(INIT[77 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_4E($sformatf("0x%05120x", permute_init(INIT[78 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_4F($sformatf("0x%05120x", permute_init(INIT[79 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_50($sformatf("0x%05120x", permute_init(INIT[80 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_51($sformatf("0x%05120x", permute_init(INIT[81 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_52($sformatf("0x%05120x", permute_init(INIT[82 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_53($sformatf("0x%05120x", permute_init(INIT[83 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_54($sformatf("0x%05120x", permute_init(INIT[84 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_55($sformatf("0x%05120x", permute_init(INIT[85 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_56($sformatf("0x%05120x", permute_init(INIT[86 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_57($sformatf("0x%05120x", permute_init(INIT[87 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_58($sformatf("0x%05120x", permute_init(INIT[88 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_59($sformatf("0x%05120x", permute_init(INIT[89 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_5A($sformatf("0x%05120x", permute_init(INIT[90 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_5B($sformatf("0x%05120x", permute_init(INIT[91 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_5C($sformatf("0x%05120x", permute_init(INIT[92 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_5D($sformatf("0x%05120x", permute_init(INIT[93 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_5E($sformatf("0x%05120x", permute_init(INIT[94 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_5F($sformatf("0x%05120x", permute_init(INIT[95 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_60($sformatf("0x%05120x", permute_init(INIT[96 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_61($sformatf("0x%05120x", permute_init(INIT[97 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_62($sformatf("0x%05120x", permute_init(INIT[98 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_63($sformatf("0x%05120x", permute_init(INIT[99 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_64($sformatf("0x%05120x", permute_init(INIT[100 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_65($sformatf("0x%05120x", permute_init(INIT[101 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_66($sformatf("0x%05120x", permute_init(INIT[102 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_67($sformatf("0x%05120x", permute_init(INIT[103 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_68($sformatf("0x%05120x", permute_init(INIT[104 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_69($sformatf("0x%05120x", permute_init(INIT[105 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_6A($sformatf("0x%05120x", permute_init(INIT[106 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_6B($sformatf("0x%05120x", permute_init(INIT[107 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_6C($sformatf("0x%05120x", permute_init(INIT[108 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_6D($sformatf("0x%05120x", permute_init(INIT[109 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_6E($sformatf("0x%05120x", permute_init(INIT[110 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_6F($sformatf("0x%05120x", permute_init(INIT[111 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_70($sformatf("0x%05120x", permute_init(INIT[112 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_71($sformatf("0x%05120x", permute_init(INIT[113 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_72($sformatf("0x%05120x", permute_init(INIT[114 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_73($sformatf("0x%05120x", permute_init(INIT[115 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_74($sformatf("0x%05120x", permute_init(INIT[116 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_75($sformatf("0x%05120x", permute_init(INIT[117 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_76($sformatf("0x%05120x", permute_init(INIT[118 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_77($sformatf("0x%05120x", permute_init(INIT[119 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_78($sformatf("0x%05120x", permute_init(INIT[120 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_79($sformatf("0x%05120x", permute_init(INIT[121 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_7A($sformatf("0x%05120x", permute_init(INIT[122 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_7B($sformatf("0x%05120x", permute_init(INIT[123 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_7C($sformatf("0x%05120x", permute_init(INIT[124 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_7D($sformatf("0x%05120x", permute_init(INIT[125 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_7E($sformatf("0x%05120x", permute_init(INIT[126 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
.INITVAL_7F($sformatf("0x%05120x", permute_init(INIT[127 * INIT_CHUNK_SIZE +: INIT_CHUNK_SIZE]))),
 | 
			
		||||
							
								
								
									
										56
									
								
								techlibs/nexus/lrams_map.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								techlibs/nexus/lrams_map.v
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
module \$__NX_PDPSC512K (CLK2, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN);
 | 
			
		||||
	parameter CFG_ABITS = 14;
 | 
			
		||||
	parameter CFG_DBITS = 32;
 | 
			
		||||
	parameter CFG_ENABLE_A = 4;
 | 
			
		||||
 | 
			
		||||
	parameter CLKPOL2 = 1;
 | 
			
		||||
	parameter [524287:0] INIT = 524287'b0;
 | 
			
		||||
 | 
			
		||||
	input CLK2;
 | 
			
		||||
 | 
			
		||||
	input [CFG_ABITS-1:0] A1ADDR;
 | 
			
		||||
	input [CFG_DBITS-1:0] A1DATA;
 | 
			
		||||
	input [CFG_ENABLE_A-1:0] A1EN;
 | 
			
		||||
 | 
			
		||||
	input [CFG_ABITS-1:0] B1ADDR;
 | 
			
		||||
	output [CFG_DBITS-1:0] B1DATA;
 | 
			
		||||
	input B1EN;
 | 
			
		||||
 | 
			
		||||
	wire clk;
 | 
			
		||||
	wire [31:0] rd;
 | 
			
		||||
	assign B1DATA = rd[CFG_DBITS-1:0];
 | 
			
		||||
 | 
			
		||||
	generate
 | 
			
		||||
		if (CLKPOL2)
 | 
			
		||||
			assign clk = CLK2;
 | 
			
		||||
		else
 | 
			
		||||
			INV clk_inv_i (.A(CLK2), .Z(clk));
 | 
			
		||||
	endgenerate
 | 
			
		||||
 | 
			
		||||
	wire we = |A1EN;
 | 
			
		||||
 | 
			
		||||
	localparam INIT_CHUNK_SIZE = 4096;
 | 
			
		||||
 | 
			
		||||
	function [5119:0] permute_init;
 | 
			
		||||
		input [INIT_CHUNK_SIZE-1:0] chunk;
 | 
			
		||||
		integer i;
 | 
			
		||||
		begin
 | 
			
		||||
			for (i = 0; i < 128; i = i + 1'b1)
 | 
			
		||||
				permute_init[i * 40 +: 40] = {8'b0, chunk[i * 32 +: 32]};
 | 
			
		||||
		end
 | 
			
		||||
	endfunction
 | 
			
		||||
 | 
			
		||||
	generate
 | 
			
		||||
		PDPSC512K #(
 | 
			
		||||
			.OUTREG("NO_REG"),
 | 
			
		||||
			.ECC_BYTE_SEL("BYTE_EN"),
 | 
			
		||||
`include "lrams_init.vh"
 | 
			
		||||
			.GSR("DISABLED")
 | 
			
		||||
		) _TECHMAP_REPLACE_ (
 | 
			
		||||
			.CLK(clk), .RSTR(1'b0),
 | 
			
		||||
			.DI(A1DATA), .ADW(A1ADDR), .CEW(we), .WE(we), .CSW(1'b1),
 | 
			
		||||
			.ADR(B1ADDR), .DO(rd), .CER(B1EN), .CSR(1'b1),
 | 
			
		||||
		);
 | 
			
		||||
	endgenerate
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
| 
						 | 
				
			
			@ -77,6 +77,11 @@ struct SynthNexusPass : public ScriptPass
 | 
			
		|||
		log("    -nodffe\n");
 | 
			
		||||
		log("        do not use flipflops with CE in output netlist\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
		log("    -nolram\n");
 | 
			
		||||
		log("        do not use large RAM cells in output netlist\n");
 | 
			
		||||
		log("        note that large RAM must be explicitly requested with a (* lram *)\n");
 | 
			
		||||
		log("        attribute on the memory.\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
		log("    -nobram\n");
 | 
			
		||||
		log("        do not use block RAM cells in output netlist\n");
 | 
			
		||||
		log("\n");
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +106,7 @@ struct SynthNexusPass : public ScriptPass
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	string top_opt, json_file, vm_file, family;
 | 
			
		||||
	bool noccu2, nodffe, nobram, nolutram, nowidelut, noiopad, nodsp, flatten, dff, retime, abc9;
 | 
			
		||||
	bool noccu2, nodffe, nolram, nobram, nolutram, nowidelut, noiopad, nodsp, flatten, dff, retime, abc9;
 | 
			
		||||
 | 
			
		||||
	void clear_flags() override
 | 
			
		||||
	{
 | 
			
		||||
| 
						 | 
				
			
			@ -111,6 +116,7 @@ struct SynthNexusPass : public ScriptPass
 | 
			
		|||
		vm_file = "";
 | 
			
		||||
		noccu2 = false;
 | 
			
		||||
		nodffe = false;
 | 
			
		||||
		nolram = false;
 | 
			
		||||
		nobram = false;
 | 
			
		||||
		nolutram = false;
 | 
			
		||||
		nowidelut = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -181,6 +187,10 @@ struct SynthNexusPass : public ScriptPass
 | 
			
		|||
				nodffe = true;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (args[argidx] == "-nolram") {
 | 
			
		||||
				nolram = true;
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (args[argidx] == "-nobram") {
 | 
			
		||||
				nobram = true;
 | 
			
		||||
				continue;
 | 
			
		||||
| 
						 | 
				
			
			@ -286,6 +296,13 @@ struct SynthNexusPass : public ScriptPass
 | 
			
		|||
			run("opt_clean");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!nolram && check_label("map_lram", "(skip if -nolram)"))
 | 
			
		||||
		{
 | 
			
		||||
			run("memory_bram -rules +/nexus/lrams.txt");
 | 
			
		||||
			run("setundef -zero -params t:$__NX_PDPSC512K");
 | 
			
		||||
			run("techmap -map +/nexus/lrams_map.v");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!nobram && check_label("map_bram", "(skip if -nobram)"))
 | 
			
		||||
		{
 | 
			
		||||
			run("memory_bram -rules +/nexus/brams.txt");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue