done in hardware
This commit is contained in:
parent
b86b8e55dc
commit
d2e26e53f7
|
@ -1,36 +1,36 @@
|
||||||
*.pdf
|
*.pdf
|
||||||
*.rpt
|
*.rpt
|
||||||
*.bak
|
*.bak
|
||||||
.#*
|
.#*
|
||||||
|
|
||||||
/db
|
/db
|
||||||
/incremental_db
|
/incremental_db
|
||||||
/output_files
|
/output_files
|
||||||
/simulation
|
/simulation
|
||||||
/.qsys*
|
/.qsys*
|
||||||
# /atom_netlists
|
# /atom_netlists
|
||||||
greybox_tmp/
|
greybox_tmp/
|
||||||
.qsys_edit/
|
.qsys_edit/
|
||||||
synthesis/
|
synthesis/
|
||||||
*output_files/
|
*output_files/
|
||||||
simulation/
|
simulation/
|
||||||
obj/
|
obj/
|
||||||
drivers/
|
drivers/
|
||||||
HAL/
|
HAL/
|
||||||
Part_test/
|
Part_test/
|
||||||
.metadata/
|
.metadata/
|
||||||
RemoteSystemsTempFiles/
|
RemoteSystemsTempFiles/
|
||||||
aldec/
|
aldec/
|
||||||
cadence/
|
cadence/
|
||||||
synopsys/
|
synopsys/
|
||||||
|
|
||||||
|
|
||||||
/testbenches/*.bak
|
/testbenches/*.bak
|
||||||
/common_uart/*.bak
|
/common_uart/*.bak
|
||||||
|
|
||||||
/build/*
|
/build/*
|
||||||
!/build/*.pdf
|
!/build/*.pdf
|
||||||
!/build/tikz*.sty
|
!/build/tikz*.sty
|
||||||
|
|
||||||
|
|
||||||
!/Top/software/semafor/obj/default/runtime/sim/mentor/wave.do
|
!/Top/software/semafor/obj/default/runtime/sim/mentor/wave.do
|
|
@ -1,5 +1,5 @@
|
||||||
set_global_assignment -name IP_TOOL_NAME "RAM: 2-PORT"
|
set_global_assignment -name IP_TOOL_NAME "RAM: 2-PORT"
|
||||||
set_global_assignment -name IP_TOOL_VERSION "18.1"
|
set_global_assignment -name IP_TOOL_VERSION "18.1"
|
||||||
set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone IV E}"
|
set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{Cyclone IV E}"
|
||||||
set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "periodram.v"]
|
set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "periodram.v"]
|
||||||
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "periodram_inst.v"]
|
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "periodram_inst.v"]
|
||||||
|
|
|
@ -1,222 +1,222 @@
|
||||||
// megafunction wizard: %RAM: 2-PORT%
|
// megafunction wizard: %RAM: 2-PORT%
|
||||||
// GENERATION: STANDARD
|
// GENERATION: STANDARD
|
||||||
// VERSION: WM1.0
|
// VERSION: WM1.0
|
||||||
// MODULE: altsyncram
|
// MODULE: altsyncram
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// File Name: periodram.v
|
// File Name: periodram.v
|
||||||
// Megafunction Name(s):
|
// Megafunction Name(s):
|
||||||
// altsyncram
|
// altsyncram
|
||||||
//
|
//
|
||||||
// Simulation Library Files(s):
|
// Simulation Library Files(s):
|
||||||
// altera_mf
|
// altera_mf
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// ************************************************************
|
// ************************************************************
|
||||||
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
|
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
|
||||||
//
|
//
|
||||||
// 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
// 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
||||||
// ************************************************************
|
// ************************************************************
|
||||||
|
|
||||||
|
|
||||||
//Copyright (C) 2018 Intel Corporation. All rights reserved.
|
//Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
//Your use of Intel Corporation's design tools, logic functions
|
//Your use of Intel Corporation's design tools, logic functions
|
||||||
//and other software and tools, and its AMPP partner logic
|
//and other software and tools, and its AMPP partner logic
|
||||||
//functions, and any output files from any of the foregoing
|
//functions, and any output files from any of the foregoing
|
||||||
//(including device programming or simulation files), and any
|
//(including device programming or simulation files), and any
|
||||||
//associated documentation or information are expressly subject
|
//associated documentation or information are expressly subject
|
||||||
//to the terms and conditions of the Intel Program License
|
//to the terms and conditions of the Intel Program License
|
||||||
//Subscription Agreement, the Intel Quartus Prime License Agreement,
|
//Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||||
//the Intel FPGA IP License Agreement, or other applicable license
|
//the Intel FPGA IP License Agreement, or other applicable license
|
||||||
//agreement, including, without limitation, that your use is for
|
//agreement, including, without limitation, that your use is for
|
||||||
//the sole purpose of programming logic devices manufactured by
|
//the sole purpose of programming logic devices manufactured by
|
||||||
//Intel and sold by Intel or its authorized distributors. Please
|
//Intel and sold by Intel or its authorized distributors. Please
|
||||||
//refer to the applicable agreement for further details.
|
//refer to the applicable agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// synopsys translate_off
|
// synopsys translate_off
|
||||||
`timescale 1 ps / 1 ps
|
`timescale 1 ps / 1 ps
|
||||||
// synopsys translate_on
|
// synopsys translate_on
|
||||||
module periodram (
|
module periodram (
|
||||||
clock,
|
clock,
|
||||||
data,
|
data,
|
||||||
rdaddress,
|
rdaddress,
|
||||||
wraddress,
|
wraddress,
|
||||||
wren,
|
wren,
|
||||||
q);
|
q);
|
||||||
|
|
||||||
input clock;
|
input clock;
|
||||||
input [31:0] data;
|
input [31:0] data;
|
||||||
input [3:0] rdaddress;
|
input [3:0] rdaddress;
|
||||||
input [3:0] wraddress;
|
input [3:0] wraddress;
|
||||||
input wren;
|
input wren;
|
||||||
output [31:0] q;
|
output [31:0] q;
|
||||||
`ifndef ALTERA_RESERVED_QIS
|
`ifndef ALTERA_RESERVED_QIS
|
||||||
// synopsys translate_off
|
// synopsys translate_off
|
||||||
`endif
|
`endif
|
||||||
tri1 clock;
|
tri1 clock;
|
||||||
tri0 wren;
|
tri0 wren;
|
||||||
`ifndef ALTERA_RESERVED_QIS
|
`ifndef ALTERA_RESERVED_QIS
|
||||||
// synopsys translate_on
|
// synopsys translate_on
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
wire [31:0] sub_wire0;
|
wire [31:0] sub_wire0;
|
||||||
wire [31:0] q = sub_wire0[31:0];
|
wire [31:0] q = sub_wire0[31:0];
|
||||||
|
|
||||||
altsyncram altsyncram_component (
|
altsyncram altsyncram_component (
|
||||||
.address_a (wraddress),
|
.address_a (wraddress),
|
||||||
.address_b (rdaddress),
|
.address_b (rdaddress),
|
||||||
.clock0 (clock),
|
.clock0 (clock),
|
||||||
.data_a (data),
|
.data_a (data),
|
||||||
.wren_a (wren),
|
.wren_a (wren),
|
||||||
.q_b (sub_wire0),
|
.q_b (sub_wire0),
|
||||||
.aclr0 (1'b0),
|
.aclr0 (1'b0),
|
||||||
.aclr1 (1'b0),
|
.aclr1 (1'b0),
|
||||||
.addressstall_a (1'b0),
|
.addressstall_a (1'b0),
|
||||||
.addressstall_b (1'b0),
|
.addressstall_b (1'b0),
|
||||||
.byteena_a (1'b1),
|
.byteena_a (1'b1),
|
||||||
.byteena_b (1'b1),
|
.byteena_b (1'b1),
|
||||||
.clock1 (1'b1),
|
.clock1 (1'b1),
|
||||||
.clocken0 (1'b1),
|
.clocken0 (1'b1),
|
||||||
.clocken1 (1'b1),
|
.clocken1 (1'b1),
|
||||||
.clocken2 (1'b1),
|
.clocken2 (1'b1),
|
||||||
.clocken3 (1'b1),
|
.clocken3 (1'b1),
|
||||||
.data_b ({32{1'b1}}),
|
.data_b ({32{1'b1}}),
|
||||||
.eccstatus (),
|
.eccstatus (),
|
||||||
.q_a (),
|
.q_a (),
|
||||||
.rden_a (1'b1),
|
.rden_a (1'b1),
|
||||||
.rden_b (1'b1),
|
.rden_b (1'b1),
|
||||||
.wren_b (1'b0));
|
.wren_b (1'b0));
|
||||||
defparam
|
defparam
|
||||||
altsyncram_component.address_aclr_b = "NONE",
|
altsyncram_component.address_aclr_b = "NONE",
|
||||||
altsyncram_component.address_reg_b = "CLOCK0",
|
altsyncram_component.address_reg_b = "CLOCK0",
|
||||||
altsyncram_component.clock_enable_input_a = "BYPASS",
|
altsyncram_component.clock_enable_input_a = "BYPASS",
|
||||||
altsyncram_component.clock_enable_input_b = "BYPASS",
|
altsyncram_component.clock_enable_input_b = "BYPASS",
|
||||||
altsyncram_component.clock_enable_output_b = "BYPASS",
|
altsyncram_component.clock_enable_output_b = "BYPASS",
|
||||||
`ifdef NO_PLI
|
`ifdef NO_PLI
|
||||||
altsyncram_component.init_file = "periodram.rif"
|
altsyncram_component.init_file = "periodram.rif"
|
||||||
`else
|
`else
|
||||||
altsyncram_component.init_file = "periodram.hex"
|
altsyncram_component.init_file = "periodram.hex"
|
||||||
`endif
|
`endif
|
||||||
,
|
,
|
||||||
altsyncram_component.init_file_layout = "PORT_B",
|
altsyncram_component.init_file_layout = "PORT_B",
|
||||||
altsyncram_component.intended_device_family = "Cyclone IV E",
|
altsyncram_component.intended_device_family = "Cyclone IV E",
|
||||||
altsyncram_component.lpm_type = "altsyncram",
|
altsyncram_component.lpm_type = "altsyncram",
|
||||||
altsyncram_component.numwords_a = 16,
|
altsyncram_component.numwords_a = 16,
|
||||||
altsyncram_component.numwords_b = 16,
|
altsyncram_component.numwords_b = 16,
|
||||||
altsyncram_component.operation_mode = "DUAL_PORT",
|
altsyncram_component.operation_mode = "DUAL_PORT",
|
||||||
altsyncram_component.outdata_aclr_b = "NONE",
|
altsyncram_component.outdata_aclr_b = "NONE",
|
||||||
altsyncram_component.outdata_reg_b = "UNREGISTERED",
|
altsyncram_component.outdata_reg_b = "UNREGISTERED",
|
||||||
altsyncram_component.power_up_uninitialized = "FALSE",
|
altsyncram_component.power_up_uninitialized = "FALSE",
|
||||||
altsyncram_component.read_during_write_mode_mixed_ports = "DONT_CARE",
|
altsyncram_component.read_during_write_mode_mixed_ports = "DONT_CARE",
|
||||||
altsyncram_component.widthad_a = 4,
|
altsyncram_component.widthad_a = 4,
|
||||||
altsyncram_component.widthad_b = 4,
|
altsyncram_component.widthad_b = 4,
|
||||||
altsyncram_component.width_a = 32,
|
altsyncram_component.width_a = 32,
|
||||||
altsyncram_component.width_b = 32,
|
altsyncram_component.width_b = 32,
|
||||||
altsyncram_component.width_byteena_a = 1;
|
altsyncram_component.width_byteena_a = 1;
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// CNX file retrieval info
|
// CNX file retrieval info
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
|
// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0"
|
// Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0"
|
// Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0"
|
// Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0"
|
// Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
|
// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
|
||||||
// Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
|
// Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
|
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0"
|
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
|
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0"
|
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRdata NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRdata NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRq NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRq NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRrren NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRrren NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRwraddress NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRwraddress NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRwren NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRwren NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: Clock NUMERIC "0"
|
// Retrieval info: PRIVATE: Clock NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: Clock_A NUMERIC "0"
|
// Retrieval info: PRIVATE: Clock_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: Clock_B NUMERIC "0"
|
// Retrieval info: PRIVATE: Clock_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
|
// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "0"
|
// Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_B"
|
// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_B"
|
||||||
// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
|
// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
|
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
|
||||||
// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
|
// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
|
// Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
|
||||||
// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
|
// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: MEMSIZE NUMERIC "512"
|
// Retrieval info: PRIVATE: MEMSIZE NUMERIC "512"
|
||||||
// Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0"
|
// Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: MIFfilename STRING "periodram.hex"
|
// Retrieval info: PRIVATE: MIFfilename STRING "periodram.hex"
|
||||||
// Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "2"
|
// Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "2"
|
||||||
// Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "0"
|
// Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
|
// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2"
|
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2"
|
||||||
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
|
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
|
||||||
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "3"
|
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "3"
|
||||||
// Retrieval info: PRIVATE: REGdata NUMERIC "1"
|
// Retrieval info: PRIVATE: REGdata NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGq NUMERIC "1"
|
// Retrieval info: PRIVATE: REGq NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGrdaddress NUMERIC "1"
|
// Retrieval info: PRIVATE: REGrdaddress NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGrren NUMERIC "1"
|
// Retrieval info: PRIVATE: REGrren NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGwraddress NUMERIC "1"
|
// Retrieval info: PRIVATE: REGwraddress NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGwren NUMERIC "1"
|
// Retrieval info: PRIVATE: REGwren NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
|
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
|
||||||
// Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0"
|
// Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: UseDPRAM NUMERIC "1"
|
// Retrieval info: PRIVATE: UseDPRAM NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: VarWidth NUMERIC "1"
|
// Retrieval info: PRIVATE: VarWidth NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "32"
|
// Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "32"
|
||||||
// Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "32"
|
// Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "32"
|
||||||
// Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "32"
|
// Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "32"
|
||||||
// Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "32"
|
// Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "32"
|
||||||
// Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "0"
|
// Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: enable NUMERIC "0"
|
// Retrieval info: PRIVATE: enable NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: rden NUMERIC "0"
|
// Retrieval info: PRIVATE: rden NUMERIC "0"
|
||||||
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
|
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
|
||||||
// Retrieval info: CONSTANT: ADDRESS_ACLR_B STRING "NONE"
|
// Retrieval info: CONSTANT: ADDRESS_ACLR_B STRING "NONE"
|
||||||
// Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK0"
|
// Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK0"
|
||||||
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
|
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
|
||||||
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS"
|
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS"
|
||||||
// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS"
|
// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS"
|
||||||
// Retrieval info: CONSTANT: INIT_FILE STRING "periodram.hex"
|
// Retrieval info: CONSTANT: INIT_FILE STRING "periodram.hex"
|
||||||
// Retrieval info: CONSTANT: INIT_FILE_LAYOUT STRING "PORT_B"
|
// Retrieval info: CONSTANT: INIT_FILE_LAYOUT STRING "PORT_B"
|
||||||
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
|
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
|
||||||
// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
|
// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
|
||||||
// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "16"
|
// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "16"
|
||||||
// Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "16"
|
// Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "16"
|
||||||
// Retrieval info: CONSTANT: OPERATION_MODE STRING "DUAL_PORT"
|
// Retrieval info: CONSTANT: OPERATION_MODE STRING "DUAL_PORT"
|
||||||
// Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE"
|
// Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE"
|
||||||
// Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED"
|
// Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED"
|
||||||
// Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
|
// Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
|
||||||
// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_MIXED_PORTS STRING "DONT_CARE"
|
// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_MIXED_PORTS STRING "DONT_CARE"
|
||||||
// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "4"
|
// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "4"
|
||||||
// Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "4"
|
// Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "4"
|
||||||
// Retrieval info: CONSTANT: WIDTH_A NUMERIC "32"
|
// Retrieval info: CONSTANT: WIDTH_A NUMERIC "32"
|
||||||
// Retrieval info: CONSTANT: WIDTH_B NUMERIC "32"
|
// Retrieval info: CONSTANT: WIDTH_B NUMERIC "32"
|
||||||
// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
|
// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
|
||||||
// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
|
// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
|
||||||
// Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL "data[31..0]"
|
// Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL "data[31..0]"
|
||||||
// Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL "q[31..0]"
|
// Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL "q[31..0]"
|
||||||
// Retrieval info: USED_PORT: rdaddress 0 0 4 0 INPUT NODEFVAL "rdaddress[3..0]"
|
// Retrieval info: USED_PORT: rdaddress 0 0 4 0 INPUT NODEFVAL "rdaddress[3..0]"
|
||||||
// Retrieval info: USED_PORT: wraddress 0 0 4 0 INPUT NODEFVAL "wraddress[3..0]"
|
// Retrieval info: USED_PORT: wraddress 0 0 4 0 INPUT NODEFVAL "wraddress[3..0]"
|
||||||
// Retrieval info: USED_PORT: wren 0 0 0 0 INPUT GND "wren"
|
// Retrieval info: USED_PORT: wren 0 0 0 0 INPUT GND "wren"
|
||||||
// Retrieval info: CONNECT: @address_a 0 0 4 0 wraddress 0 0 4 0
|
// Retrieval info: CONNECT: @address_a 0 0 4 0 wraddress 0 0 4 0
|
||||||
// Retrieval info: CONNECT: @address_b 0 0 4 0 rdaddress 0 0 4 0
|
// Retrieval info: CONNECT: @address_b 0 0 4 0 rdaddress 0 0 4 0
|
||||||
// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
|
// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
|
||||||
// Retrieval info: CONNECT: @data_a 0 0 32 0 data 0 0 32 0
|
// Retrieval info: CONNECT: @data_a 0 0 32 0 data 0 0 32 0
|
||||||
// Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
|
// Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
|
||||||
// Retrieval info: CONNECT: q 0 0 32 0 @q_b 0 0 32 0
|
// Retrieval info: CONNECT: q 0 0 32 0 @q_b 0 0 32 0
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.v TRUE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.v TRUE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.inc FALSE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.inc FALSE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.cmp FALSE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.cmp FALSE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.bsf FALSE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.bsf FALSE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram_inst.v TRUE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram_inst.v TRUE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram_bb.v FALSE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram_bb.v FALSE
|
||||||
// Retrieval info: LIB_FILE: altera_mf
|
// Retrieval info: LIB_FILE: altera_mf
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
periodram periodram_inst (
|
periodram periodram_inst (
|
||||||
.clock ( clock_sig ),
|
.clock ( clock_sig ),
|
||||||
.data ( data_sig ),
|
.data ( data_sig ),
|
||||||
.rdaddress ( rdaddress_sig ),
|
.rdaddress ( rdaddress_sig ),
|
||||||
.wraddress ( wraddress_sig ),
|
.wraddress ( wraddress_sig ),
|
||||||
.wren ( wren_sig ),
|
.wren ( wren_sig ),
|
||||||
.q ( q_sig )
|
.q ( q_sig )
|
||||||
);
|
);
|
||||||
|
|
|
@ -93,19 +93,19 @@ module dec
|
||||||
RED: begin
|
RED: begin
|
||||||
colors <= 3'b100;
|
colors <= 3'b100;
|
||||||
if (enacnt) begin
|
if (enacnt) begin
|
||||||
state <= state + 1'b1;
|
state <= YELLOW;
|
||||||
greenSaved <= divisor;
|
greenSaved <= divisor;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
YELLOW: begin
|
YELLOW: begin
|
||||||
colors <= 3'b010;
|
colors <= 3'b010;
|
||||||
if (enacnt) begin
|
if (enacnt) begin
|
||||||
state <= state + 1'b1;
|
state <= BLINK;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
BLINK: begin
|
BLINK: begin
|
||||||
if (enacnt) begin
|
if (enacnt) begin
|
||||||
state <= state + 1'b1;
|
state <= GREEN;
|
||||||
end
|
end
|
||||||
if (greenSaved[0] == 0) begin
|
if (greenSaved[0] == 0) begin
|
||||||
colors <= 3'b011;
|
colors <= 3'b011;
|
||||||
|
@ -118,9 +118,6 @@ module dec
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
GREEN: begin
|
GREEN: begin
|
||||||
if (enacnt) begin
|
|
||||||
state <= state + 1'b1;
|
|
||||||
end
|
|
||||||
colors <= 3'b001;
|
colors <= 3'b001;
|
||||||
end
|
end
|
||||||
default: colors <= 3'b100;
|
default: colors <= 3'b100;
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
*.pdf
|
*.pdf
|
||||||
*.rpt
|
*.rpt
|
||||||
*.bak
|
*.bak
|
||||||
.#*
|
.#*
|
||||||
|
|
||||||
/db
|
/db
|
||||||
/incremental_db
|
/incremental_db
|
||||||
/output_files
|
/output_files
|
||||||
/simulation
|
/simulation
|
||||||
/.qsys*
|
/.qsys*
|
||||||
# /atom_netlists
|
# /atom_netlists
|
||||||
|
|
||||||
|
|
||||||
/testbenches/*.bak
|
/testbenches/*.bak
|
||||||
/common_uart/*.bak
|
/common_uart/*.bak
|
||||||
|
|
||||||
/build/*
|
/build/*
|
||||||
!/build/*.pdf
|
!/build/*.pdf
|
||||||
!/build/tikz*.sty
|
!/build/tikz*.sty
|
||||||
|
|
|
@ -1,69 +1,69 @@
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
# Your use of Intel Corporation's design tools, logic functions
|
# Your use of Intel Corporation's design tools, logic functions
|
||||||
# and other software and tools, and its AMPP partner logic
|
# and other software and tools, and its AMPP partner logic
|
||||||
# functions, and any output files from any of the foregoing
|
# functions, and any output files from any of the foregoing
|
||||||
# (including device programming or simulation files), and any
|
# (including device programming or simulation files), and any
|
||||||
# associated documentation or information are expressly subject
|
# associated documentation or information are expressly subject
|
||||||
# to the terms and conditions of the Intel Program License
|
# to the terms and conditions of the Intel Program License
|
||||||
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||||
# the Intel FPGA IP License Agreement, or other applicable license
|
# the Intel FPGA IP License Agreement, or other applicable license
|
||||||
# agreement, including, without limitation, that your use is for
|
# agreement, including, without limitation, that your use is for
|
||||||
# the sole purpose of programming logic devices manufactured by
|
# the sole purpose of programming logic devices manufactured by
|
||||||
# Intel and sold by Intel or its authorized distributors. Please
|
# Intel and sold by Intel or its authorized distributors. Please
|
||||||
# refer to the applicable agreement for further details.
|
# refer to the applicable agreement for further details.
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Quartus Prime
|
# Quartus Prime
|
||||||
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
||||||
# Date created = 16:14:06 October 18, 2022
|
# Date created = 16:14:06 October 18, 2022
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Notes:
|
# Notes:
|
||||||
#
|
#
|
||||||
# 1) The default values for assignments are stored in the file:
|
# 1) The default values for assignments are stored in the file:
|
||||||
# dec_assignment_defaults.qdf
|
# dec_assignment_defaults.qdf
|
||||||
# If this file doesn't exist, see file:
|
# If this file doesn't exist, see file:
|
||||||
# assignment_defaults.qdf
|
# assignment_defaults.qdf
|
||||||
#
|
#
|
||||||
# 2) Altera recommends that you do not modify this file. This
|
# 2) Altera recommends that you do not modify this file. This
|
||||||
# file is updated automatically by the Quartus Prime software
|
# file is updated automatically by the Quartus Prime software
|
||||||
# and any changes you make may be lost or overwritten.
|
# and any changes you make may be lost or overwritten.
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
|
||||||
set_global_assignment -name FAMILY "Cyclone IV E"
|
set_global_assignment -name FAMILY "Cyclone IV E"
|
||||||
set_global_assignment -name DEVICE EP4CE6E22A7
|
set_global_assignment -name DEVICE EP4CE6E22A7
|
||||||
set_global_assignment -name TOP_LEVEL_ENTITY dec
|
set_global_assignment -name TOP_LEVEL_ENTITY dec
|
||||||
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0
|
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0
|
||||||
set_global_assignment -name PROJECT_CREATION_TIME_DATE "16:14:06 OCTOBER 18, 2022"
|
set_global_assignment -name PROJECT_CREATION_TIME_DATE "16:14:06 OCTOBER 18, 2022"
|
||||||
set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Lite Edition"
|
set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Lite Edition"
|
||||||
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
|
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
|
||||||
set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
|
set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
|
||||||
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 125
|
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 125
|
||||||
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
|
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 1
|
||||||
set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V
|
set_global_assignment -name NOMINAL_CORE_SUPPLY_VOLTAGE 1.2V
|
||||||
set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (SystemVerilog)"
|
set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (SystemVerilog)"
|
||||||
set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation
|
set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation
|
||||||
set_global_assignment -name EDA_OUTPUT_DATA_FORMAT "SYSTEMVERILOG HDL" -section_id eda_simulation
|
set_global_assignment -name EDA_OUTPUT_DATA_FORMAT "SYSTEMVERILOG HDL" -section_id eda_simulation
|
||||||
set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS TEST_BENCH_MODE -section_id eda_simulation
|
set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS TEST_BENCH_MODE -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 SOURCE -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 QIP_FILE ../../HDL/IP/periodram.qip
|
set_global_assignment -name QIP_FILE ../../HDL/IP/periodram.qip
|
||||||
set_global_assignment -name SYSTEMVERILOG_FILE ../../HDL/dec.sv
|
set_global_assignment -name SYSTEMVERILOG_FILE ../../HDL/dec.sv
|
||||||
set_global_assignment -name SYSTEMVERILOG_FILE dec_tb.sv
|
set_global_assignment -name SYSTEMVERILOG_FILE dec_tb.sv
|
||||||
set_global_assignment -name EDA_NATIVELINK_SIMULATION_TEST_BENCH dec_tb -section_id eda_simulation
|
set_global_assignment -name EDA_NATIVELINK_SIMULATION_TEST_BENCH dec_tb -section_id eda_simulation
|
||||||
set_global_assignment -name EDA_TEST_BENCH_NAME dec_tb -section_id eda_simulation
|
set_global_assignment -name EDA_TEST_BENCH_NAME dec_tb -section_id eda_simulation
|
||||||
set_global_assignment -name EDA_DESIGN_INSTANCE_NAME NA -section_id dec_tb
|
set_global_assignment -name EDA_DESIGN_INSTANCE_NAME NA -section_id dec_tb
|
||||||
set_global_assignment -name EDA_TEST_BENCH_MODULE_NAME dec_tb -section_id dec_tb
|
set_global_assignment -name EDA_TEST_BENCH_MODULE_NAME dec_tb -section_id dec_tb
|
||||||
set_global_assignment -name EDA_TEST_BENCH_FILE dec_tb.sv -section_id dec_tb
|
set_global_assignment -name EDA_TEST_BENCH_FILE dec_tb.sv -section_id dec_tb
|
||||||
set_global_assignment -name HEX_FILE periodram.hex
|
set_global_assignment -name HEX_FILE periodram.hex
|
||||||
set_global_assignment -name EDA_NATIVELINK_SIMULATION_SETUP_SCRIPT simulation/modelsim/wave.do -section_id eda_simulation
|
set_global_assignment -name EDA_NATIVELINK_SIMULATION_SETUP_SCRIPT simulation/modelsim/wave.do -section_id eda_simulation
|
||||||
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
|
@ -1,128 +1,128 @@
|
||||||
`timescale 1 ns/1 ns
|
`timescale 1 ns/1 ns
|
||||||
|
|
||||||
module dec_tb();
|
module dec_tb();
|
||||||
|
|
||||||
// Wires and variables to connect to UUT (unit under test)
|
// Wires and variables to connect to UUT (unit under test)
|
||||||
logic clk, clrn, train;
|
logic clk, clrn, train;
|
||||||
logic r, y, g;
|
logic r, y, g;
|
||||||
logic [1:0] div;
|
logic [1:0] div;
|
||||||
logic ctl_wr, ctl_rd;
|
logic ctl_wr, ctl_rd;
|
||||||
logic ctl_addr;
|
logic ctl_addr;
|
||||||
logic [31:0] ctl_wrdata;
|
logic [31:0] ctl_wrdata;
|
||||||
logic [31:0] ctl_rddata;
|
logic [31:0] ctl_rddata;
|
||||||
logic ram_wr;
|
logic ram_wr;
|
||||||
logic [1:0] ram_addr;
|
logic [1:0] ram_addr;
|
||||||
logic [31:0] ram_wrdata;
|
logic [31:0] ram_wrdata;
|
||||||
|
|
||||||
logic [31:0] divisor[3:0] = {
|
logic [31:0] divisor[3:0] = {
|
||||||
{8'd11, 8'd71, 8'd51, 8'd21},
|
{8'd11, 8'd71, 8'd51, 8'd21},
|
||||||
{8'd11, 8'd31, 8'd41, 8'd31},
|
{8'd11, 8'd31, 8'd41, 8'd31},
|
||||||
{8'd11, 8'd31, 8'd11, 8'd101},
|
{8'd11, 8'd31, 8'd11, 8'd101},
|
||||||
{8'd11, 8'd61, 8'd81, 8'd51}
|
{8'd11, 8'd61, 8'd81, 8'd51}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Instantiate UUT
|
// Instantiate UUT
|
||||||
dec my_sem(
|
dec my_sem(
|
||||||
.clk(clk), .clrn(clrn),
|
.clk(clk), .clrn(clrn),
|
||||||
.ctl_wr(ctl_wr), .ctl_rd(ctl_rd),
|
.ctl_wr(ctl_wr), .ctl_rd(ctl_rd),
|
||||||
.ctl_addr(ctl_addr), .ctl_wrdata(ctl_wrdata), .ctl_rddata(ctl_rddata),
|
.ctl_addr(ctl_addr), .ctl_wrdata(ctl_wrdata), .ctl_rddata(ctl_rddata),
|
||||||
.ram_wr(ram_wr),
|
.ram_wr(ram_wr),
|
||||||
.ram_addr(ram_addr), .ram_wrdata(ram_wrdata),
|
.ram_addr(ram_addr), .ram_wrdata(ram_wrdata),
|
||||||
.train(train), .red(r), .yellow(y), .green(g)
|
.train(train), .red(r), .yellow(y), .green(g)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Clock definition
|
// Clock definition
|
||||||
initial begin
|
initial begin
|
||||||
clk = 0;
|
clk = 0;
|
||||||
forever #10 clk = ~clk;
|
forever #10 clk = ~clk;
|
||||||
end
|
end
|
||||||
|
|
||||||
// Divisor and train definition
|
// Divisor and train definition
|
||||||
initial begin
|
initial begin
|
||||||
//initial reset
|
//initial reset
|
||||||
clrn = 0;
|
clrn = 0;
|
||||||
div = 0;
|
div = 0;
|
||||||
train = 0;
|
train = 0;
|
||||||
//take reset off
|
//take reset off
|
||||||
@(negedge clk) clrn = 1;
|
@(negedge clk) clrn = 1;
|
||||||
//configure semaphore
|
//configure semaphore
|
||||||
for (int i=0; i<4; i++) write_ram_transaction(i,divisor[i]); //write divisor RAM
|
for (int i=0; i<4; i++) write_ram_transaction(i,divisor[i]); //write divisor RAM
|
||||||
write_reg_transaction(1,div); //write initial divisor
|
write_reg_transaction(1,div); //write initial divisor
|
||||||
write_reg_transaction(0,1); //enable semaphore
|
write_reg_transaction(0,1); //enable semaphore
|
||||||
//run trains
|
//run trains
|
||||||
repeat (4)
|
repeat (4)
|
||||||
begin
|
begin
|
||||||
repeat (10) @(posedge clk);
|
repeat (10) @(posedge clk);
|
||||||
train=1;
|
train=1;
|
||||||
repeat (4) @(posedge clk);
|
repeat (4) @(posedge clk);
|
||||||
train=0;
|
train=0;
|
||||||
wait ({r,y,g}==3'b001);
|
wait ({r,y,g}==3'b001);
|
||||||
repeat (10) @(posedge clk);
|
repeat (10) @(posedge clk);
|
||||||
write_reg_transaction(1,div);
|
write_reg_transaction(1,div);
|
||||||
div=div+1;
|
div=div+1;
|
||||||
end
|
end
|
||||||
//wait a little
|
//wait a little
|
||||||
repeat (10) @(posedge clk);
|
repeat (10) @(posedge clk);
|
||||||
$stop;
|
$stop;
|
||||||
end
|
end
|
||||||
|
|
||||||
//Single register write transaction task
|
//Single register write transaction task
|
||||||
task write_reg_transaction;
|
task write_reg_transaction;
|
||||||
//input signals
|
//input signals
|
||||||
input [1:0] offs;
|
input [1:0] offs;
|
||||||
input [31:0] val;
|
input [31:0] val;
|
||||||
//transaction implementation
|
//transaction implementation
|
||||||
begin
|
begin
|
||||||
@(posedge clk);
|
@(posedge clk);
|
||||||
//assert signals for one clock cycle
|
//assert signals for one clock cycle
|
||||||
ctl_wr = 1;
|
ctl_wr = 1;
|
||||||
ctl_addr = offs;
|
ctl_addr = offs;
|
||||||
ctl_wrdata = val;
|
ctl_wrdata = val;
|
||||||
@(posedge clk);
|
@(posedge clk);
|
||||||
//deassert signals
|
//deassert signals
|
||||||
ctl_wr = 0;
|
ctl_wr = 0;
|
||||||
ctl_addr = 'bx;
|
ctl_addr = 'bx;
|
||||||
ctl_wrdata = 'bx;
|
ctl_wrdata = 'bx;
|
||||||
end
|
end
|
||||||
endtask
|
endtask
|
||||||
|
|
||||||
//Single register read transaction task
|
//Single register read transaction task
|
||||||
task read_reg_transaction;
|
task read_reg_transaction;
|
||||||
//input signals
|
//input signals
|
||||||
input [1:0] offs;
|
input [1:0] offs;
|
||||||
output [31:0] val;
|
output [31:0] val;
|
||||||
//transaction implementation
|
//transaction implementation
|
||||||
begin
|
begin
|
||||||
@(posedge clk);
|
@(posedge clk);
|
||||||
//assert signals for one clock cycle
|
//assert signals for one clock cycle
|
||||||
ctl_rd = 1;
|
ctl_rd = 1;
|
||||||
ctl_addr = offs;
|
ctl_addr = offs;
|
||||||
@(posedge clk);
|
@(posedge clk);
|
||||||
val = ctl_rddata;
|
val = ctl_rddata;
|
||||||
//deassert signals
|
//deassert signals
|
||||||
ctl_rd = 0;
|
ctl_rd = 0;
|
||||||
ctl_addr = 'bx;
|
ctl_addr = 'bx;
|
||||||
end
|
end
|
||||||
endtask
|
endtask
|
||||||
|
|
||||||
//RAM write transaction task
|
//RAM write transaction task
|
||||||
task write_ram_transaction;
|
task write_ram_transaction;
|
||||||
//input signals
|
//input signals
|
||||||
input [1:0] offs;
|
input [1:0] offs;
|
||||||
input [31:0] val;
|
input [31:0] val;
|
||||||
//transaction implementation
|
//transaction implementation
|
||||||
begin
|
begin
|
||||||
@(posedge clk);
|
@(posedge clk);
|
||||||
//assert signals for one clock cycle
|
//assert signals for one clock cycle
|
||||||
ram_wr = 1;
|
ram_wr = 1;
|
||||||
ram_addr = offs;
|
ram_addr = offs;
|
||||||
ram_wrdata = val;
|
ram_wrdata = val;
|
||||||
@(posedge clk);
|
@(posedge clk);
|
||||||
//deassert signals
|
//deassert signals
|
||||||
ram_wr = 0;
|
ram_wr = 0;
|
||||||
ram_addr = 'bx;
|
ram_addr = 'bx;
|
||||||
ram_wrdata = 'bx;
|
ram_wrdata = 'bx;
|
||||||
end
|
end
|
||||||
endtask
|
endtask
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
:040000000000006498
|
:040000000000006498
|
||||||
:040001000000006497
|
:040001000000006497
|
||||||
:0400020000000032C8
|
:0400020000000032C8
|
||||||
:040003000000000AEF
|
:040003000000000AEF
|
||||||
:040004000000006494
|
:040004000000006494
|
||||||
:04000500000000C82F
|
:04000500000000C82F
|
||||||
:040006000000006492
|
:040006000000006492
|
||||||
:040007000000000AEB
|
:040007000000000AEB
|
||||||
:04000800000000965E
|
:04000800000000965E
|
||||||
:04000900000000FAF9
|
:04000900000000FAF9
|
||||||
:04000A00000000C82A
|
:04000A00000000C82A
|
||||||
:04000B000000000AE7
|
:04000B000000000AE7
|
||||||
:04000C00000000FAF6
|
:04000C00000000FAF6
|
||||||
:04000D00000000FAF5
|
:04000D00000000FAF5
|
||||||
:04000E00000000FAF4
|
:04000E00000000FAF4
|
||||||
:04000F000000000AE3
|
:04000F000000000AE3
|
||||||
:00000001FF
|
:00000001FF
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
# Your use of Intel Corporation's design tools, logic functions
|
# Your use of Intel Corporation's design tools, logic functions
|
||||||
# and other software and tools, and its AMPP partner logic
|
# and other software and tools, and its AMPP partner logic
|
||||||
# functions, and any output files from any of the foregoing
|
# functions, and any output files from any of the foregoing
|
||||||
# (including device programming or simulation files), and any
|
# (including device programming or simulation files), and any
|
||||||
# associated documentation or information are expressly subject
|
# associated documentation or information are expressly subject
|
||||||
# to the terms and conditions of the Intel Program License
|
# to the terms and conditions of the Intel Program License
|
||||||
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||||
# the Intel FPGA IP License Agreement, or other applicable license
|
# the Intel FPGA IP License Agreement, or other applicable license
|
||||||
# agreement, including, without limitation, that your use is for
|
# agreement, including, without limitation, that your use is for
|
||||||
# the sole purpose of programming logic devices manufactured by
|
# the sole purpose of programming logic devices manufactured by
|
||||||
# Intel and sold by Intel or its authorized distributors. Please
|
# Intel and sold by Intel or its authorized distributors. Please
|
||||||
# refer to the applicable agreement for further details.
|
# refer to the applicable agreement for further details.
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Quartus Prime
|
# Quartus Prime
|
||||||
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
||||||
# Date created = 16:14:06 October 18, 2022
|
# Date created = 16:14:06 October 18, 2022
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
|
|
||||||
QUARTUS_VERSION = "18.1"
|
QUARTUS_VERSION = "18.1"
|
||||||
DATE = "16:14:06 October 18, 2022"
|
DATE = "16:14:06 October 18, 2022"
|
||||||
|
|
||||||
# Revisions
|
# Revisions
|
||||||
|
|
||||||
PROJECT_REVISION = "dec"
|
PROJECT_REVISION = "dec"
|
||||||
|
|
|
@ -1,35 +1,35 @@
|
||||||
onerror {resume}
|
onerror {resume}
|
||||||
quietly WaveActivateNextPane {} 0
|
quietly WaveActivateNextPane {} 0
|
||||||
add wave -noupdate /dec_tb/clk
|
add wave -noupdate /dec_tb/clk
|
||||||
add wave -noupdate /dec_tb/clrn
|
add wave -noupdate /dec_tb/clrn
|
||||||
add wave -noupdate /dec_tb/train
|
add wave -noupdate /dec_tb/train
|
||||||
add wave -noupdate /dec_tb/r
|
add wave -noupdate /dec_tb/r
|
||||||
add wave -noupdate /dec_tb/y
|
add wave -noupdate /dec_tb/y
|
||||||
add wave -noupdate /dec_tb/g
|
add wave -noupdate /dec_tb/g
|
||||||
add wave -noupdate /dec_tb/div
|
add wave -noupdate /dec_tb/div
|
||||||
add wave -noupdate /dec_tb/ctl_wr
|
add wave -noupdate /dec_tb/ctl_wr
|
||||||
add wave -noupdate /dec_tb/ctl_rd
|
add wave -noupdate /dec_tb/ctl_rd
|
||||||
add wave -noupdate /dec_tb/ctl_addr
|
add wave -noupdate /dec_tb/ctl_addr
|
||||||
add wave -noupdate /dec_tb/ctl_wrdata
|
add wave -noupdate /dec_tb/ctl_wrdata
|
||||||
add wave -noupdate /dec_tb/ctl_rddata
|
add wave -noupdate /dec_tb/ctl_rddata
|
||||||
add wave -noupdate /dec_tb/ram_wr
|
add wave -noupdate /dec_tb/ram_wr
|
||||||
add wave -noupdate /dec_tb/ram_addr
|
add wave -noupdate /dec_tb/ram_addr
|
||||||
add wave -noupdate /dec_tb/ram_wrdata
|
add wave -noupdate /dec_tb/ram_wrdata
|
||||||
TreeUpdate [SetDefaultTree]
|
TreeUpdate [SetDefaultTree]
|
||||||
WaveRestoreCursors {{Cursor 1} {3346003 ps} 0}
|
WaveRestoreCursors {{Cursor 1} {3346003 ps} 0}
|
||||||
quietly wave cursor active 1
|
quietly wave cursor active 1
|
||||||
configure wave -namecolwidth 150
|
configure wave -namecolwidth 150
|
||||||
configure wave -valuecolwidth 100
|
configure wave -valuecolwidth 100
|
||||||
configure wave -justifyvalue left
|
configure wave -justifyvalue left
|
||||||
configure wave -signalnamewidth 0
|
configure wave -signalnamewidth 0
|
||||||
configure wave -snapdistance 10
|
configure wave -snapdistance 10
|
||||||
configure wave -datasetprefix 0
|
configure wave -datasetprefix 0
|
||||||
configure wave -rowmargin 4
|
configure wave -rowmargin 4
|
||||||
configure wave -childrowmargin 2
|
configure wave -childrowmargin 2
|
||||||
configure wave -gridoffset 0
|
configure wave -gridoffset 0
|
||||||
configure wave -gridperiod 1
|
configure wave -gridperiod 1
|
||||||
configure wave -griddelta 40
|
configure wave -griddelta 40
|
||||||
configure wave -timeline 0
|
configure wave -timeline 0
|
||||||
configure wave -timelineunits ns
|
configure wave -timelineunits ns
|
||||||
update
|
update
|
||||||
WaveRestoreZoom {0 ps} {15928500 ps}
|
WaveRestoreZoom {0 ps} {15928500 ps}
|
||||||
|
|
|
@ -1,34 +1,34 @@
|
||||||
*.pdf
|
*.pdf
|
||||||
*.rpt
|
*.rpt
|
||||||
*.bak
|
*.bak
|
||||||
.#*
|
.#*
|
||||||
|
|
||||||
/db
|
/db
|
||||||
/incremental_db
|
/incremental_db
|
||||||
/output_files
|
/output_files
|
||||||
/simulation
|
/simulation
|
||||||
/.qsys*
|
/.qsys*
|
||||||
# /atom_netlists
|
# /atom_netlists
|
||||||
/greybox_tmp/
|
/greybox_tmp/
|
||||||
/.qsys_edit/
|
/.qsys_edit/
|
||||||
/synthesis/
|
/synthesis/
|
||||||
/*output_files/
|
/*output_files/
|
||||||
/simulation/
|
/simulation/
|
||||||
/obj/
|
/obj/
|
||||||
/drivers/
|
/drivers/
|
||||||
/HAL/
|
/HAL/
|
||||||
/Part_test/
|
/Part_test/
|
||||||
/.metadata/
|
/.metadata/
|
||||||
/RemoteSystemsTempFiles/
|
/RemoteSystemsTempFiles/
|
||||||
/aldec/
|
/aldec/
|
||||||
/cadence/
|
/cadence/
|
||||||
/synopsys/
|
/synopsys/
|
||||||
|
|
||||||
|
|
||||||
/testbenches/*.bak
|
/testbenches/*.bak
|
||||||
/common_uart/*.bak
|
/common_uart/*.bak
|
||||||
|
|
||||||
/build/*
|
/build/*
|
||||||
!/build/*.pdf
|
!/build/*.pdf
|
||||||
!/build/tikz*.sty
|
!/build/tikz*.sty
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,94 +1,94 @@
|
||||||
/*
|
/*
|
||||||
WARNING: Do NOT edit the input and output ports in this file in a text
|
WARNING: Do NOT edit the input and output ports in this file in a text
|
||||||
editor if you plan to continue editing the block that represents it in
|
editor if you plan to continue editing the block that represents it in
|
||||||
the Block Editor! File corruption is VERY likely to occur.
|
the Block Editor! File corruption is VERY likely to occur.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2018 Intel Corporation. All rights reserved.
|
Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
Your use of Intel Corporation's design tools, logic functions
|
Your use of Intel Corporation's design tools, logic functions
|
||||||
and other software and tools, and its AMPP partner logic
|
and other software and tools, and its AMPP partner logic
|
||||||
functions, and any output files from any of the foregoing
|
functions, and any output files from any of the foregoing
|
||||||
(including device programming or simulation files), and any
|
(including device programming or simulation files), and any
|
||||||
associated documentation or information are expressly subject
|
associated documentation or information are expressly subject
|
||||||
to the terms and conditions of the Intel Program License
|
to the terms and conditions of the Intel Program License
|
||||||
Subscription Agreement, the Intel Quartus Prime License Agreement,
|
Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||||
the Intel FPGA IP License Agreement, or other applicable license
|
the Intel FPGA IP License Agreement, or other applicable license
|
||||||
agreement, including, without limitation, that your use is for
|
agreement, including, without limitation, that your use is for
|
||||||
the sole purpose of programming logic devices manufactured by
|
the sole purpose of programming logic devices manufactured by
|
||||||
Intel and sold by Intel or its authorized distributors. Please
|
Intel and sold by Intel or its authorized distributors. Please
|
||||||
refer to the applicable agreement for further details.
|
refer to the applicable agreement for further details.
|
||||||
*/
|
*/
|
||||||
(header "symbol" (version "1.1"))
|
(header "symbol" (version "1.1"))
|
||||||
(symbol
|
(symbol
|
||||||
(rect 0 0 288 232)
|
(rect 0 0 288 232)
|
||||||
(text "niosII" (rect 130 -1 150 11)(font "Arial" (font_size 10)))
|
(text "niosII" (rect 130 -1 150 11)(font "Arial" (font_size 10)))
|
||||||
(text "inst" (rect 8 216 20 228)(font "Arial" ))
|
(text "inst" (rect 8 216 20 228)(font "Arial" ))
|
||||||
(port
|
(port
|
||||||
(pt 0 72)
|
(pt 0 72)
|
||||||
(input)
|
(input)
|
||||||
(text "clk_clk" (rect 0 0 27 12)(font "Arial" (font_size 8)))
|
(text "clk_clk" (rect 0 0 27 12)(font "Arial" (font_size 8)))
|
||||||
(text "clk_clk" (rect 4 61 46 72)(font "Arial" (font_size 8)))
|
(text "clk_clk" (rect 4 61 46 72)(font "Arial" (font_size 8)))
|
||||||
(line (pt 0 72)(pt 112 72)(line_width 1))
|
(line (pt 0 72)(pt 112 72)(line_width 1))
|
||||||
)
|
)
|
||||||
(port
|
(port
|
||||||
(pt 0 112)
|
(pt 0 112)
|
||||||
(input)
|
(input)
|
||||||
(text "reset_reset_n" (rect 0 0 56 12)(font "Arial" (font_size 8)))
|
(text "reset_reset_n" (rect 0 0 56 12)(font "Arial" (font_size 8)))
|
||||||
(text "reset_reset_n" (rect 4 101 82 112)(font "Arial" (font_size 8)))
|
(text "reset_reset_n" (rect 4 101 82 112)(font "Arial" (font_size 8)))
|
||||||
(line (pt 0 112)(pt 112 112)(line_width 1))
|
(line (pt 0 112)(pt 112 112)(line_width 1))
|
||||||
)
|
)
|
||||||
(port
|
(port
|
||||||
(pt 0 152)
|
(pt 0 152)
|
||||||
(input)
|
(input)
|
||||||
(text "sem_export_train" (rect 0 0 70 12)(font "Arial" (font_size 8)))
|
(text "sem_export_train" (rect 0 0 70 12)(font "Arial" (font_size 8)))
|
||||||
(text "sem_export_train" (rect 4 141 100 152)(font "Arial" (font_size 8)))
|
(text "sem_export_train" (rect 4 141 100 152)(font "Arial" (font_size 8)))
|
||||||
(line (pt 0 152)(pt 112 152)(line_width 1))
|
(line (pt 0 152)(pt 112 152)(line_width 1))
|
||||||
)
|
)
|
||||||
(port
|
(port
|
||||||
(pt 0 168)
|
(pt 0 168)
|
||||||
(output)
|
(output)
|
||||||
(text "sem_export_red" (rect 0 0 67 12)(font "Arial" (font_size 8)))
|
(text "sem_export_red" (rect 0 0 67 12)(font "Arial" (font_size 8)))
|
||||||
(text "sem_export_red" (rect 4 157 88 168)(font "Arial" (font_size 8)))
|
(text "sem_export_red" (rect 4 157 88 168)(font "Arial" (font_size 8)))
|
||||||
(line (pt 0 168)(pt 112 168)(line_width 1))
|
(line (pt 0 168)(pt 112 168)(line_width 1))
|
||||||
)
|
)
|
||||||
(port
|
(port
|
||||||
(pt 0 184)
|
(pt 0 184)
|
||||||
(output)
|
(output)
|
||||||
(text "sem_export_yellow" (rect 0 0 77 12)(font "Arial" (font_size 8)))
|
(text "sem_export_yellow" (rect 0 0 77 12)(font "Arial" (font_size 8)))
|
||||||
(text "sem_export_yellow" (rect 4 173 106 184)(font "Arial" (font_size 8)))
|
(text "sem_export_yellow" (rect 4 173 106 184)(font "Arial" (font_size 8)))
|
||||||
(line (pt 0 184)(pt 112 184)(line_width 1))
|
(line (pt 0 184)(pt 112 184)(line_width 1))
|
||||||
)
|
)
|
||||||
(port
|
(port
|
||||||
(pt 0 200)
|
(pt 0 200)
|
||||||
(output)
|
(output)
|
||||||
(text "sem_export_green" (rect 0 0 76 12)(font "Arial" (font_size 8)))
|
(text "sem_export_green" (rect 0 0 76 12)(font "Arial" (font_size 8)))
|
||||||
(text "sem_export_green" (rect 4 189 100 200)(font "Arial" (font_size 8)))
|
(text "sem_export_green" (rect 4 189 100 200)(font "Arial" (font_size 8)))
|
||||||
(line (pt 0 200)(pt 112 200)(line_width 1))
|
(line (pt 0 200)(pt 112 200)(line_width 1))
|
||||||
)
|
)
|
||||||
(drawing
|
(drawing
|
||||||
(text "clk" (rect 97 43 212 99)(font "Arial" (color 128 0 0)(font_size 9)))
|
(text "clk" (rect 97 43 212 99)(font "Arial" (color 128 0 0)(font_size 9)))
|
||||||
(text "clk" (rect 117 67 252 144)(font "Arial" (color 0 0 0)))
|
(text "clk" (rect 117 67 252 144)(font "Arial" (color 0 0 0)))
|
||||||
(text "reset" (rect 83 83 196 179)(font "Arial" (color 128 0 0)(font_size 9)))
|
(text "reset" (rect 83 83 196 179)(font "Arial" (color 128 0 0)(font_size 9)))
|
||||||
(text "reset_n" (rect 117 107 276 224)(font "Arial" (color 0 0 0)))
|
(text "reset_n" (rect 117 107 276 224)(font "Arial" (color 0 0 0)))
|
||||||
(text "sem_export" (rect 44 123 148 259)(font "Arial" (color 128 0 0)(font_size 9)))
|
(text "sem_export" (rect 44 123 148 259)(font "Arial" (color 128 0 0)(font_size 9)))
|
||||||
(text "train" (rect 117 147 264 304)(font "Arial" (color 0 0 0)))
|
(text "train" (rect 117 147 264 304)(font "Arial" (color 0 0 0)))
|
||||||
(text "red" (rect 117 163 252 336)(font "Arial" (color 0 0 0)))
|
(text "red" (rect 117 163 252 336)(font "Arial" (color 0 0 0)))
|
||||||
(text "yellow" (rect 117 179 270 368)(font "Arial" (color 0 0 0)))
|
(text "yellow" (rect 117 179 270 368)(font "Arial" (color 0 0 0)))
|
||||||
(text "green" (rect 117 195 264 400)(font "Arial" (color 0 0 0)))
|
(text "green" (rect 117 195 264 400)(font "Arial" (color 0 0 0)))
|
||||||
(text " niosII " (rect 262 216 572 442)(font "Arial" ))
|
(text " niosII " (rect 262 216 572 442)(font "Arial" ))
|
||||||
(line (pt 112 32)(pt 176 32)(line_width 1))
|
(line (pt 112 32)(pt 176 32)(line_width 1))
|
||||||
(line (pt 176 32)(pt 176 216)(line_width 1))
|
(line (pt 176 32)(pt 176 216)(line_width 1))
|
||||||
(line (pt 112 216)(pt 176 216)(line_width 1))
|
(line (pt 112 216)(pt 176 216)(line_width 1))
|
||||||
(line (pt 112 32)(pt 112 216)(line_width 1))
|
(line (pt 112 32)(pt 112 216)(line_width 1))
|
||||||
(line (pt 113 52)(pt 113 76)(line_width 1))
|
(line (pt 113 52)(pt 113 76)(line_width 1))
|
||||||
(line (pt 114 52)(pt 114 76)(line_width 1))
|
(line (pt 114 52)(pt 114 76)(line_width 1))
|
||||||
(line (pt 113 92)(pt 113 116)(line_width 1))
|
(line (pt 113 92)(pt 113 116)(line_width 1))
|
||||||
(line (pt 114 92)(pt 114 116)(line_width 1))
|
(line (pt 114 92)(pt 114 116)(line_width 1))
|
||||||
(line (pt 113 132)(pt 113 204)(line_width 1))
|
(line (pt 113 132)(pt 113 204)(line_width 1))
|
||||||
(line (pt 114 132)(pt 114 204)(line_width 1))
|
(line (pt 114 132)(pt 114 204)(line_width 1))
|
||||||
(line (pt 0 0)(pt 288 0)(line_width 1))
|
(line (pt 0 0)(pt 288 0)(line_width 1))
|
||||||
(line (pt 288 0)(pt 288 232)(line_width 1))
|
(line (pt 288 0)(pt 288 232)(line_width 1))
|
||||||
(line (pt 0 232)(pt 288 232)(line_width 1))
|
(line (pt 0 232)(pt 288 232)(line_width 1))
|
||||||
(line (pt 0 0)(pt 0 232)(line_width 1))
|
(line (pt 0 0)(pt 0 232)(line_width 1))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
component niosII is
|
component niosII is
|
||||||
port (
|
port (
|
||||||
clk_clk : in std_logic := 'X'; -- clk
|
clk_clk : in std_logic := 'X'; -- clk
|
||||||
reset_reset_n : in std_logic := 'X'; -- reset_n
|
reset_reset_n : in std_logic := 'X'; -- reset_n
|
||||||
|
@ -7,5 +7,5 @@
|
||||||
sem_export_yellow : out std_logic; -- yellow
|
sem_export_yellow : out std_logic; -- yellow
|
||||||
sem_export_green : out std_logic -- green
|
sem_export_green : out std_logic -- green
|
||||||
);
|
);
|
||||||
end component niosII;
|
end component niosII;
|
||||||
|
|
||||||
|
|
|
@ -5,5 +5,5 @@
|
||||||
.sem_export_red (<connected-to-sem_export_red>), // .red
|
.sem_export_red (<connected-to-sem_export_red>), // .red
|
||||||
.sem_export_yellow (<connected-to-sem_export_yellow>), // .yellow
|
.sem_export_yellow (<connected-to-sem_export_yellow>), // .yellow
|
||||||
.sem_export_green (<connected-to-sem_export_green>) // .green
|
.sem_export_green (<connected-to-sem_export_green>) // .green
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
component niosII is
|
component niosII is
|
||||||
port (
|
port (
|
||||||
clk_clk : in std_logic := 'X'; -- clk
|
clk_clk : in std_logic := 'X'; -- clk
|
||||||
reset_reset_n : in std_logic := 'X'; -- reset_n
|
reset_reset_n : in std_logic := 'X'; -- reset_n
|
||||||
|
@ -7,9 +7,9 @@
|
||||||
sem_export_yellow : out std_logic; -- yellow
|
sem_export_yellow : out std_logic; -- yellow
|
||||||
sem_export_green : out std_logic -- green
|
sem_export_green : out std_logic -- green
|
||||||
);
|
);
|
||||||
end component niosII;
|
end component niosII;
|
||||||
|
|
||||||
u0 : component niosII
|
u0 : component niosII
|
||||||
port map (
|
port map (
|
||||||
clk_clk => CONNECTED_TO_clk_clk, -- clk.clk
|
clk_clk => CONNECTED_TO_clk_clk, -- clk.clk
|
||||||
reset_reset_n => CONNECTED_TO_reset_reset_n, -- reset.reset_n
|
reset_reset_n => CONNECTED_TO_reset_reset_n, -- reset.reset_n
|
||||||
|
@ -18,4 +18,4 @@
|
||||||
sem_export_yellow => CONNECTED_TO_sem_export_yellow, -- .yellow
|
sem_export_yellow => CONNECTED_TO_sem_export_yellow, -- .yellow
|
||||||
sem_export_green => CONNECTED_TO_sem_export_green -- .green
|
sem_export_green => CONNECTED_TO_sem_export_green -- .green
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -11,262 +11,262 @@
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// (C) 2001-2010 Altera Corporation. All rights reserved.
|
// (C) 2001-2010 Altera Corporation. All rights reserved.
|
||||||
// Your use of Altera Corporation's design tools, logic functions and other
|
// Your use of Altera Corporation's design tools, logic functions and other
|
||||||
// software and tools, and its AMPP partner logic functions, and any output
|
// software and tools, and its AMPP partner logic functions, and any output
|
||||||
// files any of the foregoing (including device programming or simulation
|
// files any of the foregoing (including device programming or simulation
|
||||||
// files), and any associated documentation or information are expressly subject
|
// files), and any associated documentation or information are expressly subject
|
||||||
// to the terms and conditions of the Altera Program License Subscription
|
// to the terms and conditions of the Altera Program License Subscription
|
||||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||||
// license agreement, including, without limitation, that your use is for the
|
// license agreement, including, without limitation, that your use is for the
|
||||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||||
// Altera or its authorized distributors. Please refer to the applicable
|
// Altera or its authorized distributors. Please refer to the applicable
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// $Id: //acds/main/ip/merlin/altera_merlin_std_arbitrator/altera_merlin_std_arbitrator_core.sv#3 $
|
// $Id: //acds/main/ip/merlin/altera_merlin_std_arbitrator/altera_merlin_std_arbitrator_core.sv#3 $
|
||||||
// $Revision: #3 $
|
// $Revision: #3 $
|
||||||
// $Date: 2010/07/07 $
|
// $Date: 2010/07/07 $
|
||||||
// $Author: jyeap $
|
// $Author: jyeap $
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------
|
/* -----------------------------------------------------------------------
|
||||||
Round-robin/fixed arbitration implementation.
|
Round-robin/fixed arbitration implementation.
|
||||||
|
|
||||||
Q: how do you find the least-significant set-bit in an n-bit binary number, X?
|
Q: how do you find the least-significant set-bit in an n-bit binary number, X?
|
||||||
|
|
||||||
A: M = X & (~X + 1)
|
A: M = X & (~X + 1)
|
||||||
|
|
||||||
Example: X = 101000100
|
Example: X = 101000100
|
||||||
101000100 &
|
101000100 &
|
||||||
010111011 + 1 =
|
010111011 + 1 =
|
||||||
|
|
||||||
101000100 &
|
101000100 &
|
||||||
010111100 =
|
010111100 =
|
||||||
-----------
|
-----------
|
||||||
000000100
|
000000100
|
||||||
|
|
||||||
The method can be generalized to find the first set-bit
|
The method can be generalized to find the first set-bit
|
||||||
at a bit index no lower than bit-index N, simply by adding
|
at a bit index no lower than bit-index N, simply by adding
|
||||||
2**N rather than 1.
|
2**N rather than 1.
|
||||||
|
|
||||||
|
|
||||||
Q: how does this relate to round-robin arbitration?
|
Q: how does this relate to round-robin arbitration?
|
||||||
A:
|
A:
|
||||||
Let X be the concatenation of all request signals.
|
Let X be the concatenation of all request signals.
|
||||||
Let the number to be added to X (hereafter called the
|
Let the number to be added to X (hereafter called the
|
||||||
top_priority) initialize to 1, and be assigned from the
|
top_priority) initialize to 1, and be assigned from the
|
||||||
concatenation of the previous saved-grant, left-rotated
|
concatenation of the previous saved-grant, left-rotated
|
||||||
by one position, each time arbitration occurs. The
|
by one position, each time arbitration occurs. The
|
||||||
concatenation of grants is then M.
|
concatenation of grants is then M.
|
||||||
|
|
||||||
Problem: consider this case:
|
Problem: consider this case:
|
||||||
|
|
||||||
top_priority = 010000
|
top_priority = 010000
|
||||||
request = 001001
|
request = 001001
|
||||||
~request + top_priority = 000110
|
~request + top_priority = 000110
|
||||||
next_grant = 000000 <- no one is granted!
|
next_grant = 000000 <- no one is granted!
|
||||||
|
|
||||||
There was no "set bit at a bit index no lower than bit-index 4", so
|
There was no "set bit at a bit index no lower than bit-index 4", so
|
||||||
the result was 0.
|
the result was 0.
|
||||||
|
|
||||||
We need to propagate the carry out from (~request + top_priority) to the LSB, so
|
We need to propagate the carry out from (~request + top_priority) to the LSB, so
|
||||||
that the sum becomes 000111, and next_grant is 000001. This operation could be
|
that the sum becomes 000111, and next_grant is 000001. This operation could be
|
||||||
called a "circular add".
|
called a "circular add".
|
||||||
|
|
||||||
A bit of experimentation on the circular add reveals a significant amount of
|
A bit of experimentation on the circular add reveals a significant amount of
|
||||||
delay in exiting and re-entering the carry chain - this will vary with device
|
delay in exiting and re-entering the carry chain - this will vary with device
|
||||||
family. Quartus also reports a combinational loop warning. Finally,
|
family. Quartus also reports a combinational loop warning. Finally,
|
||||||
Modelsim 6.3g has trouble with the expression, evaluating it to 'X'. But
|
Modelsim 6.3g has trouble with the expression, evaluating it to 'X'. But
|
||||||
Modelsim _doesn't_ report a combinational loop!)
|
Modelsim _doesn't_ report a combinational loop!)
|
||||||
|
|
||||||
An alternate solution: concatenate the request vector with itself, and OR
|
An alternate solution: concatenate the request vector with itself, and OR
|
||||||
corresponding bits from the top and bottom halves to determine next_grant.
|
corresponding bits from the top and bottom halves to determine next_grant.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
top_priority = 010000
|
top_priority = 010000
|
||||||
{request, request} = 001001 001001
|
{request, request} = 001001 001001
|
||||||
{~request, ~request} + top_priority = 110111 000110
|
{~request, ~request} + top_priority = 110111 000110
|
||||||
result of & operation = 000001 000000
|
result of & operation = 000001 000000
|
||||||
next_grant = 000001
|
next_grant = 000001
|
||||||
|
|
||||||
Notice that if request = 0, the sum operation will overflow, but we can ignore
|
Notice that if request = 0, the sum operation will overflow, but we can ignore
|
||||||
this; the next_grant result is 0 (no one granted), as you might expect.
|
this; the next_grant result is 0 (no one granted), as you might expect.
|
||||||
In the implementation, the last-granted value must be maintained as
|
In the implementation, the last-granted value must be maintained as
|
||||||
a non-zero value - best probably simply not to update it when no requests
|
a non-zero value - best probably simply not to update it when no requests
|
||||||
occur.
|
occur.
|
||||||
|
|
||||||
----------------------------------------------------------------------- */
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
`timescale 1 ns / 1 ns
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
module altera_merlin_arbitrator
|
module altera_merlin_arbitrator
|
||||||
#(
|
#(
|
||||||
parameter NUM_REQUESTERS = 8,
|
parameter NUM_REQUESTERS = 8,
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Implemented schemes
|
// Implemented schemes
|
||||||
// "round-robin"
|
// "round-robin"
|
||||||
// "fixed-priority"
|
// "fixed-priority"
|
||||||
// "no-arb"
|
// "no-arb"
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
parameter SCHEME = "round-robin",
|
parameter SCHEME = "round-robin",
|
||||||
parameter PIPELINE = 0
|
parameter PIPELINE = 0
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
input clk,
|
input clk,
|
||||||
input reset,
|
input reset,
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Requests
|
// Requests
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
input [NUM_REQUESTERS-1:0] request,
|
input [NUM_REQUESTERS-1:0] request,
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Grants
|
// Grants
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
output [NUM_REQUESTERS-1:0] grant,
|
output [NUM_REQUESTERS-1:0] grant,
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Control Signals
|
// Control Signals
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
input increment_top_priority,
|
input increment_top_priority,
|
||||||
input save_top_priority
|
input save_top_priority
|
||||||
);
|
);
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Signals
|
// Signals
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
wire [NUM_REQUESTERS-1:0] top_priority;
|
wire [NUM_REQUESTERS-1:0] top_priority;
|
||||||
reg [NUM_REQUESTERS-1:0] top_priority_reg;
|
reg [NUM_REQUESTERS-1:0] top_priority_reg;
|
||||||
reg [NUM_REQUESTERS-1:0] last_grant;
|
reg [NUM_REQUESTERS-1:0] last_grant;
|
||||||
wire [2*NUM_REQUESTERS-1:0] result;
|
wire [2*NUM_REQUESTERS-1:0] result;
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Scheme Selection
|
// Scheme Selection
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
generate
|
generate
|
||||||
if (SCHEME == "round-robin" && NUM_REQUESTERS > 1) begin
|
if (SCHEME == "round-robin" && NUM_REQUESTERS > 1) begin
|
||||||
assign top_priority = top_priority_reg;
|
assign top_priority = top_priority_reg;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
// Fixed arbitration (or single-requester corner case)
|
// Fixed arbitration (or single-requester corner case)
|
||||||
assign top_priority = 1'b1;
|
assign top_priority = 1'b1;
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Decision Logic
|
// Decision Logic
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
altera_merlin_arb_adder
|
altera_merlin_arb_adder
|
||||||
#(
|
#(
|
||||||
.WIDTH (2 * NUM_REQUESTERS)
|
.WIDTH (2 * NUM_REQUESTERS)
|
||||||
)
|
)
|
||||||
adder
|
adder
|
||||||
(
|
(
|
||||||
.a ({ ~request, ~request }),
|
.a ({ ~request, ~request }),
|
||||||
.b ({{NUM_REQUESTERS{1'b0}}, top_priority}),
|
.b ({{NUM_REQUESTERS{1'b0}}, top_priority}),
|
||||||
.sum (result)
|
.sum (result)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
generate if (SCHEME == "no-arb") begin
|
generate if (SCHEME == "no-arb") begin
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// No arbitration: just wire request directly to grant
|
// No arbitration: just wire request directly to grant
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
assign grant = request;
|
assign grant = request;
|
||||||
|
|
||||||
end else begin
|
end else begin
|
||||||
// Do the math in double-vector domain
|
// Do the math in double-vector domain
|
||||||
wire [2*NUM_REQUESTERS-1:0] grant_double_vector;
|
wire [2*NUM_REQUESTERS-1:0] grant_double_vector;
|
||||||
assign grant_double_vector = {request, request} & result;
|
assign grant_double_vector = {request, request} & result;
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Extract grant from the top and bottom halves
|
// Extract grant from the top and bottom halves
|
||||||
// of the double vector.
|
// of the double vector.
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
assign grant =
|
assign grant =
|
||||||
grant_double_vector[NUM_REQUESTERS - 1 : 0] |
|
grant_double_vector[NUM_REQUESTERS - 1 : 0] |
|
||||||
grant_double_vector[2 * NUM_REQUESTERS - 1 : NUM_REQUESTERS];
|
grant_double_vector[2 * NUM_REQUESTERS - 1 : NUM_REQUESTERS];
|
||||||
|
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Left-rotate the last grant vector to create top_priority.
|
// Left-rotate the last grant vector to create top_priority.
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
always @(posedge clk or posedge reset) begin
|
always @(posedge clk or posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
top_priority_reg <= 1'b1;
|
top_priority_reg <= 1'b1;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
if (PIPELINE) begin
|
if (PIPELINE) begin
|
||||||
if (increment_top_priority) begin
|
if (increment_top_priority) begin
|
||||||
top_priority_reg <= (|request) ? {grant[NUM_REQUESTERS-2:0],
|
top_priority_reg <= (|request) ? {grant[NUM_REQUESTERS-2:0],
|
||||||
grant[NUM_REQUESTERS-1]} : top_priority_reg;
|
grant[NUM_REQUESTERS-1]} : top_priority_reg;
|
||||||
end
|
end
|
||||||
end else begin
|
end else begin
|
||||||
if (increment_top_priority) begin
|
if (increment_top_priority) begin
|
||||||
if (|request)
|
if (|request)
|
||||||
top_priority_reg <= { grant[NUM_REQUESTERS-2:0],
|
top_priority_reg <= { grant[NUM_REQUESTERS-2:0],
|
||||||
grant[NUM_REQUESTERS-1] };
|
grant[NUM_REQUESTERS-1] };
|
||||||
else
|
else
|
||||||
top_priority_reg <= { top_priority_reg[NUM_REQUESTERS-2:0], top_priority_reg[NUM_REQUESTERS-1] };
|
top_priority_reg <= { top_priority_reg[NUM_REQUESTERS-2:0], top_priority_reg[NUM_REQUESTERS-1] };
|
||||||
end
|
end
|
||||||
else if (save_top_priority) begin
|
else if (save_top_priority) begin
|
||||||
top_priority_reg <= grant;
|
top_priority_reg <= grant;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// Adder for the standard arbitrator
|
// Adder for the standard arbitrator
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
module altera_merlin_arb_adder
|
module altera_merlin_arb_adder
|
||||||
#(
|
#(
|
||||||
parameter WIDTH = 8
|
parameter WIDTH = 8
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
input [WIDTH-1:0] a,
|
input [WIDTH-1:0] a,
|
||||||
input [WIDTH-1:0] b,
|
input [WIDTH-1:0] b,
|
||||||
|
|
||||||
output [WIDTH-1:0] sum
|
output [WIDTH-1:0] sum
|
||||||
);
|
);
|
||||||
|
|
||||||
wire [WIDTH:0] sum_lint;
|
wire [WIDTH:0] sum_lint;
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// Benchmarks indicate that for small widths, the full
|
// Benchmarks indicate that for small widths, the full
|
||||||
// adder has higher fmax because synthesis can merge
|
// adder has higher fmax because synthesis can merge
|
||||||
// it with the mux, allowing partial decisions to be
|
// it with the mux, allowing partial decisions to be
|
||||||
// made early.
|
// made early.
|
||||||
//
|
//
|
||||||
// The magic number is 4 requesters, which means an
|
// The magic number is 4 requesters, which means an
|
||||||
// 8 bit adder.
|
// 8 bit adder.
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
genvar i;
|
genvar i;
|
||||||
generate if (WIDTH <= 8) begin : full_adder
|
generate if (WIDTH <= 8) begin : full_adder
|
||||||
|
|
||||||
wire cout[WIDTH-1:0];
|
wire cout[WIDTH-1:0];
|
||||||
|
|
||||||
assign sum[0] = (a[0] ^ b[0]);
|
assign sum[0] = (a[0] ^ b[0]);
|
||||||
assign cout[0] = (a[0] & b[0]);
|
assign cout[0] = (a[0] & b[0]);
|
||||||
|
|
||||||
for (i = 1; i < WIDTH; i = i+1) begin : arb
|
for (i = 1; i < WIDTH; i = i+1) begin : arb
|
||||||
|
|
||||||
assign sum[i] = (a[i] ^ b[i]) ^ cout[i-1];
|
assign sum[i] = (a[i] ^ b[i]) ^ cout[i-1];
|
||||||
assign cout[i] = (a[i] & b[i]) | (cout[i-1] & (a[i] ^ b[i]));
|
assign cout[i] = (a[i] & b[i]) | (cout[i-1] & (a[i] ^ b[i]));
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end else begin : carry_chain
|
end else begin : carry_chain
|
||||||
|
|
||||||
assign sum_lint = a + b;
|
assign sum_lint = a + b;
|
||||||
assign sum = sum_lint[WIDTH-1:0];
|
assign sum = sum_lint[WIDTH-1:0];
|
||||||
|
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -11,286 +11,286 @@
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// (C) 2001-2012 Altera Corporation. All rights reserved.
|
// (C) 2001-2012 Altera Corporation. All rights reserved.
|
||||||
// Your use of Altera Corporation's design tools, logic functions and other
|
// Your use of Altera Corporation's design tools, logic functions and other
|
||||||
// software and tools, and its AMPP partner logic functions, and any output
|
// software and tools, and its AMPP partner logic functions, and any output
|
||||||
// files any of the foregoing (including device programming or simulation
|
// files any of the foregoing (including device programming or simulation
|
||||||
// files), and any associated documentation or information are expressly subject
|
// files), and any associated documentation or information are expressly subject
|
||||||
// to the terms and conditions of the Altera Program License Subscription
|
// to the terms and conditions of the Altera Program License Subscription
|
||||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||||
// license agreement, including, without limitation, that your use is for the
|
// license agreement, including, without limitation, that your use is for the
|
||||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||||
// Altera or its authorized distributors. Please refer to the applicable
|
// Altera or its authorized distributors. Please refer to the applicable
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_slave_agent/altera_merlin_burst_uncompressor.sv#1 $
|
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_slave_agent/altera_merlin_burst_uncompressor.sv#1 $
|
||||||
// $Revision: #1 $
|
// $Revision: #1 $
|
||||||
// $Date: 2018/07/18 $
|
// $Date: 2018/07/18 $
|
||||||
// $Author: psgswbuild $
|
// $Author: psgswbuild $
|
||||||
|
|
||||||
// ------------------------------------------
|
// ------------------------------------------
|
||||||
// Merlin Burst Uncompressor
|
// Merlin Burst Uncompressor
|
||||||
//
|
//
|
||||||
// Compressed read bursts -> uncompressed
|
// Compressed read bursts -> uncompressed
|
||||||
// ------------------------------------------
|
// ------------------------------------------
|
||||||
|
|
||||||
`timescale 1 ns / 1 ns
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
module altera_merlin_burst_uncompressor
|
module altera_merlin_burst_uncompressor
|
||||||
#(
|
#(
|
||||||
parameter ADDR_W = 16,
|
parameter ADDR_W = 16,
|
||||||
parameter BURSTWRAP_W = 3,
|
parameter BURSTWRAP_W = 3,
|
||||||
parameter BYTE_CNT_W = 4,
|
parameter BYTE_CNT_W = 4,
|
||||||
parameter PKT_SYMBOLS = 4,
|
parameter PKT_SYMBOLS = 4,
|
||||||
parameter BURST_SIZE_W = 3
|
parameter BURST_SIZE_W = 3
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
input clk,
|
input clk,
|
||||||
input reset,
|
input reset,
|
||||||
|
|
||||||
// sink ST signals
|
// sink ST signals
|
||||||
input sink_startofpacket,
|
input sink_startofpacket,
|
||||||
input sink_endofpacket,
|
input sink_endofpacket,
|
||||||
input sink_valid,
|
input sink_valid,
|
||||||
output sink_ready,
|
output sink_ready,
|
||||||
|
|
||||||
// sink ST "data"
|
// sink ST "data"
|
||||||
input [ADDR_W - 1: 0] sink_addr,
|
input [ADDR_W - 1: 0] sink_addr,
|
||||||
input [BURSTWRAP_W - 1 : 0] sink_burstwrap,
|
input [BURSTWRAP_W - 1 : 0] sink_burstwrap,
|
||||||
input [BYTE_CNT_W - 1 : 0] sink_byte_cnt,
|
input [BYTE_CNT_W - 1 : 0] sink_byte_cnt,
|
||||||
input sink_is_compressed,
|
input sink_is_compressed,
|
||||||
input [BURST_SIZE_W-1 : 0] sink_burstsize,
|
input [BURST_SIZE_W-1 : 0] sink_burstsize,
|
||||||
|
|
||||||
// source ST signals
|
// source ST signals
|
||||||
output source_startofpacket,
|
output source_startofpacket,
|
||||||
output source_endofpacket,
|
output source_endofpacket,
|
||||||
output source_valid,
|
output source_valid,
|
||||||
input source_ready,
|
input source_ready,
|
||||||
|
|
||||||
// source ST "data"
|
// source ST "data"
|
||||||
output [ADDR_W - 1: 0] source_addr,
|
output [ADDR_W - 1: 0] source_addr,
|
||||||
output [BURSTWRAP_W - 1 : 0] source_burstwrap,
|
output [BURSTWRAP_W - 1 : 0] source_burstwrap,
|
||||||
output [BYTE_CNT_W - 1 : 0] source_byte_cnt,
|
output [BYTE_CNT_W - 1 : 0] source_byte_cnt,
|
||||||
|
|
||||||
// Note: in the slave agent, the output should always be uncompressed. In
|
// Note: in the slave agent, the output should always be uncompressed. In
|
||||||
// other applications, it may be required to leave-compressed or not. How to
|
// other applications, it may be required to leave-compressed or not. How to
|
||||||
// control? Seems like a simple mux - pass-through if no uncompression is
|
// control? Seems like a simple mux - pass-through if no uncompression is
|
||||||
// required.
|
// required.
|
||||||
output source_is_compressed,
|
output source_is_compressed,
|
||||||
output [BURST_SIZE_W-1 : 0] source_burstsize
|
output [BURST_SIZE_W-1 : 0] source_burstsize
|
||||||
);
|
);
|
||||||
|
|
||||||
//----------------------------------------------------
|
//----------------------------------------------------
|
||||||
// AXSIZE decoding
|
// AXSIZE decoding
|
||||||
//
|
//
|
||||||
// Turns the axsize value into the actual number of bytes
|
// Turns the axsize value into the actual number of bytes
|
||||||
// being transferred.
|
// being transferred.
|
||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
function reg[63:0] bytes_in_transfer;
|
function reg[63:0] bytes_in_transfer;
|
||||||
input [BURST_SIZE_W-1:0] axsize;
|
input [BURST_SIZE_W-1:0] axsize;
|
||||||
case (axsize)
|
case (axsize)
|
||||||
4'b0000: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000001;
|
4'b0000: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000001;
|
||||||
4'b0001: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000010;
|
4'b0001: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000010;
|
||||||
4'b0010: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000100;
|
4'b0010: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000100;
|
||||||
4'b0011: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000001000;
|
4'b0011: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000001000;
|
||||||
4'b0100: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000010000;
|
4'b0100: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000010000;
|
||||||
4'b0101: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000100000;
|
4'b0101: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000100000;
|
||||||
4'b0110: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000001000000;
|
4'b0110: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000001000000;
|
||||||
4'b0111: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000010000000;
|
4'b0111: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000010000000;
|
||||||
4'b1000: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000100000000;
|
4'b1000: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000100000000;
|
||||||
4'b1001: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000001000000000;
|
4'b1001: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000001000000000;
|
||||||
default:bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000001;
|
default:bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000001;
|
||||||
endcase
|
endcase
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
// num_symbols is PKT_SYMBOLS, appropriately sized.
|
// num_symbols is PKT_SYMBOLS, appropriately sized.
|
||||||
wire [31:0] int_num_symbols = PKT_SYMBOLS;
|
wire [31:0] int_num_symbols = PKT_SYMBOLS;
|
||||||
wire [BYTE_CNT_W-1:0] num_symbols = int_num_symbols[BYTE_CNT_W-1:0];
|
wire [BYTE_CNT_W-1:0] num_symbols = int_num_symbols[BYTE_CNT_W-1:0];
|
||||||
|
|
||||||
// def: Burst Compression. In a merlin network, a compressed burst is one
|
// def: Burst Compression. In a merlin network, a compressed burst is one
|
||||||
// which is transmitted in a single beat. Example: read burst. In
|
// which is transmitted in a single beat. Example: read burst. In
|
||||||
// constrast, an uncompressed burst (example: write burst) is transmitted in
|
// constrast, an uncompressed burst (example: write burst) is transmitted in
|
||||||
// one beat per writedata item.
|
// one beat per writedata item.
|
||||||
//
|
//
|
||||||
// For compressed bursts which require response packets, burst
|
// For compressed bursts which require response packets, burst
|
||||||
// uncompression is required. Concrete example: a read burst of size 8
|
// uncompression is required. Concrete example: a read burst of size 8
|
||||||
// occupies one response-fifo position. When that fifo position reaches the
|
// occupies one response-fifo position. When that fifo position reaches the
|
||||||
// front of the FIFO, the slave starts providing the required 8 readdatavalid
|
// front of the FIFO, the slave starts providing the required 8 readdatavalid
|
||||||
// pulses. The 8 return response beats must be provided in a single packet,
|
// pulses. The 8 return response beats must be provided in a single packet,
|
||||||
// with incrementing address and decrementing byte_cnt fields. Upon receipt
|
// with incrementing address and decrementing byte_cnt fields. Upon receipt
|
||||||
// of the final readdata item of the burst, the response FIFO item is
|
// of the final readdata item of the burst, the response FIFO item is
|
||||||
// retired.
|
// retired.
|
||||||
// Burst uncompression logic provides:
|
// Burst uncompression logic provides:
|
||||||
// a) 2-state FSM (idle, busy)
|
// a) 2-state FSM (idle, busy)
|
||||||
// reset to idle state
|
// reset to idle state
|
||||||
// transition to busy state for 2nd and subsequent rdv pulses
|
// transition to busy state for 2nd and subsequent rdv pulses
|
||||||
// - a single-cycle burst (aka non-burst read) causes no transition to
|
// - a single-cycle burst (aka non-burst read) causes no transition to
|
||||||
// busy state.
|
// busy state.
|
||||||
// b) response startofpacket/endofpacket logic. The response FIFO item
|
// b) response startofpacket/endofpacket logic. The response FIFO item
|
||||||
// will have sop asserted, and may have eop asserted. (In the case of
|
// will have sop asserted, and may have eop asserted. (In the case of
|
||||||
// multiple read bursts transmit in the command fabric in a single packet,
|
// multiple read bursts transmit in the command fabric in a single packet,
|
||||||
// the eop assertion will come in a later FIFO item.) To support packet
|
// the eop assertion will come in a later FIFO item.) To support packet
|
||||||
// conservation, and emit a well-formed packet on the response fabric,
|
// conservation, and emit a well-formed packet on the response fabric,
|
||||||
// i) response fabric startofpacket is asserted only for the first resp.
|
// i) response fabric startofpacket is asserted only for the first resp.
|
||||||
// beat;
|
// beat;
|
||||||
// ii) response fabric endofpacket is asserted only for the last resp.
|
// ii) response fabric endofpacket is asserted only for the last resp.
|
||||||
// beat.
|
// beat.
|
||||||
// c) response address field. The response address field contains an
|
// c) response address field. The response address field contains an
|
||||||
// incrementing sequence, such that each readdata item is associated with
|
// incrementing sequence, such that each readdata item is associated with
|
||||||
// its slave-map location. N.b. a) computing the address correctly requires
|
// its slave-map location. N.b. a) computing the address correctly requires
|
||||||
// knowledge of burstwrap behavior b) there may be no clients of the address
|
// knowledge of burstwrap behavior b) there may be no clients of the address
|
||||||
// field, which makes this field a good target for optimization. See
|
// field, which makes this field a good target for optimization. See
|
||||||
// burst_uncompress_address_counter below.
|
// burst_uncompress_address_counter below.
|
||||||
// d) response byte_cnt field. The response byte_cnt field contains a
|
// d) response byte_cnt field. The response byte_cnt field contains a
|
||||||
// decrementing sequence, such that each beat of the response contains the
|
// decrementing sequence, such that each beat of the response contains the
|
||||||
// count of bytes to follow. In the case of sub-bursts in a single packet,
|
// count of bytes to follow. In the case of sub-bursts in a single packet,
|
||||||
// the byte_cnt field may decrement down to num_symbols, then back up to
|
// the byte_cnt field may decrement down to num_symbols, then back up to
|
||||||
// some value, multiple times in the packet.
|
// some value, multiple times in the packet.
|
||||||
|
|
||||||
reg burst_uncompress_busy;
|
reg burst_uncompress_busy;
|
||||||
reg [BYTE_CNT_W:0] burst_uncompress_byte_counter;
|
reg [BYTE_CNT_W:0] burst_uncompress_byte_counter;
|
||||||
wire [BYTE_CNT_W-1:0] burst_uncompress_byte_counter_lint;
|
wire [BYTE_CNT_W-1:0] burst_uncompress_byte_counter_lint;
|
||||||
wire first_packet_beat;
|
wire first_packet_beat;
|
||||||
wire last_packet_beat;
|
wire last_packet_beat;
|
||||||
|
|
||||||
assign first_packet_beat = sink_valid & ~burst_uncompress_busy;
|
assign first_packet_beat = sink_valid & ~burst_uncompress_busy;
|
||||||
assign burst_uncompress_byte_counter_lint = burst_uncompress_byte_counter[BYTE_CNT_W-1:0];
|
assign burst_uncompress_byte_counter_lint = burst_uncompress_byte_counter[BYTE_CNT_W-1:0];
|
||||||
|
|
||||||
// First cycle: burst_uncompress_byte_counter isn't ready yet, mux the input to
|
// First cycle: burst_uncompress_byte_counter isn't ready yet, mux the input to
|
||||||
// the output.
|
// the output.
|
||||||
assign source_byte_cnt =
|
assign source_byte_cnt =
|
||||||
first_packet_beat ? sink_byte_cnt : burst_uncompress_byte_counter_lint;
|
first_packet_beat ? sink_byte_cnt : burst_uncompress_byte_counter_lint;
|
||||||
assign source_valid = sink_valid;
|
assign source_valid = sink_valid;
|
||||||
|
|
||||||
// Last packet beat is set throughout receipt of an uncompressed read burst
|
// Last packet beat is set throughout receipt of an uncompressed read burst
|
||||||
// from the response FIFO - this forces all the burst uncompression machinery
|
// from the response FIFO - this forces all the burst uncompression machinery
|
||||||
// idle.
|
// idle.
|
||||||
assign last_packet_beat = ~sink_is_compressed |
|
assign last_packet_beat = ~sink_is_compressed |
|
||||||
(
|
(
|
||||||
burst_uncompress_busy ?
|
burst_uncompress_busy ?
|
||||||
(sink_valid & (burst_uncompress_byte_counter_lint == num_symbols)) :
|
(sink_valid & (burst_uncompress_byte_counter_lint == num_symbols)) :
|
||||||
sink_valid & (sink_byte_cnt == num_symbols)
|
sink_valid & (sink_byte_cnt == num_symbols)
|
||||||
);
|
);
|
||||||
|
|
||||||
always @(posedge clk or posedge reset) begin
|
always @(posedge clk or posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
burst_uncompress_busy <= '0;
|
burst_uncompress_busy <= '0;
|
||||||
burst_uncompress_byte_counter <= '0;
|
burst_uncompress_byte_counter <= '0;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
if (source_valid & source_ready & sink_valid) begin
|
if (source_valid & source_ready & sink_valid) begin
|
||||||
// No matter what the current state, last_packet_beat leads to
|
// No matter what the current state, last_packet_beat leads to
|
||||||
// idle.
|
// idle.
|
||||||
if (last_packet_beat) begin
|
if (last_packet_beat) begin
|
||||||
burst_uncompress_busy <= '0;
|
burst_uncompress_busy <= '0;
|
||||||
burst_uncompress_byte_counter <= '0;
|
burst_uncompress_byte_counter <= '0;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
if (burst_uncompress_busy) begin
|
if (burst_uncompress_busy) begin
|
||||||
burst_uncompress_byte_counter <= (burst_uncompress_byte_counter > 0) ?
|
burst_uncompress_byte_counter <= (burst_uncompress_byte_counter > 0) ?
|
||||||
(burst_uncompress_byte_counter_lint - num_symbols) :
|
(burst_uncompress_byte_counter_lint - num_symbols) :
|
||||||
(sink_byte_cnt - num_symbols);
|
(sink_byte_cnt - num_symbols);
|
||||||
end
|
end
|
||||||
else begin // not busy, at least one more beat to go
|
else begin // not busy, at least one more beat to go
|
||||||
burst_uncompress_byte_counter <= sink_byte_cnt - num_symbols;
|
burst_uncompress_byte_counter <= sink_byte_cnt - num_symbols;
|
||||||
// To do: should busy go true for numsymbols-size compressed
|
// To do: should busy go true for numsymbols-size compressed
|
||||||
// bursts?
|
// bursts?
|
||||||
burst_uncompress_busy <= 1'b1;
|
burst_uncompress_busy <= 1'b1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
reg [ADDR_W - 1 : 0 ] burst_uncompress_address_base;
|
reg [ADDR_W - 1 : 0 ] burst_uncompress_address_base;
|
||||||
reg [ADDR_W - 1 : 0] burst_uncompress_address_offset;
|
reg [ADDR_W - 1 : 0] burst_uncompress_address_offset;
|
||||||
|
|
||||||
wire [63:0] decoded_burstsize_wire;
|
wire [63:0] decoded_burstsize_wire;
|
||||||
wire [ADDR_W-1:0] decoded_burstsize;
|
wire [ADDR_W-1:0] decoded_burstsize;
|
||||||
|
|
||||||
|
|
||||||
localparam ADD_BURSTWRAP_W = (ADDR_W > BURSTWRAP_W) ? ADDR_W : BURSTWRAP_W;
|
localparam ADD_BURSTWRAP_W = (ADDR_W > BURSTWRAP_W) ? ADDR_W : BURSTWRAP_W;
|
||||||
wire [ADD_BURSTWRAP_W-1:0] addr_width_burstwrap;
|
wire [ADD_BURSTWRAP_W-1:0] addr_width_burstwrap;
|
||||||
// The input burstwrap value can be used as a mask against address values,
|
// The input burstwrap value can be used as a mask against address values,
|
||||||
// but with one caveat: the address width may be (probably is) wider than
|
// but with one caveat: the address width may be (probably is) wider than
|
||||||
// the burstwrap width. The spec says: extend the msb of the burstwrap
|
// the burstwrap width. The spec says: extend the msb of the burstwrap
|
||||||
// value out over the entire address width (but only if the address width
|
// value out over the entire address width (but only if the address width
|
||||||
// actually is wider than the burstwrap width; otherwise it's a 0-width or
|
// actually is wider than the burstwrap width; otherwise it's a 0-width or
|
||||||
// negative range and concatenation multiplier).
|
// negative range and concatenation multiplier).
|
||||||
generate
|
generate
|
||||||
if (ADDR_W > BURSTWRAP_W) begin : addr_sign_extend
|
if (ADDR_W > BURSTWRAP_W) begin : addr_sign_extend
|
||||||
// Sign-extend, just wires:
|
// Sign-extend, just wires:
|
||||||
assign addr_width_burstwrap[ADDR_W - 1 : BURSTWRAP_W] =
|
assign addr_width_burstwrap[ADDR_W - 1 : BURSTWRAP_W] =
|
||||||
{(ADDR_W - BURSTWRAP_W) {sink_burstwrap[BURSTWRAP_W - 1]}};
|
{(ADDR_W - BURSTWRAP_W) {sink_burstwrap[BURSTWRAP_W - 1]}};
|
||||||
assign addr_width_burstwrap[BURSTWRAP_W-1:0] = sink_burstwrap [BURSTWRAP_W-1:0];
|
assign addr_width_burstwrap[BURSTWRAP_W-1:0] = sink_burstwrap [BURSTWRAP_W-1:0];
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
assign addr_width_burstwrap[BURSTWRAP_W-1 : 0] = sink_burstwrap;
|
assign addr_width_burstwrap[BURSTWRAP_W-1 : 0] = sink_burstwrap;
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
always @(posedge clk or posedge reset) begin
|
always @(posedge clk or posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
burst_uncompress_address_base <= '0;
|
burst_uncompress_address_base <= '0;
|
||||||
end
|
end
|
||||||
else if (first_packet_beat & source_ready) begin
|
else if (first_packet_beat & source_ready) begin
|
||||||
burst_uncompress_address_base <= sink_addr & ~addr_width_burstwrap[ADDR_W-1:0];
|
burst_uncompress_address_base <= sink_addr & ~addr_width_burstwrap[ADDR_W-1:0];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assign decoded_burstsize_wire = bytes_in_transfer(sink_burstsize); //expand it to 64 bits
|
assign decoded_burstsize_wire = bytes_in_transfer(sink_burstsize); //expand it to 64 bits
|
||||||
assign decoded_burstsize = decoded_burstsize_wire[ADDR_W-1:0]; //then take the width that is needed
|
assign decoded_burstsize = decoded_burstsize_wire[ADDR_W-1:0]; //then take the width that is needed
|
||||||
|
|
||||||
wire [ADDR_W : 0] p1_burst_uncompress_address_offset =
|
wire [ADDR_W : 0] p1_burst_uncompress_address_offset =
|
||||||
(
|
(
|
||||||
(first_packet_beat ?
|
(first_packet_beat ?
|
||||||
sink_addr :
|
sink_addr :
|
||||||
burst_uncompress_address_offset) + decoded_burstsize
|
burst_uncompress_address_offset) + decoded_burstsize
|
||||||
) &
|
) &
|
||||||
addr_width_burstwrap[ADDR_W-1:0];
|
addr_width_burstwrap[ADDR_W-1:0];
|
||||||
wire [ADDR_W-1:0] p1_burst_uncompress_address_offset_lint = p1_burst_uncompress_address_offset [ADDR_W-1:0];
|
wire [ADDR_W-1:0] p1_burst_uncompress_address_offset_lint = p1_burst_uncompress_address_offset [ADDR_W-1:0];
|
||||||
|
|
||||||
always @(posedge clk or posedge reset) begin
|
always @(posedge clk or posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
burst_uncompress_address_offset <= '0;
|
burst_uncompress_address_offset <= '0;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
if (source_ready & source_valid) begin
|
if (source_ready & source_valid) begin
|
||||||
burst_uncompress_address_offset <= p1_burst_uncompress_address_offset_lint;
|
burst_uncompress_address_offset <= p1_burst_uncompress_address_offset_lint;
|
||||||
// if (first_packet_beat) begin
|
// if (first_packet_beat) begin
|
||||||
// burst_uncompress_address_offset <=
|
// burst_uncompress_address_offset <=
|
||||||
// (sink_addr + num_symbols) & addr_width_burstwrap;
|
// (sink_addr + num_symbols) & addr_width_burstwrap;
|
||||||
// end
|
// end
|
||||||
// else begin
|
// else begin
|
||||||
// burst_uncompress_address_offset <=
|
// burst_uncompress_address_offset <=
|
||||||
// (burst_uncompress_address_offset + num_symbols) & addr_width_burstwrap;
|
// (burst_uncompress_address_offset + num_symbols) & addr_width_burstwrap;
|
||||||
// end
|
// end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// On the first packet beat, send the input address out unchanged,
|
// On the first packet beat, send the input address out unchanged,
|
||||||
// while values are computed/registered for 2nd and subsequent beats.
|
// while values are computed/registered for 2nd and subsequent beats.
|
||||||
assign source_addr = first_packet_beat ? sink_addr :
|
assign source_addr = first_packet_beat ? sink_addr :
|
||||||
burst_uncompress_address_base | burst_uncompress_address_offset;
|
burst_uncompress_address_base | burst_uncompress_address_offset;
|
||||||
assign source_burstwrap = sink_burstwrap;
|
assign source_burstwrap = sink_burstwrap;
|
||||||
assign source_burstsize = sink_burstsize;
|
assign source_burstsize = sink_burstsize;
|
||||||
|
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
// A single (compressed) read burst will have sop/eop in the same beat.
|
// A single (compressed) read burst will have sop/eop in the same beat.
|
||||||
// A sequence of read sub-bursts emitted by a burst adapter in response to a
|
// A sequence of read sub-bursts emitted by a burst adapter in response to a
|
||||||
// single read burst will have sop on the first sub-burst, eop on the last.
|
// single read burst will have sop on the first sub-burst, eop on the last.
|
||||||
// Assert eop only upon (sink_endofpacket & last_packet_beat) to preserve
|
// Assert eop only upon (sink_endofpacket & last_packet_beat) to preserve
|
||||||
// packet conservation.
|
// packet conservation.
|
||||||
assign source_startofpacket = sink_startofpacket & ~burst_uncompress_busy;
|
assign source_startofpacket = sink_startofpacket & ~burst_uncompress_busy;
|
||||||
assign source_endofpacket = sink_endofpacket & last_packet_beat;
|
assign source_endofpacket = sink_endofpacket & last_packet_beat;
|
||||||
assign sink_ready = source_valid & source_ready & last_packet_beat;
|
assign sink_ready = source_valid & source_ready & last_packet_beat;
|
||||||
|
|
||||||
// This is correct for the slave agent usage, but won't always be true in the
|
// This is correct for the slave agent usage, but won't always be true in the
|
||||||
// width adapter. To do: add an "please uncompress" input, and use it to
|
// width adapter. To do: add an "please uncompress" input, and use it to
|
||||||
// pass-through or modify, and set source_is_compressed accordingly.
|
// pass-through or modify, and set source_is_compressed accordingly.
|
||||||
assign source_is_compressed = 1'b0;
|
assign source_is_compressed = 1'b0;
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
|
@ -11,293 +11,293 @@
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_master_agent/altera_merlin_master_agent.sv#1 $
|
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_master_agent/altera_merlin_master_agent.sv#1 $
|
||||||
// $Revision: #1 $
|
// $Revision: #1 $
|
||||||
// $Date: 2018/07/18 $
|
// $Date: 2018/07/18 $
|
||||||
// $Author: psgswbuild $
|
// $Author: psgswbuild $
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Merlin Master Agent
|
// Merlin Master Agent
|
||||||
//
|
//
|
||||||
// Converts Avalon-MM transactions into
|
// Converts Avalon-MM transactions into
|
||||||
// Merlin network packets.
|
// Merlin network packets.
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
|
|
||||||
`timescale 1 ns / 1 ns
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
module altera_merlin_master_agent
|
module altera_merlin_master_agent
|
||||||
#(
|
#(
|
||||||
// -------------------
|
// -------------------
|
||||||
// Packet Format Parameters
|
// Packet Format Parameters
|
||||||
// -------------------
|
// -------------------
|
||||||
parameter
|
parameter
|
||||||
PKT_QOS_H = 109,
|
PKT_QOS_H = 109,
|
||||||
PKT_QOS_L = 106,
|
PKT_QOS_L = 106,
|
||||||
PKT_DATA_SIDEBAND_H = 105,
|
PKT_DATA_SIDEBAND_H = 105,
|
||||||
PKT_DATA_SIDEBAND_L = 98,
|
PKT_DATA_SIDEBAND_L = 98,
|
||||||
PKT_ADDR_SIDEBAND_H = 97,
|
PKT_ADDR_SIDEBAND_H = 97,
|
||||||
PKT_ADDR_SIDEBAND_L = 93,
|
PKT_ADDR_SIDEBAND_L = 93,
|
||||||
PKT_CACHE_H = 92,
|
PKT_CACHE_H = 92,
|
||||||
PKT_CACHE_L = 89,
|
PKT_CACHE_L = 89,
|
||||||
PKT_THREAD_ID_H = 88,
|
PKT_THREAD_ID_H = 88,
|
||||||
PKT_THREAD_ID_L = 87,
|
PKT_THREAD_ID_L = 87,
|
||||||
PKT_BEGIN_BURST = 81,
|
PKT_BEGIN_BURST = 81,
|
||||||
PKT_PROTECTION_H = 80,
|
PKT_PROTECTION_H = 80,
|
||||||
PKT_PROTECTION_L = 80,
|
PKT_PROTECTION_L = 80,
|
||||||
PKT_BURSTWRAP_H = 79,
|
PKT_BURSTWRAP_H = 79,
|
||||||
PKT_BURSTWRAP_L = 77,
|
PKT_BURSTWRAP_L = 77,
|
||||||
PKT_BYTE_CNT_H = 76,
|
PKT_BYTE_CNT_H = 76,
|
||||||
PKT_BYTE_CNT_L = 74,
|
PKT_BYTE_CNT_L = 74,
|
||||||
PKT_ADDR_H = 73,
|
PKT_ADDR_H = 73,
|
||||||
PKT_ADDR_L = 42,
|
PKT_ADDR_L = 42,
|
||||||
PKT_BURST_SIZE_H = 86,
|
PKT_BURST_SIZE_H = 86,
|
||||||
PKT_BURST_SIZE_L = 84,
|
PKT_BURST_SIZE_L = 84,
|
||||||
PKT_BURST_TYPE_H = 94,
|
PKT_BURST_TYPE_H = 94,
|
||||||
PKT_BURST_TYPE_L = 93,
|
PKT_BURST_TYPE_L = 93,
|
||||||
PKT_TRANS_EXCLUSIVE = 83,
|
PKT_TRANS_EXCLUSIVE = 83,
|
||||||
PKT_TRANS_LOCK = 82,
|
PKT_TRANS_LOCK = 82,
|
||||||
PKT_TRANS_COMPRESSED_READ = 41,
|
PKT_TRANS_COMPRESSED_READ = 41,
|
||||||
PKT_TRANS_POSTED = 40,
|
PKT_TRANS_POSTED = 40,
|
||||||
PKT_TRANS_WRITE = 39,
|
PKT_TRANS_WRITE = 39,
|
||||||
PKT_TRANS_READ = 38,
|
PKT_TRANS_READ = 38,
|
||||||
PKT_DATA_H = 37,
|
PKT_DATA_H = 37,
|
||||||
PKT_DATA_L = 6,
|
PKT_DATA_L = 6,
|
||||||
PKT_BYTEEN_H = 5,
|
PKT_BYTEEN_H = 5,
|
||||||
PKT_BYTEEN_L = 2,
|
PKT_BYTEEN_L = 2,
|
||||||
PKT_SRC_ID_H = 1,
|
PKT_SRC_ID_H = 1,
|
||||||
PKT_SRC_ID_L = 1,
|
PKT_SRC_ID_L = 1,
|
||||||
PKT_DEST_ID_H = 0,
|
PKT_DEST_ID_H = 0,
|
||||||
PKT_DEST_ID_L = 0,
|
PKT_DEST_ID_L = 0,
|
||||||
PKT_RESPONSE_STATUS_L = 110,
|
PKT_RESPONSE_STATUS_L = 110,
|
||||||
PKT_RESPONSE_STATUS_H = 111,
|
PKT_RESPONSE_STATUS_H = 111,
|
||||||
PKT_ORI_BURST_SIZE_L = 112,
|
PKT_ORI_BURST_SIZE_L = 112,
|
||||||
PKT_ORI_BURST_SIZE_H = 114,
|
PKT_ORI_BURST_SIZE_H = 114,
|
||||||
ST_DATA_W = 115,
|
ST_DATA_W = 115,
|
||||||
ST_CHANNEL_W = 1,
|
ST_CHANNEL_W = 1,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Agent Parameters
|
// Agent Parameters
|
||||||
// -------------------
|
// -------------------
|
||||||
AV_BURSTCOUNT_W = 3,
|
AV_BURSTCOUNT_W = 3,
|
||||||
ID = 1,
|
ID = 1,
|
||||||
SUPPRESS_0_BYTEEN_RSP = 1,
|
SUPPRESS_0_BYTEEN_RSP = 1,
|
||||||
BURSTWRAP_VALUE = 4,
|
BURSTWRAP_VALUE = 4,
|
||||||
CACHE_VALUE = 0,
|
CACHE_VALUE = 0,
|
||||||
SECURE_ACCESS_BIT = 1,
|
SECURE_ACCESS_BIT = 1,
|
||||||
USE_READRESPONSE = 0,
|
USE_READRESPONSE = 0,
|
||||||
USE_WRITERESPONSE = 0,
|
USE_WRITERESPONSE = 0,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Derived Parameters
|
// Derived Parameters
|
||||||
// -------------------
|
// -------------------
|
||||||
PKT_BURSTWRAP_W = PKT_BURSTWRAP_H - PKT_BURSTWRAP_L + 1,
|
PKT_BURSTWRAP_W = PKT_BURSTWRAP_H - PKT_BURSTWRAP_L + 1,
|
||||||
PKT_BYTE_CNT_W = PKT_BYTE_CNT_H - PKT_BYTE_CNT_L + 1,
|
PKT_BYTE_CNT_W = PKT_BYTE_CNT_H - PKT_BYTE_CNT_L + 1,
|
||||||
PKT_PROTECTION_W = PKT_PROTECTION_H - PKT_PROTECTION_L + 1,
|
PKT_PROTECTION_W = PKT_PROTECTION_H - PKT_PROTECTION_L + 1,
|
||||||
PKT_ADDR_W = PKT_ADDR_H - PKT_ADDR_L + 1,
|
PKT_ADDR_W = PKT_ADDR_H - PKT_ADDR_L + 1,
|
||||||
PKT_DATA_W = PKT_DATA_H - PKT_DATA_L + 1,
|
PKT_DATA_W = PKT_DATA_H - PKT_DATA_L + 1,
|
||||||
PKT_BYTEEN_W = PKT_BYTEEN_H - PKT_BYTEEN_L + 1,
|
PKT_BYTEEN_W = PKT_BYTEEN_H - PKT_BYTEEN_L + 1,
|
||||||
PKT_SRC_ID_W = PKT_SRC_ID_H - PKT_SRC_ID_L + 1,
|
PKT_SRC_ID_W = PKT_SRC_ID_H - PKT_SRC_ID_L + 1,
|
||||||
PKT_DEST_ID_W = PKT_DEST_ID_H - PKT_DEST_ID_L + 1,
|
PKT_DEST_ID_W = PKT_DEST_ID_H - PKT_DEST_ID_L + 1,
|
||||||
PKT_BURST_SIZE_W = PKT_BURST_SIZE_H - PKT_BURST_SIZE_L + 1
|
PKT_BURST_SIZE_W = PKT_BURST_SIZE_H - PKT_BURST_SIZE_L + 1
|
||||||
) (
|
) (
|
||||||
// -------------------
|
// -------------------
|
||||||
// Clock & Reset
|
// Clock & Reset
|
||||||
// -------------------
|
// -------------------
|
||||||
input clk,
|
input clk,
|
||||||
input reset,
|
input reset,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Avalon-MM Anti-Master
|
// Avalon-MM Anti-Master
|
||||||
// -------------------
|
// -------------------
|
||||||
input [PKT_ADDR_W-1 : 0] av_address,
|
input [PKT_ADDR_W-1 : 0] av_address,
|
||||||
input av_write,
|
input av_write,
|
||||||
input av_read,
|
input av_read,
|
||||||
input [PKT_DATA_W-1 : 0] av_writedata,
|
input [PKT_DATA_W-1 : 0] av_writedata,
|
||||||
output reg [PKT_DATA_W-1 : 0] av_readdata,
|
output reg [PKT_DATA_W-1 : 0] av_readdata,
|
||||||
output reg av_waitrequest,
|
output reg av_waitrequest,
|
||||||
output reg av_readdatavalid,
|
output reg av_readdatavalid,
|
||||||
input [PKT_BYTEEN_W-1 : 0] av_byteenable,
|
input [PKT_BYTEEN_W-1 : 0] av_byteenable,
|
||||||
input [AV_BURSTCOUNT_W-1 : 0] av_burstcount,
|
input [AV_BURSTCOUNT_W-1 : 0] av_burstcount,
|
||||||
input av_debugaccess,
|
input av_debugaccess,
|
||||||
input av_lock,
|
input av_lock,
|
||||||
output reg [1 : 0] av_response,
|
output reg [1 : 0] av_response,
|
||||||
output reg av_writeresponsevalid,
|
output reg av_writeresponsevalid,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Command Source
|
// Command Source
|
||||||
// -------------------
|
// -------------------
|
||||||
output reg cp_valid,
|
output reg cp_valid,
|
||||||
output reg [ST_DATA_W-1 : 0] cp_data,
|
output reg [ST_DATA_W-1 : 0] cp_data,
|
||||||
output wire cp_startofpacket,
|
output wire cp_startofpacket,
|
||||||
output wire cp_endofpacket,
|
output wire cp_endofpacket,
|
||||||
input cp_ready,
|
input cp_ready,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Response Sink
|
// Response Sink
|
||||||
// -------------------
|
// -------------------
|
||||||
input rp_valid,
|
input rp_valid,
|
||||||
input [ST_DATA_W-1 : 0] rp_data,
|
input [ST_DATA_W-1 : 0] rp_data,
|
||||||
input [ST_CHANNEL_W-1 : 0] rp_channel,
|
input [ST_CHANNEL_W-1 : 0] rp_channel,
|
||||||
input rp_startofpacket,
|
input rp_startofpacket,
|
||||||
input rp_endofpacket,
|
input rp_endofpacket,
|
||||||
output reg rp_ready
|
output reg rp_ready
|
||||||
);
|
);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// Utility Functions
|
// Utility Functions
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
function integer clogb2;
|
function integer clogb2;
|
||||||
input [31 : 0] value;
|
input [31 : 0] value;
|
||||||
begin
|
begin
|
||||||
for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
|
for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1)
|
||||||
value = value >> 1;
|
value = value >> 1;
|
||||||
clogb2 = clogb2 - 1;
|
clogb2 = clogb2 - 1;
|
||||||
end
|
end
|
||||||
endfunction // clogb2
|
endfunction // clogb2
|
||||||
|
|
||||||
localparam MAX_BURST = 1 << (AV_BURSTCOUNT_W - 1);
|
localparam MAX_BURST = 1 << (AV_BURSTCOUNT_W - 1);
|
||||||
localparam NUMSYMBOLS = PKT_BYTEEN_W;
|
localparam NUMSYMBOLS = PKT_BYTEEN_W;
|
||||||
localparam BURSTING = (MAX_BURST > NUMSYMBOLS);
|
localparam BURSTING = (MAX_BURST > NUMSYMBOLS);
|
||||||
localparam BITS_TO_ZERO = clogb2(NUMSYMBOLS);
|
localparam BITS_TO_ZERO = clogb2(NUMSYMBOLS);
|
||||||
localparam BURST_SIZE = clogb2(NUMSYMBOLS);
|
localparam BURST_SIZE = clogb2(NUMSYMBOLS);
|
||||||
|
|
||||||
typedef enum bit [1 : 0]
|
typedef enum bit [1 : 0]
|
||||||
{
|
{
|
||||||
FIXED = 2'b00,
|
FIXED = 2'b00,
|
||||||
INCR = 2'b01,
|
INCR = 2'b01,
|
||||||
WRAP = 2'b10,
|
WRAP = 2'b10,
|
||||||
OTHER_WRAP = 2'b11
|
OTHER_WRAP = 2'b11
|
||||||
} MerlinBurstType;
|
} MerlinBurstType;
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Potential optimization: compare in words to save bits?
|
// Potential optimization: compare in words to save bits?
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
wire is_burst;
|
wire is_burst;
|
||||||
assign is_burst = (BURSTING) & (av_burstcount > NUMSYMBOLS);
|
assign is_burst = (BURSTING) & (av_burstcount > NUMSYMBOLS);
|
||||||
|
|
||||||
wire [31 : 0] burstwrap_value_int = BURSTWRAP_VALUE;
|
wire [31 : 0] burstwrap_value_int = BURSTWRAP_VALUE;
|
||||||
wire [31 : 0] id_int = ID;
|
wire [31 : 0] id_int = ID;
|
||||||
wire [PKT_BURST_SIZE_W-1 : 0] burstsize_sig = BURST_SIZE[PKT_BURST_SIZE_W-1 : 0];
|
wire [PKT_BURST_SIZE_W-1 : 0] burstsize_sig = BURST_SIZE[PKT_BURST_SIZE_W-1 : 0];
|
||||||
wire [1 : 0] bursttype_value = burstwrap_value_int[PKT_BURSTWRAP_W-1] ? INCR : WRAP;
|
wire [1 : 0] bursttype_value = burstwrap_value_int[PKT_BURSTWRAP_W-1] ? INCR : WRAP;
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Address alignment
|
// Address alignment
|
||||||
//
|
//
|
||||||
// The packet format requires that addresses be aligned to
|
// The packet format requires that addresses be aligned to
|
||||||
// the transaction size.
|
// the transaction size.
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
wire [PKT_ADDR_W-1 : 0] av_address_aligned;
|
wire [PKT_ADDR_W-1 : 0] av_address_aligned;
|
||||||
generate
|
generate
|
||||||
if (NUMSYMBOLS > 1) begin
|
if (NUMSYMBOLS > 1) begin
|
||||||
assign av_address_aligned =
|
assign av_address_aligned =
|
||||||
{av_address[PKT_ADDR_W-1 : BITS_TO_ZERO], {BITS_TO_ZERO {1'b0}}};
|
{av_address[PKT_ADDR_W-1 : BITS_TO_ZERO], {BITS_TO_ZERO {1'b0}}};
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
assign av_address_aligned = av_address;
|
assign av_address_aligned = av_address;
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Command & Response Construction
|
// Command & Response Construction
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
always_comb begin
|
always_comb begin
|
||||||
cp_data = '0;
|
cp_data = '0;
|
||||||
|
|
||||||
cp_data[PKT_PROTECTION_L] = av_debugaccess;
|
cp_data[PKT_PROTECTION_L] = av_debugaccess;
|
||||||
cp_data[PKT_PROTECTION_L+1] = SECURE_ACCESS_BIT[0]; // secure cache bit
|
cp_data[PKT_PROTECTION_L+1] = SECURE_ACCESS_BIT[0]; // secure cache bit
|
||||||
cp_data[PKT_PROTECTION_L+2] = 1'b0; // instruction/data cache bit
|
cp_data[PKT_PROTECTION_L+2] = 1'b0; // instruction/data cache bit
|
||||||
cp_data[PKT_BURSTWRAP_H : PKT_BURSTWRAP_L] = burstwrap_value_int[PKT_BURSTWRAP_W-1 : 0];
|
cp_data[PKT_BURSTWRAP_H : PKT_BURSTWRAP_L] = burstwrap_value_int[PKT_BURSTWRAP_W-1 : 0];
|
||||||
cp_data[PKT_BYTE_CNT_H : PKT_BYTE_CNT_L] = av_burstcount;
|
cp_data[PKT_BYTE_CNT_H : PKT_BYTE_CNT_L] = av_burstcount;
|
||||||
cp_data[PKT_ADDR_H : PKT_ADDR_L] = av_address_aligned;
|
cp_data[PKT_ADDR_H : PKT_ADDR_L] = av_address_aligned;
|
||||||
cp_data[PKT_TRANS_EXCLUSIVE] = 1'b0;
|
cp_data[PKT_TRANS_EXCLUSIVE] = 1'b0;
|
||||||
cp_data[PKT_TRANS_LOCK] = av_lock;
|
cp_data[PKT_TRANS_LOCK] = av_lock;
|
||||||
cp_data[PKT_TRANS_COMPRESSED_READ] = av_read & is_burst;
|
cp_data[PKT_TRANS_COMPRESSED_READ] = av_read & is_burst;
|
||||||
cp_data[PKT_TRANS_READ] = av_read;
|
cp_data[PKT_TRANS_READ] = av_read;
|
||||||
cp_data[PKT_TRANS_WRITE] = av_write;
|
cp_data[PKT_TRANS_WRITE] = av_write;
|
||||||
cp_data[PKT_TRANS_POSTED] = av_write & !USE_WRITERESPONSE;
|
cp_data[PKT_TRANS_POSTED] = av_write & !USE_WRITERESPONSE;
|
||||||
cp_data[PKT_DATA_H : PKT_DATA_L] = av_writedata;
|
cp_data[PKT_DATA_H : PKT_DATA_L] = av_writedata;
|
||||||
cp_data[PKT_BYTEEN_H : PKT_BYTEEN_L] = av_byteenable;
|
cp_data[PKT_BYTEEN_H : PKT_BYTEEN_L] = av_byteenable;
|
||||||
cp_data[PKT_BURST_SIZE_H : PKT_BURST_SIZE_L] = burstsize_sig;
|
cp_data[PKT_BURST_SIZE_H : PKT_BURST_SIZE_L] = burstsize_sig;
|
||||||
cp_data[PKT_ORI_BURST_SIZE_H : PKT_ORI_BURST_SIZE_L] = burstsize_sig;
|
cp_data[PKT_ORI_BURST_SIZE_H : PKT_ORI_BURST_SIZE_L] = burstsize_sig;
|
||||||
cp_data[PKT_BURST_TYPE_H : PKT_BURST_TYPE_L] = bursttype_value;
|
cp_data[PKT_BURST_TYPE_H : PKT_BURST_TYPE_L] = bursttype_value;
|
||||||
cp_data[PKT_SRC_ID_H : PKT_SRC_ID_L] = id_int[PKT_SRC_ID_W-1 : 0];
|
cp_data[PKT_SRC_ID_H : PKT_SRC_ID_L] = id_int[PKT_SRC_ID_W-1 : 0];
|
||||||
cp_data[PKT_THREAD_ID_H : PKT_THREAD_ID_L] = '0;
|
cp_data[PKT_THREAD_ID_H : PKT_THREAD_ID_L] = '0;
|
||||||
cp_data[PKT_CACHE_H : PKT_CACHE_L] = CACHE_VALUE[3 : 0];
|
cp_data[PKT_CACHE_H : PKT_CACHE_L] = CACHE_VALUE[3 : 0];
|
||||||
cp_data[PKT_QOS_H : PKT_QOS_L] = '0;
|
cp_data[PKT_QOS_H : PKT_QOS_L] = '0;
|
||||||
cp_data[PKT_ADDR_SIDEBAND_H : PKT_ADDR_SIDEBAND_L] = '0;
|
cp_data[PKT_ADDR_SIDEBAND_H : PKT_ADDR_SIDEBAND_L] = '0;
|
||||||
cp_data[PKT_DATA_SIDEBAND_H : PKT_DATA_SIDEBAND_L] = '0;
|
cp_data[PKT_DATA_SIDEBAND_H : PKT_DATA_SIDEBAND_L] = '0;
|
||||||
|
|
||||||
av_readdata = rp_data[PKT_DATA_H : PKT_DATA_L];
|
av_readdata = rp_data[PKT_DATA_H : PKT_DATA_L];
|
||||||
if (USE_WRITERESPONSE || USE_READRESPONSE)
|
if (USE_WRITERESPONSE || USE_READRESPONSE)
|
||||||
av_response = rp_data[PKT_RESPONSE_STATUS_H : PKT_RESPONSE_STATUS_L];
|
av_response = rp_data[PKT_RESPONSE_STATUS_H : PKT_RESPONSE_STATUS_L];
|
||||||
else
|
else
|
||||||
av_response = '0;
|
av_response = '0;
|
||||||
end
|
end
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Command Control
|
// Command Control
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
reg hold_waitrequest;
|
reg hold_waitrequest;
|
||||||
|
|
||||||
always @ (posedge clk, posedge reset) begin
|
always @ (posedge clk, posedge reset) begin
|
||||||
if (reset)
|
if (reset)
|
||||||
hold_waitrequest <= 1'b1;
|
hold_waitrequest <= 1'b1;
|
||||||
else
|
else
|
||||||
hold_waitrequest <= 1'b0;
|
hold_waitrequest <= 1'b0;
|
||||||
end
|
end
|
||||||
|
|
||||||
always_comb begin
|
always_comb begin
|
||||||
cp_valid = 0;
|
cp_valid = 0;
|
||||||
|
|
||||||
if ((av_write || av_read) && ~hold_waitrequest)
|
if ((av_write || av_read) && ~hold_waitrequest)
|
||||||
cp_valid = 1;
|
cp_valid = 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
generate if (BURSTING) begin
|
generate if (BURSTING) begin
|
||||||
reg sop_enable;
|
reg sop_enable;
|
||||||
|
|
||||||
always @(posedge clk, posedge reset) begin
|
always @(posedge clk, posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
sop_enable <= 1'b1;
|
sop_enable <= 1'b1;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
if (cp_valid && cp_ready) begin
|
if (cp_valid && cp_ready) begin
|
||||||
sop_enable <= 1'b0;
|
sop_enable <= 1'b0;
|
||||||
if (cp_endofpacket)
|
if (cp_endofpacket)
|
||||||
sop_enable <= 1'b1;
|
sop_enable <= 1'b1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assign cp_startofpacket = sop_enable;
|
assign cp_startofpacket = sop_enable;
|
||||||
assign cp_endofpacket = (av_read) | (av_burstcount == NUMSYMBOLS);
|
assign cp_endofpacket = (av_read) | (av_burstcount == NUMSYMBOLS);
|
||||||
|
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
|
|
||||||
assign cp_startofpacket = 1'b1;
|
assign cp_startofpacket = 1'b1;
|
||||||
assign cp_endofpacket = 1'b1;
|
assign cp_endofpacket = 1'b1;
|
||||||
|
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Backpressure & Readdatavalid
|
// Backpressure & Readdatavalid
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
always_comb begin
|
always_comb begin
|
||||||
rp_ready = 1;
|
rp_ready = 1;
|
||||||
av_readdatavalid = 0;
|
av_readdatavalid = 0;
|
||||||
av_writeresponsevalid = 0;
|
av_writeresponsevalid = 0;
|
||||||
av_waitrequest = hold_waitrequest | !cp_ready;
|
av_waitrequest = hold_waitrequest | !cp_ready;
|
||||||
|
|
||||||
if (USE_WRITERESPONSE && (rp_data[PKT_TRANS_WRITE] == 1))
|
if (USE_WRITERESPONSE && (rp_data[PKT_TRANS_WRITE] == 1))
|
||||||
av_writeresponsevalid = rp_valid;
|
av_writeresponsevalid = rp_valid;
|
||||||
else
|
else
|
||||||
av_readdatavalid = rp_valid;
|
av_readdatavalid = rp_valid;
|
||||||
|
|
||||||
if (SUPPRESS_0_BYTEEN_RSP) begin
|
if (SUPPRESS_0_BYTEEN_RSP) begin
|
||||||
if (rp_data[PKT_BYTEEN_H : PKT_BYTEEN_L] == 0)
|
if (rp_data[PKT_BYTEEN_H : PKT_BYTEEN_L] == 0)
|
||||||
av_readdatavalid = 0;
|
av_readdatavalid = 0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -11,472 +11,472 @@
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_slave_translator/altera_merlin_slave_translator.sv#1 $
|
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_slave_translator/altera_merlin_slave_translator.sv#1 $
|
||||||
// $Revision: #1 $
|
// $Revision: #1 $
|
||||||
// $Date: 2018/07/18 $
|
// $Date: 2018/07/18 $
|
||||||
// $Author: psgswbuild $
|
// $Author: psgswbuild $
|
||||||
|
|
||||||
// -------------------------------------
|
// -------------------------------------
|
||||||
// Merlin Slave Translator
|
// Merlin Slave Translator
|
||||||
//
|
//
|
||||||
// Translates Universal Avalon MM Slave
|
// Translates Universal Avalon MM Slave
|
||||||
// to any Avalon MM Slave
|
// to any Avalon MM Slave
|
||||||
// -------------------------------------
|
// -------------------------------------
|
||||||
//
|
//
|
||||||
//Notable Note: 0 AV_READLATENCY is not allowed and will be converted to a 1 cycle readlatency in all cases but one
|
//Notable Note: 0 AV_READLATENCY is not allowed and will be converted to a 1 cycle readlatency in all cases but one
|
||||||
//If you declare a slave with fixed read timing requirements, the readlatency of such a slave will be allowed to be zero
|
//If you declare a slave with fixed read timing requirements, the readlatency of such a slave will be allowed to be zero
|
||||||
//The key feature here is that no same cycle turnaround data is processed through the fabric.
|
//The key feature here is that no same cycle turnaround data is processed through the fabric.
|
||||||
|
|
||||||
//import avalon_utilities_pkg::*;
|
//import avalon_utilities_pkg::*;
|
||||||
|
|
||||||
`timescale 1 ns / 1 ns
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
module altera_merlin_slave_translator #(
|
module altera_merlin_slave_translator #(
|
||||||
parameter
|
parameter
|
||||||
//Widths
|
//Widths
|
||||||
AV_ADDRESS_W = 32,
|
AV_ADDRESS_W = 32,
|
||||||
AV_DATA_W = 32,
|
AV_DATA_W = 32,
|
||||||
AV_BURSTCOUNT_W = 4,
|
AV_BURSTCOUNT_W = 4,
|
||||||
AV_BYTEENABLE_W = 4,
|
AV_BYTEENABLE_W = 4,
|
||||||
UAV_BYTEENABLE_W = 4,
|
UAV_BYTEENABLE_W = 4,
|
||||||
|
|
||||||
//Read Latency
|
//Read Latency
|
||||||
AV_READLATENCY = 1,
|
AV_READLATENCY = 1,
|
||||||
|
|
||||||
//Timing
|
//Timing
|
||||||
AV_READ_WAIT_CYCLES = 0,
|
AV_READ_WAIT_CYCLES = 0,
|
||||||
AV_WRITE_WAIT_CYCLES = 0,
|
AV_WRITE_WAIT_CYCLES = 0,
|
||||||
AV_SETUP_WAIT_CYCLES = 0,
|
AV_SETUP_WAIT_CYCLES = 0,
|
||||||
AV_DATA_HOLD_CYCLES = 0,
|
AV_DATA_HOLD_CYCLES = 0,
|
||||||
|
|
||||||
//Optional Port Declarations
|
//Optional Port Declarations
|
||||||
USE_READDATAVALID = 1,
|
USE_READDATAVALID = 1,
|
||||||
USE_WAITREQUEST = 1,
|
USE_WAITREQUEST = 1,
|
||||||
USE_READRESPONSE = 0,
|
USE_READRESPONSE = 0,
|
||||||
USE_WRITERESPONSE = 0,
|
USE_WRITERESPONSE = 0,
|
||||||
|
|
||||||
//Variable Addressing
|
//Variable Addressing
|
||||||
AV_SYMBOLS_PER_WORD = 4,
|
AV_SYMBOLS_PER_WORD = 4,
|
||||||
AV_ADDRESS_SYMBOLS = 0,
|
AV_ADDRESS_SYMBOLS = 0,
|
||||||
AV_BURSTCOUNT_SYMBOLS = 0,
|
AV_BURSTCOUNT_SYMBOLS = 0,
|
||||||
BITS_PER_WORD = clog2_plusone(AV_SYMBOLS_PER_WORD - 1),
|
BITS_PER_WORD = clog2_plusone(AV_SYMBOLS_PER_WORD - 1),
|
||||||
UAV_ADDRESS_W = 38,
|
UAV_ADDRESS_W = 38,
|
||||||
UAV_BURSTCOUNT_W = 10,
|
UAV_BURSTCOUNT_W = 10,
|
||||||
UAV_DATA_W = 32,
|
UAV_DATA_W = 32,
|
||||||
|
|
||||||
AV_CONSTANT_BURST_BEHAVIOR = 0,
|
AV_CONSTANT_BURST_BEHAVIOR = 0,
|
||||||
UAV_CONSTANT_BURST_BEHAVIOR = 0,
|
UAV_CONSTANT_BURST_BEHAVIOR = 0,
|
||||||
CHIPSELECT_THROUGH_READLATENCY = 0,
|
CHIPSELECT_THROUGH_READLATENCY = 0,
|
||||||
|
|
||||||
// Tightly-Coupled Options
|
// Tightly-Coupled Options
|
||||||
USE_UAV_CLKEN = 0,
|
USE_UAV_CLKEN = 0,
|
||||||
AV_REQUIRE_UNALIGNED_ADDRESSES = 0
|
AV_REQUIRE_UNALIGNED_ADDRESSES = 0
|
||||||
) (
|
) (
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Clock & Reset
|
// Clock & Reset
|
||||||
// -------------------
|
// -------------------
|
||||||
input wire clk,
|
input wire clk,
|
||||||
input wire reset,
|
input wire reset,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Universal Avalon Slave
|
// Universal Avalon Slave
|
||||||
// -------------------
|
// -------------------
|
||||||
|
|
||||||
input wire [UAV_ADDRESS_W - 1 : 0] uav_address,
|
input wire [UAV_ADDRESS_W - 1 : 0] uav_address,
|
||||||
input wire [UAV_DATA_W - 1 : 0] uav_writedata,
|
input wire [UAV_DATA_W - 1 : 0] uav_writedata,
|
||||||
input wire uav_write,
|
input wire uav_write,
|
||||||
input wire uav_read,
|
input wire uav_read,
|
||||||
input wire [UAV_BURSTCOUNT_W - 1 : 0] uav_burstcount,
|
input wire [UAV_BURSTCOUNT_W - 1 : 0] uav_burstcount,
|
||||||
input wire [UAV_BYTEENABLE_W - 1 : 0] uav_byteenable,
|
input wire [UAV_BYTEENABLE_W - 1 : 0] uav_byteenable,
|
||||||
input wire uav_lock,
|
input wire uav_lock,
|
||||||
input wire uav_debugaccess,
|
input wire uav_debugaccess,
|
||||||
input wire uav_clken,
|
input wire uav_clken,
|
||||||
|
|
||||||
output logic uav_readdatavalid,
|
output logic uav_readdatavalid,
|
||||||
output logic uav_waitrequest,
|
output logic uav_waitrequest,
|
||||||
output logic [UAV_DATA_W - 1 : 0] uav_readdata,
|
output logic [UAV_DATA_W - 1 : 0] uav_readdata,
|
||||||
output logic [1:0] uav_response,
|
output logic [1:0] uav_response,
|
||||||
// input wire uav_writeresponserequest,
|
// input wire uav_writeresponserequest,
|
||||||
output logic uav_writeresponsevalid,
|
output logic uav_writeresponsevalid,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Customizable Avalon Master
|
// Customizable Avalon Master
|
||||||
// -------------------
|
// -------------------
|
||||||
output logic [AV_ADDRESS_W - 1 : 0] av_address,
|
output logic [AV_ADDRESS_W - 1 : 0] av_address,
|
||||||
output logic [AV_DATA_W - 1 : 0] av_writedata,
|
output logic [AV_DATA_W - 1 : 0] av_writedata,
|
||||||
output logic av_write,
|
output logic av_write,
|
||||||
output logic av_read,
|
output logic av_read,
|
||||||
output logic [AV_BURSTCOUNT_W - 1 : 0] av_burstcount,
|
output logic [AV_BURSTCOUNT_W - 1 : 0] av_burstcount,
|
||||||
output logic [AV_BYTEENABLE_W - 1 : 0] av_byteenable,
|
output logic [AV_BYTEENABLE_W - 1 : 0] av_byteenable,
|
||||||
output logic [AV_BYTEENABLE_W - 1 : 0] av_writebyteenable,
|
output logic [AV_BYTEENABLE_W - 1 : 0] av_writebyteenable,
|
||||||
output logic av_begintransfer,
|
output logic av_begintransfer,
|
||||||
output wire av_chipselect,
|
output wire av_chipselect,
|
||||||
output logic av_beginbursttransfer,
|
output logic av_beginbursttransfer,
|
||||||
output logic av_lock,
|
output logic av_lock,
|
||||||
output wire av_clken,
|
output wire av_clken,
|
||||||
output wire av_debugaccess,
|
output wire av_debugaccess,
|
||||||
output wire av_outputenable,
|
output wire av_outputenable,
|
||||||
|
|
||||||
input logic [AV_DATA_W - 1 : 0] av_readdata,
|
input logic [AV_DATA_W - 1 : 0] av_readdata,
|
||||||
input logic av_readdatavalid,
|
input logic av_readdatavalid,
|
||||||
input logic av_waitrequest,
|
input logic av_waitrequest,
|
||||||
|
|
||||||
input logic [1:0] av_response,
|
input logic [1:0] av_response,
|
||||||
// output logic av_writeresponserequest,
|
// output logic av_writeresponserequest,
|
||||||
input wire av_writeresponsevalid
|
input wire av_writeresponsevalid
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
function integer clog2_plusone;
|
function integer clog2_plusone;
|
||||||
input [31:0] Depth;
|
input [31:0] Depth;
|
||||||
integer i;
|
integer i;
|
||||||
begin
|
begin
|
||||||
i = Depth;
|
i = Depth;
|
||||||
for(clog2_plusone = 0; i > 0; clog2_plusone = clog2_plusone + 1)
|
for(clog2_plusone = 0; i > 0; clog2_plusone = clog2_plusone + 1)
|
||||||
i = i >> 1;
|
i = i >> 1;
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function integer max;
|
function integer max;
|
||||||
//returns the larger of two passed arguments
|
//returns the larger of two passed arguments
|
||||||
input [31:0] one;
|
input [31:0] one;
|
||||||
input [31:0] two;
|
input [31:0] two;
|
||||||
if(one > two)
|
if(one > two)
|
||||||
max=one;
|
max=one;
|
||||||
else
|
else
|
||||||
max=two;
|
max=two;
|
||||||
endfunction // int
|
endfunction // int
|
||||||
|
|
||||||
localparam AV_READ_WAIT_INDEXED = (AV_SETUP_WAIT_CYCLES + AV_READ_WAIT_CYCLES);
|
localparam AV_READ_WAIT_INDEXED = (AV_SETUP_WAIT_CYCLES + AV_READ_WAIT_CYCLES);
|
||||||
localparam AV_WRITE_WAIT_INDEXED = (AV_SETUP_WAIT_CYCLES + AV_WRITE_WAIT_CYCLES);
|
localparam AV_WRITE_WAIT_INDEXED = (AV_SETUP_WAIT_CYCLES + AV_WRITE_WAIT_CYCLES);
|
||||||
localparam AV_DATA_HOLD_INDEXED = (AV_WRITE_WAIT_INDEXED + AV_DATA_HOLD_CYCLES);
|
localparam AV_DATA_HOLD_INDEXED = (AV_WRITE_WAIT_INDEXED + AV_DATA_HOLD_CYCLES);
|
||||||
localparam LOG2_OF_LATENCY_SUM = max(clog2_plusone(AV_READ_WAIT_INDEXED + 1),clog2_plusone(AV_DATA_HOLD_INDEXED + 1));
|
localparam LOG2_OF_LATENCY_SUM = max(clog2_plusone(AV_READ_WAIT_INDEXED + 1),clog2_plusone(AV_DATA_HOLD_INDEXED + 1));
|
||||||
localparam BURSTCOUNT_SHIFT_SELECTOR = AV_BURSTCOUNT_SYMBOLS ? 0 : BITS_PER_WORD;
|
localparam BURSTCOUNT_SHIFT_SELECTOR = AV_BURSTCOUNT_SYMBOLS ? 0 : BITS_PER_WORD;
|
||||||
localparam ADDRESS_SHIFT_SELECTOR = AV_ADDRESS_SYMBOLS ? 0 : BITS_PER_WORD;
|
localparam ADDRESS_SHIFT_SELECTOR = AV_ADDRESS_SYMBOLS ? 0 : BITS_PER_WORD;
|
||||||
localparam ADDRESS_HIGH = ( UAV_ADDRESS_W > AV_ADDRESS_W + ADDRESS_SHIFT_SELECTOR ) ?
|
localparam ADDRESS_HIGH = ( UAV_ADDRESS_W > AV_ADDRESS_W + ADDRESS_SHIFT_SELECTOR ) ?
|
||||||
AV_ADDRESS_W :
|
AV_ADDRESS_W :
|
||||||
UAV_ADDRESS_W - ADDRESS_SHIFT_SELECTOR;
|
UAV_ADDRESS_W - ADDRESS_SHIFT_SELECTOR;
|
||||||
localparam BURSTCOUNT_HIGH = ( UAV_BURSTCOUNT_W > AV_BURSTCOUNT_W + BURSTCOUNT_SHIFT_SELECTOR ) ?
|
localparam BURSTCOUNT_HIGH = ( UAV_BURSTCOUNT_W > AV_BURSTCOUNT_W + BURSTCOUNT_SHIFT_SELECTOR ) ?
|
||||||
AV_BURSTCOUNT_W :
|
AV_BURSTCOUNT_W :
|
||||||
UAV_BURSTCOUNT_W - BURSTCOUNT_SHIFT_SELECTOR;
|
UAV_BURSTCOUNT_W - BURSTCOUNT_SHIFT_SELECTOR;
|
||||||
localparam BYTEENABLE_ADDRESS_BITS = ( clog2_plusone(UAV_BYTEENABLE_W) - 1 ) >= 1 ? clog2_plusone(UAV_BYTEENABLE_W) - 1 : 1;
|
localparam BYTEENABLE_ADDRESS_BITS = ( clog2_plusone(UAV_BYTEENABLE_W) - 1 ) >= 1 ? clog2_plusone(UAV_BYTEENABLE_W) - 1 : 1;
|
||||||
|
|
||||||
|
|
||||||
// Calculate the symbols per word as the power of 2 extended symbols per word
|
// Calculate the symbols per word as the power of 2 extended symbols per word
|
||||||
wire [31 : 0] symbols_per_word_int = 2**(clog2_plusone(AV_SYMBOLS_PER_WORD[UAV_BURSTCOUNT_W : 0] - 1));
|
wire [31 : 0] symbols_per_word_int = 2**(clog2_plusone(AV_SYMBOLS_PER_WORD[UAV_BURSTCOUNT_W : 0] - 1));
|
||||||
wire [UAV_BURSTCOUNT_W-1 : 0] symbols_per_word = symbols_per_word_int[UAV_BURSTCOUNT_W-1 : 0];
|
wire [UAV_BURSTCOUNT_W-1 : 0] symbols_per_word = symbols_per_word_int[UAV_BURSTCOUNT_W-1 : 0];
|
||||||
|
|
||||||
// +--------------------------------
|
// +--------------------------------
|
||||||
// |Backwards Compatibility Signals
|
// |Backwards Compatibility Signals
|
||||||
// +--------------------------------
|
// +--------------------------------
|
||||||
assign av_clken = (USE_UAV_CLKEN) ? uav_clken : 1'b1;
|
assign av_clken = (USE_UAV_CLKEN) ? uav_clken : 1'b1;
|
||||||
assign av_debugaccess = uav_debugaccess;
|
assign av_debugaccess = uav_debugaccess;
|
||||||
|
|
||||||
// +-------------------
|
// +-------------------
|
||||||
// |Passthru Signals
|
// |Passthru Signals
|
||||||
// +-------------------
|
// +-------------------
|
||||||
|
|
||||||
reg [1 : 0] av_response_delayed;
|
reg [1 : 0] av_response_delayed;
|
||||||
|
|
||||||
always @(posedge clk, posedge reset) begin
|
always @(posedge clk, posedge reset) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
av_response_delayed <= 2'b0;
|
av_response_delayed <= 2'b0;
|
||||||
end else begin
|
end else begin
|
||||||
av_response_delayed <= av_response;
|
av_response_delayed <= av_response;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
always_comb
|
always_comb
|
||||||
begin
|
begin
|
||||||
if (!USE_READRESPONSE && !USE_WRITERESPONSE) begin
|
if (!USE_READRESPONSE && !USE_WRITERESPONSE) begin
|
||||||
uav_response = '0;
|
uav_response = '0;
|
||||||
end else begin
|
end else begin
|
||||||
if (AV_READLATENCY != 0 || USE_READDATAVALID) begin
|
if (AV_READLATENCY != 0 || USE_READDATAVALID) begin
|
||||||
uav_response = av_response;
|
uav_response = av_response;
|
||||||
end else begin
|
end else begin
|
||||||
uav_response = av_response_delayed;
|
uav_response = av_response_delayed;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
// assign av_writeresponserequest = uav_writeresponserequest;
|
// assign av_writeresponserequest = uav_writeresponserequest;
|
||||||
assign uav_writeresponsevalid = av_writeresponsevalid;
|
assign uav_writeresponsevalid = av_writeresponsevalid;
|
||||||
|
|
||||||
//-------------------------
|
//-------------------------
|
||||||
//Writedata and Byteenable
|
//Writedata and Byteenable
|
||||||
//-------------------------
|
//-------------------------
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
av_byteenable = '0;
|
av_byteenable = '0;
|
||||||
av_byteenable = uav_byteenable[AV_BYTEENABLE_W - 1 : 0];
|
av_byteenable = uav_byteenable[AV_BYTEENABLE_W - 1 : 0];
|
||||||
end
|
end
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
av_writedata = '0;
|
av_writedata = '0;
|
||||||
av_writedata = uav_writedata[AV_DATA_W - 1 : 0];
|
av_writedata = uav_writedata[AV_DATA_W - 1 : 0];
|
||||||
end
|
end
|
||||||
|
|
||||||
// +-------------------
|
// +-------------------
|
||||||
// |Calculated Signals
|
// |Calculated Signals
|
||||||
// +-------------------
|
// +-------------------
|
||||||
|
|
||||||
logic [UAV_ADDRESS_W - 1 : 0 ] real_uav_address;
|
logic [UAV_ADDRESS_W - 1 : 0 ] real_uav_address;
|
||||||
|
|
||||||
function [BYTEENABLE_ADDRESS_BITS - 1 : 0 ] decode_byteenable;
|
function [BYTEENABLE_ADDRESS_BITS - 1 : 0 ] decode_byteenable;
|
||||||
input [UAV_BYTEENABLE_W - 1 : 0 ] byteenable;
|
input [UAV_BYTEENABLE_W - 1 : 0 ] byteenable;
|
||||||
|
|
||||||
for(int i = 0 ; i < UAV_BYTEENABLE_W; i++ ) begin
|
for(int i = 0 ; i < UAV_BYTEENABLE_W; i++ ) begin
|
||||||
if(byteenable[i] == 1) begin
|
if(byteenable[i] == 1) begin
|
||||||
return i;
|
return i;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return '0;
|
return '0;
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
reg [AV_BURSTCOUNT_W - 1 : 0] burstcount_reg;
|
reg [AV_BURSTCOUNT_W - 1 : 0] burstcount_reg;
|
||||||
reg [AV_ADDRESS_W - 1 : 0] address_reg;
|
reg [AV_ADDRESS_W - 1 : 0] address_reg;
|
||||||
always@(posedge clk, posedge reset) begin
|
always@(posedge clk, posedge reset) begin
|
||||||
if(reset) begin
|
if(reset) begin
|
||||||
burstcount_reg <= '0;
|
burstcount_reg <= '0;
|
||||||
address_reg <= '0;
|
address_reg <= '0;
|
||||||
end else begin
|
end else begin
|
||||||
burstcount_reg <= burstcount_reg;
|
burstcount_reg <= burstcount_reg;
|
||||||
address_reg <= address_reg;
|
address_reg <= address_reg;
|
||||||
if(av_beginbursttransfer) begin
|
if(av_beginbursttransfer) begin
|
||||||
burstcount_reg <= uav_burstcount [ BURSTCOUNT_HIGH - 1 + BURSTCOUNT_SHIFT_SELECTOR : BURSTCOUNT_SHIFT_SELECTOR ];
|
burstcount_reg <= uav_burstcount [ BURSTCOUNT_HIGH - 1 + BURSTCOUNT_SHIFT_SELECTOR : BURSTCOUNT_SHIFT_SELECTOR ];
|
||||||
address_reg <= real_uav_address [ ADDRESS_HIGH - 1 + ADDRESS_SHIFT_SELECTOR : ADDRESS_SHIFT_SELECTOR ];
|
address_reg <= real_uav_address [ ADDRESS_HIGH - 1 + ADDRESS_SHIFT_SELECTOR : ADDRESS_SHIFT_SELECTOR ];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
logic [BYTEENABLE_ADDRESS_BITS-1:0] temp_wire;
|
logic [BYTEENABLE_ADDRESS_BITS-1:0] temp_wire;
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
if( AV_REQUIRE_UNALIGNED_ADDRESSES == 1) begin
|
if( AV_REQUIRE_UNALIGNED_ADDRESSES == 1) begin
|
||||||
temp_wire = decode_byteenable(uav_byteenable);
|
temp_wire = decode_byteenable(uav_byteenable);
|
||||||
real_uav_address = { uav_address[UAV_ADDRESS_W - 1 : BYTEENABLE_ADDRESS_BITS ], temp_wire[BYTEENABLE_ADDRESS_BITS - 1 : 0 ] };
|
real_uav_address = { uav_address[UAV_ADDRESS_W - 1 : BYTEENABLE_ADDRESS_BITS ], temp_wire[BYTEENABLE_ADDRESS_BITS - 1 : 0 ] };
|
||||||
end else begin
|
end else begin
|
||||||
real_uav_address = uav_address;
|
real_uav_address = uav_address;
|
||||||
end
|
end
|
||||||
|
|
||||||
av_address = real_uav_address[ADDRESS_HIGH - 1 + ADDRESS_SHIFT_SELECTOR : ADDRESS_SHIFT_SELECTOR ];
|
av_address = real_uav_address[ADDRESS_HIGH - 1 + ADDRESS_SHIFT_SELECTOR : ADDRESS_SHIFT_SELECTOR ];
|
||||||
if( AV_CONSTANT_BURST_BEHAVIOR && !UAV_CONSTANT_BURST_BEHAVIOR && ~av_beginbursttransfer )
|
if( AV_CONSTANT_BURST_BEHAVIOR && !UAV_CONSTANT_BURST_BEHAVIOR && ~av_beginbursttransfer )
|
||||||
av_address = address_reg;
|
av_address = address_reg;
|
||||||
end
|
end
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
av_burstcount=uav_burstcount[BURSTCOUNT_HIGH - 1 + BURSTCOUNT_SHIFT_SELECTOR : BURSTCOUNT_SHIFT_SELECTOR ];
|
av_burstcount=uav_burstcount[BURSTCOUNT_HIGH - 1 + BURSTCOUNT_SHIFT_SELECTOR : BURSTCOUNT_SHIFT_SELECTOR ];
|
||||||
if( AV_CONSTANT_BURST_BEHAVIOR && !UAV_CONSTANT_BURST_BEHAVIOR && ~av_beginbursttransfer )
|
if( AV_CONSTANT_BURST_BEHAVIOR && !UAV_CONSTANT_BURST_BEHAVIOR && ~av_beginbursttransfer )
|
||||||
av_burstcount = burstcount_reg;
|
av_burstcount = burstcount_reg;
|
||||||
end
|
end
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
av_lock = uav_lock;
|
av_lock = uav_lock;
|
||||||
end
|
end
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Writebyteenable Assignment
|
// Writebyteenable Assignment
|
||||||
// -------------------
|
// -------------------
|
||||||
always@* begin
|
always@* begin
|
||||||
av_writebyteenable = { (AV_BYTEENABLE_W){uav_write} } & uav_byteenable[AV_BYTEENABLE_W - 1 : 0];
|
av_writebyteenable = { (AV_BYTEENABLE_W){uav_write} } & uav_byteenable[AV_BYTEENABLE_W - 1 : 0];
|
||||||
end
|
end
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Waitrequest Assignment
|
// Waitrequest Assignment
|
||||||
// -------------------
|
// -------------------
|
||||||
|
|
||||||
reg av_waitrequest_generated;
|
reg av_waitrequest_generated;
|
||||||
reg av_waitrequest_generated_read;
|
reg av_waitrequest_generated_read;
|
||||||
reg av_waitrequest_generated_write;
|
reg av_waitrequest_generated_write;
|
||||||
reg waitrequest_reset_override;
|
reg waitrequest_reset_override;
|
||||||
reg [ ( LOG2_OF_LATENCY_SUM ? LOG2_OF_LATENCY_SUM - 1 : 0 ) : 0 ] wait_latency_counter;
|
reg [ ( LOG2_OF_LATENCY_SUM ? LOG2_OF_LATENCY_SUM - 1 : 0 ) : 0 ] wait_latency_counter;
|
||||||
|
|
||||||
always@(posedge reset, posedge clk) begin
|
always@(posedge reset, posedge clk) begin
|
||||||
if(reset) begin
|
if(reset) begin
|
||||||
wait_latency_counter <= '0;
|
wait_latency_counter <= '0;
|
||||||
waitrequest_reset_override <= 1'h1;
|
waitrequest_reset_override <= 1'h1;
|
||||||
end else begin
|
end else begin
|
||||||
waitrequest_reset_override <= 1'h0;
|
waitrequest_reset_override <= 1'h0;
|
||||||
wait_latency_counter <= '0;
|
wait_latency_counter <= '0;
|
||||||
if( ~uav_waitrequest | waitrequest_reset_override )
|
if( ~uav_waitrequest | waitrequest_reset_override )
|
||||||
wait_latency_counter <= '0;
|
wait_latency_counter <= '0;
|
||||||
else if( uav_read | uav_write )
|
else if( uav_read | uav_write )
|
||||||
wait_latency_counter <= wait_latency_counter + 1'h1;
|
wait_latency_counter <= wait_latency_counter + 1'h1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
always @* begin
|
always @* begin
|
||||||
|
|
||||||
av_read = uav_read;
|
av_read = uav_read;
|
||||||
av_write = uav_write;
|
av_write = uav_write;
|
||||||
av_waitrequest_generated = 1'h1;
|
av_waitrequest_generated = 1'h1;
|
||||||
av_waitrequest_generated_read = 1'h1;
|
av_waitrequest_generated_read = 1'h1;
|
||||||
av_waitrequest_generated_write = 1'h1;
|
av_waitrequest_generated_write = 1'h1;
|
||||||
|
|
||||||
if(LOG2_OF_LATENCY_SUM == 1)
|
if(LOG2_OF_LATENCY_SUM == 1)
|
||||||
av_waitrequest_generated = 0;
|
av_waitrequest_generated = 0;
|
||||||
|
|
||||||
if(LOG2_OF_LATENCY_SUM > 1 && !USE_WAITREQUEST) begin
|
if(LOG2_OF_LATENCY_SUM > 1 && !USE_WAITREQUEST) begin
|
||||||
av_read = wait_latency_counter >= AV_SETUP_WAIT_CYCLES && uav_read;
|
av_read = wait_latency_counter >= AV_SETUP_WAIT_CYCLES && uav_read;
|
||||||
av_write = wait_latency_counter >= AV_SETUP_WAIT_CYCLES && uav_write && wait_latency_counter <= AV_WRITE_WAIT_INDEXED;
|
av_write = wait_latency_counter >= AV_SETUP_WAIT_CYCLES && uav_write && wait_latency_counter <= AV_WRITE_WAIT_INDEXED;
|
||||||
av_waitrequest_generated_read = wait_latency_counter != AV_READ_WAIT_INDEXED;
|
av_waitrequest_generated_read = wait_latency_counter != AV_READ_WAIT_INDEXED;
|
||||||
av_waitrequest_generated_write = wait_latency_counter != AV_DATA_HOLD_INDEXED;
|
av_waitrequest_generated_write = wait_latency_counter != AV_DATA_HOLD_INDEXED;
|
||||||
|
|
||||||
if(uav_write)
|
if(uav_write)
|
||||||
av_waitrequest_generated = av_waitrequest_generated_write;
|
av_waitrequest_generated = av_waitrequest_generated_write;
|
||||||
else
|
else
|
||||||
av_waitrequest_generated = av_waitrequest_generated_read;
|
av_waitrequest_generated = av_waitrequest_generated_read;
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if(USE_WAITREQUEST) begin
|
if(USE_WAITREQUEST) begin
|
||||||
uav_waitrequest = av_waitrequest;
|
uav_waitrequest = av_waitrequest;
|
||||||
end else begin
|
end else begin
|
||||||
uav_waitrequest = av_waitrequest_generated | waitrequest_reset_override;
|
uav_waitrequest = av_waitrequest_generated | waitrequest_reset_override;
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
// --------------
|
// --------------
|
||||||
// Readdata Assignment
|
// Readdata Assignment
|
||||||
// --------------
|
// --------------
|
||||||
|
|
||||||
reg[(AV_DATA_W ? AV_DATA_W -1 : 0 ): 0] av_readdata_pre;
|
reg[(AV_DATA_W ? AV_DATA_W -1 : 0 ): 0] av_readdata_pre;
|
||||||
|
|
||||||
always@(posedge clk, posedge reset) begin
|
always@(posedge clk, posedge reset) begin
|
||||||
if(reset)
|
if(reset)
|
||||||
av_readdata_pre <= 'b0;
|
av_readdata_pre <= 'b0;
|
||||||
else
|
else
|
||||||
av_readdata_pre <= av_readdata;
|
av_readdata_pre <= av_readdata;
|
||||||
end
|
end
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
uav_readdata = {UAV_DATA_W{1'b0}};
|
uav_readdata = {UAV_DATA_W{1'b0}};
|
||||||
if( AV_READLATENCY != 0 || USE_READDATAVALID ) begin
|
if( AV_READLATENCY != 0 || USE_READDATAVALID ) begin
|
||||||
uav_readdata[AV_DATA_W-1:0] = av_readdata;
|
uav_readdata[AV_DATA_W-1:0] = av_readdata;
|
||||||
end else begin
|
end else begin
|
||||||
uav_readdata[AV_DATA_W-1:0] = av_readdata_pre;
|
uav_readdata[AV_DATA_W-1:0] = av_readdata_pre;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Readdatavalid Assigment
|
// Readdatavalid Assigment
|
||||||
// -------------------
|
// -------------------
|
||||||
reg[(AV_READLATENCY>0 ? AV_READLATENCY-1:0) :0] read_latency_shift_reg;
|
reg[(AV_READLATENCY>0 ? AV_READLATENCY-1:0) :0] read_latency_shift_reg;
|
||||||
reg top_read_latency_shift_reg;
|
reg top_read_latency_shift_reg;
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
uav_readdatavalid=top_read_latency_shift_reg;
|
uav_readdatavalid=top_read_latency_shift_reg;
|
||||||
if(USE_READDATAVALID) begin
|
if(USE_READDATAVALID) begin
|
||||||
uav_readdatavalid = av_readdatavalid;
|
uav_readdatavalid = av_readdatavalid;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
top_read_latency_shift_reg = uav_read & ~uav_waitrequest & ~waitrequest_reset_override;
|
top_read_latency_shift_reg = uav_read & ~uav_waitrequest & ~waitrequest_reset_override;
|
||||||
if(AV_READLATENCY == 1 || AV_READLATENCY == 0 ) begin
|
if(AV_READLATENCY == 1 || AV_READLATENCY == 0 ) begin
|
||||||
top_read_latency_shift_reg=read_latency_shift_reg;
|
top_read_latency_shift_reg=read_latency_shift_reg;
|
||||||
end
|
end
|
||||||
if (AV_READLATENCY > 1) begin
|
if (AV_READLATENCY > 1) begin
|
||||||
top_read_latency_shift_reg = read_latency_shift_reg[(AV_READLATENCY ? AV_READLATENCY-1 : 0)];
|
top_read_latency_shift_reg = read_latency_shift_reg[(AV_READLATENCY ? AV_READLATENCY-1 : 0)];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
always@(posedge reset, posedge clk) begin
|
always@(posedge reset, posedge clk) begin
|
||||||
if (reset) begin
|
if (reset) begin
|
||||||
read_latency_shift_reg <= '0;
|
read_latency_shift_reg <= '0;
|
||||||
end else if (av_clken) begin
|
end else if (av_clken) begin
|
||||||
read_latency_shift_reg[0] <= uav_read && ~uav_waitrequest & ~waitrequest_reset_override;
|
read_latency_shift_reg[0] <= uav_read && ~uav_waitrequest & ~waitrequest_reset_override;
|
||||||
for (int i=0; i+1 < AV_READLATENCY ; i+=1 ) begin
|
for (int i=0; i+1 < AV_READLATENCY ; i+=1 ) begin
|
||||||
read_latency_shift_reg[i+1] <= read_latency_shift_reg[i];
|
read_latency_shift_reg[i+1] <= read_latency_shift_reg[i];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// ------------
|
// ------------
|
||||||
// Chipselect and OutputEnable
|
// Chipselect and OutputEnable
|
||||||
// ------------
|
// ------------
|
||||||
reg av_chipselect_pre;
|
reg av_chipselect_pre;
|
||||||
wire cs_extension;
|
wire cs_extension;
|
||||||
reg av_outputenable_pre;
|
reg av_outputenable_pre;
|
||||||
|
|
||||||
assign av_chipselect = (uav_read | uav_write) ? 1'b1 : av_chipselect_pre;
|
assign av_chipselect = (uav_read | uav_write) ? 1'b1 : av_chipselect_pre;
|
||||||
assign cs_extension = ( (^ read_latency_shift_reg) & ~top_read_latency_shift_reg ) | ((| read_latency_shift_reg) & ~(^ read_latency_shift_reg));
|
assign cs_extension = ( (^ read_latency_shift_reg) & ~top_read_latency_shift_reg ) | ((| read_latency_shift_reg) & ~(^ read_latency_shift_reg));
|
||||||
assign av_outputenable = uav_read ? 1'b1 : av_outputenable_pre;
|
assign av_outputenable = uav_read ? 1'b1 : av_outputenable_pre;
|
||||||
|
|
||||||
always@(posedge reset, posedge clk) begin
|
always@(posedge reset, posedge clk) begin
|
||||||
if(reset)
|
if(reset)
|
||||||
av_outputenable_pre <= 1'b0;
|
av_outputenable_pre <= 1'b0;
|
||||||
else if( AV_READLATENCY == 0 && AV_READ_WAIT_INDEXED != 0 )
|
else if( AV_READLATENCY == 0 && AV_READ_WAIT_INDEXED != 0 )
|
||||||
av_outputenable_pre <= 0;
|
av_outputenable_pre <= 0;
|
||||||
else
|
else
|
||||||
av_outputenable_pre <= cs_extension | uav_read;
|
av_outputenable_pre <= cs_extension | uav_read;
|
||||||
end
|
end
|
||||||
|
|
||||||
always@(posedge reset, posedge clk) begin
|
always@(posedge reset, posedge clk) begin
|
||||||
if(reset) begin
|
if(reset) begin
|
||||||
av_chipselect_pre <= 1'b0;
|
av_chipselect_pre <= 1'b0;
|
||||||
end else begin
|
end else begin
|
||||||
av_chipselect_pre <= 1'b0;
|
av_chipselect_pre <= 1'b0;
|
||||||
if(AV_READLATENCY != 0 && CHIPSELECT_THROUGH_READLATENCY == 1) begin
|
if(AV_READLATENCY != 0 && CHIPSELECT_THROUGH_READLATENCY == 1) begin
|
||||||
//The AV_READLATENCY term is only here to prevent chipselect from remaining asserted while read and write fall.
|
//The AV_READLATENCY term is only here to prevent chipselect from remaining asserted while read and write fall.
|
||||||
//There is no functional impact as 0 cycle transactions are treated as 1 cycle on the other side of the translator.
|
//There is no functional impact as 0 cycle transactions are treated as 1 cycle on the other side of the translator.
|
||||||
if(uav_read) begin
|
if(uav_read) begin
|
||||||
av_chipselect_pre <= 1'b1;
|
av_chipselect_pre <= 1'b1;
|
||||||
end else if(cs_extension == 1) begin
|
end else if(cs_extension == 1) begin
|
||||||
av_chipselect_pre <= 1'b1;
|
av_chipselect_pre <= 1'b1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Begintransfer Assigment
|
// Begintransfer Assigment
|
||||||
// -------------------
|
// -------------------
|
||||||
reg end_begintransfer;
|
reg end_begintransfer;
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
av_begintransfer = ( uav_write | uav_read ) & ~end_begintransfer;
|
av_begintransfer = ( uav_write | uav_read ) & ~end_begintransfer;
|
||||||
end
|
end
|
||||||
|
|
||||||
always@ ( posedge clk or posedge reset ) begin
|
always@ ( posedge clk or posedge reset ) begin
|
||||||
if(reset) begin
|
if(reset) begin
|
||||||
end_begintransfer <= 1'b0;
|
end_begintransfer <= 1'b0;
|
||||||
end else begin
|
end else begin
|
||||||
if(av_begintransfer == 1 && uav_waitrequest && ~waitrequest_reset_override)
|
if(av_begintransfer == 1 && uav_waitrequest && ~waitrequest_reset_override)
|
||||||
end_begintransfer <= 1'b1;
|
end_begintransfer <= 1'b1;
|
||||||
else if(uav_waitrequest)
|
else if(uav_waitrequest)
|
||||||
end_begintransfer <= end_begintransfer;
|
end_begintransfer <= end_begintransfer;
|
||||||
else
|
else
|
||||||
end_begintransfer <= 1'b0;
|
end_begintransfer <= 1'b0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Beginbursttransfer Assigment
|
// Beginbursttransfer Assigment
|
||||||
// -------------------
|
// -------------------
|
||||||
reg end_beginbursttransfer;
|
reg end_beginbursttransfer;
|
||||||
reg in_transfer;
|
reg in_transfer;
|
||||||
|
|
||||||
always@* begin
|
always@* begin
|
||||||
av_beginbursttransfer = uav_read ? av_begintransfer : (av_begintransfer && ~end_beginbursttransfer && ~in_transfer);
|
av_beginbursttransfer = uav_read ? av_begintransfer : (av_begintransfer && ~end_beginbursttransfer && ~in_transfer);
|
||||||
end
|
end
|
||||||
|
|
||||||
always@ ( posedge clk or posedge reset ) begin
|
always@ ( posedge clk or posedge reset ) begin
|
||||||
if(reset) begin
|
if(reset) begin
|
||||||
end_beginbursttransfer <= 1'b0;
|
end_beginbursttransfer <= 1'b0;
|
||||||
in_transfer <= 1'b0;
|
in_transfer <= 1'b0;
|
||||||
end else begin
|
end else begin
|
||||||
end_beginbursttransfer <= uav_write & ( uav_burstcount != symbols_per_word );
|
end_beginbursttransfer <= uav_write & ( uav_burstcount != symbols_per_word );
|
||||||
if(uav_write && uav_burstcount == symbols_per_word)
|
if(uav_write && uav_burstcount == symbols_per_word)
|
||||||
in_transfer <=1'b0;
|
in_transfer <=1'b0;
|
||||||
else if(uav_write)
|
else if(uav_write)
|
||||||
in_transfer <=1'b1;
|
in_transfer <=1'b1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -11,20 +11,20 @@
|
||||||
# agreement for further details.
|
# agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
# +---------------------------------------------------
|
# +---------------------------------------------------
|
||||||
# | Cut the async clear paths
|
# | Cut the async clear paths
|
||||||
# +---------------------------------------------------
|
# +---------------------------------------------------
|
||||||
set aclr_counter 0
|
set aclr_counter 0
|
||||||
set clrn_counter 0
|
set clrn_counter 0
|
||||||
set aclr_collection [get_pins -compatibility_mode -nocase -nowarn *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|aclr]
|
set aclr_collection [get_pins -compatibility_mode -nocase -nowarn *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|aclr]
|
||||||
set clrn_collection [get_pins -compatibility_mode -nocase -nowarn *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|clrn]
|
set clrn_collection [get_pins -compatibility_mode -nocase -nowarn *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|clrn]
|
||||||
set aclr_counter [get_collection_size $aclr_collection]
|
set aclr_counter [get_collection_size $aclr_collection]
|
||||||
set clrn_counter [get_collection_size $clrn_collection]
|
set clrn_counter [get_collection_size $clrn_collection]
|
||||||
|
|
||||||
if {$aclr_counter > 0} {
|
if {$aclr_counter > 0} {
|
||||||
set_false_path -to [get_pins -compatibility_mode -nocase *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|aclr]
|
set_false_path -to [get_pins -compatibility_mode -nocase *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|aclr]
|
||||||
}
|
}
|
||||||
|
|
||||||
if {$clrn_counter > 0} {
|
if {$clrn_counter > 0} {
|
||||||
set_false_path -to [get_pins -compatibility_mode -nocase *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|clrn]
|
set_false_path -to [get_pins -compatibility_mode -nocase *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|clrn]
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,309 +11,309 @@
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// (C) 2001-2013 Altera Corporation. All rights reserved.
|
// (C) 2001-2013 Altera Corporation. All rights reserved.
|
||||||
// Your use of Altera Corporation's design tools, logic functions and other
|
// Your use of Altera Corporation's design tools, logic functions and other
|
||||||
// software and tools, and its AMPP partner logic functions, and any output
|
// software and tools, and its AMPP partner logic functions, and any output
|
||||||
// files any of the foregoing (including device programming or simulation
|
// files any of the foregoing (including device programming or simulation
|
||||||
// files), and any associated documentation or information are expressly subject
|
// files), and any associated documentation or information are expressly subject
|
||||||
// to the terms and conditions of the Altera Program License Subscription
|
// to the terms and conditions of the Altera Program License Subscription
|
||||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||||
// license agreement, including, without limitation, that your use is for the
|
// license agreement, including, without limitation, that your use is for the
|
||||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||||
// Altera or its authorized distributors. Please refer to the applicable
|
// Altera or its authorized distributors. Please refer to the applicable
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// $Id: //acds/rel/18.1std/ip/merlin/altera_reset_controller/altera_reset_controller.v#1 $
|
// $Id: //acds/rel/18.1std/ip/merlin/altera_reset_controller/altera_reset_controller.v#1 $
|
||||||
// $Revision: #1 $
|
// $Revision: #1 $
|
||||||
// $Date: 2018/07/18 $
|
// $Date: 2018/07/18 $
|
||||||
// $Author: psgswbuild $
|
// $Author: psgswbuild $
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Reset controller
|
// Reset controller
|
||||||
//
|
//
|
||||||
// Combines all the input resets and synchronizes
|
// Combines all the input resets and synchronizes
|
||||||
// the result to the clk.
|
// the result to the clk.
|
||||||
// ACDS13.1 - Added reset request as part of reset sequencing
|
// ACDS13.1 - Added reset request as part of reset sequencing
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
|
|
||||||
`timescale 1 ns / 1 ns
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
module altera_reset_controller
|
module altera_reset_controller
|
||||||
#(
|
#(
|
||||||
parameter NUM_RESET_INPUTS = 6,
|
parameter NUM_RESET_INPUTS = 6,
|
||||||
parameter USE_RESET_REQUEST_IN0 = 0,
|
parameter USE_RESET_REQUEST_IN0 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN1 = 0,
|
parameter USE_RESET_REQUEST_IN1 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN2 = 0,
|
parameter USE_RESET_REQUEST_IN2 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN3 = 0,
|
parameter USE_RESET_REQUEST_IN3 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN4 = 0,
|
parameter USE_RESET_REQUEST_IN4 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN5 = 0,
|
parameter USE_RESET_REQUEST_IN5 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN6 = 0,
|
parameter USE_RESET_REQUEST_IN6 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN7 = 0,
|
parameter USE_RESET_REQUEST_IN7 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN8 = 0,
|
parameter USE_RESET_REQUEST_IN8 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN9 = 0,
|
parameter USE_RESET_REQUEST_IN9 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN10 = 0,
|
parameter USE_RESET_REQUEST_IN10 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN11 = 0,
|
parameter USE_RESET_REQUEST_IN11 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN12 = 0,
|
parameter USE_RESET_REQUEST_IN12 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN13 = 0,
|
parameter USE_RESET_REQUEST_IN13 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN14 = 0,
|
parameter USE_RESET_REQUEST_IN14 = 0,
|
||||||
parameter USE_RESET_REQUEST_IN15 = 0,
|
parameter USE_RESET_REQUEST_IN15 = 0,
|
||||||
parameter OUTPUT_RESET_SYNC_EDGES = "deassert",
|
parameter OUTPUT_RESET_SYNC_EDGES = "deassert",
|
||||||
parameter SYNC_DEPTH = 2,
|
parameter SYNC_DEPTH = 2,
|
||||||
parameter RESET_REQUEST_PRESENT = 0,
|
parameter RESET_REQUEST_PRESENT = 0,
|
||||||
parameter RESET_REQ_WAIT_TIME = 3,
|
parameter RESET_REQ_WAIT_TIME = 3,
|
||||||
parameter MIN_RST_ASSERTION_TIME = 11,
|
parameter MIN_RST_ASSERTION_TIME = 11,
|
||||||
parameter RESET_REQ_EARLY_DSRT_TIME = 4,
|
parameter RESET_REQ_EARLY_DSRT_TIME = 4,
|
||||||
parameter ADAPT_RESET_REQUEST = 0
|
parameter ADAPT_RESET_REQUEST = 0
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// We support up to 16 reset inputs, for now
|
// We support up to 16 reset inputs, for now
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
input reset_in0,
|
input reset_in0,
|
||||||
input reset_in1,
|
input reset_in1,
|
||||||
input reset_in2,
|
input reset_in2,
|
||||||
input reset_in3,
|
input reset_in3,
|
||||||
input reset_in4,
|
input reset_in4,
|
||||||
input reset_in5,
|
input reset_in5,
|
||||||
input reset_in6,
|
input reset_in6,
|
||||||
input reset_in7,
|
input reset_in7,
|
||||||
input reset_in8,
|
input reset_in8,
|
||||||
input reset_in9,
|
input reset_in9,
|
||||||
input reset_in10,
|
input reset_in10,
|
||||||
input reset_in11,
|
input reset_in11,
|
||||||
input reset_in12,
|
input reset_in12,
|
||||||
input reset_in13,
|
input reset_in13,
|
||||||
input reset_in14,
|
input reset_in14,
|
||||||
input reset_in15,
|
input reset_in15,
|
||||||
input reset_req_in0,
|
input reset_req_in0,
|
||||||
input reset_req_in1,
|
input reset_req_in1,
|
||||||
input reset_req_in2,
|
input reset_req_in2,
|
||||||
input reset_req_in3,
|
input reset_req_in3,
|
||||||
input reset_req_in4,
|
input reset_req_in4,
|
||||||
input reset_req_in5,
|
input reset_req_in5,
|
||||||
input reset_req_in6,
|
input reset_req_in6,
|
||||||
input reset_req_in7,
|
input reset_req_in7,
|
||||||
input reset_req_in8,
|
input reset_req_in8,
|
||||||
input reset_req_in9,
|
input reset_req_in9,
|
||||||
input reset_req_in10,
|
input reset_req_in10,
|
||||||
input reset_req_in11,
|
input reset_req_in11,
|
||||||
input reset_req_in12,
|
input reset_req_in12,
|
||||||
input reset_req_in13,
|
input reset_req_in13,
|
||||||
input reset_req_in14,
|
input reset_req_in14,
|
||||||
input reset_req_in15,
|
input reset_req_in15,
|
||||||
|
|
||||||
|
|
||||||
input clk,
|
input clk,
|
||||||
output reg reset_out,
|
output reg reset_out,
|
||||||
output reg reset_req
|
output reg reset_req
|
||||||
);
|
);
|
||||||
|
|
||||||
// Always use async reset synchronizer if reset_req is used
|
// Always use async reset synchronizer if reset_req is used
|
||||||
localparam ASYNC_RESET = (OUTPUT_RESET_SYNC_EDGES == "deassert");
|
localparam ASYNC_RESET = (OUTPUT_RESET_SYNC_EDGES == "deassert");
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// Local parameter to control the reset_req and reset_out timing when RESET_REQUEST_PRESENT==1
|
// Local parameter to control the reset_req and reset_out timing when RESET_REQUEST_PRESENT==1
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
localparam MIN_METASTABLE = 3;
|
localparam MIN_METASTABLE = 3;
|
||||||
localparam RSTREQ_ASRT_SYNC_TAP = MIN_METASTABLE + RESET_REQ_WAIT_TIME;
|
localparam RSTREQ_ASRT_SYNC_TAP = MIN_METASTABLE + RESET_REQ_WAIT_TIME;
|
||||||
|
|
||||||
localparam LARGER = RESET_REQ_WAIT_TIME > RESET_REQ_EARLY_DSRT_TIME ? RESET_REQ_WAIT_TIME : RESET_REQ_EARLY_DSRT_TIME;
|
localparam LARGER = RESET_REQ_WAIT_TIME > RESET_REQ_EARLY_DSRT_TIME ? RESET_REQ_WAIT_TIME : RESET_REQ_EARLY_DSRT_TIME;
|
||||||
|
|
||||||
localparam ASSERTION_CHAIN_LENGTH = (MIN_METASTABLE > LARGER) ?
|
localparam ASSERTION_CHAIN_LENGTH = (MIN_METASTABLE > LARGER) ?
|
||||||
MIN_RST_ASSERTION_TIME + 1 :
|
MIN_RST_ASSERTION_TIME + 1 :
|
||||||
(
|
(
|
||||||
(MIN_RST_ASSERTION_TIME > LARGER)?
|
(MIN_RST_ASSERTION_TIME > LARGER)?
|
||||||
MIN_RST_ASSERTION_TIME + (LARGER - MIN_METASTABLE + 1) + 1 :
|
MIN_RST_ASSERTION_TIME + (LARGER - MIN_METASTABLE + 1) + 1 :
|
||||||
MIN_RST_ASSERTION_TIME + RESET_REQ_EARLY_DSRT_TIME + RESET_REQ_WAIT_TIME - MIN_METASTABLE + 2
|
MIN_RST_ASSERTION_TIME + RESET_REQ_EARLY_DSRT_TIME + RESET_REQ_WAIT_TIME - MIN_METASTABLE + 2
|
||||||
);
|
);
|
||||||
|
|
||||||
localparam RESET_REQ_DRST_TAP = RESET_REQ_EARLY_DSRT_TIME + 1;
|
localparam RESET_REQ_DRST_TAP = RESET_REQ_EARLY_DSRT_TIME + 1;
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
|
|
||||||
wire merged_reset;
|
wire merged_reset;
|
||||||
wire merged_reset_req_in;
|
wire merged_reset_req_in;
|
||||||
wire reset_out_pre;
|
wire reset_out_pre;
|
||||||
wire reset_req_pre;
|
wire reset_req_pre;
|
||||||
|
|
||||||
// Registers and Interconnect
|
// Registers and Interconnect
|
||||||
(*preserve*) reg [RSTREQ_ASRT_SYNC_TAP: 0] altera_reset_synchronizer_int_chain;
|
(*preserve*) reg [RSTREQ_ASRT_SYNC_TAP: 0] altera_reset_synchronizer_int_chain;
|
||||||
reg [ASSERTION_CHAIN_LENGTH-1: 0] r_sync_rst_chain;
|
reg [ASSERTION_CHAIN_LENGTH-1: 0] r_sync_rst_chain;
|
||||||
reg r_sync_rst;
|
reg r_sync_rst;
|
||||||
reg r_early_rst;
|
reg r_early_rst;
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// "Or" all the input resets together
|
// "Or" all the input resets together
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
assign merged_reset = (
|
assign merged_reset = (
|
||||||
reset_in0 |
|
reset_in0 |
|
||||||
reset_in1 |
|
reset_in1 |
|
||||||
reset_in2 |
|
reset_in2 |
|
||||||
reset_in3 |
|
reset_in3 |
|
||||||
reset_in4 |
|
reset_in4 |
|
||||||
reset_in5 |
|
reset_in5 |
|
||||||
reset_in6 |
|
reset_in6 |
|
||||||
reset_in7 |
|
reset_in7 |
|
||||||
reset_in8 |
|
reset_in8 |
|
||||||
reset_in9 |
|
reset_in9 |
|
||||||
reset_in10 |
|
reset_in10 |
|
||||||
reset_in11 |
|
reset_in11 |
|
||||||
reset_in12 |
|
reset_in12 |
|
||||||
reset_in13 |
|
reset_in13 |
|
||||||
reset_in14 |
|
reset_in14 |
|
||||||
reset_in15
|
reset_in15
|
||||||
);
|
);
|
||||||
|
|
||||||
assign merged_reset_req_in = (
|
assign merged_reset_req_in = (
|
||||||
( (USE_RESET_REQUEST_IN0 == 1) ? reset_req_in0 : 1'b0) |
|
( (USE_RESET_REQUEST_IN0 == 1) ? reset_req_in0 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN1 == 1) ? reset_req_in1 : 1'b0) |
|
( (USE_RESET_REQUEST_IN1 == 1) ? reset_req_in1 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN2 == 1) ? reset_req_in2 : 1'b0) |
|
( (USE_RESET_REQUEST_IN2 == 1) ? reset_req_in2 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN3 == 1) ? reset_req_in3 : 1'b0) |
|
( (USE_RESET_REQUEST_IN3 == 1) ? reset_req_in3 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN4 == 1) ? reset_req_in4 : 1'b0) |
|
( (USE_RESET_REQUEST_IN4 == 1) ? reset_req_in4 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN5 == 1) ? reset_req_in5 : 1'b0) |
|
( (USE_RESET_REQUEST_IN5 == 1) ? reset_req_in5 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN6 == 1) ? reset_req_in6 : 1'b0) |
|
( (USE_RESET_REQUEST_IN6 == 1) ? reset_req_in6 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN7 == 1) ? reset_req_in7 : 1'b0) |
|
( (USE_RESET_REQUEST_IN7 == 1) ? reset_req_in7 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN8 == 1) ? reset_req_in8 : 1'b0) |
|
( (USE_RESET_REQUEST_IN8 == 1) ? reset_req_in8 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN9 == 1) ? reset_req_in9 : 1'b0) |
|
( (USE_RESET_REQUEST_IN9 == 1) ? reset_req_in9 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN10 == 1) ? reset_req_in10 : 1'b0) |
|
( (USE_RESET_REQUEST_IN10 == 1) ? reset_req_in10 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN11 == 1) ? reset_req_in11 : 1'b0) |
|
( (USE_RESET_REQUEST_IN11 == 1) ? reset_req_in11 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN12 == 1) ? reset_req_in12 : 1'b0) |
|
( (USE_RESET_REQUEST_IN12 == 1) ? reset_req_in12 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN13 == 1) ? reset_req_in13 : 1'b0) |
|
( (USE_RESET_REQUEST_IN13 == 1) ? reset_req_in13 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN14 == 1) ? reset_req_in14 : 1'b0) |
|
( (USE_RESET_REQUEST_IN14 == 1) ? reset_req_in14 : 1'b0) |
|
||||||
( (USE_RESET_REQUEST_IN15 == 1) ? reset_req_in15 : 1'b0)
|
( (USE_RESET_REQUEST_IN15 == 1) ? reset_req_in15 : 1'b0)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
// And if required, synchronize it to the required clock domain,
|
// And if required, synchronize it to the required clock domain,
|
||||||
// with the correct synchronization type
|
// with the correct synchronization type
|
||||||
// --------------------------------------
|
// --------------------------------------
|
||||||
generate if (OUTPUT_RESET_SYNC_EDGES == "none" && (RESET_REQUEST_PRESENT==0)) begin
|
generate if (OUTPUT_RESET_SYNC_EDGES == "none" && (RESET_REQUEST_PRESENT==0)) begin
|
||||||
|
|
||||||
assign reset_out_pre = merged_reset;
|
assign reset_out_pre = merged_reset;
|
||||||
assign reset_req_pre = merged_reset_req_in;
|
assign reset_req_pre = merged_reset_req_in;
|
||||||
|
|
||||||
end else begin
|
end else begin
|
||||||
|
|
||||||
altera_reset_synchronizer
|
altera_reset_synchronizer
|
||||||
#(
|
#(
|
||||||
.DEPTH (SYNC_DEPTH),
|
.DEPTH (SYNC_DEPTH),
|
||||||
.ASYNC_RESET(RESET_REQUEST_PRESENT? 1'b1 : ASYNC_RESET)
|
.ASYNC_RESET(RESET_REQUEST_PRESENT? 1'b1 : ASYNC_RESET)
|
||||||
)
|
)
|
||||||
alt_rst_sync_uq1
|
alt_rst_sync_uq1
|
||||||
(
|
(
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.reset_in (merged_reset),
|
.reset_in (merged_reset),
|
||||||
.reset_out (reset_out_pre)
|
.reset_out (reset_out_pre)
|
||||||
);
|
);
|
||||||
|
|
||||||
altera_reset_synchronizer
|
altera_reset_synchronizer
|
||||||
#(
|
#(
|
||||||
.DEPTH (SYNC_DEPTH),
|
.DEPTH (SYNC_DEPTH),
|
||||||
.ASYNC_RESET(0)
|
.ASYNC_RESET(0)
|
||||||
)
|
)
|
||||||
alt_rst_req_sync_uq1
|
alt_rst_req_sync_uq1
|
||||||
(
|
(
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.reset_in (merged_reset_req_in),
|
.reset_in (merged_reset_req_in),
|
||||||
.reset_out (reset_req_pre)
|
.reset_out (reset_req_pre)
|
||||||
);
|
);
|
||||||
|
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
generate if ( ( (RESET_REQUEST_PRESENT == 0) && (ADAPT_RESET_REQUEST==0) )|
|
generate if ( ( (RESET_REQUEST_PRESENT == 0) && (ADAPT_RESET_REQUEST==0) )|
|
||||||
( (ADAPT_RESET_REQUEST == 1) && (OUTPUT_RESET_SYNC_EDGES != "deassert") ) ) begin
|
( (ADAPT_RESET_REQUEST == 1) && (OUTPUT_RESET_SYNC_EDGES != "deassert") ) ) begin
|
||||||
always @* begin
|
always @* begin
|
||||||
reset_out = reset_out_pre;
|
reset_out = reset_out_pre;
|
||||||
reset_req = reset_req_pre;
|
reset_req = reset_req_pre;
|
||||||
end
|
end
|
||||||
end else if ( (RESET_REQUEST_PRESENT == 0) && (ADAPT_RESET_REQUEST==1) ) begin
|
end else if ( (RESET_REQUEST_PRESENT == 0) && (ADAPT_RESET_REQUEST==1) ) begin
|
||||||
|
|
||||||
wire reset_out_pre2;
|
wire reset_out_pre2;
|
||||||
|
|
||||||
altera_reset_synchronizer
|
altera_reset_synchronizer
|
||||||
#(
|
#(
|
||||||
.DEPTH (SYNC_DEPTH+1),
|
.DEPTH (SYNC_DEPTH+1),
|
||||||
.ASYNC_RESET(0)
|
.ASYNC_RESET(0)
|
||||||
)
|
)
|
||||||
alt_rst_sync_uq2
|
alt_rst_sync_uq2
|
||||||
(
|
(
|
||||||
.clk (clk),
|
.clk (clk),
|
||||||
.reset_in (reset_out_pre),
|
.reset_in (reset_out_pre),
|
||||||
.reset_out (reset_out_pre2)
|
.reset_out (reset_out_pre2)
|
||||||
);
|
);
|
||||||
|
|
||||||
always @* begin
|
always @* begin
|
||||||
reset_out = reset_out_pre2;
|
reset_out = reset_out_pre2;
|
||||||
reset_req = reset_req_pre;
|
reset_req = reset_req_pre;
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
|
|
||||||
// 3-FF Metastability Synchronizer
|
// 3-FF Metastability Synchronizer
|
||||||
initial
|
initial
|
||||||
begin
|
begin
|
||||||
altera_reset_synchronizer_int_chain <= {RSTREQ_ASRT_SYNC_TAP{1'b1}};
|
altera_reset_synchronizer_int_chain <= {RSTREQ_ASRT_SYNC_TAP{1'b1}};
|
||||||
end
|
end
|
||||||
|
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
begin
|
begin
|
||||||
altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP:0] <=
|
altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP:0] <=
|
||||||
{altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP-1:0], reset_out_pre};
|
{altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP-1:0], reset_out_pre};
|
||||||
end
|
end
|
||||||
|
|
||||||
// Synchronous reset pipe
|
// Synchronous reset pipe
|
||||||
initial
|
initial
|
||||||
begin
|
begin
|
||||||
r_sync_rst_chain <= {ASSERTION_CHAIN_LENGTH{1'b1}};
|
r_sync_rst_chain <= {ASSERTION_CHAIN_LENGTH{1'b1}};
|
||||||
end
|
end
|
||||||
|
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
begin
|
begin
|
||||||
if (altera_reset_synchronizer_int_chain[MIN_METASTABLE-1] == 1'b1)
|
if (altera_reset_synchronizer_int_chain[MIN_METASTABLE-1] == 1'b1)
|
||||||
begin
|
begin
|
||||||
r_sync_rst_chain <= {ASSERTION_CHAIN_LENGTH{1'b1}};
|
r_sync_rst_chain <= {ASSERTION_CHAIN_LENGTH{1'b1}};
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
r_sync_rst_chain <= {1'b0, r_sync_rst_chain[ASSERTION_CHAIN_LENGTH-1:1]};
|
r_sync_rst_chain <= {1'b0, r_sync_rst_chain[ASSERTION_CHAIN_LENGTH-1:1]};
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// Standard synchronous reset output. From 0-1, the transition lags the early output. For 1->0, the transition
|
// Standard synchronous reset output. From 0-1, the transition lags the early output. For 1->0, the transition
|
||||||
// matches the early input.
|
// matches the early input.
|
||||||
|
|
||||||
always @(posedge clk)
|
always @(posedge clk)
|
||||||
begin
|
begin
|
||||||
case ({altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP], r_sync_rst_chain[1], r_sync_rst})
|
case ({altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP], r_sync_rst_chain[1], r_sync_rst})
|
||||||
3'b000: r_sync_rst <= 1'b0; // Not reset
|
3'b000: r_sync_rst <= 1'b0; // Not reset
|
||||||
3'b001: r_sync_rst <= 1'b0;
|
3'b001: r_sync_rst <= 1'b0;
|
||||||
3'b010: r_sync_rst <= 1'b0;
|
3'b010: r_sync_rst <= 1'b0;
|
||||||
3'b011: r_sync_rst <= 1'b1;
|
3'b011: r_sync_rst <= 1'b1;
|
||||||
3'b100: r_sync_rst <= 1'b1;
|
3'b100: r_sync_rst <= 1'b1;
|
||||||
3'b101: r_sync_rst <= 1'b1;
|
3'b101: r_sync_rst <= 1'b1;
|
||||||
3'b110: r_sync_rst <= 1'b1;
|
3'b110: r_sync_rst <= 1'b1;
|
||||||
3'b111: r_sync_rst <= 1'b1; // In Reset
|
3'b111: r_sync_rst <= 1'b1; // In Reset
|
||||||
default: r_sync_rst <= 1'b1;
|
default: r_sync_rst <= 1'b1;
|
||||||
endcase
|
endcase
|
||||||
|
|
||||||
case ({r_sync_rst_chain[1], r_sync_rst_chain[RESET_REQ_DRST_TAP] | reset_req_pre})
|
case ({r_sync_rst_chain[1], r_sync_rst_chain[RESET_REQ_DRST_TAP] | reset_req_pre})
|
||||||
2'b00: r_early_rst <= 1'b0; // Not reset
|
2'b00: r_early_rst <= 1'b0; // Not reset
|
||||||
2'b01: r_early_rst <= 1'b1; // Coming out of reset
|
2'b01: r_early_rst <= 1'b1; // Coming out of reset
|
||||||
2'b10: r_early_rst <= 1'b0; // Spurious reset - should not be possible via synchronous design.
|
2'b10: r_early_rst <= 1'b0; // Spurious reset - should not be possible via synchronous design.
|
||||||
2'b11: r_early_rst <= 1'b1; // Held in reset
|
2'b11: r_early_rst <= 1'b1; // Held in reset
|
||||||
default: r_early_rst <= 1'b1;
|
default: r_early_rst <= 1'b1;
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
|
|
||||||
always @* begin
|
always @* begin
|
||||||
reset_out = r_sync_rst;
|
reset_out = r_sync_rst;
|
||||||
reset_req = r_early_rst;
|
reset_req = r_early_rst;
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -11,77 +11,77 @@
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// $Id: //acds/rel/18.1std/ip/merlin/altera_reset_controller/altera_reset_synchronizer.v#1 $
|
// $Id: //acds/rel/18.1std/ip/merlin/altera_reset_controller/altera_reset_synchronizer.v#1 $
|
||||||
// $Revision: #1 $
|
// $Revision: #1 $
|
||||||
// $Date: 2018/07/18 $
|
// $Date: 2018/07/18 $
|
||||||
// $Author: psgswbuild $
|
// $Author: psgswbuild $
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
// Reset Synchronizer
|
// Reset Synchronizer
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
`timescale 1 ns / 1 ns
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
module altera_reset_synchronizer
|
module altera_reset_synchronizer
|
||||||
#(
|
#(
|
||||||
parameter ASYNC_RESET = 1,
|
parameter ASYNC_RESET = 1,
|
||||||
parameter DEPTH = 2
|
parameter DEPTH = 2
|
||||||
)
|
)
|
||||||
(
|
(
|
||||||
input reset_in /* synthesis ALTERA_ATTRIBUTE = "SUPPRESS_DA_RULE_INTERNAL=R101" */,
|
input reset_in /* synthesis ALTERA_ATTRIBUTE = "SUPPRESS_DA_RULE_INTERNAL=R101" */,
|
||||||
|
|
||||||
input clk,
|
input clk,
|
||||||
output reset_out
|
output reset_out
|
||||||
);
|
);
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
// Synchronizer register chain. We cannot reuse the
|
// Synchronizer register chain. We cannot reuse the
|
||||||
// standard synchronizer in this implementation
|
// standard synchronizer in this implementation
|
||||||
// because our timing constraints are different.
|
// because our timing constraints are different.
|
||||||
//
|
//
|
||||||
// Instead of cutting the timing path to the d-input
|
// Instead of cutting the timing path to the d-input
|
||||||
// on the first flop we need to cut the aclr input.
|
// on the first flop we need to cut the aclr input.
|
||||||
//
|
//
|
||||||
// We omit the "preserve" attribute on the final
|
// We omit the "preserve" attribute on the final
|
||||||
// output register, so that the synthesis tool can
|
// output register, so that the synthesis tool can
|
||||||
// duplicate it where needed.
|
// duplicate it where needed.
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
(*preserve*) reg [DEPTH-1:0] altera_reset_synchronizer_int_chain;
|
(*preserve*) reg [DEPTH-1:0] altera_reset_synchronizer_int_chain;
|
||||||
reg altera_reset_synchronizer_int_chain_out;
|
reg altera_reset_synchronizer_int_chain_out;
|
||||||
|
|
||||||
generate if (ASYNC_RESET) begin
|
generate if (ASYNC_RESET) begin
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
// Assert asynchronously, deassert synchronously.
|
// Assert asynchronously, deassert synchronously.
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
always @(posedge clk or posedge reset_in) begin
|
always @(posedge clk or posedge reset_in) begin
|
||||||
if (reset_in) begin
|
if (reset_in) begin
|
||||||
altera_reset_synchronizer_int_chain <= {DEPTH{1'b1}};
|
altera_reset_synchronizer_int_chain <= {DEPTH{1'b1}};
|
||||||
altera_reset_synchronizer_int_chain_out <= 1'b1;
|
altera_reset_synchronizer_int_chain_out <= 1'b1;
|
||||||
end
|
end
|
||||||
else begin
|
else begin
|
||||||
altera_reset_synchronizer_int_chain[DEPTH-2:0] <= altera_reset_synchronizer_int_chain[DEPTH-1:1];
|
altera_reset_synchronizer_int_chain[DEPTH-2:0] <= altera_reset_synchronizer_int_chain[DEPTH-1:1];
|
||||||
altera_reset_synchronizer_int_chain[DEPTH-1] <= 0;
|
altera_reset_synchronizer_int_chain[DEPTH-1] <= 0;
|
||||||
altera_reset_synchronizer_int_chain_out <= altera_reset_synchronizer_int_chain[0];
|
altera_reset_synchronizer_int_chain_out <= altera_reset_synchronizer_int_chain[0];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
assign reset_out = altera_reset_synchronizer_int_chain_out;
|
assign reset_out = altera_reset_synchronizer_int_chain_out;
|
||||||
|
|
||||||
end else begin
|
end else begin
|
||||||
|
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
// Assert synchronously, deassert synchronously.
|
// Assert synchronously, deassert synchronously.
|
||||||
// -----------------------------------------------
|
// -----------------------------------------------
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
altera_reset_synchronizer_int_chain[DEPTH-2:0] <= altera_reset_synchronizer_int_chain[DEPTH-1:1];
|
altera_reset_synchronizer_int_chain[DEPTH-2:0] <= altera_reset_synchronizer_int_chain[DEPTH-1:1];
|
||||||
altera_reset_synchronizer_int_chain[DEPTH-1] <= reset_in;
|
altera_reset_synchronizer_int_chain[DEPTH-1] <= reset_in;
|
||||||
altera_reset_synchronizer_int_chain_out <= altera_reset_synchronizer_int_chain[0];
|
altera_reset_synchronizer_int_chain_out <= altera_reset_synchronizer_int_chain[0];
|
||||||
end
|
end
|
||||||
|
|
||||||
assign reset_out = altera_reset_synchronizer_int_chain_out;
|
assign reset_out = altera_reset_synchronizer_int_chain_out;
|
||||||
|
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
|
@ -93,19 +93,19 @@ module dec
|
||||||
RED: begin
|
RED: begin
|
||||||
colors <= 3'b100;
|
colors <= 3'b100;
|
||||||
if (enacnt) begin
|
if (enacnt) begin
|
||||||
state <= state + 1'b1;
|
state <= YELLOW;
|
||||||
greenSaved <= divisor;
|
greenSaved <= divisor;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
YELLOW: begin
|
YELLOW: begin
|
||||||
colors <= 3'b010;
|
colors <= 3'b010;
|
||||||
if (enacnt) begin
|
if (enacnt) begin
|
||||||
state <= state + 1'b1;
|
state <= BLINK;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
BLINK: begin
|
BLINK: begin
|
||||||
if (enacnt) begin
|
if (enacnt) begin
|
||||||
state <= state + 1'b1;
|
state <= GREEN;
|
||||||
end
|
end
|
||||||
if (greenSaved[0] == 0) begin
|
if (greenSaved[0] == 0) begin
|
||||||
colors <= 3'b011;
|
colors <= 3'b011;
|
||||||
|
@ -118,9 +118,6 @@ module dec
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
GREEN: begin
|
GREEN: begin
|
||||||
if (enacnt) begin
|
|
||||||
state <= state + 1'b1;
|
|
||||||
end
|
|
||||||
colors <= 3'b001;
|
colors <= 3'b001;
|
||||||
end
|
end
|
||||||
default: colors <= 3'b100;
|
default: colors <= 3'b100;
|
||||||
|
|
|
@ -1,42 +1,42 @@
|
||||||
WIDTH=32;
|
WIDTH=32;
|
||||||
DEPTH=32;
|
DEPTH=32;
|
||||||
|
|
||||||
ADDRESS_RADIX=HEX;
|
ADDRESS_RADIX=HEX;
|
||||||
DATA_RADIX=HEX;
|
DATA_RADIX=HEX;
|
||||||
|
|
||||||
CONTENT BEGIN
|
CONTENT BEGIN
|
||||||
|
|
||||||
00 : deadbeef;
|
00 : deadbeef;
|
||||||
01 : deadbeef;
|
01 : deadbeef;
|
||||||
02 : deadbeef;
|
02 : deadbeef;
|
||||||
03 : deadbeef;
|
03 : deadbeef;
|
||||||
04 : deadbeef;
|
04 : deadbeef;
|
||||||
05 : deadbeef;
|
05 : deadbeef;
|
||||||
06 : deadbeef;
|
06 : deadbeef;
|
||||||
07 : deadbeef;
|
07 : deadbeef;
|
||||||
08 : deadbeef;
|
08 : deadbeef;
|
||||||
09 : deadbeef;
|
09 : deadbeef;
|
||||||
0a : deadbeef;
|
0a : deadbeef;
|
||||||
0b : deadbeef;
|
0b : deadbeef;
|
||||||
0c : deadbeef;
|
0c : deadbeef;
|
||||||
0d : deadbeef;
|
0d : deadbeef;
|
||||||
0e : deadbeef;
|
0e : deadbeef;
|
||||||
0f : deadbeef;
|
0f : deadbeef;
|
||||||
10 : deadbeef;
|
10 : deadbeef;
|
||||||
11 : deadbeef;
|
11 : deadbeef;
|
||||||
12 : deadbeef;
|
12 : deadbeef;
|
||||||
13 : deadbeef;
|
13 : deadbeef;
|
||||||
14 : deadbeef;
|
14 : deadbeef;
|
||||||
15 : deadbeef;
|
15 : deadbeef;
|
||||||
16 : deadbeef;
|
16 : deadbeef;
|
||||||
17 : deadbeef;
|
17 : deadbeef;
|
||||||
18 : deadbeef;
|
18 : deadbeef;
|
||||||
19 : deadbeef;
|
19 : deadbeef;
|
||||||
1a : deadbeef;
|
1a : deadbeef;
|
||||||
1b : deadbeef;
|
1b : deadbeef;
|
||||||
1c : deadbeef;
|
1c : deadbeef;
|
||||||
1d : deadbeef;
|
1d : deadbeef;
|
||||||
1e : deadbeef;
|
1e : deadbeef;
|
||||||
1f : deadbeef;
|
1f : deadbeef;
|
||||||
|
|
||||||
END;
|
END;
|
||||||
|
|
|
@ -1,42 +1,42 @@
|
||||||
WIDTH=32;
|
WIDTH=32;
|
||||||
DEPTH=32;
|
DEPTH=32;
|
||||||
|
|
||||||
ADDRESS_RADIX=HEX;
|
ADDRESS_RADIX=HEX;
|
||||||
DATA_RADIX=HEX;
|
DATA_RADIX=HEX;
|
||||||
|
|
||||||
CONTENT BEGIN
|
CONTENT BEGIN
|
||||||
|
|
||||||
00 : deadbeef;
|
00 : deadbeef;
|
||||||
01 : deadbeef;
|
01 : deadbeef;
|
||||||
02 : deadbeef;
|
02 : deadbeef;
|
||||||
03 : deadbeef;
|
03 : deadbeef;
|
||||||
04 : deadbeef;
|
04 : deadbeef;
|
||||||
05 : deadbeef;
|
05 : deadbeef;
|
||||||
06 : deadbeef;
|
06 : deadbeef;
|
||||||
07 : deadbeef;
|
07 : deadbeef;
|
||||||
08 : deadbeef;
|
08 : deadbeef;
|
||||||
09 : deadbeef;
|
09 : deadbeef;
|
||||||
0a : deadbeef;
|
0a : deadbeef;
|
||||||
0b : deadbeef;
|
0b : deadbeef;
|
||||||
0c : deadbeef;
|
0c : deadbeef;
|
||||||
0d : deadbeef;
|
0d : deadbeef;
|
||||||
0e : deadbeef;
|
0e : deadbeef;
|
||||||
0f : deadbeef;
|
0f : deadbeef;
|
||||||
10 : deadbeef;
|
10 : deadbeef;
|
||||||
11 : deadbeef;
|
11 : deadbeef;
|
||||||
12 : deadbeef;
|
12 : deadbeef;
|
||||||
13 : deadbeef;
|
13 : deadbeef;
|
||||||
14 : deadbeef;
|
14 : deadbeef;
|
||||||
15 : deadbeef;
|
15 : deadbeef;
|
||||||
16 : deadbeef;
|
16 : deadbeef;
|
||||||
17 : deadbeef;
|
17 : deadbeef;
|
||||||
18 : deadbeef;
|
18 : deadbeef;
|
||||||
19 : deadbeef;
|
19 : deadbeef;
|
||||||
1a : deadbeef;
|
1a : deadbeef;
|
||||||
1b : deadbeef;
|
1b : deadbeef;
|
||||||
1c : deadbeef;
|
1c : deadbeef;
|
||||||
1d : deadbeef;
|
1d : deadbeef;
|
||||||
1e : deadbeef;
|
1e : deadbeef;
|
||||||
1f : deadbeef;
|
1f : deadbeef;
|
||||||
|
|
||||||
END;
|
END;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,12 +1,12 @@
|
||||||
// niosII_mm_interconnect_0_avalon_st_adapter.v
|
// niosII_mm_interconnect_0_avalon_st_adapter.v
|
||||||
|
|
||||||
// This file was auto-generated from altera_avalon_st_adapter_hw.tcl. If you edit it your changes
|
// This file was auto-generated from altera_avalon_st_adapter_hw.tcl. If you edit it your changes
|
||||||
// will probably be lost.
|
// will probably be lost.
|
||||||
//
|
//
|
||||||
// Generated using ACDS version 18.1 625
|
// Generated using ACDS version 18.1 625
|
||||||
|
|
||||||
`timescale 1 ps / 1 ps
|
`timescale 1 ps / 1 ps
|
||||||
module niosII_mm_interconnect_0_avalon_st_adapter #(
|
module niosII_mm_interconnect_0_avalon_st_adapter #(
|
||||||
parameter inBitsPerSymbol = 34,
|
parameter inBitsPerSymbol = 34,
|
||||||
parameter inUsePackets = 0,
|
parameter inUsePackets = 0,
|
||||||
parameter inDataWidth = 34,
|
parameter inDataWidth = 34,
|
||||||
|
@ -23,7 +23,7 @@ module niosII_mm_interconnect_0_avalon_st_adapter #(
|
||||||
parameter outUseValid = 1,
|
parameter outUseValid = 1,
|
||||||
parameter outUseReady = 1,
|
parameter outUseReady = 1,
|
||||||
parameter outReadyLatency = 0
|
parameter outReadyLatency = 0
|
||||||
) (
|
) (
|
||||||
input wire in_clk_0_clk, // in_clk_0.clk
|
input wire in_clk_0_clk, // in_clk_0.clk
|
||||||
input wire in_rst_0_reset, // in_rst_0.reset
|
input wire in_rst_0_reset, // in_rst_0.reset
|
||||||
input wire [33:0] in_0_data, // in_0.data
|
input wire [33:0] in_0_data, // in_0.data
|
||||||
|
@ -33,14 +33,14 @@ module niosII_mm_interconnect_0_avalon_st_adapter #(
|
||||||
output wire out_0_valid, // .valid
|
output wire out_0_valid, // .valid
|
||||||
input wire out_0_ready, // .ready
|
input wire out_0_ready, // .ready
|
||||||
output wire [0:0] out_0_error // .error
|
output wire [0:0] out_0_error // .error
|
||||||
);
|
);
|
||||||
|
|
||||||
generate
|
generate
|
||||||
// If any of the display statements (or deliberately broken
|
// If any of the display statements (or deliberately broken
|
||||||
// instantiations) within this generate block triggers then this module
|
// instantiations) within this generate block triggers then this module
|
||||||
// has been instantiated this module with a set of parameters different
|
// has been instantiated this module with a set of parameters different
|
||||||
// from those it was generated for. This will usually result in a
|
// from those it was generated for. This will usually result in a
|
||||||
// non-functioning system.
|
// non-functioning system.
|
||||||
if (inBitsPerSymbol != 34)
|
if (inBitsPerSymbol != 34)
|
||||||
begin
|
begin
|
||||||
initial begin
|
initial begin
|
||||||
|
@ -185,8 +185,8 @@ module niosII_mm_interconnect_0_avalon_st_adapter #(
|
||||||
instantiated_with_wrong_parameters_error_see_comment_above
|
instantiated_with_wrong_parameters_error_see_comment_above
|
||||||
outreadylatency_check ( .error(1'b1) );
|
outreadylatency_check ( .error(1'b1) );
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
niosII_mm_interconnect_0_avalon_st_adapter_error_adapter_0 error_adapter_0 (
|
niosII_mm_interconnect_0_avalon_st_adapter_error_adapter_0 error_adapter_0 (
|
||||||
.clk (in_clk_0_clk), // clk.clk
|
.clk (in_clk_0_clk), // clk.clk
|
||||||
.reset_n (~in_rst_0_reset), // reset.reset_n
|
.reset_n (~in_rst_0_reset), // reset.reset_n
|
||||||
|
@ -197,6 +197,6 @@ module niosII_mm_interconnect_0_avalon_st_adapter #(
|
||||||
.out_valid (out_0_valid), // .valid
|
.out_valid (out_0_valid), // .valid
|
||||||
.out_ready (out_0_ready), // .ready
|
.out_ready (out_0_ready), // .ready
|
||||||
.out_error (out_0_error) // .error
|
.out_error (out_0_error) // .error
|
||||||
);
|
);
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -1,224 +1,224 @@
|
||||||
// (C) 2001-2018 Intel Corporation. All rights reserved.
|
// (C) 2001-2018 Intel Corporation. All rights reserved.
|
||||||
// Your use of Intel Corporation's design tools, logic functions and other
|
// Your use of Intel Corporation's design tools, logic functions and other
|
||||||
// software and tools, and its AMPP partner logic functions, and any output
|
// software and tools, and its AMPP partner logic functions, and any output
|
||||||
// files from any of the foregoing (including device programming or simulation
|
// files from any of the foregoing (including device programming or simulation
|
||||||
// files), and any associated documentation or information are expressly subject
|
// files), and any associated documentation or information are expressly subject
|
||||||
// to the terms and conditions of the Intel Program License Subscription
|
// to the terms and conditions of the Intel Program License Subscription
|
||||||
// Agreement, Intel FPGA IP License Agreement, or other applicable
|
// Agreement, Intel FPGA IP License Agreement, or other applicable
|
||||||
// license agreement, including, without limitation, that your use is for the
|
// license agreement, including, without limitation, that your use is for the
|
||||||
// sole purpose of programming logic devices manufactured by Intel and sold by
|
// sole purpose of programming logic devices manufactured by Intel and sold by
|
||||||
// Intel or its authorized distributors. Please refer to the applicable
|
// Intel or its authorized distributors. Please refer to the applicable
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Your use of Altera Corporation's design tools, logic functions and other
|
// Your use of Altera Corporation's design tools, logic functions and other
|
||||||
// software and tools, and its AMPP partner logic functions, and any output
|
// software and tools, and its AMPP partner logic functions, and any output
|
||||||
// files any of the foregoing (including device programming or simulation
|
// files any of the foregoing (including device programming or simulation
|
||||||
// files), and any associated documentation or information are expressly subject
|
// files), and any associated documentation or information are expressly subject
|
||||||
// to the terms and conditions of the Altera Program License Subscription
|
// to the terms and conditions of the Altera Program License Subscription
|
||||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||||
// license agreement, including, without limitation, that your use is for the
|
// license agreement, including, without limitation, that your use is for the
|
||||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||||
// Altera or its authorized distributors. Please refer to the applicable
|
// Altera or its authorized distributors. Please refer to the applicable
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_router/altera_merlin_router.sv.terp#1 $
|
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_router/altera_merlin_router.sv.terp#1 $
|
||||||
// $Revision: #1 $
|
// $Revision: #1 $
|
||||||
// $Date: 2018/07/18 $
|
// $Date: 2018/07/18 $
|
||||||
// $Author: psgswbuild $
|
// $Author: psgswbuild $
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Merlin Router
|
// Merlin Router
|
||||||
//
|
//
|
||||||
// Asserts the appropriate one-hot encoded channel based on
|
// Asserts the appropriate one-hot encoded channel based on
|
||||||
// either (a) the address or (b) the dest id. The DECODER_TYPE
|
// either (a) the address or (b) the dest id. The DECODER_TYPE
|
||||||
// parameter controls this behaviour. 0 means address decoder,
|
// parameter controls this behaviour. 0 means address decoder,
|
||||||
// 1 means dest id decoder.
|
// 1 means dest id decoder.
|
||||||
//
|
//
|
||||||
// In the case of (a), it also sets the destination id.
|
// In the case of (a), it also sets the destination id.
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
|
|
||||||
`timescale 1 ns / 1 ns
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
module niosII_mm_interconnect_0_router_004_default_decode
|
module niosII_mm_interconnect_0_router_004_default_decode
|
||||||
#(
|
#(
|
||||||
parameter DEFAULT_CHANNEL = 0,
|
parameter DEFAULT_CHANNEL = 0,
|
||||||
DEFAULT_WR_CHANNEL = -1,
|
DEFAULT_WR_CHANNEL = -1,
|
||||||
DEFAULT_RD_CHANNEL = -1,
|
DEFAULT_RD_CHANNEL = -1,
|
||||||
DEFAULT_DESTID = 0
|
DEFAULT_DESTID = 0
|
||||||
)
|
)
|
||||||
(output [80 - 78 : 0] default_destination_id,
|
(output [80 - 78 : 0] default_destination_id,
|
||||||
output [7-1 : 0] default_wr_channel,
|
output [7-1 : 0] default_wr_channel,
|
||||||
output [7-1 : 0] default_rd_channel,
|
output [7-1 : 0] default_rd_channel,
|
||||||
output [7-1 : 0] default_src_channel
|
output [7-1 : 0] default_src_channel
|
||||||
);
|
);
|
||||||
|
|
||||||
assign default_destination_id =
|
assign default_destination_id =
|
||||||
DEFAULT_DESTID[80 - 78 : 0];
|
DEFAULT_DESTID[80 - 78 : 0];
|
||||||
|
|
||||||
generate
|
generate
|
||||||
if (DEFAULT_CHANNEL == -1) begin : no_default_channel_assignment
|
if (DEFAULT_CHANNEL == -1) begin : no_default_channel_assignment
|
||||||
assign default_src_channel = '0;
|
assign default_src_channel = '0;
|
||||||
end
|
end
|
||||||
else begin : default_channel_assignment
|
else begin : default_channel_assignment
|
||||||
assign default_src_channel = 7'b1 << DEFAULT_CHANNEL;
|
assign default_src_channel = 7'b1 << DEFAULT_CHANNEL;
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
generate
|
generate
|
||||||
if (DEFAULT_RD_CHANNEL == -1) begin : no_default_rw_channel_assignment
|
if (DEFAULT_RD_CHANNEL == -1) begin : no_default_rw_channel_assignment
|
||||||
assign default_wr_channel = '0;
|
assign default_wr_channel = '0;
|
||||||
assign default_rd_channel = '0;
|
assign default_rd_channel = '0;
|
||||||
end
|
end
|
||||||
else begin : default_rw_channel_assignment
|
else begin : default_rw_channel_assignment
|
||||||
assign default_wr_channel = 7'b1 << DEFAULT_WR_CHANNEL;
|
assign default_wr_channel = 7'b1 << DEFAULT_WR_CHANNEL;
|
||||||
assign default_rd_channel = 7'b1 << DEFAULT_RD_CHANNEL;
|
assign default_rd_channel = 7'b1 << DEFAULT_RD_CHANNEL;
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
module niosII_mm_interconnect_0_router_004
|
module niosII_mm_interconnect_0_router_004
|
||||||
(
|
(
|
||||||
// -------------------
|
// -------------------
|
||||||
// Clock & Reset
|
// Clock & Reset
|
||||||
// -------------------
|
// -------------------
|
||||||
input clk,
|
input clk,
|
||||||
input reset,
|
input reset,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Command Sink (Input)
|
// Command Sink (Input)
|
||||||
// -------------------
|
// -------------------
|
||||||
input sink_valid,
|
input sink_valid,
|
||||||
input [94-1 : 0] sink_data,
|
input [94-1 : 0] sink_data,
|
||||||
input sink_startofpacket,
|
input sink_startofpacket,
|
||||||
input sink_endofpacket,
|
input sink_endofpacket,
|
||||||
output sink_ready,
|
output sink_ready,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Command Source (Output)
|
// Command Source (Output)
|
||||||
// -------------------
|
// -------------------
|
||||||
output src_valid,
|
output src_valid,
|
||||||
output reg [94-1 : 0] src_data,
|
output reg [94-1 : 0] src_data,
|
||||||
output reg [7-1 : 0] src_channel,
|
output reg [7-1 : 0] src_channel,
|
||||||
output src_startofpacket,
|
output src_startofpacket,
|
||||||
output src_endofpacket,
|
output src_endofpacket,
|
||||||
input src_ready
|
input src_ready
|
||||||
);
|
);
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Local parameters and variables
|
// Local parameters and variables
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
localparam PKT_ADDR_H = 53;
|
localparam PKT_ADDR_H = 53;
|
||||||
localparam PKT_ADDR_L = 36;
|
localparam PKT_ADDR_L = 36;
|
||||||
localparam PKT_DEST_ID_H = 80;
|
localparam PKT_DEST_ID_H = 80;
|
||||||
localparam PKT_DEST_ID_L = 78;
|
localparam PKT_DEST_ID_L = 78;
|
||||||
localparam PKT_PROTECTION_H = 84;
|
localparam PKT_PROTECTION_H = 84;
|
||||||
localparam PKT_PROTECTION_L = 82;
|
localparam PKT_PROTECTION_L = 82;
|
||||||
localparam ST_DATA_W = 94;
|
localparam ST_DATA_W = 94;
|
||||||
localparam ST_CHANNEL_W = 7;
|
localparam ST_CHANNEL_W = 7;
|
||||||
localparam DECODER_TYPE = 1;
|
localparam DECODER_TYPE = 1;
|
||||||
|
|
||||||
localparam PKT_TRANS_WRITE = 56;
|
localparam PKT_TRANS_WRITE = 56;
|
||||||
localparam PKT_TRANS_READ = 57;
|
localparam PKT_TRANS_READ = 57;
|
||||||
|
|
||||||
localparam PKT_ADDR_W = PKT_ADDR_H-PKT_ADDR_L + 1;
|
localparam PKT_ADDR_W = PKT_ADDR_H-PKT_ADDR_L + 1;
|
||||||
localparam PKT_DEST_ID_W = PKT_DEST_ID_H-PKT_DEST_ID_L + 1;
|
localparam PKT_DEST_ID_W = PKT_DEST_ID_H-PKT_DEST_ID_L + 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Figure out the number of bits to mask off for each slave span
|
// Figure out the number of bits to mask off for each slave span
|
||||||
// during address decoding
|
// during address decoding
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Work out which address bits are significant based on the
|
// Work out which address bits are significant based on the
|
||||||
// address range of the slaves. If the required width is too
|
// address range of the slaves. If the required width is too
|
||||||
// large or too small, we use the address field width instead.
|
// large or too small, we use the address field width instead.
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
localparam ADDR_RANGE = 64'h0;
|
localparam ADDR_RANGE = 64'h0;
|
||||||
localparam RANGE_ADDR_WIDTH = log2ceil(ADDR_RANGE);
|
localparam RANGE_ADDR_WIDTH = log2ceil(ADDR_RANGE);
|
||||||
localparam OPTIMIZED_ADDR_H = (RANGE_ADDR_WIDTH > PKT_ADDR_W) ||
|
localparam OPTIMIZED_ADDR_H = (RANGE_ADDR_WIDTH > PKT_ADDR_W) ||
|
||||||
(RANGE_ADDR_WIDTH == 0) ?
|
(RANGE_ADDR_WIDTH == 0) ?
|
||||||
PKT_ADDR_H :
|
PKT_ADDR_H :
|
||||||
PKT_ADDR_L + RANGE_ADDR_WIDTH - 1;
|
PKT_ADDR_L + RANGE_ADDR_WIDTH - 1;
|
||||||
|
|
||||||
localparam RG = RANGE_ADDR_WIDTH;
|
localparam RG = RANGE_ADDR_WIDTH;
|
||||||
localparam REAL_ADDRESS_RANGE = OPTIMIZED_ADDR_H - PKT_ADDR_L;
|
localparam REAL_ADDRESS_RANGE = OPTIMIZED_ADDR_H - PKT_ADDR_L;
|
||||||
|
|
||||||
reg [PKT_DEST_ID_W-1 : 0] destid;
|
reg [PKT_DEST_ID_W-1 : 0] destid;
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Pass almost everything through, untouched
|
// Pass almost everything through, untouched
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
assign sink_ready = src_ready;
|
assign sink_ready = src_ready;
|
||||||
assign src_valid = sink_valid;
|
assign src_valid = sink_valid;
|
||||||
assign src_startofpacket = sink_startofpacket;
|
assign src_startofpacket = sink_startofpacket;
|
||||||
assign src_endofpacket = sink_endofpacket;
|
assign src_endofpacket = sink_endofpacket;
|
||||||
wire [7-1 : 0] default_src_channel;
|
wire [7-1 : 0] default_src_channel;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Write and read transaction signals
|
// Write and read transaction signals
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
wire read_transaction;
|
wire read_transaction;
|
||||||
assign read_transaction = sink_data[PKT_TRANS_READ];
|
assign read_transaction = sink_data[PKT_TRANS_READ];
|
||||||
|
|
||||||
|
|
||||||
niosII_mm_interconnect_0_router_004_default_decode the_default_decode(
|
niosII_mm_interconnect_0_router_004_default_decode the_default_decode(
|
||||||
.default_destination_id (),
|
.default_destination_id (),
|
||||||
.default_wr_channel (),
|
.default_wr_channel (),
|
||||||
.default_rd_channel (),
|
.default_rd_channel (),
|
||||||
.default_src_channel (default_src_channel)
|
.default_src_channel (default_src_channel)
|
||||||
);
|
);
|
||||||
|
|
||||||
always @* begin
|
always @* begin
|
||||||
src_data = sink_data;
|
src_data = sink_data;
|
||||||
src_channel = default_src_channel;
|
src_channel = default_src_channel;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
// DestinationID Decoder
|
// DestinationID Decoder
|
||||||
// Sets the channel based on the destination ID.
|
// Sets the channel based on the destination ID.
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
destid = sink_data[PKT_DEST_ID_H : PKT_DEST_ID_L];
|
destid = sink_data[PKT_DEST_ID_H : PKT_DEST_ID_L];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (destid == 0 ) begin
|
if (destid == 0 ) begin
|
||||||
src_channel = 7'b01;
|
src_channel = 7'b01;
|
||||||
end
|
end
|
||||||
|
|
||||||
if (destid == 1 && read_transaction) begin
|
if (destid == 1 && read_transaction) begin
|
||||||
src_channel = 7'b10;
|
src_channel = 7'b10;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
// Ceil(log2()) function
|
// Ceil(log2()) function
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
function integer log2ceil;
|
function integer log2ceil;
|
||||||
input reg[65:0] val;
|
input reg[65:0] val;
|
||||||
reg [65:0] i;
|
reg [65:0] i;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
i = 1;
|
i = 1;
|
||||||
log2ceil = 0;
|
log2ceil = 0;
|
||||||
|
|
||||||
while (i < val) begin
|
while (i < val) begin
|
||||||
log2ceil = log2ceil + 1;
|
log2ceil = log2ceil + 1;
|
||||||
i = i << 1;
|
i = i << 1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,220 +1,220 @@
|
||||||
// (C) 2001-2018 Intel Corporation. All rights reserved.
|
// (C) 2001-2018 Intel Corporation. All rights reserved.
|
||||||
// Your use of Intel Corporation's design tools, logic functions and other
|
// Your use of Intel Corporation's design tools, logic functions and other
|
||||||
// software and tools, and its AMPP partner logic functions, and any output
|
// software and tools, and its AMPP partner logic functions, and any output
|
||||||
// files from any of the foregoing (including device programming or simulation
|
// files from any of the foregoing (including device programming or simulation
|
||||||
// files), and any associated documentation or information are expressly subject
|
// files), and any associated documentation or information are expressly subject
|
||||||
// to the terms and conditions of the Intel Program License Subscription
|
// to the terms and conditions of the Intel Program License Subscription
|
||||||
// Agreement, Intel FPGA IP License Agreement, or other applicable
|
// Agreement, Intel FPGA IP License Agreement, or other applicable
|
||||||
// license agreement, including, without limitation, that your use is for the
|
// license agreement, including, without limitation, that your use is for the
|
||||||
// sole purpose of programming logic devices manufactured by Intel and sold by
|
// sole purpose of programming logic devices manufactured by Intel and sold by
|
||||||
// Intel or its authorized distributors. Please refer to the applicable
|
// Intel or its authorized distributors. Please refer to the applicable
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Your use of Altera Corporation's design tools, logic functions and other
|
// Your use of Altera Corporation's design tools, logic functions and other
|
||||||
// software and tools, and its AMPP partner logic functions, and any output
|
// software and tools, and its AMPP partner logic functions, and any output
|
||||||
// files any of the foregoing (including device programming or simulation
|
// files any of the foregoing (including device programming or simulation
|
||||||
// files), and any associated documentation or information are expressly subject
|
// files), and any associated documentation or information are expressly subject
|
||||||
// to the terms and conditions of the Altera Program License Subscription
|
// to the terms and conditions of the Altera Program License Subscription
|
||||||
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
// Agreement, Altera MegaCore Function License Agreement, or other applicable
|
||||||
// license agreement, including, without limitation, that your use is for the
|
// license agreement, including, without limitation, that your use is for the
|
||||||
// sole purpose of programming logic devices manufactured by Altera and sold by
|
// sole purpose of programming logic devices manufactured by Altera and sold by
|
||||||
// Altera or its authorized distributors. Please refer to the applicable
|
// Altera or its authorized distributors. Please refer to the applicable
|
||||||
// agreement for further details.
|
// agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_router/altera_merlin_router.sv.terp#1 $
|
// $Id: //acds/rel/18.1std/ip/merlin/altera_merlin_router/altera_merlin_router.sv.terp#1 $
|
||||||
// $Revision: #1 $
|
// $Revision: #1 $
|
||||||
// $Date: 2018/07/18 $
|
// $Date: 2018/07/18 $
|
||||||
// $Author: psgswbuild $
|
// $Author: psgswbuild $
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Merlin Router
|
// Merlin Router
|
||||||
//
|
//
|
||||||
// Asserts the appropriate one-hot encoded channel based on
|
// Asserts the appropriate one-hot encoded channel based on
|
||||||
// either (a) the address or (b) the dest id. The DECODER_TYPE
|
// either (a) the address or (b) the dest id. The DECODER_TYPE
|
||||||
// parameter controls this behaviour. 0 means address decoder,
|
// parameter controls this behaviour. 0 means address decoder,
|
||||||
// 1 means dest id decoder.
|
// 1 means dest id decoder.
|
||||||
//
|
//
|
||||||
// In the case of (a), it also sets the destination id.
|
// In the case of (a), it also sets the destination id.
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
|
|
||||||
`timescale 1 ns / 1 ns
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
module niosII_mm_interconnect_0_router_008_default_decode
|
module niosII_mm_interconnect_0_router_008_default_decode
|
||||||
#(
|
#(
|
||||||
parameter DEFAULT_CHANNEL = 0,
|
parameter DEFAULT_CHANNEL = 0,
|
||||||
DEFAULT_WR_CHANNEL = -1,
|
DEFAULT_WR_CHANNEL = -1,
|
||||||
DEFAULT_RD_CHANNEL = -1,
|
DEFAULT_RD_CHANNEL = -1,
|
||||||
DEFAULT_DESTID = 1
|
DEFAULT_DESTID = 1
|
||||||
)
|
)
|
||||||
(output [80 - 78 : 0] default_destination_id,
|
(output [80 - 78 : 0] default_destination_id,
|
||||||
output [7-1 : 0] default_wr_channel,
|
output [7-1 : 0] default_wr_channel,
|
||||||
output [7-1 : 0] default_rd_channel,
|
output [7-1 : 0] default_rd_channel,
|
||||||
output [7-1 : 0] default_src_channel
|
output [7-1 : 0] default_src_channel
|
||||||
);
|
);
|
||||||
|
|
||||||
assign default_destination_id =
|
assign default_destination_id =
|
||||||
DEFAULT_DESTID[80 - 78 : 0];
|
DEFAULT_DESTID[80 - 78 : 0];
|
||||||
|
|
||||||
generate
|
generate
|
||||||
if (DEFAULT_CHANNEL == -1) begin : no_default_channel_assignment
|
if (DEFAULT_CHANNEL == -1) begin : no_default_channel_assignment
|
||||||
assign default_src_channel = '0;
|
assign default_src_channel = '0;
|
||||||
end
|
end
|
||||||
else begin : default_channel_assignment
|
else begin : default_channel_assignment
|
||||||
assign default_src_channel = 7'b1 << DEFAULT_CHANNEL;
|
assign default_src_channel = 7'b1 << DEFAULT_CHANNEL;
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
generate
|
generate
|
||||||
if (DEFAULT_RD_CHANNEL == -1) begin : no_default_rw_channel_assignment
|
if (DEFAULT_RD_CHANNEL == -1) begin : no_default_rw_channel_assignment
|
||||||
assign default_wr_channel = '0;
|
assign default_wr_channel = '0;
|
||||||
assign default_rd_channel = '0;
|
assign default_rd_channel = '0;
|
||||||
end
|
end
|
||||||
else begin : default_rw_channel_assignment
|
else begin : default_rw_channel_assignment
|
||||||
assign default_wr_channel = 7'b1 << DEFAULT_WR_CHANNEL;
|
assign default_wr_channel = 7'b1 << DEFAULT_WR_CHANNEL;
|
||||||
assign default_rd_channel = 7'b1 << DEFAULT_RD_CHANNEL;
|
assign default_rd_channel = 7'b1 << DEFAULT_RD_CHANNEL;
|
||||||
end
|
end
|
||||||
endgenerate
|
endgenerate
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
module niosII_mm_interconnect_0_router_008
|
module niosII_mm_interconnect_0_router_008
|
||||||
(
|
(
|
||||||
// -------------------
|
// -------------------
|
||||||
// Clock & Reset
|
// Clock & Reset
|
||||||
// -------------------
|
// -------------------
|
||||||
input clk,
|
input clk,
|
||||||
input reset,
|
input reset,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Command Sink (Input)
|
// Command Sink (Input)
|
||||||
// -------------------
|
// -------------------
|
||||||
input sink_valid,
|
input sink_valid,
|
||||||
input [94-1 : 0] sink_data,
|
input [94-1 : 0] sink_data,
|
||||||
input sink_startofpacket,
|
input sink_startofpacket,
|
||||||
input sink_endofpacket,
|
input sink_endofpacket,
|
||||||
output sink_ready,
|
output sink_ready,
|
||||||
|
|
||||||
// -------------------
|
// -------------------
|
||||||
// Command Source (Output)
|
// Command Source (Output)
|
||||||
// -------------------
|
// -------------------
|
||||||
output src_valid,
|
output src_valid,
|
||||||
output reg [94-1 : 0] src_data,
|
output reg [94-1 : 0] src_data,
|
||||||
output reg [7-1 : 0] src_channel,
|
output reg [7-1 : 0] src_channel,
|
||||||
output src_startofpacket,
|
output src_startofpacket,
|
||||||
output src_endofpacket,
|
output src_endofpacket,
|
||||||
input src_ready
|
input src_ready
|
||||||
);
|
);
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Local parameters and variables
|
// Local parameters and variables
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
localparam PKT_ADDR_H = 53;
|
localparam PKT_ADDR_H = 53;
|
||||||
localparam PKT_ADDR_L = 36;
|
localparam PKT_ADDR_L = 36;
|
||||||
localparam PKT_DEST_ID_H = 80;
|
localparam PKT_DEST_ID_H = 80;
|
||||||
localparam PKT_DEST_ID_L = 78;
|
localparam PKT_DEST_ID_L = 78;
|
||||||
localparam PKT_PROTECTION_H = 84;
|
localparam PKT_PROTECTION_H = 84;
|
||||||
localparam PKT_PROTECTION_L = 82;
|
localparam PKT_PROTECTION_L = 82;
|
||||||
localparam ST_DATA_W = 94;
|
localparam ST_DATA_W = 94;
|
||||||
localparam ST_CHANNEL_W = 7;
|
localparam ST_CHANNEL_W = 7;
|
||||||
localparam DECODER_TYPE = 1;
|
localparam DECODER_TYPE = 1;
|
||||||
|
|
||||||
localparam PKT_TRANS_WRITE = 56;
|
localparam PKT_TRANS_WRITE = 56;
|
||||||
localparam PKT_TRANS_READ = 57;
|
localparam PKT_TRANS_READ = 57;
|
||||||
|
|
||||||
localparam PKT_ADDR_W = PKT_ADDR_H-PKT_ADDR_L + 1;
|
localparam PKT_ADDR_W = PKT_ADDR_H-PKT_ADDR_L + 1;
|
||||||
localparam PKT_DEST_ID_W = PKT_DEST_ID_H-PKT_DEST_ID_L + 1;
|
localparam PKT_DEST_ID_W = PKT_DEST_ID_H-PKT_DEST_ID_L + 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Figure out the number of bits to mask off for each slave span
|
// Figure out the number of bits to mask off for each slave span
|
||||||
// during address decoding
|
// during address decoding
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Work out which address bits are significant based on the
|
// Work out which address bits are significant based on the
|
||||||
// address range of the slaves. If the required width is too
|
// address range of the slaves. If the required width is too
|
||||||
// large or too small, we use the address field width instead.
|
// large or too small, we use the address field width instead.
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
localparam ADDR_RANGE = 64'h0;
|
localparam ADDR_RANGE = 64'h0;
|
||||||
localparam RANGE_ADDR_WIDTH = log2ceil(ADDR_RANGE);
|
localparam RANGE_ADDR_WIDTH = log2ceil(ADDR_RANGE);
|
||||||
localparam OPTIMIZED_ADDR_H = (RANGE_ADDR_WIDTH > PKT_ADDR_W) ||
|
localparam OPTIMIZED_ADDR_H = (RANGE_ADDR_WIDTH > PKT_ADDR_W) ||
|
||||||
(RANGE_ADDR_WIDTH == 0) ?
|
(RANGE_ADDR_WIDTH == 0) ?
|
||||||
PKT_ADDR_H :
|
PKT_ADDR_H :
|
||||||
PKT_ADDR_L + RANGE_ADDR_WIDTH - 1;
|
PKT_ADDR_L + RANGE_ADDR_WIDTH - 1;
|
||||||
|
|
||||||
localparam RG = RANGE_ADDR_WIDTH;
|
localparam RG = RANGE_ADDR_WIDTH;
|
||||||
localparam REAL_ADDRESS_RANGE = OPTIMIZED_ADDR_H - PKT_ADDR_L;
|
localparam REAL_ADDRESS_RANGE = OPTIMIZED_ADDR_H - PKT_ADDR_L;
|
||||||
|
|
||||||
reg [PKT_DEST_ID_W-1 : 0] destid;
|
reg [PKT_DEST_ID_W-1 : 0] destid;
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Pass almost everything through, untouched
|
// Pass almost everything through, untouched
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
assign sink_ready = src_ready;
|
assign sink_ready = src_ready;
|
||||||
assign src_valid = sink_valid;
|
assign src_valid = sink_valid;
|
||||||
assign src_startofpacket = sink_startofpacket;
|
assign src_startofpacket = sink_startofpacket;
|
||||||
assign src_endofpacket = sink_endofpacket;
|
assign src_endofpacket = sink_endofpacket;
|
||||||
wire [7-1 : 0] default_src_channel;
|
wire [7-1 : 0] default_src_channel;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
// Write and read transaction signals
|
// Write and read transaction signals
|
||||||
// -------------------------------------------------------
|
// -------------------------------------------------------
|
||||||
wire read_transaction;
|
wire read_transaction;
|
||||||
assign read_transaction = sink_data[PKT_TRANS_READ];
|
assign read_transaction = sink_data[PKT_TRANS_READ];
|
||||||
|
|
||||||
|
|
||||||
niosII_mm_interconnect_0_router_008_default_decode the_default_decode(
|
niosII_mm_interconnect_0_router_008_default_decode the_default_decode(
|
||||||
.default_destination_id (),
|
.default_destination_id (),
|
||||||
.default_wr_channel (),
|
.default_wr_channel (),
|
||||||
.default_rd_channel (),
|
.default_rd_channel (),
|
||||||
.default_src_channel (default_src_channel)
|
.default_src_channel (default_src_channel)
|
||||||
);
|
);
|
||||||
|
|
||||||
always @* begin
|
always @* begin
|
||||||
src_data = sink_data;
|
src_data = sink_data;
|
||||||
src_channel = default_src_channel;
|
src_channel = default_src_channel;
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
// DestinationID Decoder
|
// DestinationID Decoder
|
||||||
// Sets the channel based on the destination ID.
|
// Sets the channel based on the destination ID.
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
destid = sink_data[PKT_DEST_ID_H : PKT_DEST_ID_L];
|
destid = sink_data[PKT_DEST_ID_H : PKT_DEST_ID_L];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (destid == 1 && read_transaction) begin
|
if (destid == 1 && read_transaction) begin
|
||||||
src_channel = 7'b1;
|
src_channel = 7'b1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
// Ceil(log2()) function
|
// Ceil(log2()) function
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
function integer log2ceil;
|
function integer log2ceil;
|
||||||
input reg[65:0] val;
|
input reg[65:0] val;
|
||||||
reg [65:0] i;
|
reg [65:0] i;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
i = 1;
|
i = 1;
|
||||||
log2ceil = 0;
|
log2ceil = 0;
|
||||||
|
|
||||||
while (i < val) begin
|
while (i < val) begin
|
||||||
log2ceil = log2ceil + 1;
|
log2ceil = log2ceil + 1;
|
||||||
i = i << 1;
|
i = i << 1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,222 +1,222 @@
|
||||||
// megafunction wizard: %RAM: 2-PORT%
|
// megafunction wizard: %RAM: 2-PORT%
|
||||||
// GENERATION: STANDARD
|
// GENERATION: STANDARD
|
||||||
// VERSION: WM1.0
|
// VERSION: WM1.0
|
||||||
// MODULE: altsyncram
|
// MODULE: altsyncram
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// File Name: periodram.v
|
// File Name: periodram.v
|
||||||
// Megafunction Name(s):
|
// Megafunction Name(s):
|
||||||
// altsyncram
|
// altsyncram
|
||||||
//
|
//
|
||||||
// Simulation Library Files(s):
|
// Simulation Library Files(s):
|
||||||
// altera_mf
|
// altera_mf
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// ************************************************************
|
// ************************************************************
|
||||||
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
|
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
|
||||||
//
|
//
|
||||||
// 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
// 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
||||||
// ************************************************************
|
// ************************************************************
|
||||||
|
|
||||||
|
|
||||||
//Copyright (C) 2018 Intel Corporation. All rights reserved.
|
//Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
//Your use of Intel Corporation's design tools, logic functions
|
//Your use of Intel Corporation's design tools, logic functions
|
||||||
//and other software and tools, and its AMPP partner logic
|
//and other software and tools, and its AMPP partner logic
|
||||||
//functions, and any output files from any of the foregoing
|
//functions, and any output files from any of the foregoing
|
||||||
//(including device programming or simulation files), and any
|
//(including device programming or simulation files), and any
|
||||||
//associated documentation or information are expressly subject
|
//associated documentation or information are expressly subject
|
||||||
//to the terms and conditions of the Intel Program License
|
//to the terms and conditions of the Intel Program License
|
||||||
//Subscription Agreement, the Intel Quartus Prime License Agreement,
|
//Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||||
//the Intel FPGA IP License Agreement, or other applicable license
|
//the Intel FPGA IP License Agreement, or other applicable license
|
||||||
//agreement, including, without limitation, that your use is for
|
//agreement, including, without limitation, that your use is for
|
||||||
//the sole purpose of programming logic devices manufactured by
|
//the sole purpose of programming logic devices manufactured by
|
||||||
//Intel and sold by Intel or its authorized distributors. Please
|
//Intel and sold by Intel or its authorized distributors. Please
|
||||||
//refer to the applicable agreement for further details.
|
//refer to the applicable agreement for further details.
|
||||||
|
|
||||||
|
|
||||||
// synopsys translate_off
|
// synopsys translate_off
|
||||||
`timescale 1 ps / 1 ps
|
`timescale 1 ps / 1 ps
|
||||||
// synopsys translate_on
|
// synopsys translate_on
|
||||||
module periodram (
|
module periodram (
|
||||||
clock,
|
clock,
|
||||||
data,
|
data,
|
||||||
rdaddress,
|
rdaddress,
|
||||||
wraddress,
|
wraddress,
|
||||||
wren,
|
wren,
|
||||||
q);
|
q);
|
||||||
|
|
||||||
input clock;
|
input clock;
|
||||||
input [31:0] data;
|
input [31:0] data;
|
||||||
input [3:0] rdaddress;
|
input [3:0] rdaddress;
|
||||||
input [3:0] wraddress;
|
input [3:0] wraddress;
|
||||||
input wren;
|
input wren;
|
||||||
output [31:0] q;
|
output [31:0] q;
|
||||||
`ifndef ALTERA_RESERVED_QIS
|
`ifndef ALTERA_RESERVED_QIS
|
||||||
// synopsys translate_off
|
// synopsys translate_off
|
||||||
`endif
|
`endif
|
||||||
tri1 clock;
|
tri1 clock;
|
||||||
tri0 wren;
|
tri0 wren;
|
||||||
`ifndef ALTERA_RESERVED_QIS
|
`ifndef ALTERA_RESERVED_QIS
|
||||||
// synopsys translate_on
|
// synopsys translate_on
|
||||||
`endif
|
`endif
|
||||||
|
|
||||||
wire [31:0] sub_wire0;
|
wire [31:0] sub_wire0;
|
||||||
wire [31:0] q = sub_wire0[31:0];
|
wire [31:0] q = sub_wire0[31:0];
|
||||||
|
|
||||||
altsyncram altsyncram_component (
|
altsyncram altsyncram_component (
|
||||||
.address_a (wraddress),
|
.address_a (wraddress),
|
||||||
.address_b (rdaddress),
|
.address_b (rdaddress),
|
||||||
.clock0 (clock),
|
.clock0 (clock),
|
||||||
.data_a (data),
|
.data_a (data),
|
||||||
.wren_a (wren),
|
.wren_a (wren),
|
||||||
.q_b (sub_wire0),
|
.q_b (sub_wire0),
|
||||||
.aclr0 (1'b0),
|
.aclr0 (1'b0),
|
||||||
.aclr1 (1'b0),
|
.aclr1 (1'b0),
|
||||||
.addressstall_a (1'b0),
|
.addressstall_a (1'b0),
|
||||||
.addressstall_b (1'b0),
|
.addressstall_b (1'b0),
|
||||||
.byteena_a (1'b1),
|
.byteena_a (1'b1),
|
||||||
.byteena_b (1'b1),
|
.byteena_b (1'b1),
|
||||||
.clock1 (1'b1),
|
.clock1 (1'b1),
|
||||||
.clocken0 (1'b1),
|
.clocken0 (1'b1),
|
||||||
.clocken1 (1'b1),
|
.clocken1 (1'b1),
|
||||||
.clocken2 (1'b1),
|
.clocken2 (1'b1),
|
||||||
.clocken3 (1'b1),
|
.clocken3 (1'b1),
|
||||||
.data_b ({32{1'b1}}),
|
.data_b ({32{1'b1}}),
|
||||||
.eccstatus (),
|
.eccstatus (),
|
||||||
.q_a (),
|
.q_a (),
|
||||||
.rden_a (1'b1),
|
.rden_a (1'b1),
|
||||||
.rden_b (1'b1),
|
.rden_b (1'b1),
|
||||||
.wren_b (1'b0));
|
.wren_b (1'b0));
|
||||||
defparam
|
defparam
|
||||||
altsyncram_component.address_aclr_b = "NONE",
|
altsyncram_component.address_aclr_b = "NONE",
|
||||||
altsyncram_component.address_reg_b = "CLOCK0",
|
altsyncram_component.address_reg_b = "CLOCK0",
|
||||||
altsyncram_component.clock_enable_input_a = "BYPASS",
|
altsyncram_component.clock_enable_input_a = "BYPASS",
|
||||||
altsyncram_component.clock_enable_input_b = "BYPASS",
|
altsyncram_component.clock_enable_input_b = "BYPASS",
|
||||||
altsyncram_component.clock_enable_output_b = "BYPASS",
|
altsyncram_component.clock_enable_output_b = "BYPASS",
|
||||||
`ifdef NO_PLI
|
`ifdef NO_PLI
|
||||||
altsyncram_component.init_file = "periodram.rif"
|
altsyncram_component.init_file = "periodram.rif"
|
||||||
`else
|
`else
|
||||||
altsyncram_component.init_file = "periodram.hex"
|
altsyncram_component.init_file = "periodram.hex"
|
||||||
`endif
|
`endif
|
||||||
,
|
,
|
||||||
altsyncram_component.init_file_layout = "PORT_B",
|
altsyncram_component.init_file_layout = "PORT_B",
|
||||||
altsyncram_component.intended_device_family = "Cyclone IV E",
|
altsyncram_component.intended_device_family = "Cyclone IV E",
|
||||||
altsyncram_component.lpm_type = "altsyncram",
|
altsyncram_component.lpm_type = "altsyncram",
|
||||||
altsyncram_component.numwords_a = 16,
|
altsyncram_component.numwords_a = 16,
|
||||||
altsyncram_component.numwords_b = 16,
|
altsyncram_component.numwords_b = 16,
|
||||||
altsyncram_component.operation_mode = "DUAL_PORT",
|
altsyncram_component.operation_mode = "DUAL_PORT",
|
||||||
altsyncram_component.outdata_aclr_b = "NONE",
|
altsyncram_component.outdata_aclr_b = "NONE",
|
||||||
altsyncram_component.outdata_reg_b = "UNREGISTERED",
|
altsyncram_component.outdata_reg_b = "UNREGISTERED",
|
||||||
altsyncram_component.power_up_uninitialized = "FALSE",
|
altsyncram_component.power_up_uninitialized = "FALSE",
|
||||||
altsyncram_component.read_during_write_mode_mixed_ports = "DONT_CARE",
|
altsyncram_component.read_during_write_mode_mixed_ports = "DONT_CARE",
|
||||||
altsyncram_component.widthad_a = 4,
|
altsyncram_component.widthad_a = 4,
|
||||||
altsyncram_component.widthad_b = 4,
|
altsyncram_component.widthad_b = 4,
|
||||||
altsyncram_component.width_a = 32,
|
altsyncram_component.width_a = 32,
|
||||||
altsyncram_component.width_b = 32,
|
altsyncram_component.width_b = 32,
|
||||||
altsyncram_component.width_byteena_a = 1;
|
altsyncram_component.width_byteena_a = 1;
|
||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// CNX file retrieval info
|
// CNX file retrieval info
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
|
// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0"
|
// Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0"
|
// Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0"
|
// Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0"
|
// Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
|
// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
|
||||||
// Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
|
// Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
|
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0"
|
// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
|
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0"
|
// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRdata NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRdata NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRq NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRq NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRrren NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRrren NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRwraddress NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRwraddress NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: CLRwren NUMERIC "0"
|
// Retrieval info: PRIVATE: CLRwren NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: Clock NUMERIC "0"
|
// Retrieval info: PRIVATE: Clock NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: Clock_A NUMERIC "0"
|
// Retrieval info: PRIVATE: Clock_A NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: Clock_B NUMERIC "0"
|
// Retrieval info: PRIVATE: Clock_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
|
// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "0"
|
// Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_B"
|
// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_B"
|
||||||
// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
|
// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
|
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
|
||||||
// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
|
// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
|
// Retrieval info: PRIVATE: JTAG_ID STRING "NONE"
|
||||||
// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
|
// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: MEMSIZE NUMERIC "512"
|
// Retrieval info: PRIVATE: MEMSIZE NUMERIC "512"
|
||||||
// Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0"
|
// Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: MIFfilename STRING "periodram.hex"
|
// Retrieval info: PRIVATE: MIFfilename STRING "periodram.hex"
|
||||||
// Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "2"
|
// Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "2"
|
||||||
// Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "0"
|
// Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
|
// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2"
|
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2"
|
||||||
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
|
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
|
||||||
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "3"
|
// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "3"
|
||||||
// Retrieval info: PRIVATE: REGdata NUMERIC "1"
|
// Retrieval info: PRIVATE: REGdata NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGq NUMERIC "1"
|
// Retrieval info: PRIVATE: REGq NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGrdaddress NUMERIC "1"
|
// Retrieval info: PRIVATE: REGrdaddress NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGrren NUMERIC "1"
|
// Retrieval info: PRIVATE: REGrren NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGwraddress NUMERIC "1"
|
// Retrieval info: PRIVATE: REGwraddress NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: REGwren NUMERIC "1"
|
// Retrieval info: PRIVATE: REGwren NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
|
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
|
||||||
// Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0"
|
// Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: UseDPRAM NUMERIC "1"
|
// Retrieval info: PRIVATE: UseDPRAM NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: VarWidth NUMERIC "1"
|
// Retrieval info: PRIVATE: VarWidth NUMERIC "1"
|
||||||
// Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "32"
|
// Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "32"
|
||||||
// Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "32"
|
// Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "32"
|
||||||
// Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "32"
|
// Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "32"
|
||||||
// Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "32"
|
// Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "32"
|
||||||
// Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "0"
|
// Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0"
|
// Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: enable NUMERIC "0"
|
// Retrieval info: PRIVATE: enable NUMERIC "0"
|
||||||
// Retrieval info: PRIVATE: rden NUMERIC "0"
|
// Retrieval info: PRIVATE: rden NUMERIC "0"
|
||||||
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
|
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
|
||||||
// Retrieval info: CONSTANT: ADDRESS_ACLR_B STRING "NONE"
|
// Retrieval info: CONSTANT: ADDRESS_ACLR_B STRING "NONE"
|
||||||
// Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK0"
|
// Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK0"
|
||||||
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
|
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
|
||||||
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS"
|
// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS"
|
||||||
// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS"
|
// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS"
|
||||||
// Retrieval info: CONSTANT: INIT_FILE STRING "periodram.hex"
|
// Retrieval info: CONSTANT: INIT_FILE STRING "periodram.hex"
|
||||||
// Retrieval info: CONSTANT: INIT_FILE_LAYOUT STRING "PORT_B"
|
// Retrieval info: CONSTANT: INIT_FILE_LAYOUT STRING "PORT_B"
|
||||||
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
|
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
|
||||||
// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
|
// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
|
||||||
// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "16"
|
// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "16"
|
||||||
// Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "16"
|
// Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "16"
|
||||||
// Retrieval info: CONSTANT: OPERATION_MODE STRING "DUAL_PORT"
|
// Retrieval info: CONSTANT: OPERATION_MODE STRING "DUAL_PORT"
|
||||||
// Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE"
|
// Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE"
|
||||||
// Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED"
|
// Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED"
|
||||||
// Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
|
// Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
|
||||||
// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_MIXED_PORTS STRING "DONT_CARE"
|
// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_MIXED_PORTS STRING "DONT_CARE"
|
||||||
// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "4"
|
// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "4"
|
||||||
// Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "4"
|
// Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "4"
|
||||||
// Retrieval info: CONSTANT: WIDTH_A NUMERIC "32"
|
// Retrieval info: CONSTANT: WIDTH_A NUMERIC "32"
|
||||||
// Retrieval info: CONSTANT: WIDTH_B NUMERIC "32"
|
// Retrieval info: CONSTANT: WIDTH_B NUMERIC "32"
|
||||||
// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
|
// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
|
||||||
// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
|
// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
|
||||||
// Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL "data[31..0]"
|
// Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL "data[31..0]"
|
||||||
// Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL "q[31..0]"
|
// Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL "q[31..0]"
|
||||||
// Retrieval info: USED_PORT: rdaddress 0 0 4 0 INPUT NODEFVAL "rdaddress[3..0]"
|
// Retrieval info: USED_PORT: rdaddress 0 0 4 0 INPUT NODEFVAL "rdaddress[3..0]"
|
||||||
// Retrieval info: USED_PORT: wraddress 0 0 4 0 INPUT NODEFVAL "wraddress[3..0]"
|
// Retrieval info: USED_PORT: wraddress 0 0 4 0 INPUT NODEFVAL "wraddress[3..0]"
|
||||||
// Retrieval info: USED_PORT: wren 0 0 0 0 INPUT GND "wren"
|
// Retrieval info: USED_PORT: wren 0 0 0 0 INPUT GND "wren"
|
||||||
// Retrieval info: CONNECT: @address_a 0 0 4 0 wraddress 0 0 4 0
|
// Retrieval info: CONNECT: @address_a 0 0 4 0 wraddress 0 0 4 0
|
||||||
// Retrieval info: CONNECT: @address_b 0 0 4 0 rdaddress 0 0 4 0
|
// Retrieval info: CONNECT: @address_b 0 0 4 0 rdaddress 0 0 4 0
|
||||||
// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
|
// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
|
||||||
// Retrieval info: CONNECT: @data_a 0 0 32 0 data 0 0 32 0
|
// Retrieval info: CONNECT: @data_a 0 0 32 0 data 0 0 32 0
|
||||||
// Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
|
// Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
|
||||||
// Retrieval info: CONNECT: q 0 0 32 0 @q_b 0 0 32 0
|
// Retrieval info: CONNECT: q 0 0 32 0 @q_b 0 0 32 0
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.v TRUE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.v TRUE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.inc FALSE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.inc FALSE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.cmp FALSE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.cmp FALSE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.bsf FALSE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram.bsf FALSE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram_inst.v TRUE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram_inst.v TRUE
|
||||||
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram_bb.v FALSE
|
// Retrieval info: GEN_FILE: TYPE_NORMAL periodram_bb.v FALSE
|
||||||
// Retrieval info: LIB_FILE: altera_mf
|
// Retrieval info: LIB_FILE: altera_mf
|
||||||
|
|
|
@ -7,33 +7,33 @@
|
||||||
description=""
|
description=""
|
||||||
tags=""
|
tags=""
|
||||||
categories="" />
|
categories="" />
|
||||||
<parameter name="bonusData"><![CDATA[bonusData
|
<parameter name="bonusData"><![CDATA[bonusData
|
||||||
{
|
{
|
||||||
element niosII_inst
|
element niosII_inst
|
||||||
{
|
{
|
||||||
datum _sortIndex
|
datum _sortIndex
|
||||||
{
|
{
|
||||||
value = "0";
|
value = "0";
|
||||||
type = "int";
|
type = "int";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
element niosII_inst_clk_bfm
|
element niosII_inst_clk_bfm
|
||||||
{
|
{
|
||||||
datum _sortIndex
|
datum _sortIndex
|
||||||
{
|
{
|
||||||
value = "1";
|
value = "1";
|
||||||
type = "int";
|
type = "int";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
element niosII_inst_reset_bfm
|
element niosII_inst_reset_bfm
|
||||||
{
|
{
|
||||||
datum _sortIndex
|
datum _sortIndex
|
||||||
{
|
{
|
||||||
value = "2";
|
value = "2";
|
||||||
type = "int";
|
type = "int";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]]></parameter>
|
]]></parameter>
|
||||||
<parameter name="clockCrossingAdapter" value="HANDSHAKE" />
|
<parameter name="clockCrossingAdapter" value="HANDSHAKE" />
|
||||||
<parameter name="device" value="EP4CE115F29C7" />
|
<parameter name="device" value="EP4CE115F29C7" />
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
# Your use of Intel Corporation's design tools, logic functions
|
# Your use of Intel Corporation's design tools, logic functions
|
||||||
# and other software and tools, and its AMPP partner logic
|
# and other software and tools, and its AMPP partner logic
|
||||||
# functions, and any output files from any of the foregoing
|
# functions, and any output files from any of the foregoing
|
||||||
# (including device programming or simulation files), and any
|
# (including device programming or simulation files), and any
|
||||||
# associated documentation or information are expressly subject
|
# associated documentation or information are expressly subject
|
||||||
# to the terms and conditions of the Intel Program License
|
# to the terms and conditions of the Intel Program License
|
||||||
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||||
# the Intel FPGA IP License Agreement, or other applicable license
|
# the Intel FPGA IP License Agreement, or other applicable license
|
||||||
# agreement, including, without limitation, that your use is for
|
# agreement, including, without limitation, that your use is for
|
||||||
# the sole purpose of programming logic devices manufactured by
|
# the sole purpose of programming logic devices manufactured by
|
||||||
# Intel and sold by Intel or its authorized distributors. Please
|
# Intel and sold by Intel or its authorized distributors. Please
|
||||||
# refer to the applicable agreement for further details.
|
# refer to the applicable agreement for further details.
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Quartus Prime
|
# Quartus Prime
|
||||||
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
||||||
# Date created = 16:34:55 October 18, 2022
|
# Date created = 16:34:55 October 18, 2022
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
|
|
||||||
QUARTUS_VERSION = "18.1"
|
QUARTUS_VERSION = "18.1"
|
||||||
DATE = "16:34:55 October 18, 2022"
|
DATE = "16:34:55 October 18, 2022"
|
||||||
|
|
||||||
# Revisions
|
# Revisions
|
||||||
|
|
||||||
PROJECT_REVISION = "semafor"
|
PROJECT_REVISION = "semafor"
|
||||||
|
|
|
@ -1,47 +1,47 @@
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
# Copyright (C) 2018 Intel Corporation. All rights reserved.
|
||||||
# Your use of Intel Corporation's design tools, logic functions
|
# Your use of Intel Corporation's design tools, logic functions
|
||||||
# and other software and tools, and its AMPP partner logic
|
# and other software and tools, and its AMPP partner logic
|
||||||
# functions, and any output files from any of the foregoing
|
# functions, and any output files from any of the foregoing
|
||||||
# (including device programming or simulation files), and any
|
# (including device programming or simulation files), and any
|
||||||
# associated documentation or information are expressly subject
|
# associated documentation or information are expressly subject
|
||||||
# to the terms and conditions of the Intel Program License
|
# to the terms and conditions of the Intel Program License
|
||||||
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||||
# the Intel FPGA IP License Agreement, or other applicable license
|
# the Intel FPGA IP License Agreement, or other applicable license
|
||||||
# agreement, including, without limitation, that your use is for
|
# agreement, including, without limitation, that your use is for
|
||||||
# the sole purpose of programming logic devices manufactured by
|
# the sole purpose of programming logic devices manufactured by
|
||||||
# Intel and sold by Intel or its authorized distributors. Please
|
# Intel and sold by Intel or its authorized distributors. Please
|
||||||
# refer to the applicable agreement for further details.
|
# refer to the applicable agreement for further details.
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Quartus Prime
|
# Quartus Prime
|
||||||
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
# Version 18.1.0 Build 625 09/12/2018 SJ Lite Edition
|
||||||
# Date created = 16:34:55 October 18, 2022
|
# Date created = 16:34:55 October 18, 2022
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
# Notes:
|
# Notes:
|
||||||
#
|
#
|
||||||
# 1) The default values for assignments are stored in the file:
|
# 1) The default values for assignments are stored in the file:
|
||||||
# semafor_assignment_defaults.qdf
|
# semafor_assignment_defaults.qdf
|
||||||
# If this file doesn't exist, see file:
|
# If this file doesn't exist, see file:
|
||||||
# assignment_defaults.qdf
|
# assignment_defaults.qdf
|
||||||
#
|
#
|
||||||
# 2) Altera recommends that you do not modify this file. This
|
# 2) Altera recommends that you do not modify this file. This
|
||||||
# file is updated automatically by the Quartus Prime software
|
# file is updated automatically by the Quartus Prime software
|
||||||
# and any changes you make may be lost or overwritten.
|
# and any changes you make may be lost or overwritten.
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
|
||||||
set_global_assignment -name FAMILY "Cyclone IV E"
|
set_global_assignment -name FAMILY "Cyclone IV E"
|
||||||
set_global_assignment -name DEVICE EP4CE115F29C7
|
set_global_assignment -name DEVICE EP4CE115F29C7
|
||||||
set_global_assignment -name TOP_LEVEL_ENTITY niosII
|
set_global_assignment -name TOP_LEVEL_ENTITY top
|
||||||
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0
|
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 18.1.0
|
||||||
set_global_assignment -name PROJECT_CREATION_TIME_DATE "16:34:55 OCTOBER 18, 2022"
|
set_global_assignment -name PROJECT_CREATION_TIME_DATE "16:34:55 OCTOBER 18, 2022"
|
||||||
set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Lite Edition"
|
set_global_assignment -name LAST_QUARTUS_VERSION "20.1.1 Lite Edition"
|
||||||
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
|
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
|
||||||
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
|
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
|
||||||
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
|
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
|
||||||
|
@ -52,9 +52,16 @@ set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation
|
||||||
set_global_assignment -name EDA_OUTPUT_DATA_FORMAT "SYSTEMVERILOG HDL" -section_id eda_simulation
|
set_global_assignment -name EDA_OUTPUT_DATA_FORMAT "SYSTEMVERILOG 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_location_assignment PIN_Y2 -to clk
|
||||||
|
set_location_assignment PIN_M23 -to train
|
||||||
|
set_location_assignment PIN_G19 -to yellow
|
||||||
|
set_location_assignment PIN_F19 -to red
|
||||||
|
set_location_assignment PIN_G21 -to green
|
||||||
|
|
||||||
|
set_global_assignment -name SYSTEMVERILOG_FILE top.sv
|
||||||
|
set_global_assignment -name QIP_FILE niosII/synthesis/niosII.qip
|
||||||
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
|
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -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 SOURCE_FILE niosII/niosII.cmp
|
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to clk
|
||||||
set_global_assignment -name QSYS_FILE niosII.qsys
|
|
||||||
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
|
BIN
Top/semafor.qws
BIN
Top/semafor.qws
Binary file not shown.
|
@ -0,0 +1,808 @@
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# Copyright (C) 2020 Intel Corporation. All rights reserved.
|
||||||
|
# Your use of Intel Corporation's design tools, logic functions
|
||||||
|
# and other software and tools, and any partner logic
|
||||||
|
# functions, and any output files from any of the foregoing
|
||||||
|
# (including device programming or simulation files), and any
|
||||||
|
# associated documentation or information are expressly subject
|
||||||
|
# to the terms and conditions of the Intel Program License
|
||||||
|
# Subscription Agreement, the Intel Quartus Prime License Agreement,
|
||||||
|
# the Intel FPGA IP License Agreement, or other applicable license
|
||||||
|
# agreement, including, without limitation, that your use is for
|
||||||
|
# the sole purpose of programming logic devices manufactured by
|
||||||
|
# Intel and sold by Intel or its authorized distributors. Please
|
||||||
|
# refer to the applicable agreement for further details, at
|
||||||
|
# https://fpgasoftware.intel.com/eula.
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# Quartus Prime
|
||||||
|
# Version 20.1.1 Build 720 11/11/2020 SJ Lite Edition
|
||||||
|
# Date created = 11:08:42 January 24, 2023
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
#
|
||||||
|
# Note:
|
||||||
|
#
|
||||||
|
# 1) Do not modify this file. This file was generated
|
||||||
|
# automatically by the Quartus Prime software and is used
|
||||||
|
# to preserve global assignments across Quartus Prime versions.
|
||||||
|
#
|
||||||
|
# -------------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off
|
||||||
|
set_global_assignment -name IP_COMPONENT_INTERNAL Off
|
||||||
|
set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On
|
||||||
|
set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off
|
||||||
|
set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off
|
||||||
|
set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db
|
||||||
|
set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off
|
||||||
|
set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off
|
||||||
|
set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off
|
||||||
|
set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off
|
||||||
|
set_global_assignment -name HC_OUTPUT_DIR hc_output
|
||||||
|
set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off
|
||||||
|
set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off
|
||||||
|
set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On
|
||||||
|
set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off
|
||||||
|
set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings"
|
||||||
|
set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On
|
||||||
|
set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On
|
||||||
|
set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off
|
||||||
|
set_global_assignment -name REVISION_TYPE Base -family "Arria V"
|
||||||
|
set_global_assignment -name REVISION_TYPE Base -family "Stratix V"
|
||||||
|
set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ"
|
||||||
|
set_global_assignment -name REVISION_TYPE Base -family "Cyclone V"
|
||||||
|
set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle"
|
||||||
|
set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On
|
||||||
|
set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On
|
||||||
|
set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On
|
||||||
|
set_global_assignment -name DO_COMBINED_ANALYSIS Off
|
||||||
|
set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off
|
||||||
|
set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off
|
||||||
|
set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off
|
||||||
|
set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off
|
||||||
|
set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "MAX 10"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Stratix IV"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria 10"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS Off -family "MAX V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Stratix V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria V GZ"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS Off -family "MAX II"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria II GX"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria II GZ"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_REPORT_TIMING Off
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_REPORT_NUM_WORST_CASE_TIMING_PATHS 100
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "MAX 10"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Stratix IV"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria 10"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL Off -family "MAX V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Stratix V"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria V GZ"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL Off -family "MAX II"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria II GX"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria II GZ"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone V"
|
||||||
|
set_global_assignment -name OPTIMIZATION_MODE Balanced
|
||||||
|
set_global_assignment -name ALLOW_REGISTER_MERGING On
|
||||||
|
set_global_assignment -name ALLOW_REGISTER_DUPLICATION On
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria V"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER ON -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX 10"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Stratix IV"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER ON -family "Arria 10"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX V"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Stratix V"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria V GZ"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX II"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria II GX"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria II GZ"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone V"
|
||||||
|
set_global_assignment -name MUX_RESTRUCTURE Auto
|
||||||
|
set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off
|
||||||
|
set_global_assignment -name ENABLE_IP_DEBUG Off
|
||||||
|
set_global_assignment -name SAVE_DISK_SPACE On
|
||||||
|
set_global_assignment -name OCP_HW_EVAL Enable
|
||||||
|
set_global_assignment -name DEVICE_FILTER_PACKAGE Any
|
||||||
|
set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any
|
||||||
|
set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any
|
||||||
|
set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "<None>"
|
||||||
|
set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001
|
||||||
|
set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993
|
||||||
|
set_global_assignment -name FAMILY "Cyclone V"
|
||||||
|
set_global_assignment -name TRUE_WYSIWYG_FLOW Off
|
||||||
|
set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off
|
||||||
|
set_global_assignment -name STATE_MACHINE_PROCESSING Auto
|
||||||
|
set_global_assignment -name SAFE_STATE_MACHINE Off
|
||||||
|
set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On
|
||||||
|
set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On
|
||||||
|
set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off
|
||||||
|
set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000
|
||||||
|
set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250
|
||||||
|
set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On
|
||||||
|
set_global_assignment -name PARALLEL_SYNTHESIS On
|
||||||
|
set_global_assignment -name DSP_BLOCK_BALANCING Auto
|
||||||
|
set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name NOT_GATE_PUSH_BACK On
|
||||||
|
set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On
|
||||||
|
set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off
|
||||||
|
set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On
|
||||||
|
set_global_assignment -name IGNORE_CARRY_BUFFERS Off
|
||||||
|
set_global_assignment -name IGNORE_CASCADE_BUFFERS Off
|
||||||
|
set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off
|
||||||
|
set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off
|
||||||
|
set_global_assignment -name IGNORE_LCELL_BUFFERS Off
|
||||||
|
set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO
|
||||||
|
set_global_assignment -name IGNORE_SOFT_BUFFERS On
|
||||||
|
set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off
|
||||||
|
set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off
|
||||||
|
set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On
|
||||||
|
set_global_assignment -name AUTO_GLOBAL_OE_MAX On
|
||||||
|
set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On
|
||||||
|
set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off
|
||||||
|
set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut
|
||||||
|
set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced
|
||||||
|
set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced
|
||||||
|
set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced
|
||||||
|
set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced
|
||||||
|
set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced
|
||||||
|
set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced
|
||||||
|
set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed
|
||||||
|
set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced
|
||||||
|
set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area
|
||||||
|
set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area
|
||||||
|
set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area
|
||||||
|
set_global_assignment -name ALLOW_XOR_GATE_USAGE On
|
||||||
|
set_global_assignment -name AUTO_LCELL_INSERTION On
|
||||||
|
set_global_assignment -name CARRY_CHAIN_LENGTH 48
|
||||||
|
set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32
|
||||||
|
set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32
|
||||||
|
set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48
|
||||||
|
set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70
|
||||||
|
set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70
|
||||||
|
set_global_assignment -name CASCADE_CHAIN_LENGTH 2
|
||||||
|
set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16
|
||||||
|
set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4
|
||||||
|
set_global_assignment -name AUTO_CARRY_CHAINS On
|
||||||
|
set_global_assignment -name AUTO_CASCADE_CHAINS On
|
||||||
|
set_global_assignment -name AUTO_PARALLEL_EXPANDERS On
|
||||||
|
set_global_assignment -name AUTO_OPEN_DRAIN_PINS On
|
||||||
|
set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off
|
||||||
|
set_global_assignment -name AUTO_ROM_RECOGNITION On
|
||||||
|
set_global_assignment -name AUTO_RAM_RECOGNITION On
|
||||||
|
set_global_assignment -name AUTO_DSP_RECOGNITION On
|
||||||
|
set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto
|
||||||
|
set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto
|
||||||
|
set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On
|
||||||
|
set_global_assignment -name STRICT_RAM_RECOGNITION Off
|
||||||
|
set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On
|
||||||
|
set_global_assignment -name FORCE_SYNCH_CLEAR Off
|
||||||
|
set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On
|
||||||
|
set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off
|
||||||
|
set_global_assignment -name AUTO_RESOURCE_SHARING Off
|
||||||
|
set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off
|
||||||
|
set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off
|
||||||
|
set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off
|
||||||
|
set_global_assignment -name MAX7000_FANIN_PER_CELL 100
|
||||||
|
set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On
|
||||||
|
set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off
|
||||||
|
set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V"
|
||||||
|
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX"
|
||||||
|
set_global_assignment -name REPORT_PARAMETER_SETTINGS On
|
||||||
|
set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On
|
||||||
|
set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On
|
||||||
|
set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V"
|
||||||
|
set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation"
|
||||||
|
set_global_assignment -name HDL_MESSAGE_LEVEL Level2
|
||||||
|
set_global_assignment -name USE_HIGH_SPEED_ADDER Auto
|
||||||
|
set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100
|
||||||
|
set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000
|
||||||
|
set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000
|
||||||
|
set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off
|
||||||
|
set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000
|
||||||
|
set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100
|
||||||
|
set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On
|
||||||
|
set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off
|
||||||
|
set_global_assignment -name BLOCK_DESIGN_NAMING Auto
|
||||||
|
set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off
|
||||||
|
set_global_assignment -name SYNTHESIS_EFFORT Auto
|
||||||
|
set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On
|
||||||
|
set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off
|
||||||
|
set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium
|
||||||
|
set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V"
|
||||||
|
set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX"
|
||||||
|
set_global_assignment -name MAX_LABS "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On
|
||||||
|
set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On
|
||||||
|
set_global_assignment -name PRPOF_ID Off
|
||||||
|
set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off
|
||||||
|
set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On
|
||||||
|
set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On
|
||||||
|
set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off
|
||||||
|
set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off
|
||||||
|
set_global_assignment -name AUTO_MERGE_PLLS On
|
||||||
|
set_global_assignment -name IGNORE_MODE_FOR_MERGE Off
|
||||||
|
set_global_assignment -name TXPMA_SLEW_RATE Low
|
||||||
|
set_global_assignment -name ADCE_ENABLED Auto
|
||||||
|
set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal
|
||||||
|
set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off
|
||||||
|
set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0
|
||||||
|
set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0
|
||||||
|
set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS Off
|
||||||
|
set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off
|
||||||
|
set_global_assignment -name DEVICE AUTO
|
||||||
|
set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off
|
||||||
|
set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off
|
||||||
|
set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On
|
||||||
|
set_global_assignment -name ENABLE_NCEO_OUTPUT Off
|
||||||
|
set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin"
|
||||||
|
set_global_assignment -name STRATIXIII_UPDATE_MODE Standard
|
||||||
|
set_global_assignment -name STRATIX_UPDATE_MODE Standard
|
||||||
|
set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image"
|
||||||
|
set_global_assignment -name CVP_MODE Off
|
||||||
|
set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V"
|
||||||
|
set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10"
|
||||||
|
set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V"
|
||||||
|
set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ"
|
||||||
|
set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V"
|
||||||
|
set_global_assignment -name VID_OPERATION_MODE "PMBus Slave"
|
||||||
|
set_global_assignment -name USE_CONF_DONE AUTO
|
||||||
|
set_global_assignment -name USE_PWRMGT_SCL AUTO
|
||||||
|
set_global_assignment -name USE_PWRMGT_SDA AUTO
|
||||||
|
set_global_assignment -name USE_PWRMGT_ALERT AUTO
|
||||||
|
set_global_assignment -name USE_INIT_DONE AUTO
|
||||||
|
set_global_assignment -name USE_CVP_CONFDONE AUTO
|
||||||
|
set_global_assignment -name USE_SEU_ERROR AUTO
|
||||||
|
set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial"
|
||||||
|
set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration"
|
||||||
|
set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial"
|
||||||
|
set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial"
|
||||||
|
set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial"
|
||||||
|
set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial"
|
||||||
|
set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial"
|
||||||
|
set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial"
|
||||||
|
set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial"
|
||||||
|
set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial"
|
||||||
|
set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial"
|
||||||
|
set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial"
|
||||||
|
set_global_assignment -name USER_START_UP_CLOCK Off
|
||||||
|
set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off
|
||||||
|
set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off
|
||||||
|
set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On
|
||||||
|
set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On
|
||||||
|
set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC
|
||||||
|
set_global_assignment -name ENABLE_VREFA_PIN Off
|
||||||
|
set_global_assignment -name ENABLE_VREFB_PIN Off
|
||||||
|
set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off
|
||||||
|
set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off
|
||||||
|
set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off
|
||||||
|
set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off
|
||||||
|
set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground"
|
||||||
|
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off
|
||||||
|
set_global_assignment -name INIT_DONE_OPEN_DRAIN On
|
||||||
|
set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated"
|
||||||
|
set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated"
|
||||||
|
set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated"
|
||||||
|
set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO"
|
||||||
|
set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin"
|
||||||
|
set_global_assignment -name ENABLE_CONFIGURATION_PINS On
|
||||||
|
set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off
|
||||||
|
set_global_assignment -name ENABLE_NCE_PIN Off
|
||||||
|
set_global_assignment -name ENABLE_BOOT_SEL_PIN On
|
||||||
|
set_global_assignment -name CRC_ERROR_CHECKING Off
|
||||||
|
set_global_assignment -name INTERNAL_SCRUBBING Off
|
||||||
|
set_global_assignment -name PR_ERROR_OPEN_DRAIN On
|
||||||
|
set_global_assignment -name PR_READY_OPEN_DRAIN On
|
||||||
|
set_global_assignment -name ENABLE_CVP_CONFDONE Off
|
||||||
|
set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On
|
||||||
|
set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V"
|
||||||
|
set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V"
|
||||||
|
set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On
|
||||||
|
set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto
|
||||||
|
set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care
|
||||||
|
set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV"
|
||||||
|
set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10"
|
||||||
|
set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V"
|
||||||
|
set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ"
|
||||||
|
set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0
|
||||||
|
set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On
|
||||||
|
set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation"
|
||||||
|
set_global_assignment -name OPTIMIZE_SSN Off
|
||||||
|
set_global_assignment -name OPTIMIZE_TIMING "Normal compilation"
|
||||||
|
set_global_assignment -name ECO_OPTIMIZE_TIMING Off
|
||||||
|
set_global_assignment -name ECO_REGENERATE_REPORT Off
|
||||||
|
set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal
|
||||||
|
set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off
|
||||||
|
set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically
|
||||||
|
set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically
|
||||||
|
set_global_assignment -name SEED 1
|
||||||
|
set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF
|
||||||
|
set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off
|
||||||
|
set_global_assignment -name SLOW_SLEW_RATE Off
|
||||||
|
set_global_assignment -name PCI_IO Off
|
||||||
|
set_global_assignment -name TURBO_BIT On
|
||||||
|
set_global_assignment -name WEAK_PULL_UP_RESISTOR Off
|
||||||
|
set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off
|
||||||
|
set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off
|
||||||
|
set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On
|
||||||
|
set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto
|
||||||
|
set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto
|
||||||
|
set_global_assignment -name NORMAL_LCELL_INSERT On
|
||||||
|
set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V"
|
||||||
|
set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF
|
||||||
|
set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off
|
||||||
|
set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off
|
||||||
|
set_global_assignment -name AUTO_TURBO_BIT ON
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off
|
||||||
|
set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On
|
||||||
|
set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off
|
||||||
|
set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off
|
||||||
|
set_global_assignment -name FITTER_EFFORT "Auto Fit"
|
||||||
|
set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns
|
||||||
|
set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal
|
||||||
|
set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto
|
||||||
|
set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off
|
||||||
|
set_global_assignment -name AUTO_GLOBAL_CLOCK On
|
||||||
|
set_global_assignment -name AUTO_GLOBAL_OE On
|
||||||
|
set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On
|
||||||
|
set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off
|
||||||
|
set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off
|
||||||
|
set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off
|
||||||
|
set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off
|
||||||
|
set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up"
|
||||||
|
set_global_assignment -name ENABLE_HOLD_BACK_OFF On
|
||||||
|
set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto
|
||||||
|
set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off
|
||||||
|
set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto
|
||||||
|
set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On
|
||||||
|
set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On
|
||||||
|
set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V"
|
||||||
|
set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10"
|
||||||
|
set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10"
|
||||||
|
set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V"
|
||||||
|
set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ"
|
||||||
|
set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V"
|
||||||
|
set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)"
|
||||||
|
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10"
|
||||||
|
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V"
|
||||||
|
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V"
|
||||||
|
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ"
|
||||||
|
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V"
|
||||||
|
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX"
|
||||||
|
set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off
|
||||||
|
set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On
|
||||||
|
set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off
|
||||||
|
set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off
|
||||||
|
set_global_assignment -name PR_DONE_OPEN_DRAIN On
|
||||||
|
set_global_assignment -name NCEO_OPEN_DRAIN On
|
||||||
|
set_global_assignment -name ENABLE_CRC_ERROR_PIN Off
|
||||||
|
set_global_assignment -name ENABLE_PR_PINS Off
|
||||||
|
set_global_assignment -name RESERVE_PR_PINS Off
|
||||||
|
set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off
|
||||||
|
set_global_assignment -name PR_PINS_OPEN_DRAIN Off
|
||||||
|
set_global_assignment -name CLAMPING_DIODE Off
|
||||||
|
set_global_assignment -name TRI_STATE_SPI_PINS Off
|
||||||
|
set_global_assignment -name UNUSED_TSD_PINS_GND Off
|
||||||
|
set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off
|
||||||
|
set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off
|
||||||
|
set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium
|
||||||
|
set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V"
|
||||||
|
set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV"
|
||||||
|
set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10"
|
||||||
|
set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V"
|
||||||
|
set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ"
|
||||||
|
set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V"
|
||||||
|
set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0
|
||||||
|
set_global_assignment -name SEU_FIT_REPORT Off
|
||||||
|
set_global_assignment -name HYPER_RETIMER Off -family "Arria 10"
|
||||||
|
set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1"
|
||||||
|
set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto
|
||||||
|
set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto
|
||||||
|
set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On
|
||||||
|
set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On
|
||||||
|
set_global_assignment -name EDA_SIMULATION_TOOL "<None>"
|
||||||
|
set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "<None>"
|
||||||
|
set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "<None>"
|
||||||
|
set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "<None>"
|
||||||
|
set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "<None>"
|
||||||
|
set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "<None>"
|
||||||
|
set_global_assignment -name EDA_BOARD_DESIGN_TOOL "<None>"
|
||||||
|
set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "<None>"
|
||||||
|
set_global_assignment -name EDA_RESYNTHESIS_TOOL "<None>"
|
||||||
|
set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On
|
||||||
|
set_global_assignment -name COMPRESSION_MODE Off
|
||||||
|
set_global_assignment -name CLOCK_SOURCE Internal
|
||||||
|
set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz"
|
||||||
|
set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1
|
||||||
|
set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On
|
||||||
|
set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off
|
||||||
|
set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On
|
||||||
|
set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF
|
||||||
|
set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF
|
||||||
|
set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF
|
||||||
|
set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF
|
||||||
|
set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F
|
||||||
|
set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF
|
||||||
|
set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off
|
||||||
|
set_global_assignment -name USE_CHECKSUM_AS_USERCODE On
|
||||||
|
set_global_assignment -name SECURITY_BIT Off
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10"
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV"
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V"
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II"
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX"
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ"
|
||||||
|
set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto
|
||||||
|
set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130"
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000
|
||||||
|
set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000
|
||||||
|
set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery"
|
||||||
|
set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0
|
||||||
|
set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0
|
||||||
|
set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0
|
||||||
|
set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto
|
||||||
|
set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto
|
||||||
|
set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto
|
||||||
|
set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto
|
||||||
|
set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto
|
||||||
|
set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto
|
||||||
|
set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF
|
||||||
|
set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF
|
||||||
|
set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF
|
||||||
|
set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF
|
||||||
|
set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off
|
||||||
|
set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On
|
||||||
|
set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off
|
||||||
|
set_global_assignment -name GENERATE_TTF_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_RBF_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_HEX_FILE Off
|
||||||
|
set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0
|
||||||
|
set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up
|
||||||
|
set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal"
|
||||||
|
set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off
|
||||||
|
set_global_assignment -name AUTO_RESTART_CONFIGURATION On
|
||||||
|
set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off
|
||||||
|
set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off
|
||||||
|
set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX"
|
||||||
|
set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V"
|
||||||
|
set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF
|
||||||
|
set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off
|
||||||
|
set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off
|
||||||
|
set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off
|
||||||
|
set_global_assignment -name POR_SCHEME "Instant ON"
|
||||||
|
set_global_assignment -name EN_USER_IO_WEAK_PULLUP On
|
||||||
|
set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On
|
||||||
|
set_global_assignment -name POF_VERIFY_PROTECT Off
|
||||||
|
set_global_assignment -name ENABLE_SPI_MODE_CHECK Off
|
||||||
|
set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On
|
||||||
|
set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off
|
||||||
|
set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0
|
||||||
|
set_global_assignment -name GENERATE_PMSF_FILES On
|
||||||
|
set_global_assignment -name START_TIME 0ns
|
||||||
|
set_global_assignment -name SIMULATION_MODE TIMING
|
||||||
|
set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off
|
||||||
|
set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On
|
||||||
|
set_global_assignment -name SETUP_HOLD_DETECTION Off
|
||||||
|
set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off
|
||||||
|
set_global_assignment -name CHECK_OUTPUTS Off
|
||||||
|
set_global_assignment -name SIMULATION_COVERAGE On
|
||||||
|
set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On
|
||||||
|
set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On
|
||||||
|
set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On
|
||||||
|
set_global_assignment -name GLITCH_DETECTION Off
|
||||||
|
set_global_assignment -name GLITCH_INTERVAL 1ns
|
||||||
|
set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off
|
||||||
|
set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On
|
||||||
|
set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off
|
||||||
|
set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On
|
||||||
|
set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE
|
||||||
|
set_global_assignment -name SIMULATION_NETLIST_VIEWER Off
|
||||||
|
set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT
|
||||||
|
set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT
|
||||||
|
set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off
|
||||||
|
set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO
|
||||||
|
set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO
|
||||||
|
set_global_assignment -name DRC_TOP_FANOUT 50
|
||||||
|
set_global_assignment -name DRC_FANOUT_EXCEEDING 30
|
||||||
|
set_global_assignment -name DRC_GATED_CLOCK_FEED 30
|
||||||
|
set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY
|
||||||
|
set_global_assignment -name ENABLE_DRC_SETTINGS Off
|
||||||
|
set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25
|
||||||
|
set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10
|
||||||
|
set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30
|
||||||
|
set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2
|
||||||
|
set_global_assignment -name MERGE_HEX_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_SVF_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_ISC_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_JAM_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_JBC_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On
|
||||||
|
set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off
|
||||||
|
set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On
|
||||||
|
set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off
|
||||||
|
set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state"
|
||||||
|
set_global_assignment -name HPS_EARLY_IO_RELEASE Off
|
||||||
|
set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off
|
||||||
|
set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off
|
||||||
|
set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5%
|
||||||
|
set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5%
|
||||||
|
set_global_assignment -name POWER_USE_PVA On
|
||||||
|
set_global_assignment -name POWER_USE_INPUT_FILE "No File"
|
||||||
|
set_global_assignment -name POWER_USE_INPUT_FILES Off
|
||||||
|
set_global_assignment -name POWER_VCD_FILTER_GLITCHES On
|
||||||
|
set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off
|
||||||
|
set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off
|
||||||
|
set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL
|
||||||
|
set_global_assignment -name POWER_AUTO_COMPUTE_TJ On
|
||||||
|
set_global_assignment -name POWER_TJ_VALUE 25
|
||||||
|
set_global_assignment -name POWER_USE_TA_VALUE 25
|
||||||
|
set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off
|
||||||
|
set_global_assignment -name POWER_BOARD_TEMPERATURE 25
|
||||||
|
set_global_assignment -name POWER_HPS_ENABLE Off
|
||||||
|
set_global_assignment -name POWER_HPS_PROC_FREQ 0.0
|
||||||
|
set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off
|
||||||
|
set_global_assignment -name IGNORE_PARTITIONS Off
|
||||||
|
set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off
|
||||||
|
set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On
|
||||||
|
set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End"
|
||||||
|
set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On
|
||||||
|
set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On
|
||||||
|
set_global_assignment -name RTLV_GROUP_RELATED_NODES On
|
||||||
|
set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off
|
||||||
|
set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off
|
||||||
|
set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On
|
||||||
|
set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On
|
||||||
|
set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On
|
||||||
|
set_global_assignment -name EQC_BBOX_MERGE On
|
||||||
|
set_global_assignment -name EQC_LVDS_MERGE On
|
||||||
|
set_global_assignment -name EQC_RAM_UNMERGING On
|
||||||
|
set_global_assignment -name EQC_DFF_SS_EMULATION On
|
||||||
|
set_global_assignment -name EQC_RAM_REGISTER_UNPACK On
|
||||||
|
set_global_assignment -name EQC_MAC_REGISTER_UNPACK On
|
||||||
|
set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On
|
||||||
|
set_global_assignment -name EQC_STRUCTURE_MATCHING On
|
||||||
|
set_global_assignment -name EQC_AUTO_BREAK_CONE On
|
||||||
|
set_global_assignment -name EQC_POWER_UP_COMPARE Off
|
||||||
|
set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On
|
||||||
|
set_global_assignment -name EQC_AUTO_INVERSION On
|
||||||
|
set_global_assignment -name EQC_AUTO_TERMINATE On
|
||||||
|
set_global_assignment -name EQC_SUB_CONE_REPORT Off
|
||||||
|
set_global_assignment -name EQC_RENAMING_RULES On
|
||||||
|
set_global_assignment -name EQC_PARAMETER_CHECK On
|
||||||
|
set_global_assignment -name EQC_AUTO_PORTSWAP On
|
||||||
|
set_global_assignment -name EQC_DETECT_DONT_CARES On
|
||||||
|
set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off
|
||||||
|
set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ?
|
||||||
|
set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ?
|
||||||
|
set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ?
|
||||||
|
set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ?
|
||||||
|
set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ?
|
||||||
|
set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ?
|
||||||
|
set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ?
|
||||||
|
set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ?
|
||||||
|
set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ?
|
||||||
|
set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "<None>" -section_id ?
|
||||||
|
set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ?
|
||||||
|
set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ?
|
||||||
|
set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ?
|
||||||
|
set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ?
|
||||||
|
set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST On -section_id ?
|
||||||
|
set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ?
|
||||||
|
set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ?
|
||||||
|
set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ?
|
||||||
|
set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ?
|
||||||
|
set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ?
|
||||||
|
set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ?
|
||||||
|
set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ?
|
||||||
|
set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ?
|
||||||
|
set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ?
|
||||||
|
set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ?
|
||||||
|
set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ?
|
||||||
|
set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ?
|
||||||
|
set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ?
|
||||||
|
set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ?
|
||||||
|
set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ?
|
|
@ -1,83 +1,83 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
<buildSystem id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672">
|
<buildSystem id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672">
|
||||||
<storageModule id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672" moduleId="org.eclipse.cdt.core.settings"/>
|
<storageModule id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672" moduleId="org.eclipse.cdt.core.settings"/>
|
||||||
</buildSystem>
|
</buildSystem>
|
||||||
<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672">
|
<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672">
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672" name="Nios II" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
<configuration buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672" name="Nios II" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
||||||
<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672." name="/" resourcePath="">
|
<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672." name="/" resourcePath="">
|
||||||
<toolChain id="altera.nios2.mingw.gcc4.1451739338" name="MinGW Nios II GCC4" superClass="altera.nios2.mingw.gcc4">
|
<toolChain id="altera.nios2.mingw.gcc4.1451739338" name="MinGW Nios II GCC4" superClass="altera.nios2.mingw.gcc4">
|
||||||
<targetPlatform id="altera.nios2.mingw.gcc4.1894897402" name="Nios II" superClass="altera.nios2.mingw.gcc4"/>
|
<targetPlatform id="altera.nios2.mingw.gcc4.1894897402" name="Nios II" superClass="altera.nios2.mingw.gcc4"/>
|
||||||
<builder buildPath="${workspace_loc://semafor}" id="altera.tool.gnu.builder.mingw.1910544022" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="altera.tool.gnu.builder.mingw"/>
|
<builder buildPath="${workspace_loc://semafor}" id="altera.tool.gnu.builder.mingw.1910544022" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="altera.tool.gnu.builder.mingw"/>
|
||||||
<tool id="altera.tool.gnu.c.compiler.mingw.2112423510" name="Nios II GCC C Compiler" superClass="altera.tool.gnu.c.compiler.mingw">
|
<tool id="altera.tool.gnu.c.compiler.mingw.2112423510" name="Nios II GCC C Compiler" superClass="altera.tool.gnu.c.compiler.mingw">
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.181439709" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
|
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.181439709" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="altera.tool.gnu.cpp.compiler.mingw.1092618596" name="Nios II GCC C++ Compiler" superClass="altera.tool.gnu.cpp.compiler.mingw">
|
<tool id="altera.tool.gnu.cpp.compiler.mingw.1092618596" name="Nios II GCC C++ Compiler" superClass="altera.tool.gnu.cpp.compiler.mingw">
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.693221313" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
|
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.693221313" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="altera.tool.gnu.archiver.mingw.1773720286" name="Nios II GCC Archiver" superClass="altera.tool.gnu.archiver.mingw"/>
|
<tool id="altera.tool.gnu.archiver.mingw.1773720286" name="Nios II GCC Archiver" superClass="altera.tool.gnu.archiver.mingw"/>
|
||||||
<tool id="altera.tool.gnu.c.linker.mingw.544112231" name="Nios II GCC C Linker" superClass="altera.tool.gnu.c.linker.mingw"/>
|
<tool id="altera.tool.gnu.c.linker.mingw.544112231" name="Nios II GCC C Linker" superClass="altera.tool.gnu.c.linker.mingw"/>
|
||||||
<tool id="altera.tool.gnu.assembler.mingw.273557530" name="Nios II GCC Assembler" superClass="altera.tool.gnu.assembler.mingw">
|
<tool id="altera.tool.gnu.assembler.mingw.273557530" name="Nios II GCC Assembler" superClass="altera.tool.gnu.assembler.mingw">
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.327317275" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.327317275" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672" moduleId="org.eclipse.cdt.core.settings" name="Nios II">
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672" moduleId="org.eclipse.cdt.core.settings" name="Nios II">
|
||||||
<externalSettings/>
|
<externalSettings/>
|
||||||
<extensions>
|
<extensions>
|
||||||
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<project id="semafor.null.1915366667" name="semafor"/>
|
<project id="semafor.null.1915366667" name="semafor"/>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
<storageModule moduleId="scannerConfiguration">
|
<storageModule moduleId="scannerConfiguration">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672.;altera.tool.gnu.c.compiler.mingw.2112423510;cdt.managedbuild.tool.gnu.c.compiler.input.181439709">
|
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672.;altera.tool.gnu.c.compiler.mingw.2112423510;cdt.managedbuild.tool.gnu.c.compiler.input.181439709">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672.;altera.tool.gnu.cpp.compiler.mingw.1092618596;cdt.managedbuild.tool.gnu.cpp.compiler.input.693221313">
|
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672.;altera.tool.gnu.cpp.compiler.mingw.1092618596;cdt.managedbuild.tool.gnu.cpp.compiler.input.693221313">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
|
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
|
||||||
<buildTargets>
|
<buildTargets>
|
||||||
<target name="mem_init_install" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
<target name="mem_init_install" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||||
<buildCommand>make</buildCommand>
|
<buildCommand>make</buildCommand>
|
||||||
<buildArguments/>
|
<buildArguments/>
|
||||||
<buildTarget>mem_init_install</buildTarget>
|
<buildTarget>mem_init_install</buildTarget>
|
||||||
<stopOnError>true</stopOnError>
|
<stopOnError>true</stopOnError>
|
||||||
<useDefaultCommand>false</useDefaultCommand>
|
<useDefaultCommand>false</useDefaultCommand>
|
||||||
<runAllBuilders>false</runAllBuilders>
|
<runAllBuilders>false</runAllBuilders>
|
||||||
</target>
|
</target>
|
||||||
<target name="mem_init_generate" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
<target name="mem_init_generate" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||||
<buildCommand>make</buildCommand>
|
<buildCommand>make</buildCommand>
|
||||||
<buildArguments/>
|
<buildArguments/>
|
||||||
<buildTarget>mem_init_generate</buildTarget>
|
<buildTarget>mem_init_generate</buildTarget>
|
||||||
<stopOnError>true</stopOnError>
|
<stopOnError>true</stopOnError>
|
||||||
<useDefaultCommand>false</useDefaultCommand>
|
<useDefaultCommand>false</useDefaultCommand>
|
||||||
<runAllBuilders>false</runAllBuilders>
|
<runAllBuilders>false</runAllBuilders>
|
||||||
</target>
|
</target>
|
||||||
<target name="help" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
<target name="help" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
|
||||||
<buildCommand>make</buildCommand>
|
<buildCommand>make</buildCommand>
|
||||||
<buildArguments/>
|
<buildArguments/>
|
||||||
<buildTarget>help</buildTarget>
|
<buildTarget>help</buildTarget>
|
||||||
<stopOnError>true</stopOnError>
|
<stopOnError>true</stopOnError>
|
||||||
<useDefaultCommand>false</useDefaultCommand>
|
<useDefaultCommand>false</useDefaultCommand>
|
||||||
<runAllBuilders>false</runAllBuilders>
|
<runAllBuilders>false</runAllBuilders>
|
||||||
</target>
|
</target>
|
||||||
</buildTargets>
|
</buildTargets>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
</cproject>
|
</cproject>
|
||||||
|
|
|
@ -1,40 +1,40 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<projectDescription>
|
<projectDescription>
|
||||||
<name>semafor</name>
|
<name>semafor</name>
|
||||||
<comment></comment>
|
<comment></comment>
|
||||||
<projects>
|
<projects>
|
||||||
</projects>
|
</projects>
|
||||||
<buildSpec>
|
<buildSpec>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
<name>com.altera.sbtgui.project.makefileBuilder</name>
|
<name>com.altera.sbtgui.project.makefileBuilder</name>
|
||||||
<arguments>
|
<arguments>
|
||||||
</arguments>
|
</arguments>
|
||||||
</buildCommand>
|
</buildCommand>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
<name>com.altera.sbtgui.project.makefileBuilder</name>
|
<name>com.altera.sbtgui.project.makefileBuilder</name>
|
||||||
<arguments>
|
<arguments>
|
||||||
</arguments>
|
</arguments>
|
||||||
</buildCommand>
|
</buildCommand>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||||
<triggers>clean,full,incremental,</triggers>
|
<triggers>clean,full,incremental,</triggers>
|
||||||
<arguments>
|
<arguments>
|
||||||
</arguments>
|
</arguments>
|
||||||
</buildCommand>
|
</buildCommand>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
<triggers>full,incremental,</triggers>
|
<triggers>full,incremental,</triggers>
|
||||||
<arguments>
|
<arguments>
|
||||||
</arguments>
|
</arguments>
|
||||||
</buildCommand>
|
</buildCommand>
|
||||||
</buildSpec>
|
</buildSpec>
|
||||||
<natures>
|
<natures>
|
||||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||||
<nature>com.altera.sbtgui.project.SBTGUINature</nature>
|
<nature>com.altera.sbtgui.project.SBTGUINature</nature>
|
||||||
<nature>com.altera.sbtgui.project.SBTGUIAppNature</nature>
|
<nature>com.altera.sbtgui.project.SBTGUIAppNature</nature>
|
||||||
<nature>com.altera.sbtgui.project.SBTGUIManagedNature</nature>
|
<nature>com.altera.sbtgui.project.SBTGUIManagedNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
</projectDescription>
|
</projectDescription>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<project>
|
<project>
|
||||||
<configuration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672" name="Nios II">
|
<configuration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.1595682672" name="Nios II">
|
||||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||||
<provider class="com.altera.sbtgui.project.importer.Nios2GCCBuiltinSpecsDetector" console="false" env-hash="1701080960758821589" id="altera.tool.Nios2GCCBuiltinSpecsDetector" keep-relative-paths="false" name="Nios II GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
<provider class="com.altera.sbtgui.project.importer.Nios2GCCBuiltinSpecsDetector" console="false" env-hash="-1220411458136844691" id="altera.tool.Nios2GCCBuiltinSpecsDetector" keep-relative-paths="false" name="Nios II GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||||
</provider>
|
</provider>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,42 +1,42 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* *
|
* *
|
||||||
* License Agreement *
|
* License Agreement *
|
||||||
* *
|
* *
|
||||||
* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. *
|
* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. *
|
||||||
* All rights reserved. *
|
* All rights reserved. *
|
||||||
* *
|
* *
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a *
|
* Permission is hereby granted, free of charge, to any person obtaining a *
|
||||||
* copy of this software and associated documentation files (the "Software"), *
|
* copy of this software and associated documentation files (the "Software"), *
|
||||||
* to deal in the Software without restriction, including without limitation *
|
* to deal in the Software without restriction, including without limitation *
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the *
|
* and/or sell copies of the Software, and to permit persons to whom the *
|
||||||
* Software is furnished to do so, subject to the following conditions: *
|
* Software is furnished to do so, subject to the following conditions: *
|
||||||
* *
|
* *
|
||||||
* The above copyright notice and this permission notice shall be included in *
|
* The above copyright notice and this permission notice shall be included in *
|
||||||
* all copies or substantial portions of the Software. *
|
* all copies or substantial portions of the Software. *
|
||||||
* *
|
* *
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *
|
||||||
* DEALINGS IN THE SOFTWARE. *
|
* DEALINGS IN THE SOFTWARE. *
|
||||||
* *
|
* *
|
||||||
* This agreement shall be governed in all respects by the laws of the State *
|
* This agreement shall be governed in all respects by the laws of the State *
|
||||||
* of California and by the laws of the United States of America. *
|
* of California and by the laws of the United States of America. *
|
||||||
* *
|
* *
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef __ALTERA_AVALON_SEM_REGS_H__
|
#ifndef __ALTERA_AVALON_SEM_REGS_H__
|
||||||
#define __ALTERA_AVALON_SEM_REGS_H__
|
#define __ALTERA_AVALON_SEM_REGS_H__
|
||||||
|
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
|
||||||
#define IORD_ALTERA_AVALON_SEM_CTL(base) IORD(base, 0)
|
#define IORD_ALTERA_AVALON_SEM_CTL(base) IORD(base, 0)
|
||||||
#define IOWR_ALTERA_AVALON_SEM_CTL(base, data) IOWR(base, 0, data)
|
#define IOWR_ALTERA_AVALON_SEM_CTL(base, data) IOWR(base, 0, data)
|
||||||
|
|
||||||
#define IORD_ALTERA_AVALON_SEM_DIVSET(base) IORD(base, 1)
|
#define IORD_ALTERA_AVALON_SEM_DIVSET(base) IORD(base, 1)
|
||||||
#define IOWR_ALTERA_AVALON_SEM_DIVSET(base, data) IOWR(base, 1, data)
|
#define IOWR_ALTERA_AVALON_SEM_DIVSET(base, data) IOWR(base, 1, data)
|
||||||
|
|
||||||
#endif /* __ALTERA_AVALON_SEM_REGS_H__ */
|
#endif /* __ALTERA_AVALON_SEM_REGS_H__ */
|
||||||
|
|
|
@ -1,114 +1,114 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# This script creates the blank_project application in this directory.
|
# This script creates the blank_project application in this directory.
|
||||||
|
|
||||||
|
|
||||||
BSP_DIR=../semafor_bsp
|
BSP_DIR=../semafor_bsp
|
||||||
QUARTUS_PROJECT_DIR=../../
|
QUARTUS_PROJECT_DIR=../../
|
||||||
NIOS2_APP_GEN_ARGS="--elf-name semafor.elf --no-src --set OBJDUMP_INCLUDE_SOURCE 1"
|
NIOS2_APP_GEN_ARGS="--elf-name semafor.elf --no-src --set OBJDUMP_INCLUDE_SOURCE 1"
|
||||||
|
|
||||||
|
|
||||||
# First, check to see if $SOPC_KIT_NIOS2 environmental variable is set.
|
# First, check to see if $SOPC_KIT_NIOS2 environmental variable is set.
|
||||||
# This variable is required for the command line tools to execute correctly.
|
# This variable is required for the command line tools to execute correctly.
|
||||||
if [ -z "${SOPC_KIT_NIOS2}" ]
|
if [ -z "${SOPC_KIT_NIOS2}" ]
|
||||||
then
|
then
|
||||||
echo Required \$SOPC_KIT_NIOS2 Environmental Variable is not set!
|
echo Required \$SOPC_KIT_NIOS2 Environmental Variable is not set!
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Also make sure that the APP has not been created already. Check for
|
# Also make sure that the APP has not been created already. Check for
|
||||||
# existence of Makefile in the app directory
|
# existence of Makefile in the app directory
|
||||||
if [ -f ./Makefile ]
|
if [ -f ./Makefile ]
|
||||||
then
|
then
|
||||||
echo Application has already been created! Delete Makefile if you want to create a new application makefile
|
echo Application has already been created! Delete Makefile if you want to create a new application makefile
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# We are selecting hal_default bsp because it supports this application.
|
# We are selecting hal_default bsp because it supports this application.
|
||||||
# Check to see if the hal_default has already been generated by checking for
|
# Check to see if the hal_default has already been generated by checking for
|
||||||
# existence of the public.mk file. If not, we need to run
|
# existence of the public.mk file. If not, we need to run
|
||||||
# create-this-bsp file to generate the bsp.
|
# create-this-bsp file to generate the bsp.
|
||||||
if [ ! -f ${BSP_DIR}/public.mk ]; then
|
if [ ! -f ${BSP_DIR}/public.mk ]; then
|
||||||
# Since BSP doesn't exist, create the BSP
|
# Since BSP doesn't exist, create the BSP
|
||||||
# Pass any command line arguments passed to this script to the BSP.
|
# Pass any command line arguments passed to this script to the BSP.
|
||||||
pushd ${BSP_DIR} >> /dev/null
|
pushd ${BSP_DIR} >> /dev/null
|
||||||
./create-this-bsp "$@" || {
|
./create-this-bsp "$@" || {
|
||||||
echo "create-this-bsp failed"
|
echo "create-this-bsp failed"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
popd >> /dev/null
|
popd >> /dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Don't run make if create-this-app script is called with --no-make arg
|
# Don't run make if create-this-app script is called with --no-make arg
|
||||||
SKIP_MAKE=
|
SKIP_MAKE=
|
||||||
while [ $# -gt 0 ]
|
while [ $# -gt 0 ]
|
||||||
do
|
do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--no-make)
|
--no-make)
|
||||||
SKIP_MAKE=1
|
SKIP_MAKE=1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
# Now we also need to go copy the sources for this application to the
|
# Now we also need to go copy the sources for this application to the
|
||||||
# local directory.
|
# local directory.
|
||||||
find "${SOPC_KIT_NIOS2}/examples/software/blank_project/" -name '*.c' -or -name '*.h' -or -name 'hostfs*' | xargs -i cp -L {} ./ || {
|
find "${SOPC_KIT_NIOS2}/examples/software/blank_project/" -name '*.c' -or -name '*.h' -or -name 'hostfs*' | xargs -i cp -L {} ./ || {
|
||||||
echo "failed during copying example source files"
|
echo "failed during copying example source files"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
find "${SOPC_KIT_NIOS2}/examples/software/blank_project/" -name 'readme.txt' -or -name 'Readme.txt' | xargs -i cp -L {} ./ || {
|
find "${SOPC_KIT_NIOS2}/examples/software/blank_project/" -name 'readme.txt' -or -name 'Readme.txt' | xargs -i cp -L {} ./ || {
|
||||||
echo "failed copying readme file"
|
echo "failed copying readme file"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -d "${SOPC_KIT_NIOS2}/examples/software/blank_project/system" ]
|
if [ -d "${SOPC_KIT_NIOS2}/examples/software/blank_project/system" ]
|
||||||
then
|
then
|
||||||
cp -RL "${SOPC_KIT_NIOS2}/examples/software/blank_project/system" . || {
|
cp -RL "${SOPC_KIT_NIOS2}/examples/software/blank_project/system" . || {
|
||||||
echo "failed during copying project support files"
|
echo "failed during copying project support files"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
chmod -R +w . || {
|
chmod -R +w . || {
|
||||||
echo "failed during changing file permissions"
|
echo "failed during changing file permissions"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd="nios2-app-generate-makefile --bsp-dir ${BSP_DIR} --set QUARTUS_PROJECT_DIR=${QUARTUS_PROJECT_DIR} ${NIOS2_APP_GEN_ARGS}"
|
cmd="nios2-app-generate-makefile --bsp-dir ${BSP_DIR} --set QUARTUS_PROJECT_DIR=${QUARTUS_PROJECT_DIR} ${NIOS2_APP_GEN_ARGS}"
|
||||||
|
|
||||||
echo "create-this-app: Running \"${cmd}\""
|
echo "create-this-app: Running \"${cmd}\""
|
||||||
$cmd || {
|
$cmd || {
|
||||||
echo "nios2-app-generate-makefile failed"
|
echo "nios2-app-generate-makefile failed"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ -z "$SKIP_MAKE" ]; then
|
if [ -z "$SKIP_MAKE" ]; then
|
||||||
cmd="make"
|
cmd="make"
|
||||||
|
|
||||||
echo "create-this-app: Running \"$cmd\""
|
echo "create-this-app: Running \"$cmd\""
|
||||||
$cmd || {
|
$cmd || {
|
||||||
echo "make failed"
|
echo "make failed"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "To download and run the application:"
|
echo "To download and run the application:"
|
||||||
echo " 1. Make sure the board is connected to the system."
|
echo " 1. Make sure the board is connected to the system."
|
||||||
echo " 2. Run 'nios2-configure-sof <SOF_FILE_PATH>' to configure the FPGA with the hardware design."
|
echo " 2. Run 'nios2-configure-sof <SOF_FILE_PATH>' to configure the FPGA with the hardware design."
|
||||||
echo " 3. If you have a stdio device, run 'nios2-terminal' in a different shell."
|
echo " 3. If you have a stdio device, run 'nios2-terminal' in a different shell."
|
||||||
echo " 4. Run 'make download-elf' from the application directory."
|
echo " 4. Run 'make download-elf' from the application directory."
|
||||||
echo
|
echo
|
||||||
echo "To debug the application:"
|
echo "To debug the application:"
|
||||||
echo " Import the project into Nios II Software Build Tools for Eclipse."
|
echo " Import the project into Nios II Software Build Tools for Eclipse."
|
||||||
echo " Refer to Nios II Software Build Tools for Eclipse Documentation for more information."
|
echo " Refer to Nios II Software Build Tools for Eclipse Documentation for more information."
|
||||||
echo
|
echo
|
||||||
echo -e ""
|
echo -e ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,167 +3,169 @@
|
||||||
00000020 T alt_exception
|
00000020 T alt_exception
|
||||||
00000020 T alt_irq_entry
|
00000020 T alt_irq_entry
|
||||||
000000fc T alt_irq_handler
|
000000fc T alt_irq_handler
|
||||||
000001d0 T alt_instruction_exception_entry
|
000001c4 T alt_instruction_exception_entry
|
||||||
00000230 T _start
|
00000224 T _start
|
||||||
00000244 t alt_after_alt_main
|
00000238 t alt_after_alt_main
|
||||||
00000248 T main
|
0000023c T main
|
||||||
00000338 T _puts_r
|
000002fc T _puts_r
|
||||||
000003f8 T puts
|
000003c8 T puts
|
||||||
0000040c T strlen
|
000003d8 T strlen
|
||||||
000004a4 t __fp_unlock
|
00000470 t __fp_lock
|
||||||
000004ac T _cleanup_r
|
00000478 T _cleanup_r
|
||||||
000004b8 t __sinit.part.1
|
00000484 t __fp_unlock
|
||||||
00000654 t __fp_lock
|
0000048c t __sinit.part.0
|
||||||
0000065c T __sfmoreglue
|
000005f4 T __sfmoreglue
|
||||||
000006d4 T __sfp
|
0000066c T __sfp
|
||||||
000007ec T _cleanup
|
000007c0 T _cleanup
|
||||||
00000804 T __sinit
|
000007d4 T __sinit
|
||||||
00000814 T __sfp_lock_acquire
|
000007e4 T __sfp_lock_acquire
|
||||||
00000818 T __sfp_lock_release
|
000007e8 T __sfp_lock_release
|
||||||
0000081c T __sinit_lock_acquire
|
000007ec T __sinit_lock_acquire
|
||||||
00000820 T __sinit_lock_release
|
000007f0 T __sinit_lock_release
|
||||||
00000824 T __fp_lock_all
|
000007f4 T __fp_lock_all
|
||||||
0000083c T __fp_unlock_all
|
00000808 T __fp_unlock_all
|
||||||
00000854 T __sfvwrite_r
|
0000081c T __sfvwrite_r
|
||||||
00000d1c T _fwalk
|
00000ce4 T _fwalk
|
||||||
00000de0 T _fwalk_reent
|
00000d7c T _fwalk_reent
|
||||||
00000ea4 T _malloc_r
|
00000e24 T _malloc_r
|
||||||
000016b0 T memchr
|
00001604 T memchr
|
||||||
00001794 T memcpy
|
000016d4 T memcpy
|
||||||
000018dc T memmove
|
000017d4 T memmove
|
||||||
00001a38 T memset
|
00001900 T memset
|
||||||
00001b60 T _realloc_r
|
000019f0 T _realloc_r
|
||||||
000020c4 T _sbrk_r
|
00001f54 T _sbrk_r
|
||||||
00002118 T __sread
|
00001fac T __sread
|
||||||
0000216c T __seofread
|
00002000 T __seofread
|
||||||
00002174 T __swrite
|
00002008 T __swrite
|
||||||
000021f0 T __sseek
|
00002088 T __sseek
|
||||||
0000224c T __sclose
|
000020e4 T __sclose
|
||||||
00002254 T _write_r
|
000020ec T _write_r
|
||||||
000022b4 T __swsetup_r
|
00002150 T __swsetup_r
|
||||||
00002408 T _close_r
|
000022b4 T _close_r
|
||||||
0000245c T _fclose_r
|
0000230c t _fclose_r.part.0
|
||||||
0000254c T fclose
|
000023cc T _fclose_r
|
||||||
00002560 T __sflush_r
|
0000243c T fclose
|
||||||
0000277c T _fflush_r
|
000024ac T __sflush_r
|
||||||
000027d8 T fflush
|
000026d4 T _fflush_r
|
||||||
00002808 T _malloc_trim_r
|
00002734 T fflush
|
||||||
0000292c T _free_r
|
000027b8 T _malloc_trim_r
|
||||||
00002c3c T _lseek_r
|
000028d4 T _free_r
|
||||||
00002c9c T __smakebuf_r
|
00002bd0 T _lseek_r
|
||||||
00002e58 T _read_r
|
00002c34 T __smakebuf_r
|
||||||
00002eb8 T _fstat_r
|
00002de4 T __swhatbuf_r
|
||||||
00002f14 T _isatty_r
|
00002e7c T _read_r
|
||||||
00002f68 T __divsi3
|
00002ee0 T _fstat_r
|
||||||
00002fec T __modsi3
|
00002f40 T _isatty_r
|
||||||
00003060 T __udivsi3
|
00002f98 T __divsi3
|
||||||
000030c4 T __umodsi3
|
00003018 T __modsi3
|
||||||
0000311c T __mulsi3
|
0000308c T __udivsi3
|
||||||
00003144 t alt_get_errno
|
000030f0 T __umodsi3
|
||||||
00003180 T close
|
0000314c T __mulsi3
|
||||||
00003258 T alt_dcache_flush
|
00003174 t alt_get_errno
|
||||||
00003280 t alt_dev_null_write
|
000031b0 T close
|
||||||
000032ac t alt_get_errno
|
0000328c T alt_dcache_flush
|
||||||
000032e8 T fstat
|
000032b4 t alt_dev_null_write
|
||||||
000033a0 t alt_get_errno
|
000032e0 t alt_get_errno
|
||||||
000033dc T isatty
|
0000331c T fstat
|
||||||
00003488 t alt_get_errno
|
000033d8 t alt_get_errno
|
||||||
000034c4 T lseek
|
00003414 T isatty
|
||||||
000035a0 T alt_main
|
000034c4 t alt_get_errno
|
||||||
0000361c T __malloc_lock
|
00003500 T lseek
|
||||||
00003640 T __malloc_unlock
|
000035e0 T alt_main
|
||||||
00003664 t alt_get_errno
|
0000365c T __malloc_lock
|
||||||
000036a0 T read
|
00003680 T __malloc_unlock
|
||||||
000037a4 T alt_release_fd
|
000036a4 t alt_get_errno
|
||||||
00003828 T sbrk
|
000036e0 T read
|
||||||
000038d8 t alt_get_errno
|
000037e8 T alt_release_fd
|
||||||
00003914 T write
|
00003858 T sbrk
|
||||||
00003a14 t alt_dev_reg
|
00003910 t alt_get_errno
|
||||||
00003a48 T alt_irq_init
|
0000394c T write
|
||||||
00003a80 T alt_sys_init
|
00003a50 t alt_dev_reg
|
||||||
00003ae0 T altera_avalon_jtag_uart_read_fd
|
00003a84 T alt_irq_init
|
||||||
00003b40 T altera_avalon_jtag_uart_write_fd
|
00003ac0 T alt_sys_init
|
||||||
00003ba0 T altera_avalon_jtag_uart_close_fd
|
00003b20 T altera_avalon_jtag_uart_read_fd
|
||||||
00003bf0 T altera_avalon_jtag_uart_ioctl_fd
|
00003b80 T altera_avalon_jtag_uart_write_fd
|
||||||
00003c44 T altera_avalon_jtag_uart_init
|
00003be0 T altera_avalon_jtag_uart_close_fd
|
||||||
00003d04 t altera_avalon_jtag_uart_irq
|
00003c30 T altera_avalon_jtag_uart_ioctl_fd
|
||||||
00003f10 t altera_avalon_jtag_uart_timeout
|
00003c84 T altera_avalon_jtag_uart_init
|
||||||
00003fb0 T altera_avalon_jtag_uart_close
|
00003d44 t altera_avalon_jtag_uart_irq
|
||||||
00004018 T altera_avalon_jtag_uart_ioctl
|
00003f50 t altera_avalon_jtag_uart_timeout
|
||||||
00004108 T altera_avalon_jtag_uart_read
|
00003ff0 T altera_avalon_jtag_uart_close
|
||||||
00004324 T altera_avalon_jtag_uart_write
|
00004058 T altera_avalon_jtag_uart_ioctl
|
||||||
00004548 t alt_avalon_timer_sc_irq
|
0000414c T altera_avalon_jtag_uart_read
|
||||||
000045c0 T alt_avalon_timer_sc_init
|
0000436c T altera_avalon_jtag_uart_write
|
||||||
0000463c T alt_alarm_start
|
00004594 t alt_avalon_timer_sc_irq
|
||||||
00004768 t alt_get_errno
|
00004610 T alt_avalon_timer_sc_init
|
||||||
000047a4 T alt_dev_llist_insert
|
00004694 T alt_alarm_start
|
||||||
00004848 T _do_ctors
|
000047c8 t alt_get_errno
|
||||||
000048a8 T _do_dtors
|
00004804 T alt_dev_llist_insert
|
||||||
00004908 T alt_ic_isr_register
|
000048ac T _do_ctors
|
||||||
00004958 T alt_ic_irq_enable
|
00004910 T _do_dtors
|
||||||
000049e0 T alt_ic_irq_disable
|
00004974 T alt_ic_isr_register
|
||||||
00004a6c T alt_ic_irq_enabled
|
000049c4 T alt_ic_irq_enable
|
||||||
00004ab8 T alt_iic_isr_register
|
00004a4c T alt_ic_irq_disable
|
||||||
00004ba8 t alt_open_fd
|
00004ad8 T alt_ic_irq_enabled
|
||||||
00004c8c T alt_io_redirect
|
00004b24 T alt_iic_isr_register
|
||||||
00004d08 t alt_get_errno
|
00004c0c t alt_open_fd
|
||||||
00004d44 t alt_file_locked
|
00004ce0 T alt_io_redirect
|
||||||
00004e30 T open
|
00004d5c t alt_get_errno
|
||||||
00004f8c T alt_alarm_stop
|
00004d98 t alt_file_locked
|
||||||
00005028 T alt_tick
|
00004e74 T open
|
||||||
00005130 T altera_nios2_gen2_irq_init
|
00004fd4 T alt_alarm_stop
|
||||||
00005154 T alt_find_dev
|
00005078 T alt_tick
|
||||||
000051e4 T alt_find_file
|
00005180 T altera_nios2_gen2_irq_init
|
||||||
000052ec T alt_get_fd
|
000051a4 T alt_find_dev
|
||||||
000053b0 T alt_exception_cause_generated_bad_addr
|
00005234 T alt_find_file
|
||||||
0000544c T atexit
|
0000533c T alt_get_fd
|
||||||
00005460 T exit
|
000053f4 T alt_exception_cause_generated_bad_addr
|
||||||
00005498 T memcmp
|
0000548c T atexit
|
||||||
00005514 T __register_exitproc
|
000054a0 T exit
|
||||||
0000562c T __call_exitprocs
|
000054d4 T memcmp
|
||||||
000057ac T _exit
|
0000554c T __register_exitproc
|
||||||
000057e0 A __CTOR_END__
|
000055dc T __call_exitprocs
|
||||||
000057e0 A __CTOR_LIST__
|
000056fc T _exit
|
||||||
000057e0 A __DTOR_END__
|
00005734 A __CTOR_END__
|
||||||
000057e0 A __DTOR_LIST__
|
00005734 A __CTOR_LIST__
|
||||||
000057e0 R divisors
|
00005734 A __DTOR_END__
|
||||||
0000585c g impure_data
|
00005734 A __DTOR_LIST__
|
||||||
00005c80 G __malloc_av_
|
00005734 R divisors
|
||||||
00006088 G alt_dev_null
|
000057ac g impure_data
|
||||||
000060b0 G alt_fd_list
|
00005bd0 G __malloc_av_
|
||||||
00006230 g jtag_uart
|
00005fd8 G alt_dev_null
|
||||||
00007290 G _global_impure_ptr
|
00006000 G alt_fd_list
|
||||||
00007294 G _impure_ptr
|
00006180 g jtag_uart
|
||||||
00007298 G __malloc_sbrk_base
|
000071e0 G _global_impure_ptr
|
||||||
0000729c G __malloc_trim_threshold
|
000071e4 G _impure_ptr
|
||||||
000072a0 G alt_fs_list
|
000071e8 G __malloc_sbrk_base
|
||||||
000072a8 G alt_dev_list
|
000071ec G __malloc_trim_threshold
|
||||||
000072b0 G alt_max_fd
|
000071f0 G alt_fs_list
|
||||||
000072b4 G alt_errno
|
000071f8 G alt_dev_list
|
||||||
000072b8 g heap_end
|
00007200 G alt_max_fd
|
||||||
000072bc G alt_priority_mask
|
00007204 G alt_errno
|
||||||
000072c0 G alt_alarm_list
|
00007208 g heap_end
|
||||||
000072c8 A __bss_start
|
0000720c G alt_priority_mask
|
||||||
000072c8 B __malloc_max_total_mem
|
00007210 G alt_alarm_list
|
||||||
000072c8 A _edata
|
00007218 A __bss_start
|
||||||
000072cc B __malloc_max_sbrked_mem
|
00007218 S __malloc_max_total_mem
|
||||||
000072d0 B __malloc_top_pad
|
00007218 A _edata
|
||||||
000072d4 B errno
|
0000721c S __malloc_max_sbrked_mem
|
||||||
000072d8 B alt_argc
|
00007220 S __malloc_top_pad
|
||||||
000072dc B alt_argv
|
00007224 S errno
|
||||||
000072e0 B alt_envp
|
00007228 S alt_argc
|
||||||
000072e4 B alt_irq_active
|
0000722c S alt_argv
|
||||||
000072e8 B _alt_tick_rate
|
00007230 S alt_envp
|
||||||
000072ec B _alt_nticks
|
00007234 S alt_irq_active
|
||||||
000072f0 B alt_instruction_exception_handler
|
00007238 S _alt_tick_rate
|
||||||
000072f4 B __malloc_current_mallinfo
|
0000723c S _alt_nticks
|
||||||
0000731c B alt_irq
|
00007240 S alt_instruction_exception_handler
|
||||||
0000741c A __alt_heap_start
|
00007244 S __malloc_current_mallinfo
|
||||||
0000741c A __alt_stack_base
|
0000726c S alt_irq
|
||||||
0000741c A __bss_end
|
0000736c A __alt_heap_start
|
||||||
0000741c A _end
|
0000736c A __alt_stack_base
|
||||||
0000741c A end
|
0000736c A __bss_end
|
||||||
0000f290 A _gp
|
0000736c A _end
|
||||||
|
0000736c A end
|
||||||
|
0000f1e0 A _gp
|
||||||
00020000 A __alt_data_end
|
00020000 A __alt_data_end
|
||||||
00020000 A __alt_heap_limit
|
00020000 A __alt_heap_limit
|
||||||
00020000 A __alt_stack_pointer
|
00020000 A __alt_stack_pointer
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -59,6 +59,6 @@ configure wave -griddelta 40
|
||||||
configure wave -timeline 0
|
configure wave -timeline 0
|
||||||
configure wave -timelineunits ns
|
configure wave -timelineunits ns
|
||||||
update
|
update
|
||||||
WaveRestoreZoom {0 ps} {662 ps}
|
WaveRestoreZoom {565752283 ps} {596447355 ps}
|
||||||
|
|
||||||
run 800us
|
run 800us
|
|
@ -1,11 +1,11 @@
|
||||||
This template is starting point for creating a project based on your custom C code.
|
This template is starting point for creating a project based on your custom C code.
|
||||||
It will provide you a default project to which you can add your software files. To
|
It will provide you a default project to which you can add your software files. To
|
||||||
add files to a project, manually copy the file into the application directory (e.g.
|
add files to a project, manually copy the file into the application directory (e.g.
|
||||||
using Windows Explorer), then right click on your application project and select
|
using Windows Explorer), then right click on your application project and select
|
||||||
refresh.
|
refresh.
|
||||||
|
|
||||||
You can also add files to the project using the Nios II Software Build Tools for Eclipse import function.
|
You can also add files to the project using the Nios II Software Build Tools for Eclipse import function.
|
||||||
Select File -> Import.
|
Select File -> Import.
|
||||||
Expand General and select File System in the Import Window and click Next.
|
Expand General and select File System in the Import Window and click Next.
|
||||||
Identify the appropriate source and destination directories.
|
Identify the appropriate source and destination directories.
|
||||||
Check the files you want to add and click Finish.
|
Check the files you want to add and click Finish.
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
#define TIME_SETS 4
|
#define TIME_SETS 4
|
||||||
#define TIME_STATES 4
|
#define TIME_STATES 4
|
||||||
const alt_u32 divisors[TIME_SETS][TIME_STATES] = {
|
const alt_u32 divisors[TIME_SETS][TIME_STATES] = {
|
||||||
{0x00000010, 0x00000010, 0x00000005, 0x00000010},
|
{0x0ff00010, 0x0ff00010, 0x0ff00005, 0x00700010},
|
||||||
{0x00000010, 0x00000020, 0x00000010, 0x00000010},
|
{0x0ff00010, 0x0ff00020, 0x0ff00010, 0x00700010},
|
||||||
{0x000000f1, 0x000000f1, 0x000000f1, 0x00000011},
|
{0x0ff000f1, 0x0ff000f1, 0x0ff000f1, 0x00700011},
|
||||||
{0x000000d1, 0x000000f1, 0x000000f1, 0x00000011}
|
{0x0ff000d1, 0x0ff000f1, 0x0ff000f1, 0x00700011}
|
||||||
};
|
};
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -21,19 +21,15 @@ int main()
|
||||||
//program divisors
|
//program divisors
|
||||||
p = (alt_u32*) SEM_RAM_SLAVE_BASE;
|
p = (alt_u32*) SEM_RAM_SLAVE_BASE;
|
||||||
for (i = 0; i < TIME_SETS; i++) {
|
for (i = 0; i < TIME_SETS; i++) {
|
||||||
tmp = 0;
|
|
||||||
for (j = TIME_STATES; j > 0; j--) {
|
for (j = TIME_STATES; j > 0; j--) {
|
||||||
tmp = (tmp << 32) | divisors[i][j - 1];
|
*p = divisors[i][j - 1];
|
||||||
|
alt_dcache_flush();
|
||||||
|
p++;
|
||||||
}
|
}
|
||||||
*p = tmp;
|
|
||||||
p++;
|
|
||||||
}
|
}
|
||||||
//since we use pointers (cached data access) to write divisor RAM,
|
|
||||||
//and not direct i/o access with IOWR, we need to flush cache
|
|
||||||
alt_dcache_flush();
|
|
||||||
|
|
||||||
//select timeset and run semafor
|
//select timeset and run semafor
|
||||||
IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x00);
|
IOWR_ALTERA_AVALON_SEM_DIVSET(SEM_CTL_SLAVE_BASE,0x02);
|
||||||
IOWR_ALTERA_AVALON_SEM_CTL(SEM_CTL_SLAVE_BASE,0x01);
|
IOWR_ALTERA_AVALON_SEM_CTL(SEM_CTL_SLAVE_BASE,0x01);
|
||||||
|
|
||||||
printf("Ready\n");
|
printf("Ready\n");
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,8 +1,8 @@
|
||||||
# Reading C:/Software/intelFPGA_lite/18.1/modelsim_ase/tcl/vsim/pref.tcl
|
# Reading C:/Software/intelFPGA_lite/18.1/modelsim_ase/tcl/vsim/pref.tcl
|
||||||
# vsim -gui null_sim.mpf
|
# vsim -gui null_sim.mpf
|
||||||
# Start time: 01:19:59 on Dec 24,2022
|
# Start time: 01:19:59 on Dec 24,2022
|
||||||
# ** Error (suppressible): (vsim-19) Failed to access library 'null_sim' at "null_sim".
|
# ** Error (suppressible): (vsim-19) Failed to access library 'null_sim' at "null_sim".
|
||||||
# No such file or directory. (errno = ENOENT)
|
# No such file or directory. (errno = ENOENT)
|
||||||
# Error loading design
|
# Error loading design
|
||||||
# End time: 01:19:59 on Dec 24,2022, Elapsed time: 0:00:00
|
# End time: 01:19:59 on Dec 24,2022, Elapsed time: 0:00:00
|
||||||
# Errors: 1, Warnings: 0
|
# Errors: 1, Warnings: 0
|
||||||
|
|
|
@ -1,56 +1,56 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
<buildSystem id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529">
|
<buildSystem id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529">
|
||||||
<storageModule id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529" moduleId="org.eclipse.cdt.core.settings"/>
|
<storageModule id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529" moduleId="org.eclipse.cdt.core.settings"/>
|
||||||
</buildSystem>
|
</buildSystem>
|
||||||
<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529">
|
<cconfiguration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529">
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529" name="Nios II" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
<configuration buildProperties="" description="" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529" name="Nios II" parent="org.eclipse.cdt.build.core.prefbase.cfg">
|
||||||
<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529." name="/" resourcePath="">
|
<folderInfo id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529." name="/" resourcePath="">
|
||||||
<toolChain id="altera.nios2.mingw.gcc4.1075875993" name="MinGW Nios II GCC4" superClass="altera.nios2.mingw.gcc4">
|
<toolChain id="altera.nios2.mingw.gcc4.1075875993" name="MinGW Nios II GCC4" superClass="altera.nios2.mingw.gcc4">
|
||||||
<targetPlatform id="altera.nios2.mingw.gcc4.199526272" name="Nios II" superClass="altera.nios2.mingw.gcc4"/>
|
<targetPlatform id="altera.nios2.mingw.gcc4.199526272" name="Nios II" superClass="altera.nios2.mingw.gcc4"/>
|
||||||
<builder buildPath="${workspace_loc://semafor_bsp}" id="altera.tool.gnu.builder.mingw.739389354" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="altera.tool.gnu.builder.mingw"/>
|
<builder buildPath="${workspace_loc://semafor_bsp}" id="altera.tool.gnu.builder.mingw.739389354" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="altera.tool.gnu.builder.mingw"/>
|
||||||
<tool id="altera.tool.gnu.c.compiler.mingw.1217641548" name="Nios II GCC C Compiler" superClass="altera.tool.gnu.c.compiler.mingw">
|
<tool id="altera.tool.gnu.c.compiler.mingw.1217641548" name="Nios II GCC C Compiler" superClass="altera.tool.gnu.c.compiler.mingw">
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.2069582818" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
|
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.2069582818" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="altera.tool.gnu.cpp.compiler.mingw.1496541669" name="Nios II GCC C++ Compiler" superClass="altera.tool.gnu.cpp.compiler.mingw">
|
<tool id="altera.tool.gnu.cpp.compiler.mingw.1496541669" name="Nios II GCC C++ Compiler" superClass="altera.tool.gnu.cpp.compiler.mingw">
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1563108919" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
|
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1563108919" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="altera.tool.gnu.archiver.mingw.2037617920" name="Nios II GCC Archiver" superClass="altera.tool.gnu.archiver.mingw"/>
|
<tool id="altera.tool.gnu.archiver.mingw.2037617920" name="Nios II GCC Archiver" superClass="altera.tool.gnu.archiver.mingw"/>
|
||||||
<tool id="altera.tool.gnu.c.linker.mingw.1007181127" name="Nios II GCC C Linker" superClass="altera.tool.gnu.c.linker.mingw"/>
|
<tool id="altera.tool.gnu.c.linker.mingw.1007181127" name="Nios II GCC C Linker" superClass="altera.tool.gnu.c.linker.mingw"/>
|
||||||
<tool id="altera.tool.gnu.assembler.mingw.1082928765" name="Nios II GCC Assembler" superClass="altera.tool.gnu.assembler.mingw">
|
<tool id="altera.tool.gnu.assembler.mingw.1082928765" name="Nios II GCC Assembler" superClass="altera.tool.gnu.assembler.mingw">
|
||||||
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.2052885548" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.2052885548" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
</toolChain>
|
</toolChain>
|
||||||
</folderInfo>
|
</folderInfo>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529" moduleId="org.eclipse.cdt.core.settings" name="Nios II">
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529" moduleId="org.eclipse.cdt.core.settings" name="Nios II">
|
||||||
<externalSettings/>
|
<externalSettings/>
|
||||||
<extensions>
|
<extensions>
|
||||||
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<project id="semafor_bsp.null.1473022277" name="semafor_bsp"/>
|
<project id="semafor_bsp.null.1473022277" name="semafor_bsp"/>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
||||||
<storageModule moduleId="scannerConfiguration">
|
<storageModule moduleId="scannerConfiguration">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529.;altera.tool.gnu.cpp.compiler.mingw.1496541669;cdt.managedbuild.tool.gnu.cpp.compiler.input.1563108919">
|
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529.;altera.tool.gnu.cpp.compiler.mingw.1496541669;cdt.managedbuild.tool.gnu.cpp.compiler.input.1563108919">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529.;altera.tool.gnu.c.compiler.mingw.1217641548;cdt.managedbuild.tool.gnu.c.compiler.input.2069582818">
|
<scannerConfigBuildInfo instanceId="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529;preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529.;altera.tool.gnu.c.compiler.mingw.1217641548;cdt.managedbuild.tool.gnu.c.compiler.input.2069582818">
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
</cproject>
|
</cproject>
|
||||||
|
|
|
@ -1,29 +1,29 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<projectDescription>
|
<projectDescription>
|
||||||
<name>semafor_bsp</name>
|
<name>semafor_bsp</name>
|
||||||
<comment></comment>
|
<comment></comment>
|
||||||
<projects>
|
<projects>
|
||||||
</projects>
|
</projects>
|
||||||
<buildSpec>
|
<buildSpec>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||||
<triggers>clean,full,incremental,</triggers>
|
<triggers>clean,full,incremental,</triggers>
|
||||||
<arguments>
|
<arguments>
|
||||||
</arguments>
|
</arguments>
|
||||||
</buildCommand>
|
</buildCommand>
|
||||||
<buildCommand>
|
<buildCommand>
|
||||||
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
<triggers>full,incremental,</triggers>
|
<triggers>full,incremental,</triggers>
|
||||||
<arguments>
|
<arguments>
|
||||||
</arguments>
|
</arguments>
|
||||||
</buildCommand>
|
</buildCommand>
|
||||||
</buildSpec>
|
</buildSpec>
|
||||||
<natures>
|
<natures>
|
||||||
<nature>org.eclipse.cdt.core.cnature</nature>
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
<nature>org.eclipse.cdt.core.ccnature</nature>
|
<nature>org.eclipse.cdt.core.ccnature</nature>
|
||||||
<nature>com.altera.sbtgui.project.SBTGUINature</nature>
|
<nature>com.altera.sbtgui.project.SBTGUINature</nature>
|
||||||
<nature>com.altera.sbtgui.project.SBTGUIBspNature</nature>
|
<nature>com.altera.sbtgui.project.SBTGUIBspNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
</projectDescription>
|
</projectDescription>
|
||||||
|
|
|
@ -2,13 +2,12 @@
|
||||||
<project>
|
<project>
|
||||||
<configuration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529" name="Nios II">
|
<configuration id="preference.org.eclipse.cdt.managedbuilder.core.configurationDataProvider.283370529" name="Nios II">
|
||||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||||
<provider class="com.altera.sbtgui.project.importer.Nios2GCCBuiltinSpecsDetector" console="false" env-hash="1701080960758821589" id="altera.tool.Nios2GCCBuiltinSpecsDetector" keep-relative-paths="false" name="Nios II GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
|
<provider class="com.altera.sbtgui.project.importer.Nios2GCCBuiltinSpecsDetector" console="false" env-hash="-1220411458136844691" id="altera.tool.Nios2GCCBuiltinSpecsDetector" keep-relative-paths="false" name="Nios II GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||||
</provider>
|
</provider>
|
||||||
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser" id="altera.tool.Nios2GCCBuildCommandParser" keep-relative-paths="false" name="Nios II GCC Build Output Parser" parameter="(nios2-elf-gcc)|(nios2-elf-g\+\+)" prefer-non-shared="true"/>
|
|
||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
|
||||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
|
||||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
</extension>
|
</extension>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -19,27 +19,27 @@ SPACE := $(empty) $(empty)
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
# The adjust-path macro
|
# The adjust-path macro
|
||||||
#
|
|
||||||
# If COMSPEC is defined, Make is launched from Windows through
|
|
||||||
# Cygwin. This adjust-path macro will call 'cygpath -u' on all
|
|
||||||
# paths to ensure they are readable by Make.
|
|
||||||
#
|
#
|
||||||
# If COMSPEC is not defined, Make is launched from *nix, and no adjustment
|
# If Make is launched from Windows through
|
||||||
# is necessary
|
# Windows Subsystem for Linux (WSL). The adjust-path macro converts absolute windows
|
||||||
|
# paths into unix style paths (Example: c:/dir -> /c/dir).
|
||||||
|
# The adjust_path_mixed function converts WSL path to Windows path.
|
||||||
|
# This will ensure paths are readable by GNU Make.
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
ifndef COMSPEC
|
UNAME = $(shell uname -r)
|
||||||
ifdef ComSpec
|
ifeq ($(findstring Microsoft,$(UNAME)),Microsoft)
|
||||||
COMSPEC = $(ComSpec)
|
WINDOWS_EXE = .exe
|
||||||
endif # ComSpec
|
endif
|
||||||
endif # !COMSPEC
|
|
||||||
|
|
||||||
ifdef COMSPEC
|
eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
|
||||||
adjust-path = $(subst $(SPACE),\$(SPACE),$(shell cygpath -u "$1"))
|
|
||||||
adjust-path-mixed = $(subst $(SPACE),\$(SPACE),$(shell cygpath -m "$1"))
|
ifdef WINDOWS_EXE
|
||||||
else
|
adjust-path = $(if $1,$(shell wslpath "$1"),)
|
||||||
adjust-path = $(subst $(SPACE),\$(SPACE),$1)
|
adjust-path-mixed = $(if $(call eq,$(shell echo $1 | head -c 5),/mnt/),$(shell echo $1 | sed 's/\/mnt\///g;s/\//:\//1'),$1)
|
||||||
adjust-path-mixed = $(subst $(SPACE),\$(SPACE),$1)
|
else # !WINDOWS_EXE
|
||||||
|
adjust-path = $1
|
||||||
|
adjust-path-mixed = $1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
|
@ -62,7 +62,7 @@ all:
|
||||||
BSP_ROOT_DIR := .
|
BSP_ROOT_DIR := .
|
||||||
|
|
||||||
# Define absolute path to the root of the BSP.
|
# Define absolute path to the root of the BSP.
|
||||||
ABS_BSP_ROOT := $(call adjust-path-mixed,$(shell pwd))
|
ABS_BSP_ROOT := $(shell pwd)
|
||||||
|
|
||||||
# Stash all BSP object files here
|
# Stash all BSP object files here
|
||||||
OBJ_DIR := ./obj
|
OBJ_DIR := ./obj
|
||||||
|
@ -93,12 +93,12 @@ OBJ_DIR := ./obj
|
||||||
|
|
||||||
# This following VERSION comment indicates the version of the tool used to
|
# This following VERSION comment indicates the version of the tool used to
|
||||||
# generate this makefile. A makefile variable is provided for VERSION as well.
|
# generate this makefile. A makefile variable is provided for VERSION as well.
|
||||||
# ACDS_VERSION: 18.1
|
# ACDS_VERSION: 20.1
|
||||||
ACDS_VERSION := 18.1
|
ACDS_VERSION := 20.1
|
||||||
|
|
||||||
# This following BUILD_NUMBER comment indicates the build number of the tool
|
# This following BUILD_NUMBER comment indicates the build number of the tool
|
||||||
# used to generate this makefile.
|
# used to generate this makefile.
|
||||||
# BUILD_NUMBER: 625
|
# BUILD_NUMBER: 720
|
||||||
|
|
||||||
SETTINGS_FILE := settings.bsp
|
SETTINGS_FILE := settings.bsp
|
||||||
SOPC_FILE := ../../niosII.sopcinfo
|
SOPC_FILE := ../../niosII.sopcinfo
|
||||||
|
@ -112,10 +112,10 @@ SOPC_FILE := ../../niosII.sopcinfo
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
# Archiver command. Creates library files.
|
# Archiver command. Creates library files.
|
||||||
AR = nios2-elf-ar
|
AR = nios2-elf-ar$(WINDOWS_EXE)
|
||||||
|
|
||||||
# Assembler command. Note that CC is used for .S files.
|
# Assembler command. Note that CC is used for .S files.
|
||||||
AS = nios2-elf-gcc
|
AS = nios2-elf-gcc$(WINDOWS_EXE)
|
||||||
|
|
||||||
# Custom flags only passed to the archiver. This content of this variable is
|
# Custom flags only passed to the archiver. This content of this variable is
|
||||||
# directly passed to the archiver rather than the more standard "ARFLAGS". The
|
# directly passed to the archiver rather than the more standard "ARFLAGS". The
|
||||||
|
@ -145,10 +145,10 @@ BSP_CFLAGS_OPTIMIZATION = -O0
|
||||||
BSP_CFLAGS_WARNINGS = -Wall
|
BSP_CFLAGS_WARNINGS = -Wall
|
||||||
|
|
||||||
# C compiler command.
|
# C compiler command.
|
||||||
CC = nios2-elf-gcc -xc
|
CC = nios2-elf-gcc$(WINDOWS_EXE) -xc
|
||||||
|
|
||||||
# C++ compiler command.
|
# C++ compiler command.
|
||||||
CXX = nios2-elf-gcc -xc++
|
CXX = nios2-elf-gcc$(WINDOWS_EXE) -xc++
|
||||||
|
|
||||||
# Command used to remove files during 'clean' target.
|
# Command used to remove files during 'clean' target.
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
|
@ -516,13 +516,13 @@ build_post_process :
|
||||||
# Skip this check when clean is the only target
|
# Skip this check when clean is the only target
|
||||||
ifneq ($(MAKECMDGOALS),clean)
|
ifneq ($(MAKECMDGOALS),clean)
|
||||||
|
|
||||||
ifneq ($(wildcard $(SETTINGS_FILE)),$(SETTINGS_FILE))
|
ifneq ($(wildcard $(call adjust-path,$(SETTINGS_FILE))),$(call adjust-path,$(SETTINGS_FILE)))
|
||||||
$(warning Warning: BSP Settings File $(SETTINGS_FILE) could not be found.)
|
$(warning Warning: BSP Settings File $(SETTINGS_FILE) could not be found.)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
Makefile: $(wildcard $(SETTINGS_FILE))
|
Makefile: $(wildcard $(call adjust-path,$(SETTINGS_FILE)))
|
||||||
@$(ECHO) Makefile not up to date.
|
@$(ECHO) Makefile not up to date.
|
||||||
@$(ECHO) $(SETTINGS_FILE) has been modified since the BSP Makefile was generated.
|
@$(ECHO) $(call adjust-path,$(SETTINGS_FILE)) has been modified since the BSP Makefile was generated.
|
||||||
@$(ECHO)
|
@$(ECHO)
|
||||||
@$(ECHO) Generate the BSP to update the Makefile, and then build again.
|
@$(ECHO) Generate the BSP to update the Makefile, and then build again.
|
||||||
@$(ECHO)
|
@$(ECHO)
|
||||||
|
@ -535,13 +535,13 @@ Makefile: $(wildcard $(SETTINGS_FILE))
|
||||||
@$(ECHO)
|
@$(ECHO)
|
||||||
@exit 1
|
@exit 1
|
||||||
|
|
||||||
ifneq ($(wildcard $(SOPC_FILE)),$(SOPC_FILE))
|
ifneq ($(wildcard $(call adjust-path,$(SOPC_FILE))),$(call adjust-path,$(SOPC_FILE)))
|
||||||
$(warning Warning: SOPC File $(SOPC_FILE) could not be found.)
|
$(warning Warning: SOPC File $(SOPC_FILE) could not be found.)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
public.mk: $(wildcard $(SOPC_FILE))
|
public.mk: $(wildcard $(call adjust-path,$(SOPC_FILE)))
|
||||||
@$(ECHO) Makefile not up to date.
|
@$(ECHO) Makefile not up to date.
|
||||||
@$(ECHO) $(SOPC_FILE) has been modified since the BSP was generated.
|
@$(ECHO) $(call adjust-path,$(SOPC_FILE)) has been modified since the BSP was generated.
|
||||||
@$(ECHO)
|
@$(ECHO)
|
||||||
@$(ECHO) Generate the BSP to update the Makefile, and then build again.
|
@$(ECHO) Generate the BSP to update the Makefile, and then build again.
|
||||||
@$(ECHO)
|
@$(ECHO)
|
||||||
|
|
|
@ -1,52 +1,52 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# This script creates the ucosii_net_zipfs Board Support Package (BSP).
|
# This script creates the ucosii_net_zipfs Board Support Package (BSP).
|
||||||
|
|
||||||
BSP_TYPE=hal
|
BSP_TYPE=hal
|
||||||
BSP_DIR=.
|
BSP_DIR=.
|
||||||
SOPC_DIR=../../
|
SOPC_DIR=../../
|
||||||
SOPC_FILE=../../niosII.sopcinfo
|
SOPC_FILE=../../niosII.sopcinfo
|
||||||
NIOS2_BSP_ARGS=""
|
NIOS2_BSP_ARGS=""
|
||||||
CPU_NAME=
|
CPU_NAME=
|
||||||
|
|
||||||
if [ -n "$CPU_NAME" ]; then
|
if [ -n "$CPU_NAME" ]; then
|
||||||
NIOS2_BSP_ARGS="$NIOS2_BSP_ARGS --cpu-name $CPU_NAME"
|
NIOS2_BSP_ARGS="$NIOS2_BSP_ARGS --cpu-name $CPU_NAME"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Don't run make if create-this-app script is called with --no-make arg
|
# Don't run make if create-this-app script is called with --no-make arg
|
||||||
SKIP_MAKE=
|
SKIP_MAKE=
|
||||||
while [ $# -gt 0 ]
|
while [ $# -gt 0 ]
|
||||||
do
|
do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--no-make)
|
--no-make)
|
||||||
SKIP_MAKE=1
|
SKIP_MAKE=1
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
NIOS2_BSP_ARGS="$NIOS2_BSP_ARGS $1"
|
NIOS2_BSP_ARGS="$NIOS2_BSP_ARGS $1"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
# Run nios2-bsp utility to create a hal BSP in this directory
|
# Run nios2-bsp utility to create a hal BSP in this directory
|
||||||
# for the system with a .sopc file in $SOPC_FILE.
|
# for the system with a .sopc file in $SOPC_FILE.
|
||||||
# Deprecating $SOPC_DIR in 10.1. Multiple .sopcinfo files in a directory may exist.
|
# Deprecating $SOPC_DIR in 10.1. Multiple .sopcinfo files in a directory may exist.
|
||||||
|
|
||||||
if [ -z "$SOPC_FILE" ]; then
|
if [ -z "$SOPC_FILE" ]; then
|
||||||
echo "WARNING: Use of a directory for locating a .sopcinfo file is deprecated in 10.1. Multiple .sopcinfo files may exist. You must specify the full .sopcinfo path."
|
echo "WARNING: Use of a directory for locating a .sopcinfo file is deprecated in 10.1. Multiple .sopcinfo files may exist. You must specify the full .sopcinfo path."
|
||||||
cmd="nios2-bsp $BSP_TYPE $BSP_DIR $SOPC_DIR $NIOS2_BSP_ARGS"
|
cmd="nios2-bsp $BSP_TYPE $BSP_DIR $SOPC_DIR $NIOS2_BSP_ARGS"
|
||||||
else
|
else
|
||||||
cmd="nios2-bsp $BSP_TYPE $BSP_DIR $SOPC_FILE $NIOS2_BSP_ARGS"
|
cmd="nios2-bsp $BSP_TYPE $BSP_DIR $SOPC_FILE $NIOS2_BSP_ARGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "create-this-bsp: Running \"$cmd\""
|
echo "create-this-bsp: Running \"$cmd\""
|
||||||
$cmd || {
|
$cmd || {
|
||||||
echo "$cmd failed"
|
echo "$cmd failed"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
if [ -z "$SKIP_MAKE" ]; then
|
if [ -z "$SKIP_MAKE" ]; then
|
||||||
echo "create-this-bsp: Running make"
|
echo "create-this-bsp: Running make"
|
||||||
make
|
make
|
||||||
fi
|
fi
|
||||||
|
|
Binary file not shown.
|
@ -22,6 +22,32 @@
|
||||||
#
|
#
|
||||||
#########################################################################
|
#########################################################################
|
||||||
|
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
# The adjust-path macro
|
||||||
|
#
|
||||||
|
# If Make is launched from Windows through
|
||||||
|
# Windows Subsystem for Linux (WSL). The adjust-path macro converts absolute windows
|
||||||
|
# paths into unix style paths (Example: c:/dir -> /c/dir).
|
||||||
|
# The adjust_path_mixed function converts WSL path to Windows path.
|
||||||
|
# This will ensure paths are readable by GNU Make.
|
||||||
|
#------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
UNAME = $(shell uname -r)
|
||||||
|
ifeq ($(findstring Microsoft,$(UNAME)),Microsoft)
|
||||||
|
WINDOWS_EXE = .exe
|
||||||
|
endif
|
||||||
|
|
||||||
|
eq = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1)))
|
||||||
|
|
||||||
|
ifdef WINDOWS_EXE
|
||||||
|
adjust-path = $(if $1,$(shell wslpath "$1"),)
|
||||||
|
adjust-path-mixed = $(if $(call eq,$(shell echo $1 | head -c 5),/mnt/),$(shell echo $1 | sed 's/\/mnt\///g;s/\//:\//1'),$1)
|
||||||
|
else # !WINDOWS_EXE
|
||||||
|
adjust-path = $1
|
||||||
|
adjust-path-mixed = $1
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(MEM_INIT_FILE),)
|
ifeq ($(MEM_INIT_FILE),)
|
||||||
# MEM_INIT_FILE should be set equal to the working relative path to this
|
# MEM_INIT_FILE should be set equal to the working relative path to this
|
||||||
# mem_init.mk makefile fragment
|
# mem_init.mk makefile fragment
|
||||||
|
@ -33,11 +59,11 @@ ELF2DAT := elf2dat
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ELF2HEX),)
|
ifeq ($(ELF2HEX),)
|
||||||
ELF2HEX := elf2hex
|
ELF2HEX := elf2hex$(WINDOWS_EXE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ELF2FLASH),)
|
ifeq ($(ELF2FLASH),)
|
||||||
ELF2FLASH := elf2flash
|
ELF2FLASH := elf2flash$(WINDOWS_EXE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(FLASH2DAT),)
|
ifeq ($(FLASH2DAT),)
|
||||||
|
@ -45,11 +71,11 @@ FLASH2DAT := flash2dat
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ALT_FILE_CONVERT),)
|
ifeq ($(ALT_FILE_CONVERT),)
|
||||||
ALT_FILE_CONVERT := alt-file-convert
|
ALT_FILE_CONVERT := alt-file-convert$(WINDOWS_EXE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(NM),)
|
ifeq ($(NM),)
|
||||||
NM := nios2-elf-nm
|
NM := nios2-elf-nm$(WINDOWS_EXE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(MKDIR),)
|
ifeq ($(MKDIR),)
|
||||||
|
@ -87,9 +113,16 @@ MEM_INIT_QIP_FILE ?= $(MEM_INIT_DIR)/meminit.qip
|
||||||
#-------------------------------------
|
#-------------------------------------
|
||||||
|
|
||||||
BOOT_LOADER_PATH ?= $(SOPC_KIT_NIOS2)/components/altera_nios2
|
BOOT_LOADER_PATH ?= $(SOPC_KIT_NIOS2)/components/altera_nios2
|
||||||
BOOT_LOADER_CFI ?= $(BOOT_LOADER_PATH)/boot_loader_cfi.srec
|
BOOT_LOADER_CFI_LOC ?= $(BOOT_LOADER_PATH)/boot_loader_cfi.srec
|
||||||
BOOT_LOADER_CFI_BE ?= $(BOOT_LOADER_PATH)/boot_loader_cfi_be.srec
|
BOOT_LOADER_CFI_BE_LOC ?= $(BOOT_LOADER_PATH)/boot_loader_cfi_be.srec
|
||||||
|
|
||||||
|
ifdef WINDOWS_EXE
|
||||||
|
BOOT_LOADER_CFI=$(shell wslpath -w $(BOOT_LOADER_CFI_LOC))
|
||||||
|
BOOT_LOADER_CFI_BE=$(shell wslpath -w $(BOOT_LOADER_CFI_BE_LOC))
|
||||||
|
else # !WINDOWS_EXE
|
||||||
|
BOOT_LOADER_CFI=$(BOOT_LOADER_CFI_LOC)
|
||||||
|
BOOT_LOADER_CFI_BE=$(BOOT_LOADER_CFI_BE_LOC)
|
||||||
|
endif
|
||||||
|
|
||||||
#-------------------------------------
|
#-------------------------------------
|
||||||
# Default Target
|
# Default Target
|
||||||
|
@ -150,15 +183,15 @@ flash2dat_extra_args = $(mem_pad_flag) $(mem_reloc_input_flag)
|
||||||
|
|
||||||
# This following VERSION comment indicates the version of the tool used to
|
# This following VERSION comment indicates the version of the tool used to
|
||||||
# generate this makefile. A makefile variable is provided for VERSION as well.
|
# generate this makefile. A makefile variable is provided for VERSION as well.
|
||||||
# ACDS_VERSION: 18.1
|
# ACDS_VERSION: 20.1
|
||||||
ACDS_VERSION := 18.1
|
ACDS_VERSION := 20.1
|
||||||
|
|
||||||
# This following BUILD_NUMBER comment indicates the build number of the tool
|
# This following BUILD_NUMBER comment indicates the build number of the tool
|
||||||
# used to generate this makefile.
|
# used to generate this makefile.
|
||||||
# BUILD_NUMBER: 625
|
# BUILD_NUMBER: 720
|
||||||
|
|
||||||
# Optimize for simulation
|
# Optimize for simulation
|
||||||
SIM_OPTIMIZE ?= 1
|
SIM_OPTIMIZE ?= 0
|
||||||
|
|
||||||
# The CPU reset address as needed by elf2flash
|
# The CPU reset address as needed by elf2flash
|
||||||
RESET_ADDRESS ?= 0x00000000
|
RESET_ADDRESS ?= 0x00000000
|
||||||
|
@ -259,25 +292,25 @@ flash: check_elf_exists $(FLASH_FILES)
|
||||||
#-------------------------------------
|
#-------------------------------------
|
||||||
|
|
||||||
.PHONY: check_elf_exists
|
.PHONY: check_elf_exists
|
||||||
check_elf_exists: $(ELF)
|
check_elf_exists: $(call adjust-path,$(ELF))
|
||||||
ifeq ($(ELF),)
|
ifeq ($(ELF),)
|
||||||
$(error ELF var not set in mem_init.mk)
|
$(error ELF var not set in mem_init.mk)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(filter-out $(FLASH_DAT_FILES),$(DAT_FILES)): %.dat: $(ELF)
|
$(filter-out $(FLASH_DAT_FILES),$(DAT_FILES)): %.dat: $(call adjust-path,$(ELF))
|
||||||
$(post-process-info)
|
$(post-process-info)
|
||||||
@$(MKDIR) $(@D)
|
@$(MKDIR) $(@D)
|
||||||
$(ELF2DAT) --infile=$< --outfile=$@ \
|
$(ELF2DAT) --infile=$(call adjust-path-mixed,$<) --outfile=$@ \
|
||||||
--base=$(mem_start_address) --end=$(mem_end_address) --width=$(mem_width) \
|
--base=$(mem_start_address) --end=$(mem_end_address) --width=$(mem_width) \
|
||||||
$(mem_endianness) --create-lanes=$(mem_create_lanes) $(elf2dat_extra_args)
|
$(mem_endianness) --create-lanes=$(mem_create_lanes) $(elf2dat_extra_args)
|
||||||
|
|
||||||
$(foreach i,0 1 2 3 4 5 6 7,%_lane$(i).dat): %.dat
|
$(foreach i,0 1 2 3 4 5 6 7,%_lane$(i).dat): %.dat
|
||||||
@true
|
@true
|
||||||
|
|
||||||
ELF_TO_HEX_CMD_NO_BOOTLOADER = $(ELF2HEX) $< $(mem_start_address) $(mem_end_address) --width=$(mem_hex_width) \
|
ELF_TO_HEX_CMD_NO_BOOTLOADER = $(ELF2HEX) $(call adjust-path-mixed,$<) $(mem_start_address) $(mem_end_address) --width=$(mem_hex_width) \
|
||||||
$(mem_endianness) --create-lanes=$(mem_create_lanes) $(elf2hex_extra_args) $@
|
$(mem_endianness) --create-lanes=$(mem_create_lanes) $(elf2hex_extra_args) $@
|
||||||
|
|
||||||
ELF_TO_HEX_CMD_WITH_BOOTLOADER = $(ALT_FILE_CONVERT) -I $(NIOS2_ELF_FORMAT) -O hex --input=$< --output=$@ \
|
ELF_TO_HEX_CMD_WITH_BOOTLOADER = $(ALT_FILE_CONVERT) -I $(NIOS2_ELF_FORMAT) -O hex --input=$(call adjust-path-mixed,$<) --output=$@ \
|
||||||
--base=$(mem_start_address) --end=$(mem_end_address) --reset=$(RESET_ADDRESS) \
|
--base=$(mem_start_address) --end=$(mem_end_address) --reset=$(RESET_ADDRESS) \
|
||||||
--out-data-width=$(mem_hex_width) $(flash_mem_boot_loader_flag)
|
--out-data-width=$(mem_hex_width) $(flash_mem_boot_loader_flag)
|
||||||
|
|
||||||
|
@ -286,21 +319,20 @@ ELF_TO_HEX_CMD = $(strip $(if $(flash_mem_boot_loader_flag), \
|
||||||
$(ELF_TO_HEX_CMD_NO_BOOTLOADER) \
|
$(ELF_TO_HEX_CMD_NO_BOOTLOADER) \
|
||||||
))
|
))
|
||||||
|
|
||||||
$(HEX_FILES): %.hex: $(ELF)
|
$(HEX_FILES): %.hex: $(call adjust-path,$(ELF))
|
||||||
$(post-process-info)
|
$(post-process-info)
|
||||||
@$(MKDIR) $(@D)
|
@$(MKDIR) $(@D)
|
||||||
$(ELF_TO_HEX_CMD)
|
$(ELF_TO_HEX_CMD)
|
||||||
|
|
||||||
$(SYM_FILES): %.sym: $(ELF)
|
$(SYM_FILES): %.sym: $(call adjust-path,$(ELF))
|
||||||
$(post-process-info)
|
$(post-process-info)
|
||||||
@$(MKDIR) $(@D)
|
@$(MKDIR) $(@D)
|
||||||
$(NM) -n $< > $@
|
$(NM) -n $(call adjust-path-mixed,$<) > $@
|
||||||
|
|
||||||
$(FLASH_FILES): %.flash: $(ELF)
|
$(FLASH_FILES): %.flash: $(call adjust-path,$(ELF))
|
||||||
$(post-process-info)
|
$(post-process-info)
|
||||||
@$(MKDIR) $(@D)
|
@$(MKDIR) $(@D)
|
||||||
$(ELF2FLASH) --input=$< --outfile=$@ --sim_optimize=$(SIM_OPTIMIZE) $(mem_endianness) \
|
$(ELF2FLASH) --input=$(call adjust-path-mixed,$<) --output=$@ --sim_optimize=$(SIM_OPTIMIZE) $(elf2flash_extra_args)
|
||||||
$(elf2flash_extra_args)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Function generate_spd_entry
|
# Function generate_spd_entry
|
||||||
|
|
|
@ -77,12 +77,12 @@ ALT_CPPFLAGS += -pipe
|
||||||
|
|
||||||
# This following VERSION comment indicates the version of the tool used to
|
# This following VERSION comment indicates the version of the tool used to
|
||||||
# generate this makefile. A makefile variable is provided for VERSION as well.
|
# generate this makefile. A makefile variable is provided for VERSION as well.
|
||||||
# ACDS_VERSION: 18.1
|
# ACDS_VERSION: 20.1
|
||||||
ACDS_VERSION := 18.1
|
ACDS_VERSION := 20.1
|
||||||
|
|
||||||
# This following BUILD_NUMBER comment indicates the build number of the tool
|
# This following BUILD_NUMBER comment indicates the build number of the tool
|
||||||
# used to generate this makefile.
|
# used to generate this makefile.
|
||||||
# BUILD_NUMBER: 625
|
# BUILD_NUMBER: 720
|
||||||
|
|
||||||
# Qsys--generated SOPCINFO file. Required for resolving node instance ID's with
|
# Qsys--generated SOPCINFO file. Required for resolving node instance ID's with
|
||||||
# design component names.
|
# design component names.
|
||||||
|
@ -221,8 +221,7 @@ ALT_CPPFLAGS += -DALT_NO_INSTRUCTION_EMULATION
|
||||||
# loops. If true, adds -DALT_SIM_OPTIMIZE to ALT_CPPFLAGS in public.mk. When
|
# loops. If true, adds -DALT_SIM_OPTIMIZE to ALT_CPPFLAGS in public.mk. When
|
||||||
# this setting is true, the BSP shouldn't be used to build applications that
|
# this setting is true, the BSP shouldn't be used to build applications that
|
||||||
# are expected to run real hardware.
|
# are expected to run real hardware.
|
||||||
# setting hal.enable_sim_optimize is true
|
# setting hal.enable_sim_optimize is false
|
||||||
ALT_CPPFLAGS += -DALT_SIM_OPTIMIZE
|
|
||||||
|
|
||||||
# Causes the small newlib (C library) to be used. This reduces code and data
|
# Causes the small newlib (C library) to be used. This reduces code and data
|
||||||
# footprint at the expense of reduced functionality. Several newlib features
|
# footprint at the expense of reduced functionality. Several newlib features
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
<sch:Settings xmlns:sch="http://www.altera.com/embeddedsw/bsp/schema">
|
<sch:Settings xmlns:sch="http://www.altera.com/embeddedsw/bsp/schema">
|
||||||
<BspType>hal</BspType>
|
<BspType>hal</BspType>
|
||||||
<BspVersion>default</BspVersion>
|
<BspVersion>default</BspVersion>
|
||||||
<BspGeneratedTimeStamp>24.12.2022 2:19:40</BspGeneratedTimeStamp>
|
<BspGeneratedTimeStamp>Jan 24, 2023 12:06:33 PM</BspGeneratedTimeStamp>
|
||||||
<BspGeneratedUnixTimeStamp>1671833980256</BspGeneratedUnixTimeStamp>
|
<BspGeneratedUnixTimeStamp>1674551193679</BspGeneratedUnixTimeStamp>
|
||||||
<BspGeneratedLocation>C:\Software\FPGA\iu3-31m\Lab2\Top\software\semafor_bsp</BspGeneratedLocation>
|
<BspGeneratedLocation>/run/media/user/B225-3235/Lab2/Top/software/semafor_bsp</BspGeneratedLocation>
|
||||||
<BspSettingsFile>settings.bsp</BspSettingsFile>
|
<BspSettingsFile>settings.bsp</BspSettingsFile>
|
||||||
<SopcDesignFile>..\..\niosII.sopcinfo</SopcDesignFile>
|
<SopcDesignFile>../../niosII.sopcinfo</SopcDesignFile>
|
||||||
<JdiFile>default</JdiFile>
|
<JdiFile>default</JdiFile>
|
||||||
<Cpu>cpu</Cpu>
|
<Cpu>cpu</Cpu>
|
||||||
<SchemaVersion>1.9</SchemaVersion>
|
<SchemaVersion>1.9</SchemaVersion>
|
||||||
|
@ -830,7 +830,7 @@
|
||||||
<SettingName>hal.enable_sim_optimize</SettingName>
|
<SettingName>hal.enable_sim_optimize</SettingName>
|
||||||
<Identifier>ALT_SIM_OPTIMIZE</Identifier>
|
<Identifier>ALT_SIM_OPTIMIZE</Identifier>
|
||||||
<Type>Boolean</Type>
|
<Type>Boolean</Type>
|
||||||
<Value>1</Value>
|
<Value>0</Value>
|
||||||
<DefaultValue>0</DefaultValue>
|
<DefaultValue>0</DefaultValue>
|
||||||
<DestinationFile>public_mk_define</DestinationFile>
|
<DestinationFile>public_mk_define</DestinationFile>
|
||||||
<Description>The BSP is compiled with optimizations to speedup HDL simulation such as initializing the cache, clearing the .bss section, and skipping long delay loops. If true, adds -DALT_SIM_OPTIMIZE to ALT_CPPFLAGS in public.mk.</Description>
|
<Description>The BSP is compiled with optimizations to speedup HDL simulation such as initializing the cache, clearing the .bss section, and skipping long delay loops. If true, adds -DALT_SIM_OPTIMIZE to ALT_CPPFLAGS in public.mk.</Description>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<td width="20%" bgcolor="#77BBFF">BSP Type:</td><td>hal</td>
|
<td width="20%" bgcolor="#77BBFF">BSP Type:</td><td>hal</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr mode="wrap">
|
<tr mode="wrap">
|
||||||
<td width="20%" bgcolor="#77BBFF">SOPC Design File:</td><td>..\..\niosII.sopcinfo</td>
|
<td width="20%" bgcolor="#77BBFF">SOPC Design File:</td><td>../../niosII.sopcinfo</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr mode="wrap">
|
<tr mode="wrap">
|
||||||
<td width="20%" bgcolor="#77BBFF">Quartus JDI File:</td><td>default</td>
|
<td width="20%" bgcolor="#77BBFF">Quartus JDI File:</td><td>default</td>
|
||||||
|
@ -22,13 +22,13 @@
|
||||||
<td width="20%" bgcolor="#77BBFF">BSP Version:</td><td>default</td>
|
<td width="20%" bgcolor="#77BBFF">BSP Version:</td><td>default</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr mode="wrap">
|
<tr mode="wrap">
|
||||||
<td width="20%" bgcolor="#77BBFF">BSP Generated On:</td><td>24.12.2022 2:19:40</td>
|
<td width="20%" bgcolor="#77BBFF">BSP Generated On:</td><td>Jan 24, 2023 12:06:33 PM</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr mode="wrap">
|
<tr mode="wrap">
|
||||||
<td width="20%" bgcolor="#77BBFF">BSP Generated Timestamp:</td><td>1671833980256</td>
|
<td width="20%" bgcolor="#77BBFF">BSP Generated Timestamp:</td><td>1674551193679</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr mode="wrap">
|
<tr mode="wrap">
|
||||||
<td width="20%" bgcolor="#77BBFF">BSP Generated Location:</td><td>C:\Software\FPGA\iu3-31m\Lab2\Top\software\semafor_bsp</td>
|
<td width="20%" bgcolor="#77BBFF">BSP Generated Location:</td><td>/run/media/user/B225-3235/Lab2/Top/software/semafor_bsp</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<br>
|
<br>
|
||||||
|
@ -423,7 +423,7 @@
|
||||||
<td width="20%">Default Value:</td><td>0</td>
|
<td width="20%">Default Value:</td><td>0</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20%">Value:</td><td>1</td>
|
<td width="20%">Value:</td><td>0</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20%">Type:</td><td>Boolean</td>
|
<td width="20%">Type:</td><td>Boolean</td>
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
module top
|
||||||
|
(
|
||||||
|
input logic clk,
|
||||||
|
input logic train,
|
||||||
|
output logic green,
|
||||||
|
output logic red,
|
||||||
|
output logic yellow
|
||||||
|
);
|
||||||
|
|
||||||
|
niosII u0 (
|
||||||
|
.clk_clk (clk), // clk.clk
|
||||||
|
.reset_reset_n (1'b1), // reset.reset_n
|
||||||
|
.sem_export_train (~train), // sem_export.train
|
||||||
|
.sem_export_red (red), // .red
|
||||||
|
.sem_export_yellow (yellow), // .yellow
|
||||||
|
.sem_export_green (green) // .green
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
endmodule
|
Loading…
Reference in New Issue