done in hardware

This commit is contained in:
Ivan I. Ovchinnikov 2023-01-24 12:46:22 +03:00
parent b86b8e55dc
commit d2e26e53f7
70 changed files with 64048 additions and 53932 deletions

70
.gitignore vendored
View File

@ -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

View File

@ -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"]

View File

@ -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

View File

@ -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 )
); );

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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}

68
Top/.gitignore vendored
View File

@ -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

View File

@ -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))
) )
) )

View File

@ -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;

View File

@ -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
); );

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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]
} }

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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" />

View File

@ -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"

View File

@ -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

Binary file not shown.

View File

@ -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 ?

View File

@ -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>

View File

@ -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>

View File

@ -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 &quot;${INPUTS}&quot;" 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 &quot;${INPUTS}&quot;" 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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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__ */

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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 &quot;${INPUTS}&quot;" 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 &quot;${INPUTS}&quot;" 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>

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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>

20
Top/top.sv Normal file
View File

@ -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