mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 13:29:12 +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;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |