Refactor for FPGA synthesis

This commit is contained in:
Byron Lathi
2023-10-19 18:57:42 -07:00
parent 03456607c9
commit 5a8d15de94
2 changed files with 97 additions and 86 deletions

View File

@@ -10,6 +10,7 @@ module mapper(
); );
logic [15:0] mm [16]; logic [15:0] mm [16];
logic [15:0] mm_next [16];
logic [31:0] we; logic [31:0] we;
@@ -27,6 +28,16 @@ always_comb begin
selected_mm = mm[i_cpu_addr[15:12]]; selected_mm = mm[i_cpu_addr[15:12]];
o_mapped_addr = {selected_mm[12:0], i_cpu_addr[11:0]}; o_mapped_addr = {selected_mm[12:0], i_cpu_addr[11:0]};
for (int i = 0; i < 16; i++) begin
mm_next[i] = mm[i];
end
for (int i = 0; i < 32; i++) begin
if (we[i]) begin
mm_next[i/2][(i%2)*8 +: 8] = i_data;
end
end
end end
always_ff @(negedge i_clk or posedge i_reset) begin always_ff @(negedge i_clk or posedge i_reset) begin
@@ -36,10 +47,8 @@ always_ff @(negedge i_clk or posedge i_reset) begin
end end
end end
for (int i = 0; i < 32; i++) begin for (int i = 0; i < 16; i++) begin
if (we[i]) begin mm[i] <= mm_next[i];
mm[i/2][(i%2)*8 +: 8] <= i_data;
end
end end

View File

@@ -1,104 +1,106 @@
<efx:project xmlns:efx="http://www.efinixinc.com/enf_proj" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="super6502" description="" last_change_date="Sun Oct 15 2023 09:26:48 PM" location="/home/byron/Projects/super6502/hw/efinix_fpga" sw_version="2023.1.150" last_run_state="pass" last_run_tool="efx_pgm" last_run_flow="bitstream" config_result_in_sync="sync" design_ood="sync" place_ood="sync" route_ood="sync" xsi:schemaLocation="http://www.efinixinc.com/enf_proj enf_proj.xsd"> <?xml version="1.0" encoding="UTF-8"?>
<efx:project name="super6502" description="" last_change_date="Thu October 19 2023 18:55:10" location="/home/byron/ServerProjects/super6502/hw/efinix_fpga" sw_version="2022.2.322" last_run_state="fail" last_run_tool="efx_map" last_run_flow="syn" config_result_in_sync="sync" design_ood="" place_ood="sync" route_ood="sync" xmlns:efx="http://www.efinixinc.com/enf_proj" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.efinixinc.com/enf_proj enf_proj.xsd">
<efx:device_info> <efx:device_info>
<efx:family name="Trion" /> <efx:family name="Trion"/>
<efx:device name="T20F256" /> <efx:device name="T20F256"/>
<efx:timing_model name="C4" /> <efx:timing_model name="C4"/>
</efx:device_info> </efx:device_info>
<efx:design_info def_veri_version="sv_09" def_vhdl_version="vhdl_2008"> <efx:design_info def_veri_version="sv_09" def_vhdl_version="vhdl_2008">
<efx:top_module name="super6502" /> <efx:top_module name="super6502"/>
<efx:design_file name="src/super6502.sv" version="default" library="default" /> <efx:design_file name="src/super6502.sv" version="default" library="default"/>
<efx:design_file name="src/leds.sv" version="default" library="default" /> <efx:design_file name="src/leds.sv" version="default" library="default"/>
<efx:design_file name="src/sdram_adapter.sv" version="default" library="default" /> <efx:design_file name="src/sdram_adapter.sv" version="default" library="default"/>
<efx:design_file name="src/timer.sv" version="default" library="default" /> <efx:design_file name="src/timer.sv" version="default" library="default"/>
<efx:design_file name="src/interrupt_controller.sv" version="default" library="default" /> <efx:design_file name="src/interrupt_controller.sv" version="default" library="default"/>
<efx:design_file name="src/multiplier.sv" version="default" library="default" /> <efx:design_file name="src/multiplier.sv" version="default" library="default"/>
<efx:design_file name="src/divider_wrapper.sv" version="default" library="default" /> <efx:design_file name="src/divider_wrapper.sv" version="default" library="default"/>
<efx:design_file name="src/uart_wrapper.sv" version="default" library="default" /> <efx:design_file name="src/uart_wrapper.sv" version="default" library="default"/>
<efx:design_file name="src/sd_controller.sv" version="default" library="default" /> <efx:design_file name="src/sd_controller.sv" version="default" library="default"/>
<efx:design_file name="src/crc7.sv" version="default" library="default" /> <efx:design_file name="src/crc7.sv" version="default" library="default"/>
<efx:design_file name="src/rom.sv" version="default" library="default" /> <efx:design_file name="src/rom.sv" version="default" library="default"/>
<efx:design_file name="src/spi_controller.sv" version="default" library="default" /> <efx:design_file name="src/spi_controller.sv" version="default" library="default"/>
<efx:top_vhdl_arch name="" /> <efx:design_file name="src/mapper.sv" version="default" library="default"/>
<efx:top_vhdl_arch name=""/>
</efx:design_info> </efx:design_info>
<efx:constraint_info> <efx:constraint_info>
<efx:sdc_file name="constraints/super6502.pt.sdc" /> <efx:sdc_file name="constraints/super6502.pt.sdc"/>
<efx:inter_file name="" /> <efx:inter_file name=""/>
</efx:constraint_info> </efx:constraint_info>
<efx:sim_info /> <efx:sim_info/>
<efx:misc_info /> <efx:misc_info/>
<efx:ip_info> <efx:ip_info>
<efx:ip instance_name="sdram_controller" path="ip/sdram_controller/settings.json"> <efx:ip instance_name="sdram_controller" path="ip/sdram_controller/settings.json">
<efx:ip_src_file name="sdram_controller.v" /> <efx:ip_src_file name="sdram_controller.v"/>
</efx:ip> </efx:ip>
<efx:ip instance_name="divider" path="ip/divider/settings.json"> <efx:ip instance_name="divider" path="ip/divider/settings.json">
<efx:ip_src_file name="divider.v" /> <efx:ip_src_file name="divider.v"/>
</efx:ip> </efx:ip>
<efx:ip instance_name="uart" path="ip/uart/settings.json"> <efx:ip instance_name="uart" path="ip/uart/settings.json">
<efx:ip_src_file name="uart.v" /> <efx:ip_src_file name="uart.v"/>
</efx:ip> </efx:ip>
</efx:ip_info> </efx:ip_info>
<efx:synthesis tool_name="efx_map"> <efx:synthesis tool_name="efx_map">
<efx:param name="work_dir" value="work_syn" value_type="e_string" /> <efx:param name="work_dir" value="work_syn" value_type="e_string"/>
<efx:param name="write_efx_verilog" value="on" value_type="e_bool" /> <efx:param name="write_efx_verilog" value="on" value_type="e_bool"/>
<efx:param name="mode" value="speed" value_type="e_option" /> <efx:param name="mode" value="speed" value_type="e_option"/>
<efx:param name="max_ram" value="-1" value_type="e_integer" /> <efx:param name="max_ram" value="-1" value_type="e_integer"/>
<efx:param name="max_mult" value="-1" value_type="e_integer" /> <efx:param name="max_mult" value="-1" value_type="e_integer"/>
<efx:param name="infer-clk-enable" value="3" value_type="e_option" /> <efx:param name="infer-clk-enable" value="3" value_type="e_option"/>
<efx:param name="infer-sync-set-reset" value="1" value_type="e_option" /> <efx:param name="infer-sync-set-reset" value="1" value_type="e_option"/>
<efx:param name="fanout-limit" value="0" value_type="e_integer" /> <efx:param name="fanout-limit" value="0" value_type="e_integer"/>
<efx:param name="bram_output_regs_packing" value="1" value_type="e_option" /> <efx:param name="bram_output_regs_packing" value="1" value_type="e_option"/>
<efx:param name="retiming" value="1" value_type="e_option" /> <efx:param name="retiming" value="1" value_type="e_option"/>
<efx:param name="seq_opt" value="1" value_type="e_option" /> <efx:param name="seq_opt" value="1" value_type="e_option"/>
<efx:param name="blast_const_operand_adders" value="1" value_type="e_option" /> <efx:param name="blast_const_operand_adders" value="1" value_type="e_option"/>
<efx:param name="operator-sharing" value="0" value_type="e_option" /> <efx:param name="operator-sharing" value="0" value_type="e_option"/>
<efx:param name="optimize-adder-tree" value="0" value_type="e_option" /> <efx:param name="optimize-adder-tree" value="0" value_type="e_option"/>
<efx:param name="mult_input_regs_packing" value="1" value_type="e_option" /> <efx:param name="mult_input_regs_packing" value="1" value_type="e_option"/>
<efx:param name="mult_output_regs_packing" value="1" value_type="e_option" /> <efx:param name="mult_output_regs_packing" value="1" value_type="e_option"/>
<efx:param name="min-sr-fanout" value="0" value_type="e_option" /> <efx:param name="min-sr-fanout" value="0" value_type="e_option"/>
<efx:param name="seq-opt-sync-only" value="0" value_type="e_option" /> <efx:param name="seq-opt-sync-only" value="0" value_type="e_option"/>
<efx:param name="blackbox-error" value="1" value_type="e_option" /> <efx:param name="blackbox-error" value="1" value_type="e_option"/>
<efx:param name="allow-const-ram-index" value="0" value_type="e_option" /> <efx:param name="allow-const-ram-index" value="0" value_type="e_option"/>
<efx:param name="hdl-compile-unit" value="1" value_type="e_option" /> <efx:param name="hdl-compile-unit" value="1" value_type="e_option"/>
<efx:param name="create-onehot-fsms" value="0" value_type="e_option" /> <efx:param name="create-onehot-fsms" value="0" value_type="e_option"/>
<efx:param name="min-ce-fanout" value="0" value_type="e_integer" /> <efx:param name="min-ce-fanout" value="0" value_type="e_integer"/>
<efx:param name="mult-decomp-retime" value="0" value_type="e_option" /> <efx:param name="mult-decomp-retime" value="0" value_type="e_option"/>
<efx:param name="optimize-zero-init-rom" value="1" value_type="e_option" /> <efx:param name="optimize-zero-init-rom" value="1" value_type="e_option"/>
<efx:param name="include" value="ip/sdram_controller" value_type="e_string" /> <efx:param name="include" value="ip/sdram_controller" value_type="e_string"/>
<efx:param name="include" value="ip/divider" value_type="e_string" /> <efx:param name="include" value="ip/divider" value_type="e_string"/>
<efx:param name="include" value="ip/uart" value_type="e_string" /> <efx:param name="include" value="ip/uart" value_type="e_string"/>
</efx:synthesis> </efx:synthesis>
<efx:place_and_route tool_name="efx_pnr"> <efx:place_and_route tool_name="efx_pnr">
<efx:param name="work_dir" value="work_pnr" value_type="e_string" /> <efx:param name="work_dir" value="work_pnr" value_type="e_string"/>
<efx:param name="verbose" value="off" value_type="e_bool" /> <efx:param name="verbose" value="off" value_type="e_bool"/>
<efx:param name="load_delaym" value="on" value_type="e_bool" /> <efx:param name="load_delaym" value="on" value_type="e_bool"/>
<efx:param name="optimization_level" value="NULL" value_type="e_option" /> <efx:param name="optimization_level" value="NULL" value_type="e_option"/>
<efx:param name="seed" value="1" value_type="e_integer" /> <efx:param name="seed" value="1" value_type="e_integer"/>
<efx:param name="placer_effort_level" value="2" value_type="e_option" /> <efx:param name="placer_effort_level" value="2" value_type="e_option"/>
<efx:param name="max_threads" value="-1" value_type="e_integer" /> <efx:param name="max_threads" value="-1" value_type="e_integer"/>
</efx:place_and_route> </efx:place_and_route>
<efx:bitstream_generation tool_name="efx_pgm"> <efx:bitstream_generation tool_name="efx_pgm">
<efx:param name="mode" value="active" value_type="e_option" /> <efx:param name="mode" value="active" value_type="e_option"/>
<efx:param name="width" value="1" value_type="e_option" /> <efx:param name="width" value="1" value_type="e_option"/>
<efx:param name="enable_roms" value="smart" value_type="e_option" /> <efx:param name="enable_roms" value="smart" value_type="e_option"/>
<efx:param name="spi_low_power_mode" value="on" value_type="e_bool" /> <efx:param name="spi_low_power_mode" value="on" value_type="e_bool"/>
<efx:param name="io_weak_pullup" value="on" value_type="e_bool" /> <efx:param name="io_weak_pullup" value="on" value_type="e_bool"/>
<efx:param name="oscillator_clock_divider" value="DIV8" value_type="e_option" /> <efx:param name="oscillator_clock_divider" value="DIV8" value_type="e_option"/>
<efx:param name="bitstream_compression" value="off" value_type="e_bool" /> <efx:param name="bitstream_compression" value="off" value_type="e_bool"/>
<efx:param name="enable_external_master_clock" value="off" value_type="e_bool" /> <efx:param name="enable_external_master_clock" value="off" value_type="e_bool"/>
<efx:param name="active_capture_clk_edge" value="posedge" value_type="e_option" /> <efx:param name="active_capture_clk_edge" value="posedge" value_type="e_option"/>
<efx:param name="jtag_usercode" value="0xFFFFFFFF" value_type="e_string" /> <efx:param name="jtag_usercode" value="0xFFFFFFFF" value_type="e_string"/>
<efx:param name="release_tri_then_reset" value="on" value_type="e_bool" /> <efx:param name="release_tri_then_reset" value="on" value_type="e_bool"/>
<efx:param name="cold_boot" value="off" value_type="e_bool" /> <efx:param name="cold_boot" value="off" value_type="e_bool"/>
<efx:param name="cascade" value="off" value_type="e_option" /> <efx:param name="cascade" value="off" value_type="e_option"/>
<efx:param name="generate_bit" value="on" value_type="e_bool" /> <efx:param name="generate_bit" value="on" value_type="e_bool"/>
<efx:param name="generate_bitbin" value="off" value_type="e_bool" /> <efx:param name="generate_bitbin" value="off" value_type="e_bool"/>
<efx:param name="generate_hex" value="on" value_type="e_bool" /> <efx:param name="generate_hex" value="on" value_type="e_bool"/>
<efx:param name="generate_hexbin" value="off" value_type="e_bool" /> <efx:param name="generate_hexbin" value="off" value_type="e_bool"/>
<efx:param name="four_byte_addressing" value="off" value_type="e_bool" /> <efx:param name="four_byte_addressing" value="off" value_type="e_bool"/>
</efx:bitstream_generation> </efx:bitstream_generation>
<efx:debugger> <efx:debugger>
<efx:param name="work_dir" value="work_dbg" value_type="e_string" /> <efx:param name="work_dir" value="work_dbg" value_type="e_string"/>
<efx:param name="auto_instantiation" value="off" value_type="e_bool" /> <efx:param name="auto_instantiation" value="off" value_type="e_bool"/>
<efx:param name="profile" value="debug_profile.wizard.json" value_type="e_string" /> <efx:param name="profile" value="debug_profile.wizard.json" value_type="e_string"/>
</efx:debugger> </efx:debugger>
</efx:project> </efx:project>