added stp2.stp

This commit is contained in:
irobo 2026-06-01 21:50:55 +03:00
parent 37f31f7dcb
commit 514814e555
4 changed files with 165 additions and 14 deletions

View File

@ -52,13 +52,13 @@ set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation
set_global_assignment -name EDA_OUTPUT_DATA_FORMAT "VERILOG HDL" -section_id eda_simulation set_global_assignment -name EDA_OUTPUT_DATA_FORMAT "VERILOG HDL" -section_id eda_simulation
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top set_global_assignment -name PARTITION_NETLIST_TYPE POST_FIT -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V" set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V"
set_location_assignment PIN_23 -to CLK50 set_location_assignment PIN_23 -to CLK50
set_location_assignment PIN_87 -to GPIO0 set_location_assignment PIN_87 -to GPIO0
set_location_assignment PIN_7 -to KEY0 set_location_assignment PIN_88 -to KEY0
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLK50 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLK50
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO0 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO0
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY0 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY0
@ -69,4 +69,40 @@ set_global_assignment -name VERILOG_FILE top.v
set_global_assignment -name VERILOG_FILE pattern_rom.v set_global_assignment -name VERILOG_FILE pattern_rom.v
set_global_assignment -name VERILOG_FILE pattern_player.v set_global_assignment -name VERILOG_FILE pattern_player.v
set_instance_assignment -name SLEW_RATE 2 -to GPIO0 set_instance_assignment -name SLEW_RATE 2 -to GPIO0
set_global_assignment -name ENABLE_SIGNALTAP ON
set_global_assignment -name USE_SIGNALTAP_FILE stp2.stp
set_global_assignment -name SIGNALTAP_FILE stp.stp
set_global_assignment -name SLD_NODE_CREATOR_ID 110 -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_ENTITY_NAME sld_signaltap -section_id auto_signaltap_0
set_instance_assignment -name POST_FIT_CONNECT_TO_SLD_NODE_ENTITY_PORT acq_clk -to CLK50 -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_RAM_BLOCK_TYPE=AUTO" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_DATA_BITS=1" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_TRIGGER_BITS=1" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_NODE_INFO=805334528" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_POWER_UP_TRIGGER=0" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_SEGMENT_SIZE=128" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_ATTRIBUTE_MEM_MODE=OFF" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_STATE_FLOW_USE_GENERATED=0" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_STATE_BITS=11" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_BUFFER_FULL_STOP=1" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_CURRENT_RESOURCE_WIDTH=1" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_TRIGGER_LEVEL=1" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_SAMPLE_DEPTH=128" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_ADVANCED_TRIGGER_ENTITY=basic,1," -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_TRIGGER_LEVEL_PIPELINE=1" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_ENABLE_ADVANCED_TRIGGER=0" -section_id auto_signaltap_0
set_global_assignment -name SIGNALTAP_FILE stp1.stp
set_global_assignment -name SIGNALTAP_FILE stp2.stp
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_INVERSION_MASK=000000000000000000000000" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_INVERSION_MASK_LENGTH=24" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_STORAGE_QUALIFIER_INVERSION_MASK_LENGTH=0" -section_id auto_signaltap_0
set_location_assignment PIN_84 -to GPIO1
set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO1
set_instance_assignment -name POST_FIT_CONNECT_TO_SLD_NODE_ENTITY_PORT acq_trigger_in[0] -to clk50_div2 -section_id auto_signaltap_0
set_instance_assignment -name POST_FIT_CONNECT_TO_SLD_NODE_ENTITY_PORT acq_data_in[0] -to clk50_div2 -section_id auto_signaltap_0
set_instance_assignment -name POST_FIT_CONNECT_TO_SLD_NODE_ENTITY_PORT trigger_in -to clk50_div2 -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_NODE_CRC_LOWORD=44983" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_NODE_CRC_HIWORD=12698" -section_id auto_signaltap_0
set_global_assignment -name SLD_NODE_PARAMETER_ASSIGNMENT "SLD_TRIGGER_IN_ENABLED=1" -section_id auto_signaltap_0
set_global_assignment -name SLD_FILE db/stp2_auto_stripped.stp
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

22
output_file.cof Normal file
View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
<cof>
<eprom_name>EPCS4</eprom_name>
<flash_loader_device>EP4CE6</flash_loader_device>
<output_filename>output_file.jic</output_filename>
<n_pages>1</n_pages>
<width>1</width>
<mode>7</mode>
<sof_data>
<user_name>Page_0</user_name>
<page_flags>1</page_flags>
<bit0>
<sof_filename>C:/Users/irobo/PycharmProjects/Logic2_to_FPGA/output_files/Logic2_to_FPGA.sof</sof_filename>
</bit0>
</sof_data>
<version>5</version>
<create_cvp_file>0</create_cvp_file>
<auto_create_rpd>0</auto_create_rpd>
<options>
<map_file>1</map_file>
</options>
</cof>

87
stp2.stp Normal file
View File

@ -0,0 +1,87 @@
<session jtag_chain="USB-Blaster [USB-0]" jtag_device="@1: EP3C(10|5)/EP4CE(10|6) (0x020F10DD)" sof_file="">
<display_tree gui_logging_enabled="0">
<display_branch instance="auto_signaltap_0" log="USE_GLOBAL_TEMP" signal_set="USE_GLOBAL_TEMP" trigger="USE_GLOBAL_TEMP"/>
</display_tree>
<mnemonics/>
<static_plugin_mnemonics/>
<global_info>
<single attribute="active instance" value="0"/>
<single attribute="config widget visible" value="1"/>
<single attribute="data log widget visible" value="1"/>
<single attribute="hierarchy widget height" value="1"/>
<single attribute="hierarchy widget visible" value="1"/>
<single attribute="instance widget visible" value="1"/>
<single attribute="jtag widget visible" value="1"/>
<multi attribute="frame size" size="2" value="1024,705"/>
<multi attribute="jtag widget size" size="2" value="334,135"/>
</global_info>
<instance entity_name="sld_signaltap" is_auto_node="yes" name="auto_signaltap_0" source_file="sld_signaltap.vhd">
<node_ip_info instance_id="0" mfg_id="110" node_id="0" version="6"/>
<position_info>
<single attribute="active tab" value="1"/>
</position_info>
<signal_set global_temp="1" name="signal_set: 2026/06/01 21:17:43 #0">
<clock name="CLK50" polarity="posedge" tap_mode="probeonly"/>
<config is_hps_trigger_out_selected="false" ram_type="AUTO" reserved_data_nodes="0" reserved_storage_qualifier_nodes="0" reserved_trigger_nodes="0" sample_depth="128" trigger_in_enable="yes" trigger_in_node="clk50_div2" trigger_in_tap_mode="probeonly" trigger_out_enable="no"/>
<top_entity/>
<signal_vec>
<trigger_input_vec>
<wire name="clk50_div2" tap_mode="probeonly"/>
</trigger_input_vec>
<data_input_vec>
<wire name="clk50_div2" tap_mode="probeonly"/>
</data_input_vec>
<storage_qualifier_input_vec>
<wire name="clk50_div2" tap_mode="probeonly"/>
</storage_qualifier_input_vec>
</signal_vec>
<presentation>
<unified_setup_data_view>
<node data_index="0" duplicate_name_allowed="false" is_data_input="true" is_node_valid="true" is_storage_input="true" is_trigger_input="true" name="clk50_div2" storage_index="0" tap_mode="probeonly" trigger_index="0" type="unknown"/>
</unified_setup_data_view>
<data_view>
<net data_index="0" duplicate_name_allowed="false" is_data_input="true" is_node_valid="true" is_storage_input="true" is_trigger_input="true" name="clk50_div2" storage_index="0" tap_mode="probeonly" trigger_index="0" type="unknown"/>
</data_view>
<setup_view>
<net data_index="0" duplicate_name_allowed="false" is_data_input="true" is_node_valid="true" is_storage_input="true" is_trigger_input="true" name="clk50_div2" storage_index="0" tap_mode="probeonly" trigger_index="0" type="unknown"/>
</setup_view>
<trigger_in_editor is_enabled="true" is_node_post_fitting="true" node_name="clk50_div2"/>
<trigger_out_editor/>
</presentation>
<trigger attribute_mem_mode="false" gap_record="true" global_temp="1" name="trigger: 2026/06/01 21:17:43 #1" position="pre" power_up_trigger_mode="false" record_data_gap="true" segment_size="1" storage_mode="off" storage_qualifier_disabled="no" storage_qualifier_port_is_pin="true" storage_qualifier_port_name="auto_stp_external_storage_qualifier" storage_qualifier_port_tap_mode="classic" trigger_in="high" trigger_type="circular">
<power_up_trigger position="pre" storage_qualifier_disabled="no" trigger_in="high"/>
<events use_custom_flow_control="no">
<level enabled="yes" name="condition1" type="basic">
<power_up enabled="yes">
</power_up>
<op_node/>
</level>
</events>
<storage_qualifier_events>
<transitional>1
<pwr_up_transitional>1</pwr_up_transitional>
</transitional>
<storage_qualifier_level type="basic">
<power_up>
</power_up>
<op_node/>
</storage_qualifier_level>
<storage_qualifier_level type="basic">
<power_up>
</power_up>
<op_node/>
</storage_qualifier_level>
<storage_qualifier_level type="basic">
<power_up>
</power_up>
<op_node/>
</storage_qualifier_level>
</storage_qualifier_events>
<log>
<data global_temp="1" name="log: 2026/06/01 21:17:43 #2"/>
<extradata/>
</log>
</trigger>
</signal_set>
</instance>
</session>

28
top.v
View File

@ -4,29 +4,35 @@
module top ( module top (
input wire CLK50, // системный клок с платы (например, 50 МГц) input wire CLK50, // системный клок с платы (например, 50 МГц)
input wire KEY0, // кнопка reset (на OMDAZZ часто активный низ) input wire KEY0, // кнопка reset (на OMDAZZ часто активный низ)
output wire GPIO0 // выход на пин (оптопара/LED и т.п.) output wire GPIO0, // выход на пин (оптопара/LED и т.п.)
output wire GPIO1 // ДОП. выход для clk50_div2 (подвесь на свободный пин)
); );
// ========================== // ==========================
// Сброс (reset) // Сброс (reset)
// ========================== // ==========================
// Предположим, что KEY0 замыкает на 0, когда нажата делаем rst = !KEY0.
wire rst = ~KEY0; wire rst = ~KEY0;
// ==========================
// Делитель такта CLK50 / 2
// ==========================
reg clk50_div2 = 1'b0;
always @(posedge CLK50 or posedge rst) begin
if (rst)
clk50_div2 <= 1'b0;
else
clk50_div2 <= ~clk50_div2;
end
// ========================== // ==========================
// Сигнал запуска плеера // Сигнал запуска плеера
// ========================== // ==========================
// Для начала можем просто держать start = 1,
// чтобы паттерн проигрывался один раз после сброса.
// Если нужен запуск по кнопке можно сделать простую логіку отдельно.
wire start = 1'b1; wire start = 1'b1;
// ========================== // ==========================
// Параметры должны совпадать с pattern_rom.v // Параметры должны совпадать с pattern_rom.v
// ========================== // ==========================
localparam TICKS_WIDTH = 32; localparam TICKS_WIDTH = 32;
// DEPTH возьми из комментария в созданном pattern_rom.v
// (Python-скрипт его печатает). Например:
localparam DEPTH = 128; localparam DEPTH = 128;
// ========================== // ==========================
@ -37,17 +43,17 @@ module top (
pattern_player #( pattern_player #(
.TICKS_WIDTH(TICKS_WIDTH), .TICKS_WIDTH(TICKS_WIDTH),
.DEPTH(DEPTH) .DEPTH (DEPTH)
) u_player ( ) u_player (
.clk (CLK50), // тот же клок, что и в Python (F_CLK_HZ = 50e6) .clk (CLK50), // такт 50 МГц
// если F_CLK_HZ другое нужен PLL и другой сигнал clk
.rst (rst), .rst (rst),
.start (start), .start (start),
.out (out_sig), .out (out_sig),
.busy (busy) .busy (busy)
); );
// Выводим сигнал на внешний пин // Выводим сигнал плеера и делитель такта на внешние пины
assign GPIO0 = out_sig; assign GPIO0 = out_sig;
assign GPIO1 = clk50_div2; // сюда повесь светодиод или щуп
endmodule endmodule