mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			120 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Block RAMs for Spartan 3A DSP and Spartan 6.
 | |
| # The corresponding mapping file is brams_xc3sda_map.v
 | |
| 
 | |
| ram block $__XILINX_BLOCKRAM_TDP_ {
 | |
| 	byte 9;
 | |
| 	ifdef IS_SPARTAN6 {
 | |
| 		option "MODE" "HALF" {
 | |
| 			abits 13;
 | |
| 			widths 1 2 4 9 18 per_port;
 | |
| 			cost 65;
 | |
| 		}
 | |
| 	}
 | |
| 	option "MODE" "FULL" {
 | |
| 		abits 14;
 | |
| 		widths 1 2 4 9 18 36 per_port;
 | |
| 		cost 129;
 | |
| 	}
 | |
| 	init any;
 | |
| 	port srsw "A" "B" {
 | |
| 		# Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks.
 | |
| 		ifdef IS_SPARTAN6 {
 | |
| 			option "HAS_RDFIRST" 1 {
 | |
| 				clock posedge "C";
 | |
| 			}
 | |
| 			option "HAS_RDFIRST" 0 {
 | |
| 				clock posedge;
 | |
| 			}
 | |
| 		} else {
 | |
| 			clock posedge;
 | |
| 		}
 | |
| 		clken;
 | |
| 		option "RSTTYPE" "SYNC" {
 | |
| 			portoption "RST_PRIORITY" "CE" {
 | |
| 				rdsrst any gated_clken;
 | |
| 			}
 | |
| 			ifdef IS_SPARTAN6 {
 | |
| 				portoption "RST_PRIORITY" "SR" {
 | |
| 					rdsrst any ungated;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		ifdef IS_SPARTAN6 {
 | |
| 			option "RSTTYPE" "ASYNC" {
 | |
| 				portoption "RST_PRIORITY" "SR" {
 | |
| 					rdarst any;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		rdinit any;
 | |
| 		portoption "WRITE_MODE" "NO_CHANGE" {
 | |
| 			rdwr no_change;
 | |
| 		}
 | |
| 		portoption "WRITE_MODE" "WRITE_FIRST" {
 | |
| 			rdwr new;
 | |
| 		}
 | |
| 		ifdef IS_SPARTAN6 {
 | |
| 			option "HAS_RDFIRST" 1 {
 | |
| 				portoption "WRITE_MODE" "READ_FIRST" {
 | |
| 					rdwr old;
 | |
| 					wrtrans all old;
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			portoption "WRITE_MODE" "READ_FIRST" {
 | |
| 				rdwr old;
 | |
| 				wrtrans all old;
 | |
| 			}
 | |
| 		}
 | |
| 		optional;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| ifdef IS_SPARTAN6 {
 | |
| 	ram block $__XILINX_BLOCKRAM_SDP_ {
 | |
| 		byte 9;
 | |
| 		abits 13;
 | |
| 		widths 1 2 4 9 18 36 per_port;
 | |
| 		cost 65;
 | |
| 		init any;
 | |
| 		port sw "W" {
 | |
| 			width 36;
 | |
| 			# Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks.
 | |
| 			option "WRITE_MODE" "READ_FIRST" {
 | |
| 				clock posedge "C";
 | |
| 				wrtrans all old;
 | |
| 			}
 | |
| 			option "WRITE_MODE" "WRITE_FIRST" {
 | |
| 				clock posedge;
 | |
| 			}
 | |
| 			clken;
 | |
| 			optional;
 | |
| 		}
 | |
| 		port sr "R" {
 | |
| 			width 36;
 | |
| 			# Spartan 6 and Virtex 6 have a bug where READ_FIRST is not usable with asynchronous clocks.
 | |
| 			option "WRITE_MODE" "READ_FIRST" {
 | |
| 				clock posedge "C";
 | |
| 			}
 | |
| 			option "WRITE_MODE" "WRITE_FIRST" {
 | |
| 				clock posedge;
 | |
| 			}
 | |
| 			clken;
 | |
| 			option "RSTTYPE" "SYNC" {
 | |
| 				portoption "RST_PRIORITY" "CE" {
 | |
| 					rdsrst any gated_clken;
 | |
| 				}
 | |
| 				portoption "RST_PRIORITY" "SR" {
 | |
| 					rdsrst any ungated;
 | |
| 				}
 | |
| 			}
 | |
| 			option "RSTTYPE" "ASYNC" {
 | |
| 				portoption "RST_PRIORITY" "SR" {
 | |
| 					rdarst any;
 | |
| 				}
 | |
| 			}
 | |
| 			rdinit any;
 | |
| 			optional;
 | |
| 		}
 | |
| 	}
 | |
| }
 |