mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	Merge pull request #1603 from whitequark/ice40-ram_style
ice40/ecp5: add support for both 1364.1 and Synplify/LSE RAM/ROM attributes
This commit is contained in:
		
						commit
						93ef516d91
					
				
					 12 changed files with 837 additions and 51 deletions
				
			
		|  | @ -5,19 +5,20 @@ module sync_ram_sp #(parameter DATA_WIDTH=8, ADDRESS_WIDTH=10) | |||
|     input  wire  [ADDRESS_WIDTH-1:0] address_in, | ||||
|     output wire  [DATA_WIDTH-1:0]    data_out); | ||||
| 
 | ||||
|    localparam WORD  = (DATA_WIDTH-1); | ||||
|    localparam DEPTH = (2**ADDRESS_WIDTH-1); | ||||
|   localparam WORD  = (DATA_WIDTH-1); | ||||
|   localparam DEPTH = (2**ADDRESS_WIDTH-1); | ||||
| 
 | ||||
|    reg [WORD:0] data_out_r; | ||||
|    reg [WORD:0] memory [0:DEPTH]; | ||||
|   reg [WORD:0] data_out_r; | ||||
|   reg [WORD:0] memory [0:DEPTH]; | ||||
| 
 | ||||
|    always @(posedge clk) begin | ||||
|       if (write_enable) | ||||
|         memory[address_in] <= data_in; | ||||
|       data_out_r <= memory[address_in]; | ||||
|    end | ||||
|   always @(posedge clk) begin | ||||
|     if (write_enable) | ||||
|       memory[address_in] <= data_in; | ||||
|     data_out_r <= memory[address_in]; | ||||
|   end | ||||
| 
 | ||||
|   assign data_out = data_out_r; | ||||
| 
 | ||||
|    assign data_out = data_out_r; | ||||
| endmodule // sync_ram_sp | ||||
| 
 | ||||
| 
 | ||||
|  | @ -28,18 +29,19 @@ module sync_ram_sdp #(parameter DATA_WIDTH=8, ADDRESS_WIDTH=10) | |||
|     input  wire  [ADDRESS_WIDTH-1:0] address_in_r, address_in_w, | ||||
|     output wire  [DATA_WIDTH-1:0]    data_out); | ||||
| 
 | ||||
|    localparam WORD  = (DATA_WIDTH-1); | ||||
|    localparam DEPTH = (2**ADDRESS_WIDTH-1); | ||||
|   localparam WORD  = (DATA_WIDTH-1); | ||||
|   localparam DEPTH = (2**ADDRESS_WIDTH-1); | ||||
| 
 | ||||
|    reg [WORD:0] data_out_r; | ||||
|    reg [WORD:0] memory [0:DEPTH]; | ||||
|   reg [WORD:0] data_out_r; | ||||
|   reg [WORD:0] memory [0:DEPTH]; | ||||
| 
 | ||||
|    always @(posedge clk) begin | ||||
|       if (write_enable) | ||||
|         memory[address_in_w] <= data_in; | ||||
|       data_out_r <= memory[address_in_r]; | ||||
|    end | ||||
|   always @(posedge clk) begin | ||||
|     if (write_enable) | ||||
|       memory[address_in_w] <= data_in; | ||||
|     data_out_r <= memory[address_in_r]; | ||||
|   end | ||||
| 
 | ||||
|   assign data_out = data_out_r; | ||||
| 
 | ||||
|    assign data_out = data_out_r; | ||||
| endmodule // sync_ram_sdp | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										31
									
								
								tests/arch/common/blockrom.v
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								tests/arch/common/blockrom.v
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,31 @@ | |||
| `default_nettype none | ||||
| module sync_rom #(parameter DATA_WIDTH=8, ADDRESS_WIDTH=10) | ||||
| 	 (input  wire                      clk, | ||||
| 		input  wire  [ADDRESS_WIDTH-1:0] address_in, | ||||
| 		output wire  [DATA_WIDTH-1:0]    data_out); | ||||
| 
 | ||||
| 	localparam WORD  = (DATA_WIDTH-1); | ||||
| 	localparam DEPTH = (2**ADDRESS_WIDTH-1); | ||||
| 
 | ||||
| 	reg [WORD:0] data_out_r; | ||||
| 	reg [WORD:0] memory [0:DEPTH]; | ||||
| 
 | ||||
| 	integer i,j = 64'hF4B1CA8127865242; | ||||
| 	initial | ||||
| 		for (i = 0; i <= DEPTH; i++) begin | ||||
| 			// In case this ROM will be implemented in fabric: fill the memory with some data | ||||
| 			// uncorrelated with the address, or Yosys might see through the ruse and e.g. not | ||||
| 			// emit any LUTs at all for `memory[i] = i;`, just a latch. | ||||
| 			memory[i] = j * 64'h2545F4914F6CDD1D; | ||||
| 			j = j ^ (j >> 12); | ||||
| 			j = j ^ (j << 25); | ||||
| 			j = j ^ (j >> 27); | ||||
| 		end | ||||
| 
 | ||||
| 	always @(posedge clk) begin | ||||
| 		data_out_r <= memory[address_in]; | ||||
| 	end | ||||
| 
 | ||||
| 	assign data_out = data_out_r; | ||||
| 
 | ||||
| endmodule // sync_rom | ||||
							
								
								
									
										330
									
								
								tests/arch/ecp5/memories.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										330
									
								
								tests/arch/ecp5/memories.ys
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,330 @@ | |||
| # ================================ RAM ================================ | ||||
| # RAM bits <= 18K; Data width <= 36; Address width <= 9: -> PDPW16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 9 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:PDPW16KD | ||||
| 
 | ||||
| ## With parameters | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:PDPW16KD # too inefficient | ||||
| select -assert-count 9 t:TRELLIS_DPR16X4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:PDPW16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "Block_RAM" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:PDPW16KD # any case works | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:PDPW16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "registers" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:PDPW16KD # requested FFRAM explicitly | ||||
| select -assert-count 180 t:TRELLIS_FF | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set logic_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:PDPW16KD # requested FFRAM explicitly | ||||
| select -assert-count 180 t:TRELLIS_FF | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set syn_romstyle "ebr" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BROM but this is a RAM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BROM but this is a RAM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp -nobram; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BRAM but BRAM is disabled | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_ram_sdp | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp -nobram; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BRAM but BRAM is disabled | ||||
| 
 | ||||
| # RAM bits <= 18K; Data width <= 18; Address width <= 10: -> DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 10 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 11 -set DATA_WIDTH 9 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 12 -set DATA_WIDTH 4 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 13 -set DATA_WIDTH 2 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 14 -set DATA_WIDTH 1 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| ## With parameters | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:DP16KD # too inefficient | ||||
| select -assert-count 5 t:TRELLIS_DPR16X4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "Block_RAM" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:DP16KD # any case works | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "registers" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:DP16KD # requested FFRAM explicitly | ||||
| select -assert-count 90 t:TRELLIS_FF | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set logic_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:DP16KD # requested FFRAM explicitly | ||||
| select -assert-count 90 t:TRELLIS_FF | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set syn_romstyle "ebr" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BROM but this is a RAM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BROM but this is a RAM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp -nobram; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BRAM but BRAM is disabled | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_ram_sdp | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp -nobram; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BRAM but BRAM is disabled | ||||
| 
 | ||||
| # RAM bits <= 64; Data width <= 4; Address width <= 4: -> DPR16X4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 4 -set DATA_WIDTH 4 sync_ram_sdp | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:TRELLIS_DPR16X4 | ||||
| 
 | ||||
| ## With parameters | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 4 -set DATA_WIDTH 4 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "distributed" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:TRELLIS_DPR16X4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 4 -set DATA_WIDTH 4 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "registers" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:TRELLIS_DPR16X4 # requested FFRAM explicitly | ||||
| select -assert-count 68 t:TRELLIS_FF | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 4 -set DATA_WIDTH 4 sync_ram_sdp | ||||
| setattr -set logic_block 1 m:memory | ||||
| synth_ecp5 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:TRELLIS_DPR16X4 # requested FFRAM explicitly | ||||
| select -assert-count 68 t:TRELLIS_FF | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 4 -set DATA_WIDTH 4 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "distributed" m:memory | ||||
| synth_ecp5 -top sync_ram_sdp -nolutram; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested LUTRAM but LUTRAM is disabled | ||||
| 
 | ||||
| # ================================ ROM ================================ | ||||
| # ROM bits <= 18K; Data width <= 36; Address width <= 9: -> PDPW16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 9 -set DATA_WIDTH 36 sync_rom | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:PDPW16KD | ||||
| 
 | ||||
| ## With parameters | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 3 -set DATA_WIDTH 36 sync_rom | ||||
| write_ilang | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:PDPW16KD # too inefficient | ||||
| select -assert-min 18 t:LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_rom | ||||
| setattr -set syn_romstyle "ebr" m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:PDPW16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_rom | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:PDPW16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 3 -set DATA_WIDTH 36 sync_rom | ||||
| setattr -set syn_romstyle "logic" m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:PDPW16KD # requested LUTROM explicitly | ||||
| select -assert-min 18 t:LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 3 -set DATA_WIDTH 36 sync_rom | ||||
| setattr -set logic_block 1 m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:PDPW16KD # requested LUTROM explicitly | ||||
| select -assert-min 18 t:LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_rom | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BRAM but this is a ROM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_rom | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BRAM but this is a ROM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_rom | ||||
| setattr -set syn_ramstyle "block_rom" m:memory | ||||
| synth_ecp5 -top sync_rom -nobram; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BROM but BRAM is disabled | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 36 sync_rom | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ecp5 -top sync_rom -nobram; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BROM but BRAM is disabled | ||||
| 
 | ||||
| # ROM bits <= 18K; Data width <= 18; Address width <= 10: -> DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 10 -set DATA_WIDTH 18 sync_rom | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| ## With parameters | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 3 -set DATA_WIDTH 18 sync_rom | ||||
| write_ilang | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:DP16KD # too inefficient | ||||
| select -assert-min 9 t:LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_rom | ||||
| setattr -set syn_romstyle "ebr" m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_rom | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:DP16KD | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 3 -set DATA_WIDTH 18 sync_rom | ||||
| setattr -set syn_romstyle "logic" m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:DP16KD # requested LUTROM explicitly | ||||
| select -assert-min 9 t:LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 3 -set DATA_WIDTH 18 sync_rom | ||||
| setattr -set logic_block 1 m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:DP16KD # requested LUTROM explicitly | ||||
| select -assert-min 9 t:LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_rom | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BRAM but this is a ROM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_rom | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ecp5 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BRAM but this is a ROM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_rom | ||||
| setattr -set syn_ramstyle "block_rom" m:memory | ||||
| synth_ecp5 -top sync_rom -nobram; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BROM but BRAM is disabled | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 18 sync_rom | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ecp5 -top sync_rom -nobram; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BROM but BRAM is disabled | ||||
|  | @ -1,15 +0,0 @@ | |||
| read_verilog ../common/lutram.v | ||||
| hierarchy -top lutram_1w1r | ||||
| proc | ||||
| memory -nomap | ||||
| equiv_opt -run :prove -map +/ice40/cells_sim.v synth_ice40 | ||||
| memory | ||||
| opt -full | ||||
| 
 | ||||
| miter -equiv -flatten -make_assert -make_outputs gold gate miter | ||||
| sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter | ||||
| 
 | ||||
| design -load postopt | ||||
| cd lutram_1w1r | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| select -assert-none t:SB_RAM40_4K %% t:* %D | ||||
							
								
								
									
										168
									
								
								tests/arch/ice40/memories.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								tests/arch/ice40/memories.ys
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,168 @@ | |||
| # ================================ RAM ================================ | ||||
| # RAM bits <= 4K; Data width <= 16; Address width <= 11: -> SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 11 -set DATA_WIDTH 2 sync_ram_sdp | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 10 -set DATA_WIDTH 4 sync_ram_sdp | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 9 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 8 -set DATA_WIDTH 16 sync_ram_sdp | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| ## With parameters | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:SB_RAM40_4K # too inefficient | ||||
| select -assert-min 1 t:SB_DFFE | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "Block_RAM" m:memory | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:SB_RAM40_4K # any case works | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "registers" m:memory | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:SB_RAM40_4K # requested FFRAM explicitly | ||||
| select -assert-min 1 t:SB_DFFE | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set logic_block 1 m:memory | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 0 t:SB_RAM40_4K # requested FFRAM explicitly | ||||
| select -assert-min 1 t:SB_DFFE | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set syn_romstyle "ebr" m:memory | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BROM but this is a RAM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ice40 -top sync_ram_sdp; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BROM but this is a RAM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ice40 -top sync_ram_sdp -nobram; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BRAM but BRAM is disabled | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockram.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_ram_sdp | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ice40 -top sync_ram_sdp -nobram; cd sync_ram_sdp | ||||
| select -assert-count 1 t:$mem # requested BRAM but BRAM is disabled | ||||
| 
 | ||||
| # ================================ ROM ================================ | ||||
| # ROM bits <= 4K; Data width <= 16; Address width <= 11: -> SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 11 -set DATA_WIDTH 2 sync_rom | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 10 -set DATA_WIDTH 4 sync_rom | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 9 -set DATA_WIDTH 8 sync_rom | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 8 -set DATA_WIDTH 16 sync_rom | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| ## With parameters | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| write_ilang | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:SB_RAM40_4K # too inefficient | ||||
| select -assert-min 1 t:SB_LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| setattr -set syn_romstyle "ebr" m:memory | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:SB_RAM40_4K | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| setattr -set syn_romstyle "logic" m:memory | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:SB_RAM40_4K # requested LUTROM explicitly | ||||
| select -assert-min 1 t:SB_LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| setattr -set logic_block 1 m:memory | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 0 t:SB_RAM40_4K # requested LUTROM explicitly | ||||
| select -assert-min 1 t:SB_LUT4 | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| setattr -set syn_ramstyle "block_ram" m:memory | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BRAM but this is a ROM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| setattr -set ram_block 1 m:memory | ||||
| synth_ice40 -top sync_rom; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BRAM but this is a ROM | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| setattr -set syn_romstyle "ebr" m:memory | ||||
| synth_ice40 -top sync_rom -nobram; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BROM but BRAM is disabled | ||||
| 
 | ||||
| design -reset; read_verilog ../common/blockrom.v | ||||
| chparam -set ADDRESS_WIDTH 2 -set DATA_WIDTH 8 sync_rom | ||||
| setattr -set rom_block 1 m:memory | ||||
| synth_ice40 -top sync_rom -nobram; cd sync_rom | ||||
| select -assert-count 1 t:$mem # requested BROM but BRAM is disabled | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue