URL
https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk
Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc
Compare Revisions
- This comparison shows the changes necessary to convert path
/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk
- from Rev 27 to Rev 28
- ↔ Reverse comparison
Rev 27 → Rev 28
/mpsoc/change.log
1,5 → 1,13
All notable changes to this project will be documented in this file. |
|
|
##[1.5.1] - 3-2-2017 |
## changed |
- src_c/jtag_main.c: variable length memory support is added. |
- NoC emulator: Jtag tabs are reduced to total of 3. A 64 core 2-VC NoC emulation is sucessfully tested on DE4 FPGA board. |
-ssa: Now can work with fully adaptive routing. |
|
|
##[1.5.0] - 13-10-2016 |
### Added |
- static straight allocator (SSA) which accelerates packets traversing to the same direction to the NoC router. |
/mpsoc/perl_gui/ProNoC.pl
37,9 → 37,19
|
# check if envirement variables are defined |
if ( !defined $ENV{PRONOC_WORK} || !defined $ENV{QUARTUS_BIN}) { |
my $message; |
$message= "Warning: QUARTUS_BIN environment variable has not been set. It is required only for working with NoC emulator." if(!defined $ENV{QUARTUS_BIN}); |
$message= $message."\n\nWarning: PRONOC_WORK envirement varibale has not been set." if(!defined $ENV{PRONOC_WORK}); |
my $message; |
if ( !defined $ENV{PRONOC_WORK}) { |
my $dir = Cwd::getcwd(); |
my $project_dir = abs_path("$dir/../../mpsoc_work"); |
$ENV{'PRONOC_WORK'}= $project_dir; |
$message= "\n\nWarning: PRONOC_WORK envirement varibale has not been set. The PRONOC_WORK is autumatically set to $ENV{'PRONOC_WORK'}.\n"; |
|
} |
|
|
|
$message= $message."Warning: QUARTUS_BIN environment variable has not been set. It is required only for working with NoC emulator." if(!defined $ENV{QUARTUS_BIN}); |
|
$message= $message."\n\nPlease add aformentioned variables to ~\.bashrc file e.g: export PRONOC_WORK=[path_to]/mpsoc_work."; |
message_dialog("$message"); |
|
/mpsoc/perl_gui/doc/ProNoC_system_installation.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/mpsoc/perl_gui/lib/ip/RAM/dual_port_ram.IP
24,32 → 24,32
'deafult' => 'Dw/8', |
'global_param' => 'Localparam', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
'type' => 'Fixed', |
'redefine_param' => 1 |
}, |
'PORT_B_BURST_MODE' => { |
'info' => 'wisbone bus burst mode ebable/disable on port B', |
'deafult' => '"DISABLED"', |
'global_param' => 'Don\'t include', |
'content' => '"DISABLED","ENABLED" ', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'Dw' => { |
'info' => 'Ram data width in Bits', |
'deafult' => '32', |
'global_param' => 'Localparam', |
'content' => '4,1024,1', |
'type' => 'Spin-button', |
'redefine_param' => 1 |
'redefine_param' => 1, |
'type' => 'Spin-button' |
}, |
'PORT_B_BURST_MODE' => { |
'info' => 'wisbone bus burst mode ebable/disable on port B', |
'deafult' => '"DISABLED"', |
'global_param' => 'Don\'t include', |
'content' => '"DISABLED","ENABLED" ', |
'type' => 'Combo-box', |
'redefine_param' => 1 |
}, |
'BTEw' => { |
'info' => 'Parameter', |
'deafult' => '2', |
'global_param' => 'Localparam', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
'type' => 'Fixed', |
'redefine_param' => 1 |
}, |
'WB_Aw' => { |
'info' => 'Wishbone bus address width in byte', |
56,8 → 56,8
'deafult' => 'Aw+2', |
'global_param' => 'Don\'t include', |
'content' => '', |
'type' => 'Fixed', |
'redefine_param' => 0 |
'redefine_param' => 0, |
'type' => 'Fixed' |
}, |
'RAM_INDEX' => { |
'info' => 'RAM_INDEX is a unique number which will be used for initialing the memory content only. |
66,8 → 66,8
'deafult' => 'CORE_ID', |
'global_param' => 'Localparam', |
'content' => '', |
'type' => 'Entry', |
'redefine_param' => 1 |
'redefine_param' => 1, |
'type' => 'Entry' |
}, |
'Aw' => { |
'info' => 'Ram address width', |
74,8 → 74,8
'deafult' => '12', |
'global_param' => 'Localparam', |
'content' => '2,31,1', |
'type' => 'Spin-button', |
'redefine_param' => 1 |
'redefine_param' => 1, |
'type' => 'Spin-button' |
}, |
'TAGw' => { |
'info' => 'Parameter', |
82,32 → 82,32
'deafult' => '3', |
'global_param' => 'Localparam', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
'type' => 'Fixed', |
'redefine_param' => 1 |
}, |
'PORT_A_BURST_MODE' => { |
'info' => ' wisbone bus burst mode enable/disable on port A', |
'deafult' => '"DISABLED"', |
'global_param' => 'Localparam', |
'content' => '"DISABLED","ENABLED"', |
'redefine_param' => 1, |
'type' => 'Combo-box' |
}, |
'BYTE_WR_EN' => { |
'info' => 'Parameter', |
'deafult' => '"YES"', |
'global_param' => 'Localparam', |
'content' => '"YES","NO"', |
'type' => 'Combo-box', |
'redefine_param' => 1 |
'redefine_param' => 1, |
'type' => 'Combo-box' |
}, |
'PORT_A_BURST_MODE' => { |
'info' => ' wisbone bus burst mode enable/disable on port A', |
'deafult' => '"DISABLED"', |
'global_param' => 'Localparam', |
'content' => '"DISABLED","ENABLED"', |
'type' => 'Combo-box', |
'redefine_param' => 1 |
}, |
'CTIw' => { |
'info' => 'Parameter', |
'deafult' => '3', |
'global_param' => 'Localparam', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
'type' => 'Fixed', |
'redefine_param' => 1 |
}, |
'FPGA_VENDOR' => { |
'info' => 'Parameter', |
114,31 → 114,31
'deafult' => '"ALTERA"', |
'global_param' => 'Localparam', |
'content' => '"ALTERA","GENERIC"', |
'type' => 'Combo-box', |
'redefine_param' => 1 |
'redefine_param' => 1, |
'type' => 'Combo-box' |
} |
}, |
'gui_status' => { |
'timeout' => 0, |
'status' => 'ideal' |
'status' => 'ideal', |
'timeout' => 0 |
}, |
'plugs' => { |
'clk' => { |
'clk' => {}, |
'value' => 1, |
'0' => { |
'name' => 'clk' |
}, |
'type' => 'num' |
}, |
'reset' => { |
'reset' => {}, |
'value' => 1, |
'0' => { |
'name' => 'reset' |
}, |
'value' => 1, |
'type' => 'num' |
}, |
'clk' => { |
'clk' => {}, |
'0' => { |
'name' => 'clk' |
}, |
'value' => 1, |
'type' => 'num' |
}, |
'wb_slave' => { |
'1' => { |
'width' => 'WB_Aw', |
145,12 → 145,12
'name' => 'wb_b', |
'addr' => '0x0000_0000 0x3fff_ffff RAM' |
}, |
'value' => 2, |
'0' => { |
'width' => 'WB_Aw', |
'name' => 'wb_a', |
'addr' => '0x0000_0000 0x3fff_ffff RAM' |
}, |
'value' => 2, |
'type' => 'num', |
'wb_slave' => {} |
} |
159,171 → 159,171
'wb_dual_port_ram' => {} |
}, |
'ports' => { |
'sb_addr_i' => { |
'intfc_port' => 'adr_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'range' => 'Aw-1 : 0', |
'type' => 'input' |
}, |
'sa_tag_i' => { |
'intfc_port' => 'tag_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'tag_i', |
'range' => 'TAGw-1 : 0', |
'type' => 'input' |
}, |
'sb_addr_i' => { |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'adr_i', |
'range' => 'Aw-1 : 0', |
'type' => 'input' |
}, |
'sa_rty_o' => { |
'intfc_port' => 'rty_o', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'rty_o', |
'range' => '', |
'type' => 'output' |
}, |
'sa_cti_i' => { |
'sa_sel_i' => { |
'intfc_port' => 'sel_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'cti_i', |
'range' => 'CTIw-1 : 0', |
'range' => 'SELw-1 : 0', |
'type' => 'input' |
}, |
'sa_sel_i' => { |
'sa_cti_i' => { |
'intfc_port' => 'cti_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'sel_i', |
'range' => 'SELw-1 : 0', |
'range' => 'CTIw-1 : 0', |
'type' => 'input' |
}, |
'sa_bte_i' => { |
'intfc_port' => 'bte_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'bte_i', |
'range' => 'BTEw-1 : 0', |
'type' => 'input' |
}, |
'sa_err_o' => { |
'intfc_port' => 'err_o', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => '', |
'type' => 'output' |
}, |
'sa_cyc_i' => { |
'intfc_port' => 'cyc_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'cyc_i', |
'range' => '', |
'type' => 'input' |
}, |
'sb_err_o' => { |
'intfc_port' => 'err_o', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'err_o', |
'range' => '', |
'type' => 'output' |
}, |
'sa_err_o' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'err_o', |
'range' => '', |
'sb_dat_o' => { |
'intfc_port' => 'dat_o', |
'intfc_name' => 'plug:wb_slave[1]', |
'range' => 'Dw-1 : 0', |
'type' => 'output' |
}, |
'sa_ack_o' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'ack_o', |
'range' => '', |
'type' => 'output' |
}, |
'reset' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'intfc_port' => 'reset_i', |
'range' => '', |
'type' => 'input' |
}, |
'sb_dat_o' => { |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'dat_o', |
'range' => 'Dw-1 : 0', |
'sa_ack_o' => { |
'intfc_port' => 'ack_o', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => '', |
'type' => 'output' |
}, |
'sb_cti_i' => { |
'intfc_port' => 'cti_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'cti_i', |
'range' => 'CTIw-1 : 0', |
'type' => 'input' |
}, |
'sb_bte_i' => { |
'intfc_port' => 'bte_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'bte_i', |
'range' => 'BTEw-1 : 0', |
'type' => 'input' |
}, |
'sa_addr_i' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'adr_i', |
'range' => 'Aw-1 : 0', |
'type' => 'input' |
}, |
'sb_ack_o' => { |
'sb_cyc_i' => { |
'intfc_port' => 'cyc_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'ack_o', |
'range' => '', |
'type' => 'output' |
'type' => 'input' |
}, |
'sb_cyc_i' => { |
'sb_ack_o' => { |
'intfc_port' => 'ack_o', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'cyc_i', |
'range' => '', |
'type' => 'input' |
'type' => 'output' |
}, |
'sa_addr_i' => { |
'intfc_port' => 'adr_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => 'Aw-1 : 0', |
'type' => 'input' |
}, |
'sb_rty_o' => { |
'intfc_port' => 'rty_o', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'rty_o', |
'range' => '', |
'type' => 'output' |
}, |
'sb_dat_i' => { |
'intfc_port' => 'dat_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'dat_i', |
'range' => 'Dw-1 : 0', |
'type' => 'input' |
}, |
'sa_dat_o' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'dat_o', |
'range' => 'Dw-1 : 0', |
'type' => 'output' |
}, |
'sb_we_i' => { |
'intfc_port' => 'we_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'we_i', |
'range' => '', |
'type' => 'input' |
}, |
'sa_dat_i' => { |
'sa_dat_o' => { |
'intfc_port' => 'dat_o', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'dat_i', |
'range' => 'Dw-1 : 0', |
'type' => 'input' |
'type' => 'output' |
}, |
'sb_sel_i' => { |
'intfc_port' => 'sel_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'sel_i', |
'range' => 'SELw-1 : 0', |
'type' => 'input' |
}, |
'sa_dat_i' => { |
'intfc_port' => 'dat_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => 'Dw-1 : 0', |
'type' => 'input' |
}, |
'sa_we_i' => { |
'intfc_port' => 'we_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'we_i', |
'range' => '', |
'type' => 'input' |
}, |
'clk' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'intfc_port' => 'clk_i', |
'range' => '', |
'type' => 'input' |
}, |
'sb_stb_i' => { |
'sb_tag_i' => { |
'intfc_port' => 'tag_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'stb_i', |
'range' => '', |
'range' => 'TAGw-1 : 0', |
'type' => 'input' |
}, |
'sb_tag_i' => { |
'sb_stb_i' => { |
'intfc_port' => 'stb_i', |
'intfc_name' => 'plug:wb_slave[1]', |
'intfc_port' => 'tag_i', |
'range' => 'TAGw-1 : 0', |
'range' => '', |
'type' => 'input' |
}, |
'sa_stb_i' => { |
'intfc_port' => 'stb_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'stb_i', |
'range' => '', |
'type' => 'input' |
} |
/mpsoc/perl_gui/lib/ip/RAM/single_port_ram.IP
126,7 → 126,7
}, |
'JTAG_CONNECT' => { |
'info' => 'JTAG_CONNECT: |
if it is not disabled then the actual memory implements as a dual port RAM with the second port is connected either to In-System Memory Content Editor or Jtag_to_wb ', |
if it is not disabled then the actual memory is implemented as a dual port RAM with the second port is connected either to In-System Memory Content Editor or Jtag_to_wb. This allows that the memory content can be read/written using JTAG. ', |
'deafult' => '"DISABLED"', |
'global_param' => 'Localparam', |
'content' => '"DISABLED", "JTAG_WB" , "ALTERA_IMCE"', |
141,6 → 141,14
'redefine_param' => 1, |
'type' => 'Combo-box' |
}, |
'INIT_FILE_NAME' => { |
'info' => 'The name of RAM content memory file (without extention). The file will be used by the JTAG programer to programe the memory at run time.', |
'deafult' => '"ram0"', |
'global_param' => 'Don\'t include', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Entry' |
}, |
'CTIw' => { |
'info' => 'Parameter', |
'deafult' => '3', |
170,7 → 178,8
'CTIw', |
'BTEw', |
'WB_Aw', |
'BURST_MODE' |
'BURST_MODE', |
'INIT_FILE_NAME' |
], |
'ports' => { |
'sa_tag_i' => { |
/mpsoc/perl_gui/lib/mpsoc/mpsoc.MPSOC
File deleted
/mpsoc/perl_gui/lib/mpsoc/lm32_noc.MPSOC
0,0 → 1,2607
####################################################################### |
## File: lm32_noc.MPSOC |
## |
## Copyright (C) 2014-2016 Alireza Monemi |
## |
## This file is part of ProNoC 1.5.0 |
## |
## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT |
## MAY CAUSE UNEXPECTED BEHAIVOR. |
################################################################################ |
|
$lm32_noc = bless( { |
'socs' => { |
'test' => { |
'top' => bless( { |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'instance_name' => 'ni0', |
'type' => 'output' |
}, |
'ni_s_cti_i' => { |
'intfc_port' => 'cti_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_TAGw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_cyc_i' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'cyc_i', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_s_stb_i' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'stb_i', |
'range' => '', |
'instance_name' => 'ni0', |
'type' => 'input' |
}, |
'ni_s_sel_i' => { |
'intfc_port' => 'sel_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_SELw-1 : 0', |
'type' => 'input' |
}, |
'ni_current_y' => { |
'intfc_name' => 'socket:ni[0]', |
'intfc_port' => 'current_y', |
'instance_name' => 'ni0', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in_wr' => { |
'intfc_name' => 'socket:ni[0]', |
'intfc_port' => 'flit_in_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_s_ack_o' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'ack_o', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_flit_in' => { |
'intfc_name' => 'socket:ni[0]', |
'intfc_port' => 'flit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_addr_i' => { |
'intfc_port' => 'adr_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => 'ni_S_Aw-1 : 0', |
'instance_name' => 'ni0', |
'type' => 'input' |
}, |
'ni_s_we_i' => { |
'intfc_port' => 'we_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_rty_o' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'rty_o', |
'range' => '', |
'instance_name' => 'ni0', |
'type' => 'output' |
}, |
'ni_s_dat_o' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'dat_o', |
'range' => 'ni_Dw-1 : 0', |
'instance_name' => 'ni0', |
'type' => 'output' |
}, |
'ni_s_dat_i' => { |
'intfc_port' => 'dat_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Dw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_s_err_o' => { |
'intfc_port' => 'err_o', |
'intfc_name' => 'plug:wb_slave[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1: 0', |
'instance_name' => 'ni0', |
'type' => 'output' |
} |
}, |
'interface' => { |
'socket:ni[0]' => { |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'range' => '', |
'instance_name' => 'ni0', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'range' => 'ni_Xw-1 : 0', |
'instance_name' => 'ni0', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'range' => 'ni_Fw-1 : 0', |
'instance_name' => 'ni0', |
'type' => 'output' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'instance_name' => 'ni0', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'range' => '', |
'instance_name' => 'ni0', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
} |
}, |
'plug:wb_slave[0]' => { |
'ports' => { |
'ni_s_rty_o' => { |
'intfc_port' => 'rty_o', |
'range' => '', |
'instance_name' => 'ni0', |
'type' => 'output' |
}, |
'ni_s_cti_i' => { |
'intfc_port' => 'cti_i', |
'instance_name' => 'ni0', |
'range' => 'ni_TAGw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_cyc_i' => { |
'intfc_port' => 'cyc_i', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_s_dat_o' => { |
'intfc_port' => 'dat_o', |
'range' => 'ni_Dw-1 : 0', |
'instance_name' => 'ni0', |
'type' => 'output' |
}, |
'ni_s_dat_i' => { |
'intfc_port' => 'dat_i', |
'range' => 'ni_Dw-1 : 0', |
'instance_name' => 'ni0', |
'type' => 'input' |
}, |
'ni_s_stb_i' => { |
'intfc_port' => 'stb_i', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_s_err_o' => { |
'intfc_port' => 'err_o', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_s_sel_i' => { |
'intfc_port' => 'sel_i', |
'range' => 'ni_SELw-1 : 0', |
'instance_name' => 'ni0', |
'type' => 'input' |
}, |
'ni_s_ack_o' => { |
'intfc_port' => 'ack_o', |
'range' => '', |
'instance_name' => 'ni0', |
'type' => 'output' |
}, |
'ni_s_addr_i' => { |
'intfc_port' => 'adr_i', |
'instance_name' => 'ni0', |
'range' => 'ni_S_Aw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_we_i' => { |
'intfc_port' => 'we_i', |
'range' => '', |
'instance_name' => 'ni0', |
'type' => 'input' |
} |
} |
} |
}, |
'instance_ids' => { |
'gpi0' => { |
'module_name' => 'gpi', |
'category' => 'GPI', |
'instance' => 'gpi0', |
'module' => 'gpi' |
}, |
'clk_source0' => { |
'module_name' => 'clk_source', |
'category' => 'source', |
'instance' => 'ss', |
'module' => 'clk_source' |
}, |
'ext_int0' => { |
'module_name' => 'ext_int', |
'category' => 'interrupt', |
'instance' => 'ext_int', |
'module' => 'ext_int' |
}, |
'ni0' => { |
'parameters' => { |
'ni_SSA_EN' => { |
'info' => undef, |
'deafult' => '"NO"', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_NX' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_Fpay' => { |
'info' => undef, |
'deafult' => ' 32', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_TOPOLOGY' => { |
'info' => undef, |
'deafult' => '"MESH"', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_B' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 'Parameter', |
'content' => '', |
'type' => 'Fixed', |
'redefine_param' => 1 |
}, |
'ni_NY' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 'Parameter', |
'content' => '', |
'type' => 'Fixed', |
'redefine_param' => 1 |
}, |
'ni_V' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_CONGESTION_INDEX' => { |
'info' => undef, |
'deafult' => '3', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_DEBUG_EN' => { |
'info' => undef, |
'deafult' => '0', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_ROUTE_NAME' => { |
'info' => undef, |
'deafult' => '"XY"', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
} |
}, |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_name' => 'socket:ni[0]', |
'intfc_port' => 'flit_out_wr', |
'range' => '', |
'type' => 'output' |
}, |
'ni_s_cti_i' => { |
'intfc_port' => 'cti_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => 'ni_TAGw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_cyc_i' => { |
'intfc_port' => 'cyc_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ni_s_stb_i' => { |
'intfc_port' => 'stb_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ni_s_sel_i' => { |
'intfc_port' => 'sel_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => 'ni_SELw-1 : 0', |
'type' => 'input' |
}, |
'ni_current_y' => { |
'intfc_name' => 'socket:ni[0]', |
'intfc_port' => 'current_y', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_s_ack_o' => { |
'intfc_port' => 'ack_o', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => '', |
'type' => 'output' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_addr_i' => { |
'intfc_port' => 'adr_i', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => 'ni_S_Aw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_we_i' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'we_i', |
'range' => '', |
'type' => 'input' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_rty_o' => { |
'intfc_port' => 'rty_o', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => '', |
'type' => 'output' |
}, |
'ni_s_dat_o' => { |
'intfc_port' => 'dat_o', |
'intfc_name' => 'plug:wb_slave[0]', |
'range' => 'ni_Dw-1 : 0', |
'type' => 'output' |
}, |
'ni_s_dat_i' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'dat_i', |
'range' => 'ni_Dw-1 : 0', |
'type' => 'input' |
}, |
'ni_s_err_o' => { |
'intfc_name' => 'plug:wb_slave[0]', |
'intfc_port' => 'err_o', |
'range' => '', |
'type' => 'output' |
}, |
'ni_flit_out' => { |
'intfc_name' => 'socket:ni[0]', |
'intfc_port' => 'flit_out', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
} |
}, |
'module_name' => 'ni', |
'category' => 'NoC', |
'instance' => 'ni', |
'module' => 'ni' |
}, |
'wishbone_bus0' => { |
'module_name' => 'wishbone_bus', |
'category' => 'bus', |
'instance' => 'bus', |
'module' => 'wishbone_bus' |
}, |
'Altera_single_port_ram0' => { |
'module_name' => 'Altera_single_port_ram', |
'category' => 'RAM', |
'instance' => 'Altera_single_port_ram0', |
'module' => 'Altera_single_port_ram' |
} |
} |
}, 'ip_gen' ) |
}, |
'lm32_tile' => { |
'top' => bless( { |
'parameters' => { |
'gpo_PORT_WIDTH' => ' 1', |
'ram_Dw' => '32', |
'ram_Aw' => '12' |
}, |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
}, |
'cpu_en_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'instance_name' => 'lm320', |
'range' => '', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'gpo_port_o' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'instance_name' => 'gpo0', |
'range' => 'gpo_PORT_WIDTH-1 : 0', |
'type' => 'output' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
}, |
'interface' => { |
'plug:enable[0]' => { |
'ports' => { |
'cpu_en_i' => { |
'intfc_port' => 'enable_i', |
'instance_name' => 'lm320', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'socket:ni[0]' => { |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'instance_name' => 'ni0', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'instance_name' => 'ni0', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
} |
}, |
'IO' => { |
'ports' => { |
'gpo_port_o' => { |
'intfc_port' => 'IO', |
'instance_name' => 'gpo0', |
'range' => 'gpo_PORT_WIDTH-1 : 0', |
'type' => 'output' |
} |
} |
}, |
'plug:clk[0]' => { |
'ports' => { |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'plug:reset[0]' => { |
'ports' => { |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
} |
} |
} |
}, |
'tiles' => { |
'0' => { |
'parameters' => { |
'gpo_PORT_WIDTH' => 3, |
'ram_Dw' => '32', |
'ram_Aw' => '12' |
} |
} |
}, |
'instance_ids' => { |
'single_port_ram0' => { |
'parameters' => { |
'ram_Dw' => { |
'info' => 'Memory data width in Bits.', |
'deafult' => '32', |
'global_param' => 'Parameter', |
'content' => '8,1024,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
}, |
'ram_Aw' => { |
'info' => 'Memory address width', |
'deafult' => '12', |
'global_param' => 'Parameter', |
'content' => '4,31,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
} |
}, |
'module_name' => 'wb_single_port_ram', |
'category' => 'RAM', |
'instance' => 'ram', |
'module' => 'single_port_ram' |
}, |
'lm320' => { |
'ports' => { |
'cpu_en_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'lm32', |
'category' => 'Processor', |
'instance' => 'cpu', |
'module' => 'lm32' |
}, |
'clk_source0' => { |
'ports' => { |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'clk_source', |
'category' => 'Source', |
'instance' => 'ss', |
'module' => 'clk_source' |
}, |
'gpo0' => { |
'parameters' => { |
'gpo_PORT_WIDTH' => { |
'info' => 'output port width', |
'deafult' => ' 1', |
'global_param' => 'Parameter', |
'content' => '1,32,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
} |
}, |
'ports' => { |
'gpo_port_o' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'range' => 'gpo_PORT_WIDTH-1 : 0', |
'type' => 'output' |
} |
}, |
'module_name' => 'gpo', |
'category' => 'GPIO', |
'instance' => 'gpo', |
'module' => 'gpo' |
}, |
'wishbone_bus0' => { |
'module_name' => 'wishbone_bus', |
'category' => 'Bus', |
'instance' => 'bus', |
'module' => 'wishbone_bus' |
}, |
'ni0' => { |
'parameters' => { |
'ni_TOPOLOGY' => { |
'info' => undef, |
'deafult' => '"MESH"', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_Fpay' => { |
'info' => undef, |
'deafult' => ' 32', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_NX' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_NY' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_B' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_V' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_DEBUG_EN' => { |
'info' => undef, |
'deafult' => '0', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_ROUTE_NAME' => { |
'info' => undef, |
'deafult' => '"XY"', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
} |
}, |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
}, |
'module_name' => 'ni', |
'category' => 'NoC', |
'instance' => 'ni', |
'module' => 'ni' |
} |
} |
}, 'ip_gen' ), |
'tile_nums' => [ |
0, |
1, |
2, |
3 |
] |
}, |
'int_ni' => { |
'top' => bless( { |
'ports' => { |
'ni0_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'aeMB0_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
}, |
'ni0_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_V-1: 0', |
'type' => 'output' |
}, |
'ni0_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni0_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'input' |
}, |
'ni0_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_V-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'output' |
} |
}, |
'interface' => { |
'plug:enable[0]' => { |
'ports' => { |
'aeMB0_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'socket:ni[0]' => { |
'ports' => { |
'ni0_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni0_credit_out' => { |
'intfc_port' => 'credit_out', |
'instance_name' => 'ni0', |
'range' => 'ni0_V-1: 0', |
'type' => 'output' |
}, |
'ni0_current_x' => { |
'intfc_port' => 'current_x', |
'instance_name' => 'ni0', |
'range' => 'ni0_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni0_current_y' => { |
'intfc_port' => 'current_y', |
'instance_name' => 'ni0', |
'range' => 'ni0_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_in' => { |
'intfc_port' => 'flit_in', |
'instance_name' => 'ni0', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'input' |
}, |
'ni0_credit_in' => { |
'intfc_port' => 'credit_in', |
'instance_name' => 'ni0', |
'range' => 'ni0_V-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out' => { |
'intfc_port' => 'flit_out', |
'instance_name' => 'ni0', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'output' |
} |
} |
} |
}, |
'instance_ids' => { |
'aeMB0' => { |
'ports' => { |
'aeMB0_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'aeMB_top', |
'category' => 'Processor', |
'instance' => 'aeMB0', |
'module' => 'aeMB' |
}, |
'ext_int0' => { |
'module_name' => 'ext_int', |
'category' => 'interrupt', |
'instance' => 'ext_int0', |
'module' => 'ext_int' |
}, |
'clk_source0' => { |
'module_name' => 'clk_source', |
'category' => 'source', |
'instance' => 'clk_source0', |
'module' => 'clk_source' |
}, |
'wishbone_bus0' => { |
'module_name' => 'wishbone_bus', |
'category' => 'bus', |
'instance' => 'bus', |
'module' => 'wishbone_bus' |
}, |
'ni0' => { |
'parameters' => { |
'ni0_TOPOLOGY' => { |
'info' => undef, |
'deafult' => '"MESH"', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_DEBUG_EN' => { |
'info' => undef, |
'deafult' => '0', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_Fpay' => { |
'info' => undef, |
'deafult' => ' 32', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_CONGESTION_INDEX' => { |
'info' => undef, |
'deafult' => '3', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_SSA_EN' => { |
'info' => undef, |
'deafult' => '"NO"', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_B' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_V' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_NY' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_NX' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_ROUTE_NAME' => { |
'info' => undef, |
'deafult' => '"XY"', |
'global_param' => 'Parameter', |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
} |
}, |
'ports' => { |
'ni0_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ni0_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_V-1: 0', |
'type' => 'output' |
}, |
'ni0_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'output' |
}, |
'ni0_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'input' |
}, |
'ni0_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_V-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'output' |
} |
}, |
'module_name' => 'ni', |
'category' => 'NoC', |
'instance' => 'ni0', |
'module' => 'ni' |
}, |
'int_ctrl0' => { |
'module_name' => 'int_ctrl', |
'category' => 'interrupt', |
'instance' => 'int_ctrl0', |
'module' => 'int_ctrl' |
}, |
'Altera_single_port_ram0' => { |
'module_name' => 'Altera_single_port_ram', |
'category' => 'RAM', |
'instance' => 'Altera_single_port_ram0', |
'module' => 'Altera_single_port_ram' |
} |
} |
}, 'ip_gen' ) |
}, |
'ni_test' => { |
'top' => bless( { |
'parameters' => { |
'ram_Dw' => '32', |
'ram_Aw' => 12, |
'led_PORT_WIDTH' => ' 1' |
}, |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
}, |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
}, |
'led_port_o' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'instance_name' => 'gpo0', |
'range' => 'led_PORT_WIDTH-1 : 0', |
'type' => 'output' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
}, |
'interface' => { |
'plug:enable[0]' => { |
'ports' => { |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'socket:ni[0]' => { |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'instance_name' => 'ni0', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'instance_name' => 'ni0', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
} |
}, |
'IO' => { |
'ports' => { |
'led_port_o' => { |
'intfc_port' => 'IO', |
'instance_name' => 'gpo0', |
'range' => 'led_PORT_WIDTH-1 : 0', |
'type' => 'output' |
} |
} |
}, |
'plug:clk[0]' => { |
'ports' => { |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'plug:reset[0]' => { |
'ports' => { |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
} |
} |
} |
}, |
'instance_ids' => { |
'aeMB0' => { |
'ports' => { |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'aeMB_top', |
'category' => 'Processor', |
'instance' => 'aeMB', |
'module' => 'aeMB' |
}, |
'gpo0' => { |
'parameters' => { |
'led_PORT_WIDTH' => { |
'info' => 'output port width', |
'deafult' => ' 1', |
'global_param' => 1, |
'content' => '1,32,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
} |
}, |
'ports' => { |
'led_port_o' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'range' => 'led_PORT_WIDTH-1 : 0', |
'type' => 'output' |
} |
}, |
'module_name' => 'gpo', |
'category' => 'GPI', |
'instance' => 'led', |
'module' => 'gpo' |
}, |
'wishbone_bus0' => { |
'module_name' => 'wishbone_bus', |
'category' => 'bus', |
'instance' => 'bus', |
'module' => 'wishbone_bus' |
}, |
'int_ctrl0' => { |
'module_name' => 'int_ctrl', |
'category' => 'interrupt', |
'instance' => 'int_ctrl', |
'module' => 'int_ctrl' |
}, |
'Altera_single_port_ram0' => { |
'parameters' => { |
'ram_Dw' => { |
'info' => undef, |
'deafult' => '32', |
'global_param' => 1, |
'content' => '8,1024,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
}, |
'ram_Aw' => { |
'info' => undef, |
'deafult' => 12, |
'global_param' => 1, |
'content' => '4,31,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
} |
}, |
'module_name' => 'Altera_single_port_ram', |
'category' => 'RAM', |
'instance' => 'ram', |
'module' => 'Altera_single_port_ram' |
}, |
'clk_source0' => { |
'ports' => { |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'clk_source', |
'category' => 'source', |
'instance' => 'ss', |
'module' => 'clk_source' |
}, |
'ni0' => { |
'parameters' => { |
'ni_TOPOLOGY' => { |
'info' => undef, |
'deafult' => '"MESH"', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_Fpay' => { |
'info' => undef, |
'deafult' => ' 32', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_NX' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_NY' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_B' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_V' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_DEBUG_EN' => { |
'info' => undef, |
'deafult' => '0', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_ROUTE_NAME' => { |
'info' => undef, |
'deafult' => '"XY"', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
} |
}, |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
}, |
'module_name' => 'ni', |
'category' => 'NoC', |
'instance' => 'ni', |
'module' => 'ni' |
}, |
'timer0' => { |
'module_name' => 'timer', |
'category' => 'TIM', |
'instance' => 'timer', |
'module' => 'timer' |
} |
} |
}, 'ip_gen' ) |
}, |
'tang' => { |
'top' => bless( { |
'parameters' => { |
'ram_Dw' => '32', |
'ram_Aw' => 13, |
'led_PORT_WIDTH' => ' 1' |
}, |
'ports' => { |
'uart_readyfordata' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'instance_name' => 'altera_jtag_uart0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
}, |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
}, |
'led_port_o' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'instance_name' => 'gpo0', |
'range' => 'led_PORT_WIDTH-1 : 0', |
'type' => 'output' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'uart_dataavailable' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'instance_name' => 'altera_jtag_uart0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
}, |
'interface' => { |
'plug:enable[0]' => { |
'ports' => { |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'socket:ni[0]' => { |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'instance_name' => 'ni0', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'instance_name' => 'ni0', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'instance_name' => 'ni0', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
} |
}, |
'IO' => { |
'ports' => { |
'led_port_o' => { |
'intfc_port' => 'IO', |
'instance_name' => 'gpo0', |
'range' => 'led_PORT_WIDTH-1 : 0', |
'type' => 'output' |
}, |
'uart_readyfordata' => { |
'intfc_port' => 'IO', |
'instance_name' => 'altera_jtag_uart0', |
'range' => '', |
'type' => 'output' |
}, |
'uart_dataavailable' => { |
'intfc_port' => 'IO', |
'instance_name' => 'altera_jtag_uart0', |
'range' => '', |
'type' => 'output' |
} |
} |
}, |
'plug:clk[0]' => { |
'ports' => { |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'plug:reset[0]' => { |
'ports' => { |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
} |
} |
} |
}, |
'instance_ids' => { |
'aeMB0' => { |
'ports' => { |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'aeMB_top', |
'category' => 'Processor', |
'instance' => 'aeMB', |
'module' => 'aeMB' |
}, |
'gpo0' => { |
'parameters' => { |
'led_PORT_WIDTH' => { |
'info' => 'output port width', |
'deafult' => ' 1', |
'global_param' => 1, |
'content' => '1,32,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
} |
}, |
'ports' => { |
'led_port_o' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'range' => 'led_PORT_WIDTH-1 : 0', |
'type' => 'output' |
} |
}, |
'module_name' => 'gpo', |
'category' => 'GPI', |
'instance' => 'led', |
'module' => 'gpo' |
}, |
'wishbone_bus0' => { |
'module_name' => 'wishbone_bus', |
'category' => 'bus', |
'instance' => 'bus', |
'module' => 'wishbone_bus' |
}, |
'int_ctrl0' => { |
'module_name' => 'int_ctrl', |
'category' => 'interrupt', |
'instance' => 'int_ctrl', |
'module' => 'int_ctrl' |
}, |
'altera_jtag_uart0' => { |
'ports' => { |
'uart_readyfordata' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'range' => '', |
'type' => 'output' |
}, |
'uart_dataavailable' => { |
'intfc_port' => 'IO', |
'intfc_name' => 'IO', |
'range' => '', |
'type' => 'output' |
} |
}, |
'module_name' => 'altera_jtag_uart_wb', |
'category' => 'Jtag', |
'instance' => 'uart', |
'module' => 'altera_jtag_uart' |
}, |
'Altera_single_port_ram0' => { |
'parameters' => { |
'ram_Dw' => { |
'info' => undef, |
'deafult' => '32', |
'global_param' => 1, |
'content' => '8,1024,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
}, |
'ram_Aw' => { |
'info' => undef, |
'deafult' => 13, |
'global_param' => 1, |
'content' => '4,31,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
} |
}, |
'module_name' => 'Altera_single_port_ram', |
'category' => 'RAM', |
'instance' => 'ram', |
'module' => 'Altera_single_port_ram' |
}, |
'clk_source0' => { |
'ports' => { |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'clk_source', |
'category' => 'source', |
'instance' => 'ss', |
'module' => 'clk_source' |
}, |
'ni0' => { |
'parameters' => { |
'ni_TOPOLOGY' => { |
'info' => undef, |
'deafult' => '"MESH"', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_Fpay' => { |
'info' => undef, |
'deafult' => ' 32', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_NX' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_NY' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_B' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_V' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_DEBUG_EN' => { |
'info' => undef, |
'deafult' => '0', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni_ROUTE_NAME' => { |
'info' => undef, |
'deafult' => '"XY"', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
} |
}, |
'ports' => { |
'ni_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'output' |
}, |
'ni_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1: 0', |
'type' => 'output' |
}, |
'ni_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ni_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_V-1 : 0', |
'type' => 'input' |
}, |
'ni_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni_Fw-1 : 0', |
'type' => 'input' |
} |
}, |
'module_name' => 'ni', |
'category' => 'NoC', |
'instance' => 'ni', |
'module' => 'ni' |
}, |
'timer0' => { |
'module_name' => 'timer', |
'category' => 'TIM', |
'instance' => 'timer', |
'module' => 'timer' |
} |
} |
}, 'ip_gen' ) |
}, |
'test_ni_p' => { |
'top' => bless( { |
'parameters' => { |
'ram_Dw' => '32', |
'ram_Aw' => '10' |
}, |
'ports' => { |
'ni0_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'aeMB_sys_int_i' => { |
'intfc_port' => 'int_i', |
'intfc_name' => 'plug:interrupt_cpu[0]', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
}, |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
}, |
'ni0_irq' => { |
'intfc_port' => 'int_o', |
'intfc_name' => 'plug:interrupt_peripheral[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni0_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_V-1: 0', |
'type' => 'output' |
}, |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
}, |
'ni0_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
}, |
'ni0_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'input' |
}, |
'ni0_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'output' |
}, |
'ni0_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'instance_name' => 'ni0', |
'range' => 'ni0_V-1 : 0', |
'type' => 'input' |
} |
}, |
'interface' => { |
'plug:enable[0]' => { |
'ports' => { |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'socket:ni[0]' => { |
'ports' => { |
'ni0_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'input' |
}, |
'ni0_credit_out' => { |
'intfc_port' => 'credit_out', |
'instance_name' => 'ni0', |
'range' => 'ni0_V-1: 0', |
'type' => 'output' |
}, |
'ni0_current_x' => { |
'intfc_port' => 'current_x', |
'instance_name' => 'ni0', |
'range' => 'ni0_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
}, |
'ni0_current_y' => { |
'intfc_port' => 'current_y', |
'instance_name' => 'ni0', |
'range' => 'ni0_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_in' => { |
'intfc_port' => 'flit_in', |
'instance_name' => 'ni0', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'input' |
}, |
'ni0_credit_in' => { |
'intfc_port' => 'credit_in', |
'instance_name' => 'ni0', |
'range' => 'ni0_V-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out' => { |
'intfc_port' => 'flit_out', |
'instance_name' => 'ni0', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'output' |
} |
} |
}, |
'plug:clk[0]' => { |
'ports' => { |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'plug:interrupt_cpu[0]' => { |
'ports' => { |
'aeMB_sys_int_i' => { |
'intfc_port' => 'int_i', |
'instance_name' => 'aeMB0', |
'range' => '', |
'type' => 'input' |
} |
} |
}, |
'plug:interrupt_peripheral[0]' => { |
'ports' => { |
'ni0_irq' => { |
'intfc_port' => 'int_o', |
'instance_name' => 'ni0', |
'range' => '', |
'type' => 'output' |
} |
} |
}, |
'plug:reset[0]' => { |
'ports' => { |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'instance_name' => 'clk_source0', |
'range' => '', |
'type' => 'input' |
} |
} |
} |
}, |
'instance_ids' => { |
'aeMB0' => { |
'ports' => { |
'aeMB_sys_int_i' => { |
'intfc_port' => 'int_i', |
'intfc_name' => 'plug:interrupt_cpu[0]', |
'range' => '', |
'type' => 'input' |
}, |
'aeMB_sys_ena_i' => { |
'intfc_port' => 'enable_i', |
'intfc_name' => 'plug:enable[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'aeMB_top', |
'category' => 'Processor', |
'instance' => 'aeMB', |
'module' => 'aeMB' |
}, |
'clk_source0' => { |
'ports' => { |
'ss_reset_in' => { |
'intfc_port' => 'reset_i', |
'intfc_name' => 'plug:reset[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ss_clk_in' => { |
'intfc_port' => 'clk_i', |
'intfc_name' => 'plug:clk[0]', |
'range' => '', |
'type' => 'input' |
} |
}, |
'module_name' => 'clk_source', |
'category' => 'source', |
'instance' => 'ss', |
'module' => 'clk_source' |
}, |
'wishbone_bus0' => { |
'module_name' => 'wishbone_bus', |
'category' => 'bus', |
'instance' => 'bus', |
'module' => 'wishbone_bus' |
}, |
'ni0' => { |
'parameters' => { |
'ni0_TOPOLOGY' => { |
'info' => undef, |
'deafult' => '"MESH"', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_DEBUG_EN' => { |
'info' => undef, |
'deafult' => '0', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_Fpay' => { |
'info' => undef, |
'deafult' => ' 32', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_CONGESTION_INDEX' => { |
'info' => undef, |
'deafult' => '3', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_SSA_EN' => { |
'info' => undef, |
'deafult' => '"NO"', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_B' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_V' => { |
'info' => '', |
'deafult' => ' 4', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_NY' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_NX' => { |
'info' => undef, |
'deafult' => ' 2', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
}, |
'ni0_ROUTE_NAME' => { |
'info' => undef, |
'deafult' => '"XY"', |
'global_param' => 1, |
'content' => '', |
'redefine_param' => 1, |
'type' => 'Fixed' |
} |
}, |
'ports' => { |
'ni0_flit_in_wr' => { |
'intfc_port' => 'flit_in_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'input' |
}, |
'ni0_irq' => { |
'intfc_port' => 'int_o', |
'intfc_name' => 'plug:interrupt_peripheral[0]', |
'range' => '', |
'type' => 'output' |
}, |
'ni0_credit_out' => { |
'intfc_port' => 'credit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_V-1: 0', |
'type' => 'output' |
}, |
'ni0_current_x' => { |
'intfc_port' => 'current_x', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_Xw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out_wr' => { |
'intfc_port' => 'flit_out_wr', |
'intfc_name' => 'socket:ni[0]', |
'range' => '', |
'type' => 'output' |
}, |
'ni0_current_y' => { |
'intfc_port' => 'current_y', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_Yw-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_in' => { |
'intfc_port' => 'flit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'input' |
}, |
'ni0_credit_in' => { |
'intfc_port' => 'credit_in', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_V-1 : 0', |
'type' => 'input' |
}, |
'ni0_flit_out' => { |
'intfc_port' => 'flit_out', |
'intfc_name' => 'socket:ni[0]', |
'range' => 'ni0_Fw-1 : 0', |
'type' => 'output' |
} |
}, |
'module_name' => 'ni', |
'category' => 'NoC', |
'instance' => 'ni0', |
'module' => 'ni' |
}, |
'Altera_single_port_ram0' => { |
'parameters' => { |
'ram_Dw' => { |
'info' => undef, |
'deafult' => '32', |
'global_param' => 1, |
'content' => '8,1024,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
}, |
'ram_Aw' => { |
'info' => undef, |
'deafult' => '10', |
'global_param' => 1, |
'content' => '4,31,1', |
'redefine_param' => 1, |
'type' => 'Spin-button' |
} |
}, |
'module_name' => 'Altera_single_port_ram', |
'category' => 'RAM', |
'instance' => 'ram', |
'module' => 'Altera_single_port_ram' |
} |
} |
}, 'ip_gen' ) |
} |
}, |
'setting' => { |
'show_adv_setting' => 0, |
'soc_path' => 'lib/soc', |
'show_noc_setting' => 1, |
'show_tile_setting' => 1 |
}, |
'tile' => { |
'1' => {}, |
'0' => { |
'param_setting' => 'Custom' |
}, |
'3' => {}, |
'2' => {} |
}, |
'mpsoc_name' => 'lm32_noc', |
'gui_status' => { |
'status' => 'ideal', |
'timeout' => 0 |
}, |
'parameters_order' => { |
'noc_param' => [ |
'NX', |
'NY', |
'V', |
'B', |
'Fpay', |
'TOPOLOGY', |
'ROUTE_NAME', |
'SSA_EN', |
'VC_REALLOCATION_TYPE', |
'COMBINATION_TYPE', |
'MUX_TYPE', |
'C', |
'DEBUG_EN', |
'ADD_PIPREG_AFTER_CROSSBAR', |
'FIRST_ARBITER_EXT_P_EN', |
'AVC_ATOMIC_EN', |
'ROUTE_SUBFUNC' |
], |
'noc_type' => [ |
'ROUTER_TYPE' |
] |
}, |
'file_name' => undef, |
'noc_param' => { |
'COMBINATION_TYPE' => '"COMB_NONSPEC"', |
'NY' => ' 2', |
'DEBUG_EN' => '0', |
'NX' => ' 2', |
'VC_REALLOCATION_TYPE' => '"NONATOMIC"', |
'V' => '2', |
'ROUTE_SUBFUNC' => '"XY"', |
'ADD_PIPREG_AFTER_CROSSBAR' => '1\'b0', |
'C' => 0, |
'ROUTE_NAME' => '"XY"', |
'Fpay' => '32', |
'MUX_TYPE' => '"BINARY"', |
'B' => '4', |
'TOPOLOGY' => '"MESH"', |
'AVC_ATOMIC_EN' => 0, |
'SSA_EN' => '"NO"', |
'FIRST_ARBITER_EXT_P_EN' => 0 |
}, |
'noc_type' => { |
'ROUTER_TYPE' => '"VC_BASED"' |
}, |
'noc_indept_param' => {} |
}, 'mpsoc' ); |
/mpsoc/perl_gui/lib/perl/emulate_ram_gen.pl
2,13 → 2,19
use strict; |
use warnings; |
use List::Util 'shuffle'; |
require "widget.pl"; |
require "widget.pl"; |
|
|
use constant RESET_CMD => " $ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n 127 -d \"I:1,D:1:1,I:0\" "; |
use constant UNRESET_CMD => " $ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n 127 -d \"I:1,D:1:0,I:0\" "; |
use constant READ_DONE_CMD => " $ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n 127 -d \"I:2,R:1:0,I:0\" "; |
use constant UPDATE_WB_ADDR => 0x7; |
use constant SIM_RAM_GEN => 1; |
|
use constant JTAG_RAM_INDEX => 128; |
use constant JTAG_DONE_RESET_INDEX => 127; |
use constant RESET_NOC => " $ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n ".JTAG_DONE_RESET_INDEX." -d \"I:1,D:2:1,I:0\" "; |
use constant UNRESET_NOC => " $ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n ".JTAG_DONE_RESET_INDEX." -d \"I:1,D:2:0,I:0\" "; |
|
use constant READ_DONE_CMD => " $ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n ".JTAG_DONE_RESET_INDEX." -d \"I:2,R:2:0,I:0\" "; |
|
use constant UPDATE_WB_ADDR => 0x7; |
use constant UPDATE_WB_WR_DATA => 0x6; |
use constant UPDATE_WB_RD_DATA => 0x5; |
use constant RD_WR_STATUS => 0x4; |
15,87 → 21,87
use constant PROBE_ST => 0x2; |
use constant SOURCE_ST => 0x1; |
use constant BYPAS_ST => 0x0; |
|
use constant RAM_BIN_FILE => "$ENV{'PRONOC_WORK'}/emulate/emulate_ram.bin"; |
use constant RAM_SIM_FILE => "$ENV{'PRONOC_WORK'}/emulate/ram"; |
|
|
sub get_data{ |
|
my ( $x, $y, $ref, $traffic, $ratio_in,$num, $line_num, $dest)=@_; |
my %noc_info= %$ref; |
my $C=$noc_info{C}; |
my $xn=$noc_info{NX}; |
my $yn=$noc_info{NY}; |
my $MAX_PCK_NUM = $noc_info{MAX_PCK_NUM}; |
my $MAX_SIM_CLKs = $noc_info{MAX_SIM_CLKs}; |
my $MAX_PCK_SIZ = $noc_info{MAX_PCK_SIZ}; |
|
|
my $Xw = log2($xn); # number of node in x axis |
my $Yw = log2($yn); # number of node in y axis |
my $Cw = ($C > 1)? log2($C): 1; |
#$Fw = 2+V+Fpay, |
my $RATIOw = log2(100), |
my $PCK_CNTw = log2($MAX_PCK_NUM+1), |
my $CLK_CNTw = log2($MAX_SIM_CLKs+1), |
my $PCK_SIZw = log2($MAX_PCK_SIZ+1); |
|
my $Dw=$PCK_CNTw+ $RATIOw + $PCK_SIZw + $Xw + $Yw + $Cw +1; |
my $val=0; |
my $q=0; |
my $i=0; |
my $last_adr=($traffic eq 'random' && $line_num<($xn* $yn)-2 )? 0 : 1; |
#print "my $last_adr=($traffic eq 'random' && $line_num<($xn* $yn)-2 )? 0 : 1; \n"; |
my @fileds=get_ram_line($C, $x, $y, $xn, $yn, $traffic,$ratio_in,$line_num,$dest,$last_adr); |
my ($pck_num_to_send_,$ratio_in_,$pck_size_,$dest_x_,$dest_y_,$pck_class_in_,$last_adr_)=@fileds; |
my @sizes= ($PCK_CNTw, $RATIOw , $PCK_SIZw , $Xw , $Yw , $Cw ,1); |
|
foreach my $p (@fileds){ |
$val= $val << $q; |
$val= $val + $p; |
$i++; |
$q=$sizes[$i] if(defined $sizes[$i]); |
} |
|
my $sum = 0; |
|
foreach my $num (@sizes){ |
$sum = $sum + $num; |
} |
my $result = sprintf("%010x", $val); |
#print"$result\n"; |
return ($result,$last_adr,$Dw); |
|
|
|
|
sub reset_cmd { |
my ($ctrl_reset, $noc_reset)=@_; |
my $reset_vector= (($ctrl_reset & 0x1) << 1) + ($noc_reset & 0x1); |
my $cmd = " $ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n ".JTAG_DONE_RESET_INDEX." -d \"I:1,D:2:$reset_vector,I:0\" "; |
#print "$cmd\n"; |
return $cmd; |
|
#ram_do= {pck_num_to_send_,ratio_in_,pck_size_,dest_x_,dest_y_,pck_class_in_,last_adr_}; |
} |
|
|
} |
|
sub get_ram_line{ |
my ($C, $x, $y, $xn, $yn, $traffic,$ratio_in,$line_num,$dest,$last_adr_)=@_; |
|
my $pck_num_to_send_=2000000; |
my $pck_size_=4; |
my $pck_class_in_=0; |
|
|
my $xw=log2($xn); |
my $yw=log2($yn); |
sub help { |
print |
" usage: ./ram_gen X Y TRAFFIC |
X: number of node in X direction 2<x<=16 |
Y: number of node in Y direction 2<y<=16 |
TRAFFIC : select one of the following traffic patterns : |
tornado, |
transposed 1, |
transposed 2, |
random, |
|
"; |
|
#print "$traffic\n"; |
my $dest_x_; |
my $dest_y_; |
} |
|
|
|
|
|
|
sub random_dest_gen { |
my $n=shift; |
my @c=(0..$n-1); |
my @o; |
for (my $i=0; $i<$n; $i++){ |
my @l= shuffle @c; |
@l=remove_scolar_from_array(\@l,$i); |
$o[$i]=\@l; |
|
} |
return \@o; |
|
} |
|
sub run_cmd_update_info { |
my ($cmd,$info)=@_; |
my ($stdout,$exit,$stderr)=run_cmd_in_back_ground_get_stdout($cmd); |
if($exit){ |
add_info($info, "$stdout\n") if(defined $stdout); |
add_info($info, "$stderr\n") if(defined $stderr); |
|
} |
#print "\n$cmd \n $stdout"; |
return $exit; |
} |
|
|
sub synthetic_destination{ |
my($traffic,$x,$y,$xn,$yn,$line_num,$rnd)=@_; |
my $dest_x; |
my $dest_y; |
my $xw = log2($xn); |
my $yw = log2($yn); |
|
if( $traffic eq "transposed 1"){ |
$dest_x_= $xn-$y-1; |
$dest_y_= $yn-$x-1; |
$dest_x= $xn-$y-1; |
$dest_y= $yn-$x-1; |
|
} elsif( $traffic eq "transposed 2"){ |
|
$dest_x_ = $y; |
$dest_y_ = $x; |
$dest_x = $y; |
$dest_y = $x; |
} elsif( $traffic eq "bit reverse"){ |
my $joint_addr= ($x << log2($xn))+$y; |
my $reverse_addr=0; |
105,40 → 111,39
$reverse_addr|= (($joint_addr >> $pos) & 0x01) << $i; |
# reverse_addr[i] = joint_addr [((Xw+Yw)-1)-i]; |
} |
$dest_x_ = $reverse_addr>>$yw; |
$dest_y_ = $reverse_addr&(0xFF>> (8-$yw)); |
|
$dest_x = $reverse_addr>>$yw; |
$dest_y = $reverse_addr&(0xFF>> (8-$yw)); |
} elsif( $traffic eq "bit complement") { |
|
$dest_x_ = (~$x) &(0xFF>> (8-$xw)); |
$dest_y_ = (~$y) &(0xFF>> (8-$yw)); |
$dest_x = (~$x) &(0xFF>> (8-$xw)); |
$dest_y = (~$y) &(0xFF>> (8-$yw)); |
|
|
} elsif( $traffic eq "tornado") { |
}elsif( $traffic eq "tornado") { |
|
#[(x+(k/2-1)) mod k, (y+(k/2-1)) mod k], |
$dest_x_ = (($x + (($xn/2)-1))%$xn); |
$dest_y_ = (($y + (($yn/2)-1))%$yn); |
|
} elsif( $traffic eq "random") { |
$dest_x = (($x + (($xn/2)-1))%$xn); |
$dest_y = (($y + (($yn/2)-1))%$yn); |
}elsif( $traffic eq "random") { |
#my $num=($y * $xn) + $x; |
$pck_num_to_send_=2; |
$dest_x_ = $dest % $xn; |
$dest_y_ = $dest / $xn; |
|
my $xc=$xn * $yn; |
my @randoms=@{$rnd}; |
my $num=($y * $xn) + $x; |
my $dest = @{$randoms[$num]}[$line_num-1]; |
#print "$num:$dest, "; # \@{ \$randoms\[$num\]\}\[$line_num\]"; |
$dest_x = $dest % $xn; |
$dest_y = $dest / $xn; |
|
|
}else{#off |
} else{#off |
print "***********************************$traffic is not defined*******************************************\n"; |
$dest_x_= $x; |
$dest_y_= $y; |
$dest_x= $x; |
$dest_y= $y; |
|
} |
|
#print" ($pck_num_to_send_,$ratio_in,$pck_size_,$dest_x_,$dest_y_,$pck_class_in_,$last_adr_);\n"; |
return ($pck_num_to_send_,$ratio_in,$pck_size_,$dest_x_,$dest_y_,$pck_class_in_,$last_adr_); |
return ($dest_x,$dest_y); |
|
|
} |
|
|
145,155 → 150,165
|
|
|
sub help { |
print |
" usage: ./ram_gen X Y TRAFFIC |
X: number of node in X direction 2<x<=16 |
Y: number of node in Y direction 2<y<=16 |
TRAFFIC : select one of the following traffic patterns : |
tornado, |
transposed 1, |
transposed 2, |
random, |
|
"; |
|
sub gen_synthetic_traffic_ram_line{ |
my ($emulate, $x, $y, $sample_num,$ratio ,$line_num,$rnd)=@_; |
|
|
} |
|
my $ref=$emulate->object_get_attribute("sample$sample_num","noc_info"); |
my %noc_info= %$ref; |
my $xn=$noc_info{NX}; |
my $yn=$noc_info{NY}; |
my $traffic=$emulate->object_get_attribute("sample$sample_num","traffic"); |
|
|
my $pck_num_to_send=$emulate->object_get_attribute("sample$sample_num","PCK_NUM_LIMIT"); |
my $pck_size=$emulate->object_get_attribute("sample$sample_num","PCK_SIZE"); |
my $pck_class_in=0; |
|
|
if($line_num==0){ #first ram line shows how many times the ram content must be read |
#In random traffic each node sends 2 packets to other NC-1 nodes for (pck_num_to_send/2) times |
my $ram_cnt= ($traffic eq 'random')? ($pck_num_to_send/(2*(($xn * $yn)-1)))+1:0 ; |
return (0,$ram_cnt); |
|
} |
return (0,0) if($line_num>1 && $traffic ne 'random'); |
return (0,0) if( $line_num>= $xn * $yn); |
|
|
|
#assign {pck_num_to_send_in,ratio_in, pck_size_in,dest_x_in, dest_y_in,pck_class_in, last_adr_in}= q_a; |
my $last_adr = ( $traffic ne 'random') ? 1 : |
($line_num ==($xn * $yn)-1)? 1 :0; |
|
my ($dest_x, $dest_y)=synthetic_destination($traffic,$x,$y,$xn,$yn,$line_num,$rnd); |
|
my $vs= ( $traffic eq 'random')? 2 : $pck_num_to_send; |
$vs=($vs << 2 )+ ($ratio >>5) ; |
|
sub gen_ram{ |
my ($data,$mem_width)=get_data(@_); |
my $result = sprintf("%8x", $data); |
|
my $vl= ($ratio %32); |
$vl=($vl << PCK_SIZw )+$pck_size; |
$vl=($vl << MAXXw )+$dest_x; |
$vl=($vl << MAXYw )+$dest_y; |
$vl=($vl << MAXCw )+$pck_class_in; |
$vl=($vl << 1 )+$last_adr; |
|
return ($vs,$vl); |
|
return $result; |
|
|
|
} |
|
sub random_dest_gen { |
my $n=shift; |
my @c=(0..$n-1); |
my @o; |
for (my $i=0; $i<$n; $i++){ |
my @l= shuffle @c; |
@l=remove_scolar_from_array(\@l,$i); |
$o[$i]=\@l; |
|
} |
return \@o; |
|
} |
|
sub run_cmd_update_info { |
my ($cmd,$info)=@_; |
my ($stdout,$exit,$stderr)=run_cmd_in_back_ground_get_stdout($cmd); |
if($exit){ |
add_info($info, "$stdout\n") if(defined $stdout); |
add_info($info, "$stderr\n") if(defined $stderr); |
|
|
|
|
|
sub generate_synthetic_traffic_ram{ |
my ($emulate,$x,$y,$sample_num,$ratio , $file,$rnd,$num)=@_; |
my $RAM_size=MAX_PATTERN+4; |
|
|
|
my $line_num; |
my $line_value; |
my $ram; |
if(SIM_RAM_GEN){ |
my $ext= sprintf("%02u.txt",$num); |
open( $ram, '>', RAM_SIM_FILE.$ext) || die "Can not create: \">lib/emulate/emulate_ram.bin\" $!"; |
} |
for ($line_num= 0; $line_num<MAX_PATTERN+4; $line_num++ ) { |
my ($value_s,$value_l)=gen_synthetic_traffic_ram_line ($emulate, $x, $y, $sample_num, $ratio ,$line_num,$rnd); |
|
|
#printf ("\n%08x\t",$value_s); |
#printf ("%08x\t",$value_l); |
if(SIM_RAM_GEN){ |
my $s=sprintf("%08X%08x",$value_s,$value_l); |
print $ram "$s\n"; |
} |
return $exit; |
} |
print_32_bit( $file, $value_s); # most significent 32 bit |
print_32_bit( $file, $value_l); # list significent 32 bit |
|
} |
|
|
if(SIM_RAM_GEN){ |
close($ram); |
} |
#print "\n"; |
|
#last ram three rows reserved for reading data from emulator |
|
} |
|
|
sub print_32_bit { |
my ($file,$v)=@_; |
for (my $i= 24; $i >=0 ; $i-=8) { |
my $byte= ($v >> $i ) & 0xFF; |
print $file pack('C*',$byte); |
#printf ("%02x\t",$byte); |
} |
} |
|
|
sub programe_pck_gens{ |
my ($ref, $traffic,$ratio_in,$info)= @_; |
|
sub generate_emulator_ram { |
my ($emulate, $sample_num,$ratio_in,$info)=@_; |
my $ref=$emulate->object_get_attribute("sample$sample_num","noc_info"); |
my %noc_info= %$ref; |
my $C=$noc_info{C}; |
my $xn=$noc_info{NX}; |
my $yn=$noc_info{NY}; |
#print( "@_\n" ); |
my $xc=$xn*$yn; |
my $rnd=random_dest_gen($xc); # generate a matrix of sudo random number |
my $traffic=$emulate->object_get_attribute("sample$sample_num","traffic"); |
my @traffics=("tornado", "transposed 1", "transposed 2", "bit reverse", "bit complement","random", "hot spot" ); |
my $xc=$xn * $yn; |
my @randoms=@{random_dest_gen($xc)}; |
|
|
if ( !defined $xn || $xn!~ /\s*\d+\b/ ){ add_info($info,"programe_pck_gens:invalid X value\n"); help(); return 0;} |
if ( !defined $yn || $yn!~ /\s*\d+\b/ ){ add_info($info,"programe_pck_gens:invalid Y value\n"); help(); return 0;} |
if ( !grep( /^$traffic$/, @traffics ) ){add_info($info,"programe_pck_gens:$traffic is an invalid Traffic name\n"); help(); return 0;} |
if ( $xn <2 || $xn >16 ){ add_info($info,"programe_pck_gens:invalid X value: ($xn). should be between 2 and 16 \n"); help(); return 0;} |
if ( $yn <2 || $yn >16 ){ add_info($info,"programe_pck_gens:invalid Y value:($yn). should be between 2 and 16 \n"); help(); return 0;} |
|
#reset the FPGA board |
#run_cmd_in_back_ground("quartus_stp -t ./lib/tcl/mem.tcl reset"); |
return if(run_cmd_update_info(RESET_CMD,$info)); |
#open file pointer |
#open(my $file, RAM_BIN_FILE) || die "Can not create: \">lib/emulate/emulate_ram.bin\" $!"; |
open(my $file, '>', RAM_BIN_FILE) || die "Can not create: \">lib/emulate/emulate_ram.bin\" $!"; |
|
|
my $argument=''; |
my $argument2=''; |
|
for (my $x=0; $x<$xn; $x=$x+1){ |
#generate each node ram data |
for (my $y=0; $y<$yn; $y=$y+1){ |
my $num=($y * $xn) + $x; |
$num= ($num<=9)? "0$num" : $num; |
#add_info($info, "programe M$num\n"); |
my $line=0; |
my ($ram_val,$end,$Dw); |
my $repeat=($traffic eq 'random')? "0x2710" : "0x0"; # 10000 : 0; |
|
$argument=undef; |
do{ |
($ram_val,$end,$Dw)=get_data($x, $y, $ref, $traffic,$ratio_in,$num,$line,@{$randoms[$num]}[$line]); |
if(!defined $argument ) { #first row |
$argument="-n $num -d \"I:".UPDATE_WB_ADDR.",D:$Dw:0,I:".UPDATE_WB_WR_DATA.",D:$Dw:0x$ram_val"; |
} |
#$argument="$argument M$num $line $ram_val"; |
else { |
$argument=$argument.",D:$Dw:0x$ram_val"; |
for (my $x=0; $x<$xn; $x=$x+1){ |
my $num=($y * $xn) + $x; |
generate_synthetic_traffic_ram($emulate,$x,$y,$sample_num,$ratio_in, $file,$rnd,$num); |
|
} |
#$argument="$argument M$num $line $ram_val"; |
$line++; |
#print "\$line=$line\n"; |
} while($end == 0); |
$argument=$argument.",I:0\""; |
#program the memory |
#print "$cmd\n"; |
my $cmd="$ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main $argument"; |
return if(run_cmd_update_info ($cmd,$info)); |
my $source_index=$num+128; |
|
$cmd= "$ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n $source_index -d \"I:".SOURCE_ST.",D:100:$repeat,I:0\""; |
return if(run_cmd_update_info ($cmd,$info)); |
#$argument2="$argument2 P$num $repeat"; |
} |
} |
close($file); |
return 1; |
|
} |
|
|
#my $file="./RAM/M$num.mif\n"; |
#unless(open FILE, '>'.$file) { die "\nUnable to create $file\n";} |
|
# Write data to the file. |
#my $ram_content= gen_ram(0, $x, $y, $xn, $yn, $traffic,"M$num"); |
#print FILE $ram_content; |
# close the file. |
#close FILE; |
sub programe_pck_gens{ |
my ($emulate, $sample_num,$ratio_in,$info)= @_; |
|
} |
} |
#print "quartus_stp -t ./lib/tcl/mem.tcl $argument\n"; |
# ($result,$exit)=run_cmd_in_back_ground_get_stdout("quartus_stp -t ./lib/tcl/mem.tcl $argument"); |
#add_info($info,"update packet generators\n"); |
#print "($result,$exit)\n"; |
#return 0 if ($exit); |
#print "quartus_stp -t ./lib/tcl/source.tcl $argument2\n"; |
#($result,$exit)=run_cmd_in_back_ground_get_stdout("quartus_stp -t ./lib/tcl/source.tcl $argument2"); |
#print "($result,$exit)\n"; |
#return 0 if ($exit); |
return 0 if(!generate_emulator_ram($emulate, $sample_num,$ratio_in,$info)); |
|
# deassert the reset |
#reset the FPGA board |
#run_cmd_in_back_ground("quartus_stp -t ./lib/tcl/mem.tcl reset"); |
return 0 if(run_cmd_update_info(reset_cmd(1,1),$info)); #reset both noc and jtag |
return 0 if(run_cmd_update_info(reset_cmd(0,1),$info)); #enable jtag keep noc in reset |
#programe packet generators rams |
my $cmd= "$ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n ".JTAG_RAM_INDEX." -w 8 -i ".RAM_BIN_FILE." -c"; |
#my ($result,$exit) = run_cmd_in_back_ground_get_stdout($cmd); |
|
return if(run_cmd_update_info (UNRESET_CMD,$info)); |
return 0 if(run_cmd_update_info ($cmd,$info)); |
#print $result; |
|
return 0 if(run_cmd_update_info(reset_cmd(1,1),$info)); #reset both |
return 0 if(run_cmd_update_info(reset_cmd(0,0),$info)); #enable both |
#run_cmd_in_back_ground("quartus_stp -t ./lib/tcl/mem.tcl unreset"); |
#add_info($info,"$r\n"); |
|
302,9 → 317,26
} |
|
|
sub read_jtag_memory{ |
my $addr=shift; |
my $cmd= "$ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n ".JTAG_RAM_INDEX." -w 8 -d \"I:".UPDATE_WB_ADDR.",D:64:$addr,I:5,R:64:$addr,I:0\""; |
#print "$cmd\n"; |
my ($result,$exit) = run_cmd_in_back_ground_get_stdout($cmd); |
my @q =split (/###read data#/,$result); |
my $d=$q[1]; |
my $s= substr $d,2; |
#print "$s\n"; |
return hex($s); |
} |
|
|
|
|
|
|
sub read_pack_gen{ |
my ($ref,$info)= @_; |
my ($emulate,$sample_num,$info)= @_; |
my $ref=$emulate->object_get_attribute("sample$sample_num","noc_info"); |
my %noc_info= %$ref; |
my $xn=$noc_info{NX}; |
my $yn=$noc_info{NY}; |
313,9 → 345,13
my $done=0; |
my $counter=0; |
while ($done ==0){ |
|
usleep(300000); |
#my ($result,$exit) = run_cmd_in_back_ground_get_stdout("quartus_stp -t ./lib/tcl/read.tcl done"); |
my ($result,$exit) = run_cmd_in_back_ground_get_stdout(READ_DONE_CMD); |
if($exit != 0 ){ |
add_info($info,$result); |
return undef; |
} |
my @q =split (/###read data#/,$result); |
#print "\$result=$result\n"; |
|
322,14 → 358,14
|
$done=($q[1] eq "0x0")? 0 : 1; |
#print "\$q[1]=$q[1] done=$done\n"; |
usleep(9000); |
|
$counter++; |
if($counter == 15){ # |
add_info($info,"Done is not asserted. I reset the board and try again\n"); |
return if(run_cmd_update_info (RESET_CMD,$info)); |
return if(run_cmd_update_info (reset_cmd(1,1),$info)); |
#run_cmd_in_back_ground("quartus_stp -t ./lib/tcl/mem.tcl reset"); |
usleep(300000); |
return if(run_cmd_update_info (UNRESET_CMD,$info)); |
return if(run_cmd_update_info (reset_cmd(0,0),$info)); |
#run_cmd_in_back_ground("quartus_stp -t ./lib/tcl/mem.tcl unreset"); |
} |
if($counter>30){ |
340,35 → 376,27
} |
|
add_info($info,"Done is asserted\n"); |
#print" Done is asserted\n"; |
#my $i=0; |
my %results; |
my $sum_of_latency=0; |
my $sum_of_pck=0; |
for (my $x=0; $x<$xn; $x=$x+1){ |
for (my $y=0; $y<$yn; $y=$y+1){ |
for (my $y=0; $y<$yn; $y=$y+1){ |
for (my $x=0; $x<$xn; $x=$x+1){ |
my $num=($y * $xn) + $x; |
my $source_index=$num+128; |
my $cmd= "$ENV{'PRONOC_WORK'}/toolchain/bin/jtag_main -n $source_index -d \"I:".PROBE_ST.",R:100:0,I:0\""; |
my ($result,$exit) = run_cmd_in_back_ground_get_stdout($cmd); |
my @q =split (/###read data#/,$result); |
my $read_addr=($num * RAM_SIZE) + MAX_PATTERN +1; |
|
my $sent_pck_addr= sprintf ("%X",$read_addr); |
my $got_pck_addr = sprintf ("%X",$read_addr+1); |
my $latency_addr = sprintf ("%X",$read_addr+2); |
|
$results{$num}{sent_pck}=read_jtag_memory($sent_pck_addr); |
$results{$num}{got_pck}=read_jtag_memory($got_pck_addr); |
$results{$num}{latency}=read_jtag_memory($latency_addr); |
print "read pckgen $num\n"; |
|
|
|
my $d=$q[1]; |
#print "num=$num: ddddd=$d\n"; |
my $s= substr $d,2; |
#print "dddddddd=$s\n"; |
my $latency =substr $s, 0,9; |
my $got_pck= substr $s, -16, 8; |
my $sent_pck= substr $s, -8; |
#print "$latency, $got_pck, $sent_pck\n"; |
|
|
$results{$num}{latency}=hex($latency); |
$results{$num}{got_pck}=hex($got_pck); |
$results{$num}{sent_pck}=hex($sent_pck); |
$sum_of_latency+=hex($latency); |
$sum_of_pck+=hex($got_pck); |
$sum_of_latency+=$results{$num}{latency}; |
$sum_of_pck+=$results{$num}{got_pck}; |
#$i=$i+2; |
}} |
|
381,6 → 409,7
|
} |
my $avg= ($sum_of_pck>0)? $sum_of_latency/$sum_of_pck : 0; |
|
return sprintf("%.1f", $avg); |
} |
|
/mpsoc/perl_gui/lib/perl/emulator.pl
13,6 → 13,8
|
use File::Basename; |
use File::Path qw/make_path/; |
use File::Copy; |
use File::Find::Rule; |
|
require "widget.pl"; |
require "emulate_ram_gen.pl"; |
23,9 → 25,28
use List::MoreUtils qw(uniq); |
|
|
# hardware parameters taken from noc_emulator.v |
use constant PCK_CNTw =>30; # packet counter width in bits (results in maximum of 2^30 = 1 G packets) |
use constant PCK_SIZw =>14; # packet size width in bits (results in maximum packet size of 2^14 = 16 K flit) |
use constant MAXXw =>4; # maximum nodes in x dimention is 2^MAXXw equal to 16 nodes in x dimention |
use constant MAXYw =>4; # 16 nodes in y dimention : hence max emulator size is 16X16 |
use constant MAXCw =>4; # 16 message classes |
use constant RATIOw =>7; # log2(100) |
use constant MAX_PATTERN => 124; |
use constant RAM_SIZE => (MAX_PATTERN+4); |
|
|
#use constant MAX_PCK_NUM => (2**PCK_CNTw)-1; |
use constant MAX_PCK_NUM => (2**PCK_CNTw)-1; |
use constant MAX_PCK_SIZ => (2**PCK_SIZw)-1; |
use constant MAX_SIM_CLKs=> 100000000; # simulation end at if clock counter reach this number |
|
use constant EMULATION_RTLS => "/mpsoc/src_emulate/rtl/noc_emulator.v , /mpsoc/src_peripheral/jtag/jtag_wb/ , /mpsoc/src_peripheral/ram/generic_ram.v, /mpsoc/src_noc/"; |
|
|
|
|
|
sub gen_chart { |
my $emulate=shift; |
my($width,$hight)=max_win_size(); |
53,6 → 74,10
|
); |
|
|
|
|
|
if(defined $sample_num){ |
my @color; |
my $min_y=200; |
70,7 → 95,7
}#for |
my @x1; |
@x1 = uniq(sort {$a<=>$b} @x) if (scalar @x); |
|
#print "\@x1=@x1\n"; |
if (scalar @x1){ |
$results[0]=\@x1; |
for (my $i=1;$i<=$sample_num; $i++) { |
77,6 → 102,7
my $j=0; |
my $ref=$emulate->object_get_attribute ("sample$i","result"); |
if(defined $ref){ |
#print "$i\n"; |
my %line=%$ref; |
foreach my $k (@x1){ |
$results[$i][$j]=$line{$k}; |
83,7 → 109,11
$min_y= $line{$k} if (defined $line{$k} && $line{$k}!=0 && $min_y > $line{$k}); |
$j++; |
}#$k |
}#if |
}#if |
else { |
$results[$i][$j]=undef; |
|
} |
}#$i |
|
}#if |
98,7 → 128,7
$graphs_info->{$d->{param_name}}= $d->{default_val} if(!defined $graphs_info->{$d->{param_name}}); |
} |
|
#print "gggggggggggggggg=".$graphs_info->{X_Title}; |
|
|
$graph->set ( |
x_label => $graphs_info->{X_Title}, |
485,51 → 515,72
|
|
sub get_noc_configuration{ |
my ($emulate,$n) =@_; |
my($width,$hight)=max_win_size(); |
my $win=def_popwin_size($width/2.5,$hight*.8,"NoC configuration setting"); |
my $table=def_table(10,2,FALSE); |
my $entry=gen_entry(); |
my $row=0; |
my @l; |
my @u; |
my ($emulate,$n) =@_; |
my($width,$hight)=max_win_size(); |
my $win=def_popwin_size($width/2.5,$hight*.8,"NoC configuration setting"); |
my $table=def_table(10,2,FALSE); |
my $row=0; |
|
my $traffics="tornado,transposed 1,transposed 2,bit reverse,bit complement,random"; #TODO hot spot |
|
$l[$row]=gen_label_help("Select the SRAM Object File (sof) for this NoC configration.","SoF file:"); |
my $dir = Cwd::getcwd(); |
my $traffics="tornado,transposed 1,transposed 2,bit reverse,bit complement,random"; #TODO hot spot |
|
my $dir = Cwd::getcwd(); |
my $open_in = abs_path("$ENV{PRONOC_WORK}/emulate/sof"); |
attach_widget_to_table ($table,$row,gen_label_in_left("SoF file:"),gen_button_message ("Select the SRAM Object File (sof) for this NoC configration.","icons/help.png"), get_file_name_object ($emulate,"sample$n","sof_file",'sof',$open_in)); $row++; |
|
|
|
my @siminfo = ( |
{ label=>'Configuration name:', param_name=>'line_name', type=>'Entry', default_val=>"NoC$n", content=>undef, info=>"NoC configration name. This name will be shown in load-latency graph for this configuration", param_parent=>"sample$n", ref_delay=> undef}, |
|
{ label=>"Traffic name", param_name=>'traffic', type=>'Combo-box', default_val=>'random', content=>$traffics, info=>"Select traffic pattern", param_parent=>"sample$n", ref_delay=>undef}, |
|
{ label=>"Packet size in flit:", param_name=>'PCK_SIZE', type=>'Spin-button', default_val=>4, content=>"2,".MAX_PCK_SIZ.",1", info=>undef, param_parent=>"sample$n", ref_delay=>undef}, |
|
{ label=>"Packet number limit:", param_name=>'PCK_NUM_LIMIT', type=>'Spin-button', default_val=>1000000, content=>"2,".MAX_PCK_NUM.",1", info=>"Each node stops sending packets when it reaches packet number limit or simulation clock number limit", param_parent=>"sample$n", ref_delay=>undef}, |
|
{ label=>"Emulation clocks limit:", param_name=>'SIM_CLOCK_LIMIT', type=>'Spin-button', default_val=>MAX_SIM_CLKs, content=>"2,".MAX_SIM_CLKs.",1", info=>"Each node stops sending packets when it reaches packet number limit or simulation clock number limit", param_parent=>"sample$n", ref_delay=>undef}, |
|
|
); |
foreach my $d ( @siminfo) { |
$row=noc_param_widget ($emulate, $d->{label}, $d->{param_name}, $d->{default_val}, $d->{type}, $d->{content}, $d->{info}, $table,$row,1, $d->{param_parent}, $d->{ref_delay}); |
} |
|
|
|
|
my $l= "Define injection ratios. You can define individual ratios seprating by comma (\',\') or define a range of injection ratios with \$min:\$max:\$step format. |
As an example defining 2,3,4:10:2 will result in (2,3,4,6,8,10) injection ratios." ; |
my $u=get_injection_ratios ($emulate,"sample$n","ratios"); |
|
my $open_in = abs_path("$ENV{PRONOC_WORK}/emulate/sof"); |
$u[$row]= get_file_name_object ($emulate,"sample$n","sof_file",'sof',$open_in); |
$row++; |
$l[$row]=gen_label_help("NoC configration name. This name will be shown in load-latency graph for this configuration","Configuration name:"); |
$u[$row]=gen_entry_object ($emulate,"sample$n","line_name","NoC$n"); |
$row++; |
$l[$row]=gen_label_help("Traffic name","Traffic name:"); |
$u[$row]=gen_combobox_object ($emulate,"sample$n","traffic",$traffics,"random"); |
$row++; |
$l[$row]=gen_label_help("Define injection ratios. You can define individual ratios seprating by comma (\',\') or define a range of injection ratios with \$min:\$max:\$step format. |
As an example definnig 2,3,4:10:2 will results in (2,3,4,6,8,10) injection ratios.","Injection ratios:"); |
$u[$row]=get_injection_ratios ($emulate,"sample$n","ratios"); |
$row++; |
my $i=0; |
for ( $i=0; $i<12; $i++){ |
if($i<$row){ |
$table->attach ($l[$i] , 0, 1, $i, $i+1,'fill','shrink',2,2); |
$table->attach ($u[$i] , 1, 2, $i, $i+1,'fill','shrink',2,2); |
}else{ |
my $l=gen_label_in_left(" "); |
$table->attach_defaults ($l , 0, 1, $i, $i+1); |
} |
} |
attach_widget_to_table ($table,$row,gen_label_in_left("Injection ratios:"),gen_button_message ($l,"icons/help.png") , $u); $row++; |
|
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef); |
$scrolled_win->set_policy( "automatic", "automatic" ); |
$scrolled_win->add_with_viewport($table); |
|
|
my $ok = def_image_button('icons/select.png','OK'); |
my $mtable = def_table(10, 1, TRUE); |
|
$mtable->attach_defaults($scrolled_win,0,1,0,9); |
$mtable-> attach ($ok , 0, 1, 9, 10,'expand','shrink',2,2); |
|
$win->add ($mtable); |
$win->show_all(); |
|
|
|
|
|
|
|
|
|
|
$table->attach ($ok , 1, 2, $i, $i+1,'expand','shrink',2,2); |
|
|
|
$ok->signal_connect("clicked"=> sub{ |
#check if sof file has been selected |
my $s=$emulate->object_get_attribute("sample$n","sof_file"); |
547,9 → 598,14
} |
} |
}); |
|
|
$win->add($table); |
$win->show_all; |
|
|
|
|
|
|
|
|
} |
710,7 → 766,14
$emulate->object_add_attribute ("sample$i","status","failed"); |
$status=0; |
}else { #add info |
my $p= do $sof_info ; |
my $pp= do $sof_info ; |
|
my $p=$pp->{'noc_param'}; |
|
|
|
|
|
$status=0 if $@; |
message_dialog("Error reading: $@") if $@; |
if ($status==1){ |
878,6 → 941,7
add_info($info, "jtagconfig could not find any USB blaster cable: $stdout \n"); |
$emulate->object_add_attribute('status',undef,'programer_failed'); |
set_gui_status($emulate,"ref",2); |
#/***/ |
return; |
}else{ |
add_info($info, "find $usb_blaster\n"); |
896,7 → 960,12
|
|
my $cmd = "$Quartus_bin/quartus_pgm -c \"$usb_blaster\" -m jtag -o \"p;$sof\""; |
|
#my $output = `$cmd 2>&1 1>/dev/null`; # either with backticks |
|
|
|
#/***/ |
my ($stdout,$exit)=run_cmd_in_back_ground_get_stdout("$cmd"); |
if($exit){#programming FPGA board has failed |
$emulate->object_add_attribute('status',undef,'programer_failed'); |
904,27 → 973,29
$emulate->object_add_attribute ("sample$i","status","failed"); |
set_gui_status($emulate,"ref",2); |
next; |
} |
} |
#print "$stdout\n"; |
|
# read noc configuration |
my $traffic = $emulate->object_get_attribute("sample$i","traffic"); |
|
|
my $ref=$emulate->object_get_attribute("sample$i","noc_info"); |
|
|
|
foreach my $ratio_in (@ratios){ |
|
foreach my $ratio_in (@ratios){ |
|
add_info($info, "Configure packet generators for injection ratio of $ratio_in \% \n"); |
next if(!programe_pck_gens($ref,$traffic,$ratio_in,$info)); |
|
my $avg=read_pack_gen($ref,$info); |
my $ref=$emulate->object_get_attribute ("sample$i","result"); |
my %results; |
%results= %{$ref} if(defined $ref); |
#push(@results,$avg); |
$results{$ratio_in}=$avg; |
$emulate->object_add_attribute ("sample$i","result",\%results); |
set_gui_status($emulate,"ref",2); |
add_info($info, "Configure packet generators for injection ratio of $ratio_in \% \n"); |
next if(!programe_pck_gens($emulate,$i,$ratio_in,$info)); |
|
my $avg=read_pack_gen($emulate,$i,$info); |
next if (!defined $avg); |
my $ref=$emulate->object_get_attribute ("sample$i","result"); |
my %results; |
%results= %{$ref} if(defined $ref); |
#push(@results,$avg); |
$results{$ratio_in}=$avg; |
$emulate->object_add_attribute ("sample$i","result",\%results); |
set_gui_status($emulate,"ref",2); |
|
} |
$emulate->object_add_attribute ("sample$i","status","done"); |
978,70 → 1049,40
|
|
sub get_noc_setting_gui { |
my ($emulate,$info_text)=@_; |
my $table=def_table(20,10,FALSE);# my ($row,$col,$homogeneous)=@_; |
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef); |
$scrolled_win->set_policy( "automatic", "automatic" ); |
$scrolled_win->add_with_viewport($table); |
my $row=noc_config ($emulate,$table); |
my ($emulate,$info_text)=@_; |
my $table=def_table(20,10,FALSE);# my ($row,$col,$homogeneous)=@_; |
my $scrolled_win = new Gtk2::ScrolledWindow (undef, undef); |
$scrolled_win->set_policy( "automatic", "automatic" ); |
$scrolled_win->add_with_viewport($table); |
my $row=noc_config ($emulate,$table); |
|
my($label,$param,$default,$content,$type,$info); |
my @dirs = grep {-d} glob("../src_emulate/fpga/*"); |
my $fpgas; |
foreach my $dir (@dirs) { |
my ($name,$path,$suffix) = fileparse("$dir",qr"\..[^.]*$"); |
$default=$name; |
$fpgas= (defined $fpgas)? "$fpgas,$name" : "$name"; |
my($label,$param,$default,$content,$type,$info); |
my @dirs = grep {-d} glob("../src_emulate/fpga/*"); |
my $fpgas; |
foreach my $dir (@dirs) { |
my ($name,$path,$suffix) = fileparse("$dir",qr"\..[^.]*$"); |
$default=$name; |
$fpgas= (defined $fpgas)? "$fpgas,$name" : "$name"; |
|
} |
|
|
} |
|
|
|
|
$label='simulation param'; |
$content=$fpgas; |
$type='Entry'; |
$info=" I will add later"; |
|
my %simparam; |
$simparam{'MAX_PCK_NUM'}=2560000; |
$simparam{'MAX_SIM_CLKs'}=1000000; |
$simparam{'MAX_PCK_SIZ'}=10; |
$simparam{'TIMSTMP_FIFO_NUM'}=16; |
|
foreach my $p (sort keys %simparam){ |
# print "\$p, \$simparam{\$p}=$p, $simparam{$p}\n"; |
$row=noc_param_widget ($emulate,$label,$p, $simparam{$p},$type,$content,$info, $table,$row,0,'noc_param'); |
} |
|
|
|
my @fpgainfo = ( |
{ label=>'FPGA board', param_name=>'FPGA_BOARD', type=>'Combo-box', default_val=>undef, content=>$fpgas, info=>undef, param_parent=>'fpga_param', ref_delay=> undef}, |
{ label=>'Save as:', param_name=>'SAVE_NAME', type=>"Entry", default_val=>'emulate1', content=>undef, info=>undef, param_parent=>'fpga_param', ref_delay=>undef}, |
{ label=>"Project directory", param_name=>"SOF_DIR", type=>"DIR_path", default_val=>"$ENV{'PRONOC_WORK'}/emulate", content=>undef, info=>"Define the working directory for generating .sof file", param_parent=>'fpga_param',ref_delay=>undef }, |
|
); |
foreach my $d (@fpgainfo) { |
$row=noc_param_widget ($emulate, $d->{label}, $d->{param_name}, $d->{default_val}, $d->{type}, $d->{content}, $d->{info}, $table,$row,1, $d->{param_parent}, $d->{ref_delay}); |
} |
|
|
|
#FPGA NAME |
$label='FPGA board'; |
$param='FPGA_BOARD'; |
$content=$fpgas; |
$type='Combo-box'; |
$info=" I will add later"; |
$row=noc_param_widget ($emulate,$label,$param, $default,$type,$content,$info, $table,$row,1,'fpga_param'); |
|
|
#save as |
$label='Save as:'; |
$param='SAVE_NAME'; |
$default='emulate1'; |
$content=undef; |
$type="Entry"; |
$info="define generated sof file's name"; |
$row=noc_param_widget ($emulate,$label,$param, $default,$type,$content,$info, $table,$row,1,'fpga_param'); |
|
|
#Project_dir |
$label='Project directory'; |
$param='SOF_DIR'; |
$default="../../mpsoc_work/emulate"; |
$content=undef; |
$type="DIR_path"; |
$info="Define the working directory for generating .sof file"; |
$row=noc_param_widget ($emulate,$label,$param, $default,$type,$content,$info, $table,$row,1,'fpga_param'); |
|
|
|
|
1072,6 → 1113,7
my $fpga_board= $emulate->object_get_attribute ('fpga_param',"FPGA_BOARD"); |
#create work directory |
my $dir_name=$emulate->object_get_attribute ('fpga_param',"SOF_DIR"); |
$dir_name="$dir_name/$fpga_board"; |
my $save_name=$emulate->object_get_attribute ('fpga_param',"SAVE_NAME"); |
$save_name=$fpga_board if (!defined $save_name); |
$dir_name= "$dir_name/$save_name"; |
1080,57 → 1122,89
|
|
#copy all noc source codes |
my @files =("mpsoc/src_noc/*", "mpsoc/src_emulate/rtl/*","mpsoc/src_peripheral/jtag/jtag_wb/*"); |
|
my @files = split(/\s*,\s*/,EMULATION_RTLS); |
|
my $dir = Cwd::getcwd(); |
my $project_dir = abs_path("$dir/../../"); |
my ($stdout,$exit)=run_cmd_in_back_ground_get_stdout("mkdir -p $dir_name/src/" ); |
foreach my $f (@files){ |
($stdout,$exit) =run_cmd_in_back_ground_get_stdout("cp -Rf \"$project_dir\"/$f \"$dir_name/src/\"" ); |
if($exit != 0 ){ print "$stdout\n"; message_dialog($stdout); return;} |
} |
copy_file_and_folders(\@files,$project_dir,"$dir_name/src/"); |
|
foreach my $f(@files){ |
my $n="$project_dir/$f"; |
if (!(-f "$n") && !(-f "$f" ) && !(-d "$n") && !(-d "$f" ) ){ |
add_info ($info, " WARNING: file/folder \"$f\" ($n) dose not exists \n"); |
|
} |
|
|
} |
|
|
|
|
|
#copy fpga board files |
|
($stdout,$exit)=run_cmd_in_back_ground_get_stdout("cp -Rf \"$project_dir/mpsoc/src_emulate/fpga/$fpga_board\"/* \"$dir_name/\""); |
if($exit != 0 ){ print "$stdout\n"; message_dialog($stdout); return;} |
|
#generate emulator_top.v file |
|
open(FILE, ">$dir_name/emulator_top.v") || die "Can not open: $!"; |
print FILE gen_emulate_top_v($emulate); |
#generate parameters for emulator_top.v file |
my ($localparam, $pass_param)=gen_noc_param_v( $emulate); |
open(FILE, ">$dir_name/src/noc_parameters.v") || die "Can not open: $!"; |
print FILE $localparam; |
close(FILE) || die "Error closing file: $!"; |
open(FILE, ">$dir_name/src/pass_parameters.v") || die "Can not open: $!"; |
print FILE $pass_param; |
close(FILE) || die "Error closing file: $!"; |
|
|
#compile the code |
my $Quartus_bin= $ENV{QUARTUS_BIN}; |
add_info($info, "Start Quartus compilation\n $stdout\n"); |
($stdout,$exit)=run_cmd_in_back_ground_get_stdout( " cd \"$dir_name/\" |
xterm -e $Quartus_bin/quartus_map --64bit $fpga_board --read_settings_files=on |
xterm -e $Quartus_bin/quartus_fit --64bit $fpga_board --read_settings_files=on |
xterm -e $Quartus_bin/quartus_asm --64bit $fpga_board --read_settings_files=on |
xterm -e $Quartus_bin/quartus_sta --64bit $fpga_board |
"); |
if($exit != 0){ |
print "Quartus compilation failed !\n"; |
add_info($info, "Quartus compilation failed !\n $stdout\n"); |
return; |
my @compilation_command =("cd \"$dir_name/\" \n xterm -e $Quartus_bin/quartus_map --64bit $fpga_board --read_settings_files=on ", |
"cd \"$dir_name/\" \n xterm -e $Quartus_bin/quartus_fit --64bit $fpga_board --read_settings_files=on ", |
"cd \"$dir_name/\" \n xterm -e $Quartus_bin/quartus_asm --64bit $fpga_board --read_settings_files=on ", |
"cd \"$dir_name/\" \n xterm -e $Quartus_bin/quartus_sta --64bit $fpga_board "); |
|
|
|
|
|
foreach my $cmd (@compilation_command){ |
($stdout,$exit)=run_cmd_in_back_ground_get_stdout( $cmd); |
if($exit != 0){ |
print "Quartus compilation failed !\n"; |
add_info($info, "Quartus compilation failed !\n$cmd\n $stdout\n"); |
return; |
} |
|
} else { |
} |
|
|
|
#save sof file |
my $sofdir="$ENV{PRONOC_WORK}/emulate/sof"; |
mkpath("$sofdir/",1,01777); |
open(FILE, ">$sofdir/$save_name.inf") || die "Can not open: $!"; |
mkpath("$sofdir/$fpga_board/",1,01777); |
open(FILE, ">$sofdir/$fpga_board/$save_name.inf") || die "Can not open: $!"; |
print FILE perl_file_header("$save_name.inf"); |
print FILE Data::Dumper->Dump([$emulate->{'noc_param'}],["NoCparam"]); |
my %pp; |
$pp{'noc_param'}= $emulate->{'noc_param'}; |
$pp{'fpga_param'}= $emulate->{'fpga_param'}; |
print FILE Data::Dumper->Dump([\%pp],["emulate_info"]); |
close(FILE) || die "Error closing file: $!"; |
($stdout,$exit)=run_cmd_in_back_ground_get_stdout("cp $dir_name/output_files/$fpga_board.sof $sofdir/$save_name.sof"); |
if($exit != 0 ){ print "$stdout\n"; message_dialog($stdout); return;} |
message_dialog("sof file has been generated successfully"); return; |
} |
|
|
#find $dir_name -name \*.sof -exec cp '{}' $sofdir/$fpga_board/$save_name.sof" |
@files = File::Find::Rule->file() |
->name( '*.sof' ) |
->in( "$dir_name" ); |
copy($files[0],"$sofdir/$fpga_board/$save_name.sof") or do { |
my $err= "Error copy($files[0] , $sofdir/$fpga_board/$save_name.sof"; |
print "$err\n"; |
message_dialog($err); |
return; |
}; |
message_dialog("sof file has been generated successfully"); |
|
|
|
/mpsoc/perl_gui/lib/perl/hdr_file_gen.pl
22,7 → 22,7
my @plugs= $soc->soc_get_all_plugs_of_an_instance($id); |
my %params= $soc->soc_get_module_param($id); |
#add two extra variable the instance name and base addresses |
my $core_id= $soc->object_add_attribute('global_param','CORE_ID'); |
my $core_id= $soc->object_get_attribute('global_param','CORE_ID'); |
$params{CORE_ID}=(defined $core_id)? $core_id: 0; |
$params{IP}=$inst; |
$params{CORE}=$id; |
64,7 → 64,7
|
|
sub generate_header_file{ |
my ($soc,$project_dir,$target_dir,$dir)= @_; |
my ($soc,$project_dir,$sw_path,$dir)= @_; |
my $soc_name=$soc->object_get_attribute('soc_name'); |
$soc_name = uc($soc_name); |
if(!defined $soc_name){$soc_name='soc'}; |
133,7 → 133,7
open(FILE, ">lib/verilog/tmp") || die "Can not open: $!"; |
print FILE $content; |
close(FILE) || die "Error closing file: $!"; |
move ("$dir/lib/verilog/tmp","$target_dir/sw/$rename"); |
move ("$dir/lib/verilog/tmp","$sw_path/$rename"); |
|
|
} |
148,7 → 148,7
open(FILE, ">lib/verilog/$name.h") || die "Can not open: $!"; |
print FILE $system_h; |
close(FILE) || die "Error closing file: $!"; |
move ("$dir/lib/verilog/$name.h","$target_dir/sw/"); |
move ("$dir/lib/verilog/$name.h","$sw_path/"); |
|
|
|
/mpsoc/perl_gui/lib/perl/mpsoc_gen.pl
11,7 → 11,6
use POSIX 'strtol'; |
|
use File::Path; |
use File::Find; |
use File::Copy; |
|
use Cwd 'abs_path'; |
27,6 → 26,7
require "mpsoc_verilog_gen.pl"; |
require "hdr_file_gen.pl"; |
require "readme_gen.pl"; |
require "soc_gen.pl"; |
|
sub get_pos{ |
my ($item,@list)=@_; |
51,16 → 51,13
$mpsoc->object_add_attribute_order($attribut1,$param); |
$value=$default; |
} |
if( ! defined $ref_delay){ |
$ref_delay=($type eq "Entry") ? 10 : 1; |
|
} |
|
if ($type eq "Entry"){ |
$widget=gen_entry($value); |
$widget-> signal_connect("changed" => sub{ |
my $new_param_value=$widget->get_text(); |
$mpsoc->object_add_attribute($attribut1,$param,$new_param_value); |
set_gui_status($mpsoc,"ref",$ref_delay); |
set_gui_status($mpsoc,"ref",$ref_delay) if(defined $ref_delay); |
|
|
}); |
80,7 → 77,7
$widget-> signal_connect("changed" => sub{ |
my $new_param_value=$widget->get_active_text(); |
$mpsoc->object_add_attribute($attribut1,$param,$new_param_value); |
set_gui_status($mpsoc,"ref",$ref_delay); |
set_gui_status($mpsoc,"ref",$ref_delay) if(defined $ref_delay); |
|
|
}); |
97,7 → 94,7
$widget-> signal_connect("value_changed" => sub{ |
my $new_param_value=$widget->get_value_as_int(); |
$mpsoc->object_add_attribute($attribut1,$param,$new_param_value); |
set_gui_status($mpsoc,"ref",$ref_delay); |
set_gui_status($mpsoc,"ref",$ref_delay) if(defined $ref_delay); |
|
}); |
|
140,7 → 137,7
} |
$mpsoc->object_add_attribute($attribut1,$param,$new_val); |
#print "\$new_val=$new_val\n"; |
set_gui_status($mpsoc,"ref",$ref_delay); |
set_gui_status($mpsoc,"ref",$ref_delay) if(defined $ref_delay); |
}); |
} |
|
150,6 → 147,7
} |
elsif ( $type eq "DIR_path"){ |
$widget =get_dir_in_object ($mpsoc,$attribut1,$param,$value,'ref',10); |
set_gui_status($mpsoc,"ref",$ref_delay) if(defined $ref_delay); |
} |
|
|
160,17 → 158,22
|
my $inf_bt= gen_button_message ($info,"icons/help.png"); |
if($show==1){ |
my $tmp=gen_label_in_left(" "); |
$table->attach_defaults ($label , 0, 4, $row,$row+1); |
$table->attach_defaults ($inf_bt , 4, 5, $row,$row+1); |
$table->attach_defaults ($widget , 5, 9, $row,$row+1); |
$table->attach_defaults ($tmp , 9, 10, $row,$row+1); |
attach_widget_to_table ($table,$row,$label,$inf_bt,$widget); |
$row++; |
} |
return $row; |
} |
|
sub attach_widget_to_table { |
my ($table,$row,$label,$inf_bt,$widget)=@_; |
my $tmp=gen_label_in_left(" "); |
$table->attach ($label , 0, 4, $row,$row+1,'fill','shrink',2,2); |
$table->attach ($inf_bt , 4, 5, $row,$row+1,'fill','shrink',2,2); |
$table->attach ($widget , 5, 9, $row,$row+1,'fill','shrink',2,2); |
$table->attach ($tmp , 9, 10, $row,$row+1,'fill','shrink',2,2); |
} |
|
|
sub initial_default_param{ |
my $mpsoc=shift; |
my @socs=$mpsoc->mpsoc_get_soc_list(); |
749,7 → 752,7
$type='Combo-box'; |
$info=" Input-queued: simple router with low performance and does not support fully adaptive routing. |
VC-based routers offer higher performance, fully adaptive routing and traffic isolation for different packet classes."; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_type'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_type',1); |
my $router_type=$mpsoc->object_get_attribute('noc_type',"ROUTER_TYPE"); |
|
|
761,7 → 764,7
$content='2,16,1'; |
$info= 'Number of NoC routers in row (X dimention)'; |
$type= 'Spin-button'; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param',1); |
|
|
|
772,7 → 775,7
$content='2,16,1'; |
$info= 'Number of NoC routers in column (Y dimention)'; |
$type= 'Spin-button'; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param',1); |
|
if($router_type eq '"VC_BASED"'){ |
#VC number per port |
784,7 → 787,7
$type='Spin-button'; |
$content='2,16,1'; |
$info='Number of Virtual Channel per each router port'; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param',1); |
} else { |
$mpsoc->object_add_attribute('noc_param','V',1); |
$mpsoc->object_add_attribute('noc_param','C',0); |
799,7 → 802,7
$content='2,256,1'; |
$type='Spin-button'; |
$info=($router_type eq '"VC_BASED"')? 'Buffer queue size per VC in flits' : 'Buffer queue size in flits'; |
$row= noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param'); |
$row= noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param',undef); |
|
#packet payload width |
$label='payload width'; |
808,7 → 811,7
$content='32,256,32'; |
$type='Spin-button'; |
$info="The packet payload width in bits"; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info,$table,$row,$show_noc,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info,$table,$row,$show_noc,'noc_param',undef); |
|
#topology |
$label='Topology'; |
817,7 → 820,7
$content='"MESH","TORUS"'; |
$type='Combo-box'; |
$info="NoC topology"; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param',1); |
|
#routing algorithm |
my $topology=$mpsoc->object_get_attribute('noc_param','TOPOLOGY'); |
836,7 → 839,7
} |
$default=($topology eq '"MESH"')? '"XY"':'"TRANC_XY"'; |
$info="Select the routing algorithm: XY(DoR) , partially adaptive (Turn models). Fully adaptive (Duato) "; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param',1); |
|
|
#SSA |
845,8 → 848,8
$default='"NO"'; |
$content='"YES","NO"'; |
$type='Combo-box'; |
$info="Enable single cycle latency on packets traversing in the same direction using static straight allocator (SSA)"; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param'); |
$info="Enable single cycle latency on packets traversing in the same direction using static straight allocator (SSA)"; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$show_noc,'noc_param',undef); |
|
|
|
883,7 → 886,7
$content="0,12,1"; |
$info="Congestion index determines how congestion information is collected from neighboring routers. Please refer to the usere manual for more information"; |
$default=3; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param',undef); |
|
} |
#Fully adaptive routing setting |
899,7 → 902,7
|
|
$info="Select the escap VC for fully adaptive routing."; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,$adv_set,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set, 'noc_param',undef); |
|
} |
|
910,7 → 913,7
$default='"NONATOMIC"'; |
$content='"ATOMIC","NONATOMIC"'; |
$type='Combo-box'; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param',undef); |
|
|
|
923,7 → 926,7
$content='"BASELINE","COMB_SPEC1","COMB_SPEC2","COMB_NONSPEC"'; |
$type='Combo-box'; |
$info="The joint VC/ switch allocator type. using canonical combination is not recommanded"; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param',undef); |
|
} |
|
934,7 → 937,7
$content='"ONE_HOT","BINARY"'; |
$type='Combo-box'; |
$info="Crossbar multiplexer type"; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param',undef); |
|
if($router_type eq '"VC_BASED"'){ |
#class |
944,7 → 947,7
$info='Number of message classes. Each specific class can use different set of VC'; |
$content='0,16,1'; |
$type='Spin-button'; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param',5); |
|
|
my $class=$mpsoc->object_get_attribute('noc_param',"C"); |
961,7 → 964,7
$type="Check-box"; |
$content=$v; |
$info="Select the permitted VCs which the message class $i can be sent via them."; |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param'); |
$row=noc_param_widget ($mpsoc,$label,$param, $default,$type,$content,$info, $table,$row,$adv_set,'noc_param',undef); |
|
|
} |
1138,45 → 1141,57
# |
########### |
|
sub gen_socs { |
my ($mpsoc,$info)=@_; |
my $path=$mpsoc->object_get_attribute('setting','soc_path'); |
$path=~ s/ /\\ /g; |
my @socs; |
my @files = glob "$path/*.SOC"; |
my @soc_list=$mpsoc-> mpsoc_get_soc_list(); |
my @used_socs; |
foreach my $soc_name (@soc_list){ |
my @n=$mpsoc->mpsoc_get_soc_tiles_num($soc_name); |
if(scalar @n){ |
#generate the verilog files of it |
push(@used_socs,$soc_name); |
} |
} |
|
|
|
sub gen_all_tiles{ |
my ($mpsoc,$info, $hw_dir,$sw_dir)=@_; |
my $nx= $mpsoc->object_get_attribute('noc_param',"NX"); |
my $ny= $mpsoc->object_get_attribute('noc_param',"NY"); |
my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name'); |
my $target_dir = "$ENV{'PRONOC_WORK'}/MPSOC/$mpsoc_name"; |
|
for my $p (@files){ |
# Read |
|
|
|
|
my @generated_tiles; |
|
#print "nx=$nx,ny=$ny\n"; |
for (my $y=0;$y<$ny;$y++){for (my $x=0; $x<$nx;$x++){ |
|
my $tile_num= $y*$nx+$x; |
#print "$tile_num\n"; |
my ($soc_name,$num)= $mpsoc->mpsoc_get_tile_soc_name($tile_num); |
my $path=$mpsoc->object_get_attribute('setting','soc_path'); |
$path=~ s/ /\\ /g; |
my $p = "$path/$soc_name.SOC"; |
my $soc = eval { do $p }; |
if ($@ || !defined $soc){ |
show_info(\$info,"**Error reading $p file: $@\n"); |
next; |
} |
my $name=$soc->object_get_attribute('soc_name'); |
if( grep (/^$name$/,@used_socs)){ |
#generate the soc |
generate_soc_files($mpsoc,$soc,$info); |
|
#update core id |
$soc->object_add_attribute('global_param','CORE_ID',$tile_num); |
|
|
|
}; |
|
|
} |
|
|
my $sw_path = "$sw_dir/tile$tile_num"; |
#print "$sw_path\n"; |
if( grep (/^$soc_name$/,@generated_tiles)){ # This soc is generated before only create the software file |
generate_soc($soc,$info,$target_dir,$hw_dir,$sw_path,0,0); |
}else{ |
generate_soc($soc,$info,$target_dir,$hw_dir,$sw_path,0,1); |
move ("$hw_dir/$soc_name.v","$hw_dir/tiles/"); |
|
} |
|
|
}} |
|
|
} |
|
|
################ |
# generate_soc |
################# |
1190,7 → 1205,7
# Write object file |
open(FILE, ">lib/soc/$soc_name.SOC") || die "Can not open: $!"; |
print FILE perl_file_header("$soc_name.SOC"); |
print FILE Data::Dumper->Dump([\%$soc],[$soc_name]); |
print FILE Data::Dumper->Dump([\%$soc],['mpsoc']); |
close(FILE) || die "Error closing file: $!"; |
|
# Write verilog file |
1203,9 → 1218,9
|
# copy all files in project work directory |
my $dir = Cwd::getcwd(); |
my $project_dir = abs_path("$dir/../../"); |
#make target dir |
my $project_dir = abs_path("$dir/../../"); |
my $target_dir = "$project_dir/mpsoc_work/MPSOC/$mpsoc_name"; |
my $target_dir = "$ENV{'PRONOC_WORK'}/MPSOC/$mpsoc_name"; |
mkpath("$target_dir/src_verilog/lib/",1,0755); |
mkpath("$target_dir/src_verilog/tiles/",1,0755); |
mkpath("$target_dir/sw",1,0755); |
1271,57 → 1286,141
sub generate_mpsoc{ |
my ($mpsoc,$info)=@_; |
my $name=$mpsoc->object_get_attribute('mpsoc_name'); |
my $size= (defined $name)? length($name) :0; |
if ($size >0){ |
gen_socs($mpsoc,$info); |
my ($file_v,$tmp)=mpsoc_generate_verilog($mpsoc); |
if ( $name =~ /\W+/ ){ |
message_dialog('The mpsoc name must not contain any non-word character:("./\()\':,.;<>~!@#$%^&*|+=[]{}`~?-")!")'); |
return 0; |
} |
my $size= (defined $name)? length($name) :0; |
if ($size ==0) { |
message_dialog("Please define the MPSoC name!"); |
return 0; |
} |
|
# make target dir |
my $dir = Cwd::getcwd(); |
my $target_dir = "$ENV{'PRONOC_WORK'}/MPSOC/$name"; |
my $hw_dir = "$target_dir/src_verilog"; |
my $sw_dir = "$target_dir/sw"; |
|
mkpath("$hw_dir/lib/",1,0755); |
mkpath("$hw_dir/tiles",1,0755); |
mkpath("$sw_dir",1,0755); |
|
|
#generate/copy all tiles HDL/SW codes |
gen_all_tiles($mpsoc,$info, $hw_dir,$sw_dir ); |
|
#copy all NoC HDL files |
|
my @files = glob( "$dir/../src_noc/*.v" ); |
copy_file_and_folders(\@files,$dir,"$hw_dir/lib/"); |
|
|
|
my ($file_v,$top_v)=mpsoc_generate_verilog($mpsoc); |
|
|
|
# Write object file |
open(FILE, ">lib/mpsoc/$name.MPSOC") || die "Can not open: $!"; |
print FILE perl_file_header("$name.MPSOC"); |
print FILE Data::Dumper->Dump([\%$mpsoc],[$name]); |
close(FILE) || die "Error closing file: $!"; |
|
# Write object file |
open(FILE, ">lib/mpsoc/$name.MPSOC") || die "Can not open: $!"; |
print FILE perl_file_header("$name.MPSOC"); |
print FILE Data::Dumper->Dump([\%$mpsoc],[$name]); |
close(FILE) || die "Error closing file: $!"; |
# Write verilog file |
open(FILE, ">lib/verilog/$name.v") || die "Can not open: $!"; |
print FILE $file_v; |
close(FILE) || die "Error closing file: $!"; |
|
# Write verilog file |
open(FILE, ">lib/verilog/$name.v") || die "Can not open: $!"; |
print FILE $file_v; |
close(FILE) || die "Error closing file: $!"; |
my $l=autogen_warning().get_license_header("${name}_top.v"); |
open(FILE, ">lib/verilog/${name}_top.v") || die "Can not open: $!"; |
print FILE "$l\n$top_v"; |
close(FILE) || die "Error closing file: $!"; |
|
|
|
|
# copy all files in project work directory |
my $dir = Cwd::getcwd(); |
#make target dir |
my $project_dir = abs_path("$dir/../../"); |
my $target_dir = "$project_dir/mpsoc_work/MPSOC/$name"; |
mkpath("$target_dir/src_verilog/lib/",1,0755); |
mkpath("$target_dir/sw",1,0755); |
|
|
|
#gen_socs($mpsoc,$info); |
|
move ("$dir/lib/verilog/$name.v","$target_dir/src_verilog/"); |
|
|
|
|
|
|
|
|
message_dialog("SoC \"$name\" has been created successfully at $target_dir/ " ); |
#gen_socs($mpsoc,$info); |
move ("$dir/lib/verilog/$name.v","$target_dir/src_verilog/"); |
move ("$dir/lib/verilog/${name}_top.v","$target_dir/src_verilog/"); |
|
#generate makefile |
open(FILE, ">$sw_dir/Makefile") || die "Can not open: $!"; |
print FILE mpsoc_sw_make(); |
close(FILE) || die "Error closing file: $!"; |
|
#generate prog_mem |
open(FILE, ">$sw_dir/program.sh") || die "Can not open: $!"; |
print FILE mpsoc_mem_prog(); |
close(FILE) || die "Error closing file: $!"; |
|
|
|
|
message_dialog("SoC \"$name\" has been created successfully at $target_dir/ " ); |
|
}else { |
message_dialog("Please define the MPSoC name!"); |
|
} |
|
|
return 1; |
} |
|
sub mpsoc_sw_make { |
my $make=' |
SUBDIRS := $(wildcard */.) |
all: $(SUBDIRS) |
$(SUBDIRS): |
$(MAKE) -C $@ |
|
.PHONY: all $(SUBDIRS) |
|
clean: |
$(MAKE) -C $(CODE_DIR) clean |
'; |
return $make; |
|
} |
|
|
sub mpsoc_mem_prog { |
my $string=' |
#!/bin/sh |
|
|
JTAG_MAIN="$PRONOC_WORK/toolchain/bin/jtag_main" |
|
#reset and disable cpus, then release the reset but keep the cpus disabled |
|
$JTAG_MAIN -n 127 -d "I:1,D:2:3,D:2:2,I:0" |
|
# jtag instruction |
# 0: bypass |
# 1: getting data |
# jtag data : |
# bit 0 is reset |
# bit 1 is disable |
# I:1 set jtag_enable in active mode |
# D:2:3 load jtag_enable data register with 0x3 reset=1 disable=1 |
# D:2:2 load jtag_enable data register with 0x2 reset=0 disable=1 |
# I:0 set jtag_enable in bypass mode |
|
|
|
#programe the memory |
for i in $(ls -d */); do |
sh ${i%%/}/write_memory.sh |
done |
|
#Enable the cpu |
$JTAG_MAIN -n 127 -d "I:1,D:2:0,I:0" |
# I:1 set jtag_enable in active mode |
# D:2:0 load jtag_enable data register with 0x0 reset=0 disable=0 |
# I:0 set jtag_enable in bypass mode |
'; |
return $string; |
|
} |
|
|
sub get_tile_LIST{ |
my ($mpsoc,$x,$y,$soc_num,$row,$table)=@_; |
my $instance_name=$mpsoc->mpsoc_get_instance_info($soc_num); |
1771,40 → 1870,4
|
} |
|
########## |
|
########## |
sub copy_noc_files{ |
my ($project_dir,$dest)=@_; |
|
my @noc_files=( |
'/mpsoc/src_noc/arbiter.v', |
'/mpsoc/src_noc/baseline.v', |
'/mpsoc/src_noc/canonical_credit_count.v', |
'/mpsoc/src_noc/class_table.v', |
'/mpsoc/src_noc/combined_vc_sw_alloc.v', |
'/mpsoc/src_noc/comb_nonspec.v', |
'/mpsoc/src_noc/comb_spec2.v', |
'/mpsoc/src_noc/comb-spec1.v', |
'/mpsoc/src_noc/congestion_analyzer.v', |
'/mpsoc/src_noc/credit_count.v', |
'/mpsoc/src_noc/crossbar.v', |
'/mpsoc/src_noc/flit_buffer.v', |
'/mpsoc/src_noc/inout_ports.v', |
'/mpsoc/src_noc/inout_ports.v.classic', |
'/mpsoc/src_noc/input_ports.v', |
'/mpsoc/src_noc/main_comp.v', |
'/mpsoc/src_noc/noc.v', |
'/mpsoc/src_noc/route_mesh.v', |
'/mpsoc/src_noc/router.v', |
'/mpsoc/src_noc/route_torus.v', |
'/mpsoc/src_noc/routing.v', |
'/mpsoc/src_noc/vc_alloc_request_gen.v', |
'/mpsoc/src_noc/ss_allocator.v'); |
foreach my $f (@noc_files){ |
copy ("$project_dir$f",$dest); |
|
} |
|
|
} |
/mpsoc/perl_gui/lib/perl/mpsoc_verilog_gen.pl
19,7 → 19,10
//IO |
\tinput\tclk,reset;\n"; |
my $param_as_in_v; |
# generate top |
my $top_io="\t\t.clk(clk) ,\n\t\t.reset(reset_ored_jtag)"; |
|
|
#generate socs_parameter |
my $socs_param= gen_socs_param($mpsoc); |
|
27,10 → 30,10
my ($noc_param,$pass_param)=gen_noc_param_v($mpsoc); |
|
#generate the noc |
my $noc_v=gen_noc_v(); |
my $noc_v=gen_noc_v($pass_param); |
|
#generate socs |
my $socs_v=gen_socs_v($mpsoc,\$io_v,\$io_def_v); |
my $socs_v=gen_socs_v($mpsoc,\$io_v,\$io_def_v,\$top_io); |
|
#functions |
my $functions=get_functions(); |
44,8 → 47,40
add_text_to_string (\$mpsoc_v,$socs_v); |
add_text_to_string (\$mpsoc_v,"\nendmodule\n"); |
|
my $top_v = (defined $param_as_in_v )? "module ${mpsoc_name}_top #(\n $param_as_in_v\n)(\n$io_v\n);\n": "module ${mpsoc_name}_top (\n $io_v\n);\n"; |
add_text_to_string (\$top_v,$socs_param); |
add_text_to_string (\$top_v,$io_def_v); |
add_text_to_string(\$top_v," |
// Allow software to remote reset/enable the cpu via jtag |
|
wire jtag_cpu_en, jtag_system_reset; |
|
jtag_system_en jtag_en ( |
.cpu_en(jtag_cpu_en), |
.system_reset(jtag_system_reset) |
|
return $mpsoc_v; |
); |
|
wire reset_ored_jtag = reset | jtag_system_reset; |
wire processors_en_anded_jtag = processors_en & jtag_cpu_en; |
|
${mpsoc_name} the_${mpsoc_name} ( |
|
$top_io |
|
|
); |
|
endmodule |
|
|
"); |
|
#my $ins= gen_mpsoc_instance_v($mpsoc,$mpsoc_name,$param_pass_v); |
|
#add_text_to_string(\$top_v,$local_param_v_all."\n".$io_full_v_all); |
#add_text_to_string(\$top_v,$ins); |
return ($mpsoc_v,$top_v); |
} |
|
sub get_functions{ |
173,8 → 208,8
|
|
sub gen_noc_v{ |
my $pass_param = shift; |
|
|
my $noc = read_file("../src_noc/noc.v"); |
my @noc_param=$noc->get_modules_parameters_not_local_order('noc'); |
|
206,9 → 241,9
foreach my $p (@noc_param){ |
my $param=($i==0)? "\t\t.$p($p)":",\n\t\t.$p($p)"; |
$i=1; |
add_text_to_string(\$noc_v,$param); |
#add_text_to_string(\$noc_v,$param); |
} |
add_text_to_string(\$noc_v,"\n\t)\n\tthe_noc\n\t(\n"); |
add_text_to_string(\$noc_v,"$pass_param\n\t)\n\tthe_noc\n\t(\n"); |
|
my @ports= $noc->get_module_ports_order('noc'); |
$i=0; |
293,7 → 328,8
|
|
sub gen_socs_v{ |
my ($mpsoc,$io_v_ref,$io_def_v)=@_; |
my ($mpsoc,$io_v_ref,$io_def_v,$top_io_ref)=@_; |
|
#generate loop |
|
# my $socs_v=' |
346,13 → 382,16
for (my $y=0;$y<$ny;$y++){ |
for (my $x=0; $x<$nx;$x++){ |
my $tile_num=($nx*$y)+ $x; |
|
my ($soc_name,$n,$soc_num)=$mpsoc->mpsoc_get_tile_soc_name($tile_num); |
|
if(defined $soc_name) { |
my ($soc_v,$en)= gen_soc_v($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v); |
|
|
|
my ($soc_v,$en)= gen_soc_v($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v,$top_io_ref); |
add_text_to_string(\$socs_v,$soc_v); |
$processors_en|=$en; |
|
}else{ |
#this tile is not connected to any ip. the noc input ports will be connected to ground |
my $soc_v="\n\n // Tile:$tile_num (x=$x,y=$y) is not assigned to any ip\n"; |
371,6 → 410,7
if($processors_en){ |
add_text_to_string($io_v_ref,",\n\tprocessors_en"); |
add_text_to_string($io_def_v,"\t input processors_en;"); |
add_text_to_string($top_io_ref,",\n\t\t.processors_en(processors_en_anded_jtag)"); |
|
} |
|
386,7 → 426,7
|
|
sub gen_soc_v{ |
my ($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v)=@_; |
my ($mpsoc,$soc_name,$tile_num,$x,$y,$soc_num,$io_v_ref,$io_def_v,$top_io_ref)=@_; |
my $soc_v; |
my $processor_en=0; |
my $xw= log2($mpsoc->object_get_attribute('noc_param',"NX")); |
425,8 → 465,7
|
my $dir = Cwd::getcwd(); |
my $mpsoc_name=$mpsoc->object_get_attribute('mpsoc_name'); |
my $project_dir = abs_path("$dir/../../"); |
my $target_dir = "$project_dir/mpsoc_work/MPSOC/$mpsoc_name"; |
my $target_dir = "$ENV{'PRONOC_WORK'}/MPSOC/$mpsoc_name"; |
my $soc_file="$target_dir/src_verilog/tiles/$soc_name.v"; |
|
my $vdb =read_file($soc_file); |
510,6 → 549,7
} |
#io name |
add_text_to_string($io_v_ref,",\n\t$io_port"); |
add_text_to_string($top_io_ref,",\n\t\t.$io_port($io_port)"); |
#io definition |
my $new_range = add_instantc_name_to_parameters(\%params,"${soc_name}_$soc_num",$range); |
#my $new_range=$range; |
/mpsoc/perl_gui/lib/perl/soc_gen.pl
8,7 → 8,7
use POSIX 'strtol'; |
|
use File::Path; |
use File::Find; |
#use File::Find; |
use File::Copy; |
use File::Copy::Recursive qw(dircopy); |
use Cwd 'abs_path'; |
166,7 → 166,8
$max=~ s/\D//g; |
$step=~ s/\D//g; |
my $spin=gen_spin($min,$max,$step); |
$spin->set_value($value); |
if(defined $value) {$spin->set_value($value);} |
else {$spin->set_value($min);} |
$table->attach ($spin, 3, 4, $row, $row+1,'expand','shrink',2,2); |
$spin-> signal_connect("value_changed" => sub{ $new_param_value{$p}=$spin->get_value_as_int(); }); |
|
853,82 → 854,74
################# |
|
sub generate_soc{ |
my ($soc,$info)=@_; |
my $name=$soc->object_get_attribute('soc_name'); |
if (length($name)>0){ |
my @tmp=split('_',$name); |
if ( $tmp[-1] =~ /^[0-9]+$/ ){ |
message_dialog("The soc name must not end with '_number'!"); |
return 0; |
} |
my ($soc,$info,$target_dir,$hw_path,$sw_path,$gen_top,$gen_hw_lib)=@_; |
my $name=$soc->object_get_attribute('soc_name'); |
|
|
my ($file_v,$top_v,$readme,$prog)=soc_generate_verilog($soc); |
|
my ($file_v,$top_v,$readme)=soc_generate_verilog($soc); |
# Write object file |
open(FILE, ">lib/soc/$name.SOC") || die "Can not open: $!"; |
print FILE perl_file_header("$name.SOC"); |
print FILE Data::Dumper->Dump([\%$soc],['soc']); |
close(FILE) || die "Error closing file: $!"; |
|
# Write object file |
open(FILE, ">lib/soc/$name.SOC") || die "Can not open: $!"; |
print FILE perl_file_header("$name.SOC"); |
print FILE Data::Dumper->Dump([\%$soc],[$name]); |
close(FILE) || die "Error closing file: $!"; |
# Write verilog file |
open(FILE, ">lib/verilog/$name.v") || die "Can not open: $!"; |
print FILE $file_v; |
close(FILE) || die "Error closing file: $!"; |
|
# Write verilog file |
open(FILE, ">lib/verilog/$name.v") || die "Can not open: $!"; |
print FILE $file_v; |
close(FILE) || die "Error closing file: $!"; |
|
# Write Top module file |
# Write Top module file |
if($gen_top){ |
my $l=autogen_warning().get_license_header("${name}_top.v"); |
open(FILE, ">lib/verilog/${name}_top.v") || die "Can not open: $!"; |
print FILE "$l\n$top_v"; |
close(FILE) || die "Error closing file: $!"; |
} |
|
# Write readme file |
open(FILE, ">lib/verilog/README") || die "Can not open: $!"; |
print FILE $readme; |
close(FILE) || die "Error closing file: $!"; |
|
|
# Write memory prog file |
open(FILE, ">lib/verilog/write_memory.sh") || die "Can not open: $!"; |
print FILE $prog; |
close(FILE) || die "Error closing file: $!"; |
|
my $dir = Cwd::getcwd(); |
my $project_dir = abs_path("$dir/../../"); |
if($gen_hw_lib){ |
|
#make target dir |
my $hw_lib="$hw_path/lib"; |
mkpath("$hw_lib/",1,01777); |
mkpath("$sw_path/",1,01777); |
|
#copy hdl codes in src_verilog |
|
# Write readme file |
open(FILE, ">lib/verilog/README") || die "Can not open: $!"; |
print FILE $readme; |
close(FILE) || die "Error closing file: $!"; |
|
# copy all files in project work directory |
my $dir = Cwd::getcwd(); |
#make target dir |
my $project_dir = abs_path("$dir/../../"); |
my $target_dir = "$project_dir/mpsoc_work/SOC/$name"; |
mkpath("$target_dir/src_verilog/lib/",1,01777); |
mkpath("$target_dir/sw",1,01777); |
|
#copy hdl codes in src_verilog |
|
my ($file_ref,$warnings)= get_all_files_list($soc,"hdl_files"); |
my ($file_ref,$warnings)= get_all_files_list($soc,"hdl_files"); |
|
copy_file_and_folders($file_ref,$project_dir,"$target_dir/src_verilog/lib"); |
|
copy_file_and_folders($file_ref,$project_dir,$hw_lib); |
show_info(\$info,$warnings) if(defined $warnings); |
|
|
#copy jtag control files |
my @jtags=(("/mpsoc/src_peripheral/jtag/jtag_wb"),("jtag")); |
copy_file_and_folders(\@jtags,$project_dir,"$target_dir/src_verilog/lib"); |
|
#my @pathes=("$dir/../src_peripheral","$dir/../src_noc","$dir/../src_processor"); |
#foreach my $p(@pathes){ |
# find( |
# sub { |
# return unless ( -f $_ ); |
# $_ =~ /\.v$/ && copy( $File::Find::name, "$target_dir/src_verilog/lib/" ); |
# }, |
# $p |
# ); |
#} |
#copy jtag control files |
my @jtags=(("/mpsoc/src_peripheral/jtag/jtag_wb"),("jtag")); |
copy_file_and_folders(\@jtags,$project_dir,$hw_lib); |
move ("$dir/lib/verilog/$name.v","$hw_path/"); |
move ("$dir/lib/verilog/${name}_top.v","$hw_path/"); |
move ("$dir/lib/verilog/README" ,"$sw_path/"); |
move ("$dir/lib/verilog/write_memory.sh" ,"$sw_path/"); |
} |
|
# Copy Software files |
my ($file_ref,$warnings)= get_all_files_list($soc,"sw_files"); |
copy_file_and_folders($file_ref,$project_dir,$sw_path); |
|
|
move ("$dir/lib/verilog/$name.v","$target_dir/src_verilog/"); |
move ("$dir/lib/verilog/${name}_top.v","$target_dir/src_verilog/"); |
move ("$dir/lib/verilog/README" ,"$target_dir/sw/"); |
# Copy Software files |
($file_ref,$warnings)= get_all_files_list($soc,"sw_files"); |
copy_file_and_folders($file_ref,$project_dir,"$target_dir/sw"); |
|
# Write system.h and Software gen files |
generate_header_file($soc,$project_dir,$target_dir,$dir); |
# Write system.h and Software gen files |
generate_header_file($soc,$project_dir,$sw_path,$dir); |
|
|
|
935,7 → 928,7
|
|
# Write main.c file if not exist |
my $n="$target_dir/sw/main.c"; |
my $n="$sw_path/main.c"; |
if (!(-f "$n")) { |
# Write main.c |
open(FILE, ">$n") || die "Can not open: $!"; |
947,15 → 940,8
|
|
|
message_dialog("SoC \"$name\" has been created successfully at $target_dir/ " ); |
exec($^X, $0, @ARGV);# reset ProNoC to apply changes |
|
}else { |
message_dialog("Please define the SoC name!"); |
|
} |
|
return 1; |
|
} |
|
|
1419,8 → 1405,8
my $soc = soc->soc_new(); |
set_gui_status($soc,"ideal",0); |
#my $soc= eval { do 'lib/soc/soc.SOC' }; |
#message_dialog("$ENV{'PRONOC_WORK'}\n"); |
|
|
# main window |
#my $window = def_win_size(1000,800,"Top"); |
# The main table containg the lib tree, selected modules and info section |
1471,6 → 1457,55
$main_table->attach ($generate, 10, 12, 19,20,'expand','shrink',2,2); |
|
|
|
|
|
$generate-> signal_connect("clicked" => sub{ |
my $name=$soc->object_get_attribute('soc_name'); |
|
if (length($name)==0){ |
message_dialog("Please define the SoC name!"); |
return ; |
} |
|
|
my @tmp=split('_',$name); |
if ( $tmp[-1] =~ /^[0-9]+$/ ){ |
message_dialog("The soc name must not end with '_number'!"); |
return ; |
} |
if ( $name =~ /\W+/ ){ |
message_dialog('The soc name must not contain any non-word character:("./\()\':,.;<>~!@#$%^&*|+=[]{}`~?-")!")'); |
return ; |
} |
|
my $target_dir = "$ENV{'PRONOC_WORK'}/SOC/$name"; |
my $hw_dir = "$target_dir/src_verilog"; |
my $sw_path = "$target_dir/sw"; |
|
$soc->object_add_attribute('global_param','CORE_ID',0); |
generate_soc($soc,$info,$target_dir,$hw_dir,$sw_path,1,1); |
message_dialog("SoC \"$name\" has been created successfully at $target_dir/ " ); |
exec($^X, $0, @ARGV);# reset ProNoC to apply changes |
|
}); |
|
$wb-> signal_connect("clicked" => sub{ |
wb_address_setting($soc); |
|
}); |
|
$open-> signal_connect("clicked" => sub{ |
load_soc($soc,$info); |
|
}); |
|
my $sc_win = new Gtk2::ScrolledWindow (undef, undef); |
$sc_win->set_policy( "automatic", "automatic" ); |
$sc_win->add_with_viewport($main_table); |
|
|
|
#check soc status every 0.5 second. referesh device table if there is any changes |
Glib::Timeout->add (100, sub{ |
my ($state,$timeout)= get_gui_status($soc); |
1489,28 → 1524,9
return TRUE; |
|
} ); |
|
|
$generate-> signal_connect("clicked" => sub{ |
generate_soc($soc,$info); |
$refresh_dev_win->clicked; |
|
}); |
|
$wb-> signal_connect("clicked" => sub{ |
wb_address_setting($soc); |
|
}); |
|
$open-> signal_connect("clicked" => sub{ |
load_soc($soc,$info); |
|
}); |
|
my $sc_win = new Gtk2::ScrolledWindow (undef, undef); |
$sc_win->set_policy( "automatic", "automatic" ); |
$sc_win->add_with_viewport($main_table); |
|
return $sc_win; |
#return $main_table; |
|
/mpsoc/perl_gui/lib/perl/temp.pl
1,9 → 1,43
#!/usr/bin/perl |
use warnings; |
use strict; |
use File::System |
use List::Util 'shuffle'; |
|
my $fs = File::System->new('Real'); |
my $fs = File::System->new('My::File::System::Foo'); |
(system("ls")); |
|
|
sub remove_scolar_from_array{ |
my ($array_ref,$item)=@_; |
my @array=@{$array_ref}; |
my @new; |
foreach my $p (@array){ |
if($p ne $item ){ |
push(@new,$p); |
} |
} |
return @new; |
} |
|
sub random_dest_gen { |
my $n=shift; |
my @c=(0..$n-1); |
my @o; |
for (my $i=0; $i<$n; $i++){ |
my @l= shuffle @c; |
@l=remove_scolar_from_array(\@l,$i); |
$o[$i]=\@l; |
|
} |
return \@o; |
|
} |
|
my $ref=random_dest_gen(16); |
my @random= @{$ref}; |
|
for (my $i=0; $i<16; $i++){ |
for (my $j=0; $j<15; $j++){ |
print @{$random[$i]}[$j]; |
print ","; |
} |
print "\n"; |
} |
/mpsoc/perl_gui/lib/perl/verilog_gen.pl
27,7 → 27,13
|
my @instances=$soc->soc_get_all_instances(); |
my $io_sim_v; |
my $param_as_in_v="\tparameter\tCORE_ID=0"; |
my $core_id= $soc->object_get_attribute('global_param','CORE_ID'); |
$core_id= 0 if(!defined $core_id); |
my $param_as_in_v="\tparameter\tCORE_ID=$core_id"; |
|
|
|
|
my $param_pass_v="\t.CORE_ID(CORE_ID)"; |
my $body_v; |
|
88,8 → 94,8
|
add_text_to_string(\$top_v,$local_param_v_all."\n".$io_full_v_all); |
add_text_to_string(\$top_v,$ins); |
my $readme=gen_system_info($soc,$param_as_in_v); |
return ("$soc_v",$top_v,$readme); |
my ($readme,$prog)=gen_system_info($soc,$param_as_in_v); |
return ("$soc_v",$top_v,$readme,$prog); |
|
|
} |
647,15 → 653,22
#my (@newbase,@newend,@connects); |
|
|
$jtag=''; |
|
my @all_instances=$soc->soc_get_all_instances(); |
|
my @all_instances=$soc->soc_get_all_instances(); |
my %jtagwb; my %ram; |
|
|
foreach my $instance_id (@all_instances){ |
my $category=$soc->soc_get_category($instance_id); |
|
my @plugs= $soc->soc_get_all_plugs_of_an_instance($instance_id); |
foreach my $plug (@plugs){ |
my @nums=$soc->soc_list_plug_nums($instance_id,$plug); |
foreach my $num (@nums){ |
my ($addr,$base,$end,$name,$connect_id,$connect_socket,$connect_socket_num)=$soc->soc_get_plug($instance_id,$plug,$num); |
|
my $instance_name=$soc->soc_get_instance_name($instance_id); |
my $connect_name=$soc->soc_get_instance_name($connect_id); |
#get interfaces |
663,7 → 676,12
|
$base=sprintf("0x%08x", $base); |
$end=sprintf("0x%08x", $end); |
add_text_to_string(\$wb_slaves, "\t$instance_name, $name, $connect_name, $base, $end\n"); |
add_text_to_string(\$wb_slaves, "\t$instance_name, $name, $connect_name, $base, $end\n"); |
if ($category eq 'RAM') { |
$ram{$instance_id}{'base'}=$base; |
$ram{$instance_id}{'end'}=$end; |
$ram{$instance_id}{'connect'}=$connect_id; |
} |
|
}#if |
elsif((defined $connect_socket) && ($connect_socket eq 'wb_master')){ |
676,8 → 694,9
# get jtag_wbs |
if((defined $connect_socket) && ($connect_socket eq 'wb_master') && ($instance_id =~ /jtag_wb/)){ |
my $index=$soc->soc_get_module_param_value($instance_id,'VJTAG_INDEX'); |
|
add_text_to_string(\$jtag, "\t$instance_name, $connect_name, $index\n"); |
|
$jtagwb{$connect_id}{'index'}=$index; |
|
} |
|
686,7 → 705,70
}#foreach my $plug |
}#foreach my $instance_id |
|
#Generate memory programming command |
my $prog='#!/bin/sh |
|
JTAG_MAIN="$PRONOC_WORK/toolchain/bin/jtag_main" |
|
'; |
|
|
foreach my $instance_id (@all_instances){ |
my $category=$soc->soc_get_category($instance_id); |
if ($category eq 'RAM') { |
|
my $jtag_connect=$soc->soc_get_module_param_value($instance_id,'JTAG_CONNECT'); |
my $aw=$soc->soc_get_module_param_value($instance_id,'Aw'); |
my $dw=$soc->soc_get_module_param_value($instance_id,'Dw'); |
my $JTAG_INDEX=$soc->soc_get_module_param_value($instance_id,'JTAG_INDEX'); |
|
#check if jtag_index is a parameter |
my $v=$soc->soc_get_module_param_value($instance_id,$JTAG_INDEX); |
$JTAG_INDEX = $v if (defined $v); |
$v= $soc->object_get_attribute('global_param',$JTAG_INDEX); |
$JTAG_INDEX = $v if (defined $v); |
|
my $BINFILE=$soc->soc_get_module_param_value($instance_id,'INIT_FILE_NAME'); |
($BINFILE)=$BINFILE=~ /"([^"]*)"/ if(defined $BINFILE); |
$BINFILE=(defined $BINFILE) ? $BINFILE.'.bin' : 'ram0.bin'; |
|
my $OFSSET="0x00000000"; |
my $end=((1<<$aw)*($dw/8))-1; |
my $BOUNDRY=sprintf("0x%08x", $end); |
if($jtag_connect =~ /JTAG_WB/){ |
$prog= "$prog \$JTAG_MAIN -n $JTAG_INDEX -s \"$OFSSET\" -e \"$BOUNDRY\" -i \"$BINFILE\" -c"; |
#print "prog= $prog\n"; |
|
}elsif ($jtag_connect eq 'ALTERA_IMCE'){ |
#TODO add later |
|
|
} else{ |
#disabled check if its connected to jtag_wb via the bus |
my $connect_id = $ram{$instance_id}{'connect'}; |
my $OFSSET = $ram{$instance_id}{'base'}; |
my $BOUNDRY = $ram{$instance_id}{'end'}; |
if(defined $connect_id){ |
#print "id=$connect_id\n"; |
my $JTAG_INDEX= $jtagwb{$connect_id}{'index'}; |
if(defined $JTAG_INDEX){ |
$v= $soc->object_get_attribute('global_param',$JTAG_INDEX); |
$JTAG_INDEX = $v if (defined $v); |
$prog= "$prog \$JTAG_MAIN -n $JTAG_INDEX -s \"$OFSSET\" -e \"$BOUNDRY\" -i \"$BINFILE\" -c"; |
#print "prog= $prog\n"; |
|
} |
|
} |
} |
|
|
} |
|
|
} |
|
|
my $lisence= get_license_header("readme"); |
my $warning=autogen_warning(); |
|
705,21 → 787,8
|
sh program.sh |
|
but first, you need to update these variables inside the program.sh file |
|
OFSSET= [offset_in_hex] |
The RAM wishbone bus offset address e.g : 0x0000000. |
BOUNDRY=[boundry_in_hex ] |
The RAM boundary address in hex e.g: 0x00003fff. |
VJTAG_INDEX=[Virtual jtag index number] |
BINFILE=[file_name] |
memory file in binary format. eg ram00.bin |
|
|
you can get OFSSET, BOUNDRY and VJTAG_INDEX values from following |
wishbone buse(s) info & Jtag to wishbone interface (jtag_wb) info sections. |
Also check the memory and jtag_wb are connected to the same bus (have same \"connected to\" filed). |
|
*************************** |
** soc parameters |
*************************** |
747,7 → 816,10
|
"; |
|
return $readme; |
|
|
|
return ($readme,$prog); |
|
|
|
/mpsoc/perl_gui/lib/soc/lm32_test.SOC
File deleted
mpsoc/perl_gui/lib/soc/lm32_test.SOC
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/perl_gui/lib/soc/aemb_test.SOC
===================================================================
--- mpsoc/perl_gui/lib/soc/aemb_test.SOC (revision 27)
+++ mpsoc/perl_gui/lib/soc/aemb_test.SOC (nonexistent)
@@ -1,619 +0,0 @@
-$aemb_test = bless( {
- 'hdl_files' => undef,
- 'modules' => {},
- 'soc_name' => 'aemb_test',
- 'top_ip' => bless( {
- 'ports' => {
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'intfc_name' => 'IO',
- 'instance_name' => 'gpo0',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- },
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'intfc_name' => 'plug:reset[0]',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- },
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'intfc_name' => 'plug:clk[0]',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- },
- 'aeMB_sys_ena_i' => {
- 'intfc_port' => 'enable_i',
- 'intfc_name' => 'plug:enable[0]',
- 'instance_name' => 'aeMB0',
- 'range' => '',
- 'type' => 'input'
- }
- },
- 'interface' => {
- 'plug:enable[0]' => {
- 'ports' => {
- 'aeMB_sys_ena_i' => {
- 'intfc_port' => 'enable_i',
- 'instance_name' => 'aeMB0',
- 'range' => '',
- 'type' => 'input'
- }
- }
- },
- 'IO' => {
- 'ports' => {
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'instance_name' => 'gpo0',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- }
- }
- },
- 'plug:clk[0]' => {
- 'ports' => {
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- }
- }
- },
- 'plug:reset[0]' => {
- 'ports' => {
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- }
- }
- }
- },
- 'instance_ids' => {
- 'aeMB0' => {
- 'ports' => {
- 'aeMB_sys_ena_i' => {
- 'intfc_port' => 'enable_i',
- 'intfc_name' => 'plug:enable[0]',
- 'range' => '',
- 'type' => 'input'
- }
- },
- 'module_name' => 'aeMB_top',
- 'category' => 'Processor',
- 'instance' => 'aeMB',
- 'module' => 'aeMB'
- },
- 'clk_source0' => {
- 'ports' => {
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'intfc_name' => 'plug:reset[0]',
- 'range' => '',
- 'type' => 'input'
- },
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'intfc_name' => 'plug:clk[0]',
- 'range' => '',
- 'type' => 'input'
- }
- },
- 'module_name' => 'clk_source',
- 'category' => 'source',
- 'instance' => 'ss',
- 'module' => 'clk_source'
- },
- 'gpo0' => {
- 'parameters' => {
- 'led_PORT_WIDTH' => {
- 'info' => 'output port width',
- 'deafult' => ' 1',
- 'global_param' => 1,
- 'content' => '1,32,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- }
- },
- 'ports' => {
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'intfc_name' => 'IO',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- }
- },
- 'module_name' => 'gpo',
- 'category' => 'GPI',
- 'instance' => 'led',
- 'module' => 'gpo'
- },
- 'wishbone_bus0' => {
- 'module_name' => 'wishbone_bus',
- 'category' => 'bus',
- 'instance' => 'bus',
- 'module' => 'wishbone_bus'
- },
- 'Altera_single_port_ram0' => {
- 'parameters' => {
- 'ram_Dw' => {
- 'info' => undef,
- 'deafult' => '32',
- 'global_param' => 1,
- 'content' => '8,1024,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- },
- 'ram_Aw' => {
- 'info' => undef,
- 'deafult' => 12,
- 'global_param' => 1,
- 'content' => '4,31,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- }
- },
- 'module_name' => 'Altera_single_port_ram',
- 'category' => 'RAM',
- 'instance' => 'ram',
- 'module' => 'Altera_single_port_ram'
- }
- }
- }, 'ip_gen' ),
- 'instances' => {
- 'aeMB0' => {
- 'aeMB0' => {},
- 'instance_name' => 'aeMB',
- 'plugs' => {
- 'wb_master' => {
- 'connection_num' => undef,
- 'value' => 2,
- 'type' => 'num',
- 'nums' => {
- '1' => {
- 'connect_socket_num' => '1',
- 'connect_id' => 'wishbone_bus0',
- 'name' => 'dwb',
- 'connect_socket' => 'wb_master'
- },
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'wishbone_bus0',
- 'name' => 'iwb',
- 'connect_socket' => 'wb_master'
- }
- }
- },
- 'interrupt_cpu' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'NC',
- 'connect_socket_num' => undef,
- 'name' => 'intrp',
- 'connect_socket' => undef
- }
- },
- 'type' => 'num'
- },
- 'enable' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'IO',
- 'connect_socket_num' => undef,
- 'name' => 'enable',
- 'connect_socket' => undef
- }
- },
- 'type' => 'num'
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- }
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {
- 'AEMB_XWB' => {
- 'value' => ' 7'
- },
- 'AEMB_IDX' => {
- 'value' => ' 6'
- },
- 'AEMB_MUL' => {
- 'value' => ' 1'
- },
- 'AEMB_IWB' => {
- 'value' => ' 32'
- },
- 'AEMB_BSF' => {
- 'value' => ' 1'
- },
- 'AEMB_DWB' => {
- 'value' => ' 32'
- },
- 'AEMB_ICH' => {
- 'value' => ' 11'
- }
- },
- 'parameters_order' => [
- 'AEMB_IWB',
- 'AEMB_DWB',
- 'AEMB_XWB',
- 'AEMB_ICH',
- 'AEMB_IDX',
- 'AEMB_BSF',
- 'AEMB_MUL'
- ],
- 'sockets' => {},
- 'module_name' => 'aeMB_top',
- 'category' => 'Processor',
- 'module' => 'aeMB'
- },
- 'clk_source0' => {
- 'instance_name' => 'ss',
- 'plugs' => {
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => undef,
- 'connect_id' => 'IO',
- 'name' => 'clk',
- 'connect_socket' => undef
- }
- }
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'IO',
- 'connect_socket_num' => undef,
- 'name' => 'reset',
- 'connect_socket' => undef
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {},
- 'parameters_order' => [],
- 'clk_source0' => {},
- 'sockets' => {
- 'reset' => {
- 'connection_num' => 'multi connection',
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'name' => 'reset'
- }
- },
- 'type' => 'num'
- },
- 'clk' => {
- 'connection_num' => 'multi connection',
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'name' => 'clk'
- }
- }
- }
- },
- 'module_name' => 'clk_source',
- 'category' => 'source',
- 'module' => 'clk_source'
- },
- 'gpo0' => {
- 'gpo0' => {},
- 'instance_name' => 'led',
- 'parameters' => {
- 'PORT_WIDTH' => {
- 'value' => ' 1'
- },
- 'Aw' => {
- 'value' => ' 2'
- },
- 'TAGw' => {
- 'value' => ' 3'
- },
- 'SELw' => {
- 'value' => ' 4'
- },
- 'Dw' => {
- 'value' => ' 32'
- }
- },
- 'plugs' => {
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- }
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'width' => 5,
- 'base' => 2432696320,
- 'name' => 'wb',
- 'connect_socket' => 'wb_slave',
- 'end' => 2432696351,
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x9100_0000 0x91ff_ffff General-Purpose I/O'
- }
- }
- }
- },
- 'parameters_order' => [
- 'PORT_WIDTH',
- 'Dw',
- 'Aw',
- 'TAGw',
- 'SELw'
- ],
- 'sockets' => {},
- 'module_name' => 'gpo',
- 'category' => 'GPI',
- 'module' => 'gpo'
- },
- 'wishbone_bus0' => {
- 'wishbone_bus0' => {},
- 'instance_name' => 'bus',
- 'parameters' => {
- 'S' => {
- 'value' => 2
- },
- 'SELw' => {
- 'value' => '4'
- },
- 'Dw' => {
- 'value' => '32'
- },
- 'BTEw' => {
- 'value' => '2 '
- },
- 'Aw' => {
- 'value' => '32'
- },
- 'M' => {
- 'value' => 2
- },
- 'TAGw' => {
- 'value' => '3 '
- },
- 'CTIw' => {
- 'value' => '3'
- }
- },
- 'plugs' => {
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- }
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters_order' => [
- 'S',
- 'M',
- 'Aw',
- 'TAGw',
- 'SELw',
- 'Dw',
- 'CTIw',
- 'BTEw'
- ],
- 'sockets' => {
- 'wb_master' => {
- 'connection_num' => 'single connection',
- 'value' => 'M',
- 'type' => 'param',
- 'nums' => {
- '0' => {
- 'name' => 'wb_master'
- }
- }
- },
- 'wb_addr_map' => {
- 'connection_num' => 'single connection',
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'name' => 'wb_addr_map'
- }
- },
- 'type' => 'num'
- },
- 'wb_slave' => {
- 'connection_num' => 'single connection',
- 'value' => 'S',
- 'nums' => {
- '0' => {
- 'name' => 'wb_slave'
- }
- },
- 'type' => 'param'
- }
- },
- 'module_name' => 'wishbone_bus',
- 'category' => 'bus',
- 'module' => 'wishbone_bus'
- },
- 'Altera_single_port_ram0' => {
- 'instance_name' => 'ram',
- 'Altera_single_port_ram0' => {},
- 'plugs' => {
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- }
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'base' => 0,
- 'width' => 'WBAw',
- 'connect_socket_num' => '1',
- 'name' => 'wb_slave',
- 'connect_socket' => 'wb_slave',
- 'end' => 16383,
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x0000_0000 0x3fff_ffff RAM'
- }
- }
- }
- },
- 'parameters' => {
- 'RAM_TAG_STRING' => {
- 'value' => 'i2s(CORE_ID)'
- },
- 'SELw' => {
- 'value' => '4'
- },
- 'Dw' => {
- 'value' => '32'
- },
- 'WBAw' => {
- 'value' => 'Aw+2'
- },
- 'BTEw' => {
- 'value' => '2'
- },
- 'Aw' => {
- 'value' => 12
- },
- 'TAGw' => {
- 'value' => '3'
- },
- 'CTIw' => {
- 'value' => '3'
- }
- },
- 'parameters_order' => [
- 'Dw',
- 'Aw',
- 'TAGw',
- 'SELw',
- 'CTIw',
- 'BTEw',
- 'RAM_TAG_STRING',
- 'WBAw'
- ],
- 'sockets' => {},
- 'module_name' => 'Altera_single_port_ram',
- 'category' => 'RAM',
- 'module' => 'Altera_single_port_ram'
- }
- },
- 'instance_order' => [
- 'gpo0',
- 'clk_source0',
- 'wishbone_bus0',
- 'Altera_single_port_ram0',
- 'aeMB0'
- ]
- }, 'soc' );
mpsoc/perl_gui/lib/soc/aemb_test.SOC
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/perl_gui/lib/soc/aemb_tile.SOC
===================================================================
--- mpsoc/perl_gui/lib/soc/aemb_tile.SOC (revision 27)
+++ mpsoc/perl_gui/lib/soc/aemb_tile.SOC (nonexistent)
@@ -1,1243 +0,0 @@
-$aemb_tile = bless( {
- 'hdl_files' => undef,
- 'modules' => {},
- 'soc_name' => 'aemb_tile',
- 'top_ip' => bless( {
- 'ports' => {
- 'ni_flit_out_wr' => {
- 'intfc_port' => 'flit_out_wr',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => '',
- 'type' => 'output'
- },
- 'ni_current_x' => {
- 'intfc_port' => 'current_x',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Xw-1 : 0',
- 'type' => 'input'
- },
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'intfc_name' => 'plug:clk[0]',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- },
- 'aeMB_sys_ena_i' => {
- 'intfc_port' => 'enable_i',
- 'intfc_name' => 'plug:enable[0]',
- 'instance_name' => 'aeMB0',
- 'range' => '',
- 'type' => 'input'
- },
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'intfc_name' => 'IO',
- 'instance_name' => 'gpo0',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- },
- 'ni_flit_out' => {
- 'intfc_port' => 'flit_out',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'output'
- },
- 'ni_current_y' => {
- 'intfc_port' => 'current_y',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Yw-1 : 0',
- 'type' => 'input'
- },
- 'ni_credit_out' => {
- 'intfc_port' => 'credit_out',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_V-1: 0',
- 'type' => 'output'
- },
- 'ni_flit_in_wr' => {
- 'intfc_port' => 'flit_in_wr',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => '',
- 'type' => 'input'
- },
- 'ni_credit_in' => {
- 'intfc_port' => 'credit_in',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_V-1 : 0',
- 'type' => 'input'
- },
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'intfc_name' => 'plug:reset[0]',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- },
- 'ni_flit_in' => {
- 'intfc_port' => 'flit_in',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'input'
- }
- },
- 'interface' => {
- 'plug:enable[0]' => {
- 'ports' => {
- 'aeMB_sys_ena_i' => {
- 'intfc_port' => 'enable_i',
- 'instance_name' => 'aeMB0',
- 'range' => '',
- 'type' => 'input'
- }
- }
- },
- 'socket:ni[0]' => {
- 'ports' => {
- 'ni_flit_out_wr' => {
- 'intfc_port' => 'flit_out_wr',
- 'instance_name' => 'ni0',
- 'range' => '',
- 'type' => 'output'
- },
- 'ni_current_x' => {
- 'intfc_port' => 'current_x',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Xw-1 : 0',
- 'type' => 'input'
- },
- 'ni_current_y' => {
- 'intfc_port' => 'current_y',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Yw-1 : 0',
- 'type' => 'input'
- },
- 'ni_flit_out' => {
- 'intfc_port' => 'flit_out',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'output'
- },
- 'ni_credit_out' => {
- 'intfc_port' => 'credit_out',
- 'instance_name' => 'ni0',
- 'range' => 'ni_V-1: 0',
- 'type' => 'output'
- },
- 'ni_flit_in_wr' => {
- 'intfc_port' => 'flit_in_wr',
- 'instance_name' => 'ni0',
- 'range' => '',
- 'type' => 'input'
- },
- 'ni_credit_in' => {
- 'intfc_port' => 'credit_in',
- 'instance_name' => 'ni0',
- 'range' => 'ni_V-1 : 0',
- 'type' => 'input'
- },
- 'ni_flit_in' => {
- 'intfc_port' => 'flit_in',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'input'
- }
- }
- },
- 'IO' => {
- 'ports' => {
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'instance_name' => 'gpo0',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- }
- }
- },
- 'plug:clk[0]' => {
- 'ports' => {
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- }
- }
- },
- 'plug:reset[0]' => {
- 'ports' => {
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- }
- }
- }
- },
- 'instance_ids' => {
- 'aeMB0' => {
- 'ports' => {
- 'aeMB_sys_ena_i' => {
- 'intfc_port' => 'enable_i',
- 'intfc_name' => 'plug:enable[0]',
- 'range' => '',
- 'type' => 'input'
- }
- },
- 'module_name' => 'aeMB_top',
- 'category' => 'Processor',
- 'instance' => 'aeMB',
- 'module' => 'aeMB'
- },
- 'gpo0' => {
- 'parameters' => {
- 'led_PORT_WIDTH' => {
- 'info' => 'output port width',
- 'deafult' => ' 1',
- 'global_param' => 1,
- 'content' => '1,32,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- }
- },
- 'ports' => {
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'intfc_name' => 'IO',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- }
- },
- 'module_name' => 'gpo',
- 'category' => 'GPI',
- 'instance' => 'led',
- 'module' => 'gpo'
- },
- 'wishbone_bus0' => {
- 'module_name' => 'wishbone_bus',
- 'category' => 'bus',
- 'instance' => 'bus',
- 'module' => 'wishbone_bus'
- },
- 'int_ctrl0' => {
- 'module_name' => 'int_ctrl',
- 'category' => 'interrupt',
- 'instance' => 'int_ctrl',
- 'module' => 'int_ctrl'
- },
- 'Altera_single_port_ram0' => {
- 'parameters' => {
- 'ram_Dw' => {
- 'info' => undef,
- 'deafult' => '32',
- 'global_param' => 1,
- 'content' => '8,1024,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- },
- 'ram_Aw' => {
- 'info' => undef,
- 'deafult' => 12,
- 'global_param' => 1,
- 'content' => '4,31,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- }
- },
- 'module_name' => 'Altera_single_port_ram',
- 'category' => 'RAM',
- 'instance' => 'ram',
- 'module' => 'Altera_single_port_ram'
- },
- 'clk_source0' => {
- 'ports' => {
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'intfc_name' => 'plug:reset[0]',
- 'range' => '',
- 'type' => 'input'
- },
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'intfc_name' => 'plug:clk[0]',
- 'range' => '',
- 'type' => 'input'
- }
- },
- 'module_name' => 'clk_source',
- 'category' => 'source',
- 'instance' => 'ss',
- 'module' => 'clk_source'
- },
- 'ni0' => {
- 'parameters' => {
- 'ni_TOPOLOGY' => {
- 'info' => undef,
- 'deafult' => '"MESH"',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_Fpay' => {
- 'info' => undef,
- 'deafult' => ' 32',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_NX' => {
- 'info' => undef,
- 'deafult' => ' 2',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_NY' => {
- 'info' => undef,
- 'deafult' => ' 2',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_B' => {
- 'info' => undef,
- 'deafult' => ' 4',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_V' => {
- 'info' => undef,
- 'deafult' => ' 4',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_ROUTE_TYPE' => {
- 'info' => undef,
- 'deafult' => '"DETERMINISTIC"',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_P' => {
- 'info' => undef,
- 'deafult' => ' 5',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_DEBUG_EN' => {
- 'info' => undef,
- 'deafult' => '0',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_ROUTE_NAME' => {
- 'info' => undef,
- 'deafult' => '"XY"',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- }
- },
- 'ports' => {
- 'ni_flit_out_wr' => {
- 'intfc_port' => 'flit_out_wr',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => '',
- 'type' => 'output'
- },
- 'ni_current_x' => {
- 'intfc_port' => 'current_x',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_Xw-1 : 0',
- 'type' => 'input'
- },
- 'ni_current_y' => {
- 'intfc_port' => 'current_y',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_Yw-1 : 0',
- 'type' => 'input'
- },
- 'ni_flit_out' => {
- 'intfc_port' => 'flit_out',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'output'
- },
- 'ni_credit_out' => {
- 'intfc_port' => 'credit_out',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_V-1: 0',
- 'type' => 'output'
- },
- 'ni_flit_in_wr' => {
- 'intfc_port' => 'flit_in_wr',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => '',
- 'type' => 'input'
- },
- 'ni_credit_in' => {
- 'intfc_port' => 'credit_in',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_V-1 : 0',
- 'type' => 'input'
- },
- 'ni_flit_in' => {
- 'intfc_port' => 'flit_in',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'input'
- }
- },
- 'module_name' => 'ni',
- 'category' => 'NoC',
- 'instance' => 'ni',
- 'module' => 'ni'
- },
- 'timer0' => {
- 'module_name' => 'timer',
- 'category' => 'TIM',
- 'instance' => 'timer',
- 'module' => 'timer'
- }
- }
- }, 'ip_gen' ),
- 'instances' => {
- 'aeMB0' => {
- 'aeMB0' => {},
- 'instance_name' => 'aeMB',
- 'plugs' => {
- 'wb_master' => {
- 'connection_num' => undef,
- 'value' => 2,
- 'type' => 'num',
- 'nums' => {
- '1' => {
- 'connect_socket_num' => '1',
- 'connect_id' => 'wishbone_bus0',
- 'name' => 'dwb',
- 'connect_socket' => 'wb_master'
- },
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'wishbone_bus0',
- 'name' => 'iwb',
- 'connect_socket' => 'wb_master'
- }
- }
- },
- 'interrupt_cpu' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'int_ctrl0',
- 'connect_socket_num' => '0',
- 'name' => 'intrp',
- 'connect_socket' => 'interrupt_cpu'
- }
- },
- 'type' => 'num'
- },
- 'enable' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'IO',
- 'connect_socket_num' => undef,
- 'name' => 'enable',
- 'connect_socket' => undef
- }
- },
- 'type' => 'num'
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- }
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {
- 'AEMB_XWB' => {
- 'value' => ' 7'
- },
- 'AEMB_IDX' => {
- 'value' => ' 6'
- },
- 'AEMB_MUL' => {
- 'value' => ' 1'
- },
- 'AEMB_IWB' => {
- 'value' => ' 32'
- },
- 'AEMB_BSF' => {
- 'value' => ' 1'
- },
- 'AEMB_DWB' => {
- 'value' => ' 32'
- },
- 'AEMB_ICH' => {
- 'value' => ' 11'
- }
- },
- 'parameters_order' => [
- 'AEMB_IWB',
- 'AEMB_DWB',
- 'AEMB_XWB',
- 'AEMB_ICH',
- 'AEMB_IDX',
- 'AEMB_BSF',
- 'AEMB_MUL'
- ],
- 'sockets' => {},
- 'module_name' => 'aeMB_top',
- 'category' => 'Processor',
- 'module' => 'aeMB'
- },
- 'gpo0' => {
- 'gpo0' => {},
- 'instance_name' => 'led',
- 'parameters' => {
- 'PORT_WIDTH' => {
- 'value' => ' 1'
- },
- 'Aw' => {
- 'value' => ' 2'
- },
- 'TAGw' => {
- 'value' => ' 3'
- },
- 'SELw' => {
- 'value' => ' 4'
- },
- 'Dw' => {
- 'value' => ' 32'
- }
- },
- 'plugs' => {
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- }
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'width' => 5,
- 'base' => 2432696320,
- 'name' => 'wb',
- 'connect_socket' => 'wb_slave',
- 'end' => 2432696351,
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x9100_0000 0x91ff_ffff General-Purpose I/O'
- }
- }
- }
- },
- 'parameters_order' => [
- 'PORT_WIDTH',
- 'Dw',
- 'Aw',
- 'TAGw',
- 'SELw'
- ],
- 'sockets' => {},
- 'module_name' => 'gpo',
- 'category' => 'GPI',
- 'module' => 'gpo'
- },
- 'wishbone_bus0' => {
- 'wishbone_bus0' => {},
- 'instance_name' => 'bus',
- 'parameters' => {
- 'S' => {
- 'value' => 5
- },
- 'SELw' => {
- 'value' => '4'
- },
- 'Dw' => {
- 'value' => '32'
- },
- 'BTEw' => {
- 'value' => '2 '
- },
- 'Aw' => {
- 'value' => '32'
- },
- 'M' => {
- 'value' => 3
- },
- 'TAGw' => {
- 'value' => '3 '
- },
- 'CTIw' => {
- 'value' => '3'
- }
- },
- 'plugs' => {
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- }
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters_order' => [
- 'S',
- 'M',
- 'Aw',
- 'TAGw',
- 'SELw',
- 'Dw',
- 'CTIw',
- 'BTEw'
- ],
- 'sockets' => {
- 'wb_master' => {
- 'connection_num' => 'single connection',
- 'value' => 'M',
- 'type' => 'param',
- 'nums' => {
- '0' => {
- 'name' => 'wb_master'
- }
- }
- },
- 'wb_addr_map' => {
- 'connection_num' => 'single connection',
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'name' => 'wb_addr_map'
- }
- },
- 'type' => 'num'
- },
- 'wb_slave' => {
- 'connection_num' => 'single connection',
- 'value' => 'S',
- 'nums' => {
- '0' => {
- 'name' => 'wb_slave'
- }
- },
- 'type' => 'param'
- }
- },
- 'module_name' => 'wishbone_bus',
- 'category' => 'bus',
- 'module' => 'wishbone_bus'
- },
- 'int_ctrl0' => {
- 'instance_name' => 'int_ctrl',
- 'int_ctrl0' => {},
- 'plugs' => {
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- },
- 'type' => 'num'
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'base' => 2650800128,
- 'width' => 5,
- 'connect_socket_num' => '3',
- 'name' => 'wb',
- 'end' => 2650800159,
- 'connect_socket' => 'wb_slave',
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x9e00_0000 0x9eff_ffff IDE Controller'
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {
- 'Aw' => {
- 'value' => ' 3'
- },
- 'SELw' => {
- 'value' => ' 4 '
- },
- 'INT_NUM' => {
- 'value' => 2
- },
- 'Dw' => {
- 'value' => ' 32'
- }
- },
- 'parameters_order' => [
- 'INT_NUM',
- 'Dw',
- 'Aw',
- 'SELw'
- ],
- 'sockets' => {
- 'interrupt_cpu' => {
- 'connection_num' => 'single connection',
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'name' => 'int_cpu'
- }
- },
- 'type' => 'num'
- },
- 'interrupt_peripheral' => {
- 'connection_num' => 'single connection',
- 'value' => 'INT_NUM',
- 'nums' => {
- '0' => {
- 'name' => 'int_periph'
- }
- },
- 'type' => 'param'
- }
- },
- 'module_name' => 'int_ctrl',
- 'category' => 'interrupt',
- 'module' => 'int_ctrl'
- },
- 'Altera_single_port_ram0' => {
- 'instance_name' => 'ram',
- 'Altera_single_port_ram0' => {},
- 'plugs' => {
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- }
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'base' => 0,
- 'width' => 'WBAw',
- 'connect_socket_num' => '1',
- 'name' => 'wb_slave',
- 'connect_socket' => 'wb_slave',
- 'end' => 16383,
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x0000_0000 0x3fff_ffff RAM'
- }
- }
- }
- },
- 'parameters' => {
- 'RAM_TAG_STRING' => {
- 'value' => 'i2s(CORE_ID)'
- },
- 'SELw' => {
- 'value' => '4'
- },
- 'Dw' => {
- 'value' => '32'
- },
- 'WBAw' => {
- 'value' => 'Aw+2'
- },
- 'BTEw' => {
- 'value' => '2'
- },
- 'Aw' => {
- 'value' => 12
- },
- 'TAGw' => {
- 'value' => '3'
- },
- 'CTIw' => {
- 'value' => '3'
- }
- },
- 'parameters_order' => [
- 'Dw',
- 'Aw',
- 'TAGw',
- 'SELw',
- 'CTIw',
- 'BTEw',
- 'RAM_TAG_STRING',
- 'WBAw'
- ],
- 'sockets' => {},
- 'module_name' => 'Altera_single_port_ram',
- 'category' => 'RAM',
- 'module' => 'Altera_single_port_ram'
- },
- 'clk_source0' => {
- 'instance_name' => 'ss',
- 'plugs' => {
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => undef,
- 'connect_id' => 'IO',
- 'name' => 'clk',
- 'connect_socket' => undef
- }
- }
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'IO',
- 'connect_socket_num' => undef,
- 'name' => 'reset',
- 'connect_socket' => undef
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {},
- 'parameters_order' => [],
- 'clk_source0' => {},
- 'sockets' => {
- 'reset' => {
- 'connection_num' => 'multi connection',
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'name' => 'reset'
- }
- },
- 'type' => 'num'
- },
- 'clk' => {
- 'connection_num' => 'multi connection',
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'name' => 'clk'
- }
- }
- }
- },
- 'module_name' => 'clk_source',
- 'category' => 'source',
- 'module' => 'clk_source'
- },
- 'ni0' => {
- 'instance_name' => 'ni',
- 'plugs' => {
- 'wb_master' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '2',
- 'connect_id' => 'wishbone_bus0',
- 'name' => 'wb_master',
- 'connect_socket' => 'wb_master'
- }
- },
- 'type' => 'num'
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- },
- 'type' => 'num'
- },
- 'interrupt_peripheral' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'int_ctrl0',
- 'name' => 'int_peripheral',
- 'connect_socket' => 'interrupt_peripheral'
- }
- },
- 'type' => 'num'
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'base' => 3087007744,
- 'width' => 5,
- 'connect_socket_num' => '2',
- 'name' => 'wb_slave',
- 'end' => 3087007775,
- 'connect_socket' => 'wb_slave',
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0xb800_0000 0xbfff_ffff custom devices'
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {
- 'Dw' => {
- 'value' => ' 32'
- },
- 'NY' => {
- 'value' => ' 2'
- },
- 'DEBUG_EN' => {
- 'value' => '0'
- },
- 'NX' => {
- 'value' => ' 2'
- },
- 'V' => {
- 'value' => ' 4'
- },
- 'COMB_PCK_SIZE_W' => {
- 'value' => '12'
- },
- 'Fw' => {
- 'value' => '2+V+Fpay'
- },
- 'TAGw' => {
- 'value' => '3'
- },
- 'COMB_MEM_PTR_W' => {
- 'value' => '20'
- },
- 'M_Aw' => {
- 'value' => '32'
- },
- 'ROUTE_NAME' => {
- 'value' => '"XY"'
- },
- 'Xw ' => {
- 'value' => 'log2(NX)'
- },
- 'Fpay' => {
- 'value' => ' 32'
- },
- 'ROUTE_TYPE' => {
- 'value' => '"DETERMINISTIC"'
- },
- 'SELw' => {
- 'value' => '4 '
- },
- 'P' => {
- 'value' => ' 5'
- },
- 'B' => {
- 'value' => ' 4'
- },
- 'Xw' => {
- 'value' => 'log2(NX)'
- },
- 'TOPOLOGY' => {
- 'value' => '"MESH"'
- },
- 'S_Aw' => {
- 'value' => ' 3'
- },
- 'Yw' => {
- 'value' => 'log2(NY)'
- },
- 'Xwj' => {
- 'value' => 'fvf'
- }
- },
- 'parameters_order' => [
- 'V',
- 'P',
- 'B',
- 'NX',
- 'NY',
- 'Fpay',
- 'TOPOLOGY',
- 'ROUTE_TYPE',
- 'ROUTE_NAME',
- 'DEBUG_EN',
- 'COMB_MEM_PTR_W',
- 'COMB_PCK_SIZE_W',
- 'Dw',
- 'S_Aw',
- 'M_Aw',
- 'TAGw',
- 'SELw',
- 'Yw',
- 'Fw',
- 'Xw'
- ],
- 'sockets' => {
- 'ni' => {
- 'connection_num' => 'single connection',
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'name' => 'ni'
- }
- },
- 'type' => 'num'
- }
- },
- 'module_name' => 'ni',
- 'category' => 'NoC',
- 'module' => 'ni'
- },
- 'timer0' => {
- 'instance_name' => 'timer',
- 'plugs' => {
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- },
- 'type' => 'num'
- },
- 'interrupt_peripheral' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '1',
- 'connect_id' => 'int_ctrl0',
- 'name' => 'interrupt_peripheral',
- 'connect_socket' => 'interrupt_peripheral'
- }
- },
- 'type' => 'num'
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- },
- 'type' => 'num'
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'base' => 2516582400,
- 'width' => 5,
- 'connect_socket_num' => '4',
- 'name' => 'wb',
- 'end' => 2516582431,
- 'connect_socket' => 'wb_slave',
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x9600_0000 0x96ff_ffff PWM/Timer/Counter Ctrl'
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {
- 'Aw' => {
- 'value' => ' 3'
- },
- 'TAGw' => {
- 'value' => '3'
- },
- 'SELw' => {
- 'value' => ' 4'
- },
- 'Dw' => {
- 'value' => ' 32'
- },
- 'CNTw' => {
- 'value' => '32 '
- }
- },
- 'parameters_order' => [
- 'CNTw',
- 'Dw',
- 'Aw',
- 'TAGw',
- 'SELw'
- ],
- 'sockets' => {},
- 'module_name' => 'timer',
- 'category' => 'TIM',
- 'module' => 'timer',
- 'timer0' => {}
- }
- },
- 'instance_order' => [
- 'aeMB0',
- 'gpo0',
- 'clk_source0',
- 'wishbone_bus0',
- 'Altera_single_port_ram0',
- 'int_ctrl0',
- 'timer0',
- 'ni0'
- ]
- }, 'soc' );
Index: mpsoc/perl_gui/lib/soc/Tutorial_lm32.SOC
===================================================================
--- mpsoc/perl_gui/lib/soc/Tutorial_lm32.SOC (nonexistent)
+++ mpsoc/perl_gui/lib/soc/Tutorial_lm32.SOC (revision 28)
@@ -0,0 +1,1063 @@
+#######################################################################
+## File: Tutorial_lm32.SOC
+##
+## Copyright (C) 2014-2016 Alireza Monemi
+##
+## This file is part of ProNoC 1.5.0
+##
+## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT
+## MAY CAUSE UNEXPECTED BEHAIVOR.
+################################################################################
+
+$soc = bless( {
+ 'hdl_files' => undef,
+ 'soc_name' => 'Tutorial_lm32',
+ 'top_ip' => bless( {
+ 'ports' => {
+ 'lm32_en_i' => {
+ 'intfc_port' => 'enable_i',
+ 'intfc_name' => 'plug:enable[0]',
+ 'instance_name' => 'lm320',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'hex0_port_o' => {
+ 'intfc_port' => 'IO',
+ 'intfc_name' => 'IO',
+ 'instance_name' => 'gpo0',
+ 'range' => 'hex0_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ },
+ 'source_reset_in' => {
+ 'intfc_port' => 'reset_i',
+ 'intfc_name' => 'plug:reset[0]',
+ 'instance_name' => 'clk_source0',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'ext_int_ext_int_i' => {
+ 'intfc_port' => 'IO',
+ 'intfc_name' => 'IO',
+ 'instance_name' => 'ext_int0',
+ 'range' => 'ext_int_EXT_INT_NUM-1 : 0',
+ 'type' => 'input'
+ },
+ 'source_clk_in' => {
+ 'intfc_port' => 'clk_i',
+ 'intfc_name' => 'plug:clk[0]',
+ 'instance_name' => 'clk_source0',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'hex1_port_o' => {
+ 'intfc_port' => 'IO',
+ 'intfc_name' => 'IO',
+ 'instance_name' => 'gpo1',
+ 'range' => 'hex1_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ }
+ },
+ 'interface' => {
+ 'plug:enable[0]' => {
+ 'ports' => {
+ 'lm32_en_i' => {
+ 'intfc_port' => 'enable_i',
+ 'instance_name' => 'lm320',
+ 'range' => '',
+ 'type' => 'input'
+ }
+ }
+ },
+ 'IO' => {
+ 'ports' => {
+ 'hex0_port_o' => {
+ 'intfc_port' => 'IO',
+ 'instance_name' => 'gpo0',
+ 'range' => 'hex0_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ },
+ 'ext_int_ext_int_i' => {
+ 'intfc_port' => 'IO',
+ 'instance_name' => 'ext_int0',
+ 'range' => 'ext_int_EXT_INT_NUM-1 : 0',
+ 'type' => 'input'
+ },
+ 'hex1_port_o' => {
+ 'intfc_port' => 'IO',
+ 'instance_name' => 'gpo1',
+ 'range' => 'hex1_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ }
+ }
+ },
+ 'plug:clk[0]' => {
+ 'ports' => {
+ 'source_clk_in' => {
+ 'intfc_port' => 'clk_i',
+ 'instance_name' => 'clk_source0',
+ 'range' => '',
+ 'type' => 'input'
+ }
+ }
+ },
+ 'plug:reset[0]' => {
+ 'ports' => {
+ 'source_reset_in' => {
+ 'intfc_port' => 'reset_i',
+ 'instance_name' => 'clk_source0',
+ 'range' => '',
+ 'type' => 'input'
+ }
+ }
+ }
+ },
+ 'instance_ids' => {
+ 'gpo0' => {
+ 'parameters' => {
+ 'hex0_PORT_WIDTH' => {
+ 'info' => 'output port width',
+ 'deafult' => 7,
+ 'global_param' => 'Parameter',
+ 'content' => '1,32,1',
+ 'redefine_param' => 1,
+ 'type' => 'Spin-button'
+ }
+ },
+ 'ports' => {
+ 'hex0_port_o' => {
+ 'intfc_port' => 'IO',
+ 'intfc_name' => 'IO',
+ 'range' => 'hex0_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ }
+ },
+ 'module_name' => 'gpo',
+ 'category' => 'GPIO',
+ 'instance' => 'hex0',
+ 'module' => 'gpo'
+ },
+ 'wishbone_bus0' => {
+ 'module_name' => 'wishbone_bus',
+ 'category' => 'Bus',
+ 'instance' => 'bus',
+ 'module' => 'wishbone_bus'
+ },
+ 'dual_port_ram0' => {
+ 'module_name' => 'wb_dual_port_ram',
+ 'category' => 'RAM',
+ 'instance' => 'dual_port_ram0',
+ 'module' => 'dual_port_ram'
+ },
+ 'gpo1' => {
+ 'parameters' => {
+ 'hex1_PORT_WIDTH' => {
+ 'info' => 'output port width',
+ 'deafult' => 7,
+ 'global_param' => 'Parameter',
+ 'content' => '1,32,1',
+ 'redefine_param' => 1,
+ 'type' => 'Spin-button'
+ }
+ },
+ 'ports' => {
+ 'hex1_port_o' => {
+ 'intfc_port' => 'IO',
+ 'intfc_name' => 'IO',
+ 'range' => 'hex1_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ }
+ },
+ 'module_name' => 'gpo',
+ 'category' => 'GPIO',
+ 'instance' => 'hex1',
+ 'module' => 'gpo'
+ },
+ 'clk_source0' => {
+ 'ports' => {
+ 'source_reset_in' => {
+ 'intfc_port' => 'reset_i',
+ 'intfc_name' => 'plug:reset[0]',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'source_clk_in' => {
+ 'intfc_port' => 'clk_i',
+ 'intfc_name' => 'plug:clk[0]',
+ 'range' => '',
+ 'type' => 'input'
+ }
+ },
+ 'module_name' => 'clk_source',
+ 'category' => 'Source',
+ 'instance' => 'source',
+ 'module' => 'clk_source'
+ },
+ 'ext_int0' => {
+ 'ports' => {
+ 'ext_int_ext_int_i' => {
+ 'intfc_port' => 'IO',
+ 'intfc_name' => 'IO',
+ 'range' => 'ext_int_EXT_INT_NUM-1 : 0',
+ 'type' => 'input'
+ }
+ },
+ 'module_name' => 'ext_int',
+ 'category' => 'Interrupt',
+ 'instance' => 'ext_int',
+ 'module' => 'ext_int'
+ },
+ 'lm320' => {
+ 'ports' => {
+ 'lm32_en_i' => {
+ 'intfc_port' => 'enable_i',
+ 'intfc_name' => 'plug:enable[0]',
+ 'range' => '',
+ 'type' => 'input'
+ }
+ },
+ 'module_name' => 'lm32',
+ 'category' => 'Processor',
+ 'instance' => 'lm32',
+ 'module' => 'lm32'
+ },
+ 'jtag_wb0' => {
+ 'parameters' => {
+ 'jtag_wb_VJTAG_INDEX' => {
+ 'info' => 'JTAG control host identifies each instance of this IP core by a unique index number. The default value is the tile ID number. You assign an index value between 0 to 255.',
+ 'deafult' => 'CORE_ID',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Entry'
+ }
+ },
+ 'module_name' => 'vjtag_wb',
+ 'category' => 'JTAG',
+ 'instance' => 'jtag_wb',
+ 'module' => 'jtag_wb'
+ },
+ 'timer0' => {
+ 'module_name' => 'timer',
+ 'category' => 'Timer',
+ 'instance' => 'timer',
+ 'module' => 'timer'
+ }
+ }
+ }, 'ip_gen' ),
+ 'instances' => {
+ 'gpo0' => {
+ 'gpo0' => {},
+ 'instance_name' => 'hex0',
+ 'plugs' => {
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'wb_slave' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'base' => 2432696320,
+ 'width' => 5,
+ 'connect_socket_num' => '0',
+ 'name' => 'wb',
+ 'end' => 2432696351,
+ 'connect_socket' => 'wb_slave',
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0x9100_0000 0x91ff_ffff General-Purpose I/O'
+ }
+ },
+ 'type' => 'num'
+ }
+ },
+ 'parameters' => {
+ 'PORT_WIDTH' => {
+ 'value' => 7
+ },
+ 'Aw' => {
+ 'value' => ' 2'
+ },
+ 'TAGw' => {
+ 'value' => ' 3'
+ },
+ 'SELw' => {
+ 'value' => ' 4'
+ },
+ 'Dw' => {
+ 'value' => 'PORT_WIDTH'
+ }
+ },
+ 'parameters_order' => [
+ 'PORT_WIDTH',
+ 'Aw',
+ 'TAGw',
+ 'SELw',
+ 'Dw'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'gpo',
+ 'category' => 'GPIO',
+ 'module' => 'gpo'
+ },
+ 'dual_port_ram0' => {
+ 'dual_port_ram0' => {},
+ 'instance_name' => 'dual_port_ram0',
+ 'plugs' => {
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'wb_slave' => {
+ 'connection_num' => undef,
+ 'value' => 2,
+ 'nums' => {
+ '1' => {
+ 'base' => 16384,
+ 'width' => 'WB_Aw',
+ 'connect_socket_num' => '5',
+ 'name' => 'wb_b',
+ 'end' => 32767,
+ 'connect_socket' => 'wb_slave',
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0x0000_0000 0x3fff_ffff RAM'
+ },
+ '0' => {
+ 'base' => 0,
+ 'width' => 'WB_Aw',
+ 'connect_socket_num' => '4',
+ 'name' => 'wb_a',
+ 'end' => 16383,
+ 'connect_socket' => 'wb_slave',
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0x0000_0000 0x3fff_ffff RAM'
+ }
+ },
+ 'type' => 'num'
+ }
+ },
+ 'parameters' => {
+ 'SELw' => {
+ 'value' => 'Dw/8'
+ },
+ 'PORT_B_BURST_MODE' => {
+ 'value' => '"ENABLED" '
+ },
+ 'Dw' => {
+ 'value' => '32'
+ },
+ 'BTEw' => {
+ 'value' => '2'
+ },
+ 'WB_Aw' => {
+ 'value' => 'Aw+2'
+ },
+ 'RAM_INDEX' => {
+ 'value' => 'CORE_ID'
+ },
+ 'Aw' => {
+ 'value' => '12'
+ },
+ 'TAGw' => {
+ 'value' => '3'
+ },
+ 'BYTE_WR_EN' => {
+ 'value' => '"YES"'
+ },
+ 'PORT_A_BURST_MODE' => {
+ 'value' => '"ENABLED"'
+ },
+ 'CTIw' => {
+ 'value' => '3'
+ },
+ 'FPGA_VENDOR' => {
+ 'value' => '"ALTERA"'
+ }
+ },
+ 'parameters_order' => [
+ 'Dw',
+ 'Aw',
+ 'BYTE_WR_EN',
+ 'FPGA_VENDOR',
+ 'TAGw',
+ 'SELw',
+ 'CTIw',
+ 'BTEw',
+ 'WB_Aw',
+ 'RAM_INDEX',
+ 'PORT_A_BURST_MODE',
+ 'PORT_B_BURST_MODE'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'wb_dual_port_ram',
+ 'category' => 'RAM',
+ 'module' => 'dual_port_ram'
+ },
+ 'wishbone_bus0' => {
+ 'wishbone_bus0' => {},
+ 'instance_name' => 'bus',
+ 'plugs' => {
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ }
+ }
+ },
+ 'parameters' => {
+ 'S' => {
+ 'value' => 6
+ },
+ 'SELw' => {
+ 'value' => 'Dw/8'
+ },
+ 'Dw' => {
+ 'value' => '32'
+ },
+ 'BTEw' => {
+ 'value' => '2 '
+ },
+ 'Aw' => {
+ 'value' => '32'
+ },
+ 'M' => {
+ 'value' => 3
+ },
+ 'TAGw' => {
+ 'value' => '3'
+ },
+ 'CTIw' => {
+ 'value' => '3'
+ }
+ },
+ 'parameters_order' => [
+ 'M',
+ 'S',
+ 'Dw',
+ 'Aw',
+ 'SELw',
+ 'TAGw',
+ 'CTIw',
+ 'BTEw'
+ ],
+ 'sockets' => {
+ 'wb_master' => {
+ 'connection_num' => 'single connection',
+ 'value' => 'M',
+ 'type' => 'param',
+ 'nums' => {
+ '0' => {
+ 'name' => 'wb_master'
+ }
+ }
+ },
+ 'wb_addr_map' => {
+ 'connection_num' => 'single connection',
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'name' => 'wb_addr_map'
+ }
+ }
+ },
+ 'wb_slave' => {
+ 'connection_num' => 'single connection',
+ 'value' => 'S',
+ 'type' => 'param',
+ 'nums' => {
+ '0' => {
+ 'name' => 'wb_slave'
+ }
+ }
+ }
+ },
+ 'module_name' => 'wishbone_bus',
+ 'category' => 'Bus',
+ 'module' => 'wishbone_bus'
+ },
+ 'gpo1' => {
+ 'instance_name' => 'hex1',
+ 'gpo1' => {},
+ 'plugs' => {
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'wb_slave' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'base' => 2432696352,
+ 'width' => 5,
+ 'connect_socket_num' => '1',
+ 'name' => 'wb',
+ 'end' => 2432696383,
+ 'connect_socket' => 'wb_slave',
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0x9100_0000 0x91ff_ffff General-Purpose I/O'
+ }
+ },
+ 'type' => 'num'
+ }
+ },
+ 'parameters' => {
+ 'PORT_WIDTH' => {
+ 'value' => 7
+ },
+ 'Aw' => {
+ 'value' => ' 2'
+ },
+ 'TAGw' => {
+ 'value' => ' 3'
+ },
+ 'SELw' => {
+ 'value' => ' 4'
+ },
+ 'Dw' => {
+ 'value' => 'PORT_WIDTH'
+ }
+ },
+ 'parameters_order' => [
+ 'PORT_WIDTH',
+ 'Aw',
+ 'TAGw',
+ 'SELw',
+ 'Dw'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'gpo',
+ 'category' => 'GPIO',
+ 'module' => 'gpo'
+ },
+ 'lm320' => {
+ 'instance_name' => 'lm32',
+ 'plugs' => {
+ 'wb_master' => {
+ 'connection_num' => undef,
+ 'value' => 2,
+ 'type' => 'num',
+ 'nums' => {
+ '1' => {
+ 'connect_id' => 'wishbone_bus0',
+ 'connect_socket_num' => '2',
+ 'name' => 'dwb',
+ 'connect_socket' => 'wb_master'
+ },
+ '0' => {
+ 'connect_id' => 'wishbone_bus0',
+ 'connect_socket_num' => '1',
+ 'name' => 'iwb',
+ 'connect_socket' => 'wb_master'
+ }
+ }
+ },
+ 'enable' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'IO',
+ 'connect_socket_num' => undef,
+ 'name' => 'enable',
+ 'connect_socket' => undef
+ }
+ }
+ },
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ }
+ }
+ },
+ 'parameters' => {
+ 'CFG_PL_BARREL_SHIFT' => {
+ 'value' => '"ENABLED"'
+ },
+ 'CFG_SIGN_EXTEND' => {
+ 'value' => '"ENABLED"'
+ },
+ 'CFG_PL_MULTIPLY' => {
+ 'value' => '"ENABLED"'
+ },
+ 'INTR_NUM' => {
+ 'value' => '32'
+ },
+ 'CFG_MC_DIVIDE' => {
+ 'value' => '"DISABLED"'
+ }
+ },
+ 'lm320' => {},
+ 'parameters_order' => [
+ 'INTR_NUM',
+ 'CFG_PL_MULTIPLY',
+ 'CFG_PL_BARREL_SHIFT',
+ 'CFG_SIGN_EXTEND',
+ 'CFG_MC_DIVIDE'
+ ],
+ 'sockets' => {
+ 'interrupt_peripheral' => {
+ 'connection_num' => 'single connection',
+ 'value' => 'INTR_NUM',
+ 'type' => 'param',
+ 'nums' => {
+ '0' => {
+ 'name' => 'interrupt_peripheral'
+ }
+ }
+ }
+ },
+ 'module_name' => 'lm32',
+ 'category' => 'Processor',
+ 'module' => 'lm32'
+ },
+ 'clk_source0' => {
+ 'instance_name' => 'source',
+ 'plugs' => {
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'IO',
+ 'connect_socket_num' => undef,
+ 'name' => 'clk',
+ 'connect_socket' => undef
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'IO',
+ 'connect_socket_num' => undef,
+ 'name' => 'reset',
+ 'connect_socket' => undef
+ }
+ }
+ }
+ },
+ 'parameters' => {},
+ 'clk_source0' => {},
+ 'parameters_order' => [],
+ 'sockets' => {
+ 'clk' => {
+ 'connection_num' => 'multi connection',
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'name' => 'clk'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => 'multi connection',
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'name' => 'reset'
+ }
+ }
+ }
+ },
+ 'module_name' => 'clk_source',
+ 'category' => 'Source',
+ 'module' => 'clk_source'
+ },
+ 'ext_int0' => {
+ 'instance_name' => 'ext_int',
+ 'plugs' => {
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ }
+ },
+ 'interrupt_peripheral' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'lm320',
+ 'connect_socket_num' => '0',
+ 'name' => 'interrupt',
+ 'connect_socket' => 'interrupt_peripheral'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ }
+ },
+ 'wb_slave' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '2',
+ 'width' => 5,
+ 'base' => 2650800128,
+ 'name' => 'wb',
+ 'connect_socket' => 'wb_slave',
+ 'end' => 2650800159,
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0x9e00_0000 0x9eff_ffff IDE Controller'
+ }
+ }
+ }
+ },
+ 'parameters' => {
+ 'Aw' => {
+ 'value' => '3'
+ },
+ 'SELw' => {
+ 'value' => '4'
+ },
+ 'TAGw' => {
+ 'value' => '3'
+ },
+ 'Dw' => {
+ 'value' => '32'
+ },
+ 'EXT_INT_NUM' => {
+ 'value' => 2
+ }
+ },
+ 'ext_int0' => {},
+ 'parameters_order' => [
+ 'Dw',
+ 'Aw',
+ 'TAGw',
+ 'SELw',
+ 'EXT_INT_NUM'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'ext_int',
+ 'category' => 'Interrupt',
+ 'module' => 'ext_int'
+ },
+ 'jtag_wb0' => {
+ 'instance_name' => 'jtag_wb',
+ 'plugs' => {
+ 'wb_master' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'wishbone_bus0',
+ 'connect_socket_num' => '0',
+ 'name' => 'wbm',
+ 'connect_socket' => 'wb_master'
+ }
+ }
+ },
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ }
+ }
+ },
+ 'parameters' => {
+ 'AW' => {
+ 'value' => '32'
+ },
+ 'SELw' => {
+ 'value' => ' 4'
+ },
+ 'TAGw' => {
+ 'value' => ' 3'
+ },
+ 'VJTAG_INDEX' => {
+ 'value' => 'CORE_ID'
+ },
+ 'DW' => {
+ 'value' => '32'
+ },
+ 'M_Aw' => {
+ 'value' => ' 32'
+ },
+ 'S_Aw' => {
+ 'value' => ' 7'
+ }
+ },
+ 'parameters_order' => [
+ 'DW',
+ 'AW',
+ 'S_Aw',
+ 'M_Aw',
+ 'TAGw',
+ 'SELw',
+ 'VJTAG_INDEX'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'vjtag_wb',
+ 'jtag_wb0' => {},
+ 'category' => 'JTAG',
+ 'module' => 'jtag_wb'
+ },
+ 'timer0' => {
+ 'instance_name' => 'timer',
+ 'plugs' => {
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'interrupt_peripheral' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '1',
+ 'connect_id' => 'lm320',
+ 'name' => 'interrupt_peripheral',
+ 'connect_socket' => 'interrupt_peripheral'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ },
+ 'type' => 'num'
+ },
+ 'wb_slave' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'base' => 2516582400,
+ 'width' => 5,
+ 'connect_socket_num' => '3',
+ 'name' => 'wb',
+ 'end' => 2516582431,
+ 'connect_socket' => 'wb_slave',
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0x9600_0000 0x96ff_ffff PWM/Timer/Counter Ctrl'
+ }
+ },
+ 'type' => 'num'
+ }
+ },
+ 'parameters' => {
+ 'Aw' => {
+ 'value' => ' 3'
+ },
+ 'TAGw' => {
+ 'value' => '3'
+ },
+ 'SELw' => {
+ 'value' => ' 4'
+ },
+ 'Dw' => {
+ 'value' => ' 32'
+ },
+ 'CNTw' => {
+ 'value' => '32 '
+ }
+ },
+ 'parameters_order' => [
+ 'CNTw',
+ 'Dw',
+ 'Aw',
+ 'TAGw',
+ 'SELw'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'timer',
+ 'category' => 'Timer',
+ 'module' => 'timer',
+ 'timer0' => {}
+ }
+ },
+ 'instance_order' => [
+ 'clk_source0',
+ 'wishbone_bus0',
+ 'gpo0',
+ 'gpo1',
+ 'ext_int0',
+ 'timer0',
+ 'jtag_wb0',
+ 'lm320',
+ 'dual_port_ram0'
+ ],
+ 'modules' => {},
+ 'gui_status' => {
+ 'status' => 'ideal',
+ 'timeout' => 0
+ },
+ 'global_param' => {
+ 'CORE_ID' => 0
+ }
+ }, 'soc' );
mpsoc/perl_gui/lib/soc/Tutorial_lm32.SOC
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/perl_gui/lib/soc/lm32_tile.SOC
===================================================================
--- mpsoc/perl_gui/lib/soc/lm32_tile.SOC (revision 27)
+++ mpsoc/perl_gui/lib/soc/lm32_tile.SOC (revision 28)
@@ -1,480 +1,232 @@
-$lm32_tile = bless( {
- 'hdl_files' => undef,
- 'modules' => {},
- 'soc_name' => 'lm32_tile',
- 'top_ip' => bless( {
- 'ports' => {
- 'ni_flit_out_wr' => {
- 'intfc_port' => 'flit_out_wr',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => '',
- 'type' => 'output'
- },
- 'ni_current_x' => {
- 'intfc_port' => 'current_x',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Xw-1 : 0',
- 'type' => 'input'
- },
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'intfc_name' => 'plug:clk[0]',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- },
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'intfc_name' => 'IO',
- 'instance_name' => 'gpo0',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- },
- 'ni_flit_out' => {
- 'intfc_port' => 'flit_out',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'output'
- },
- 'ni_current_y' => {
- 'intfc_port' => 'current_y',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Yw-1 : 0',
- 'type' => 'input'
- },
- 'ni_credit_out' => {
- 'intfc_port' => 'credit_out',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_V-1: 0',
- 'type' => 'output'
- },
- 'ni_flit_in_wr' => {
- 'intfc_port' => 'flit_in_wr',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => '',
- 'type' => 'input'
- },
- 'ni_credit_in' => {
- 'intfc_port' => 'credit_in',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_V-1 : 0',
- 'type' => 'input'
- },
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'intfc_name' => 'plug:reset[0]',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- },
- 'ni_flit_in' => {
- 'intfc_port' => 'flit_in',
- 'intfc_name' => 'socket:ni[0]',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'input'
- }
- },
- 'interface' => {
- 'socket:ni[0]' => {
- 'ports' => {
- 'ni_flit_out_wr' => {
- 'intfc_port' => 'flit_out_wr',
- 'instance_name' => 'ni0',
- 'range' => '',
- 'type' => 'output'
- },
- 'ni_current_x' => {
- 'intfc_port' => 'current_x',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Xw-1 : 0',
- 'type' => 'input'
- },
- 'ni_current_y' => {
- 'intfc_port' => 'current_y',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Yw-1 : 0',
- 'type' => 'input'
- },
- 'ni_flit_out' => {
- 'intfc_port' => 'flit_out',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'output'
- },
- 'ni_credit_out' => {
- 'intfc_port' => 'credit_out',
- 'instance_name' => 'ni0',
- 'range' => 'ni_V-1: 0',
- 'type' => 'output'
- },
- 'ni_flit_in_wr' => {
- 'intfc_port' => 'flit_in_wr',
- 'instance_name' => 'ni0',
- 'range' => '',
- 'type' => 'input'
- },
- 'ni_credit_in' => {
- 'intfc_port' => 'credit_in',
- 'instance_name' => 'ni0',
- 'range' => 'ni_V-1 : 0',
- 'type' => 'input'
- },
- 'ni_flit_in' => {
- 'intfc_port' => 'flit_in',
- 'instance_name' => 'ni0',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'input'
- }
+#######################################################################
+## File: lm32_tile.SOC
+##
+## Copyright (C) 2014-2016 Alireza Monemi
+##
+## This file is part of ProNoC 1.5.0
+##
+## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT
+## MAY CAUSE UNEXPECTED BEHAIVOR.
+################################################################################
+
+$soc = bless( {
+ 'hdl_files' => undef,
+ 'soc_name' => 'lm32_tile',
+ 'instances' => {
+ 'single_port_ram0' => {
+ 'single_port_ram0' => {},
+ 'instance_name' => 'ram',
+ 'plugs' => {
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
}
- },
- 'IO' => {
- 'ports' => {
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'instance_name' => 'gpo0',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- }
- }
- },
- 'plug:clk[0]' => {
- 'ports' => {
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- }
- }
- },
- 'plug:reset[0]' => {
- 'ports' => {
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'instance_name' => 'clk_source0',
- 'range' => '',
- 'type' => 'input'
- }
- }
- }
- },
- 'instance_ids' => {
- 'lm320' => {
- 'module_name' => 'lm32',
- 'category' => 'Processor',
- 'instance' => 'lm32',
- 'module' => 'lm32'
- },
- 'clk_source0' => {
- 'ports' => {
- 'ss_reset_in' => {
- 'intfc_port' => 'reset_i',
- 'intfc_name' => 'plug:reset[0]',
- 'range' => '',
- 'type' => 'input'
- },
- 'ss_clk_in' => {
- 'intfc_port' => 'clk_i',
- 'intfc_name' => 'plug:clk[0]',
- 'range' => '',
- 'type' => 'input'
- }
- },
- 'module_name' => 'clk_source',
- 'category' => 'source',
- 'instance' => 'ss',
- 'module' => 'clk_source'
- },
- 'gpo0' => {
- 'parameters' => {
- 'led_PORT_WIDTH' => {
- 'info' => 'output port width',
- 'deafult' => ' 1',
- 'global_param' => 1,
- 'content' => '1,32,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- }
- },
- 'ports' => {
- 'led_port_o' => {
- 'intfc_port' => 'IO',
- 'intfc_name' => 'IO',
- 'range' => 'led_PORT_WIDTH-1 : 0',
- 'type' => 'output'
- }
- },
- 'module_name' => 'gpo',
- 'category' => 'GPI',
- 'instance' => 'led',
- 'module' => 'gpo'
- },
- 'wishbone_bus0' => {
- 'module_name' => 'wishbone_bus',
- 'category' => 'bus',
- 'instance' => 'bus',
- 'module' => 'wishbone_bus'
- },
- 'ni0' => {
- 'parameters' => {
- 'ni_TOPOLOGY' => {
- 'info' => undef,
- 'deafult' => '"MESH"',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_Fpay' => {
- 'info' => undef,
- 'deafult' => ' 32',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_NX' => {
- 'info' => undef,
- 'deafult' => ' 2',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_NY' => {
- 'info' => undef,
- 'deafult' => ' 2',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_B' => {
- 'info' => undef,
- 'deafult' => ' 4',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_V' => {
- 'info' => undef,
- 'deafult' => ' 4',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_ROUTE_TYPE' => {
- 'info' => undef,
- 'deafult' => '"DETERMINISTIC"',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_P' => {
- 'info' => undef,
- 'deafult' => ' 5',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_DEBUG_EN' => {
- 'info' => undef,
- 'deafult' => '0',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- },
- 'ni_ROUTE_NAME' => {
- 'info' => undef,
- 'deafult' => '"XY"',
- 'global_param' => 1,
- 'content' => '',
- 'redefine_param' => 1,
- 'type' => 'Fixed'
- }
- },
- 'ports' => {
- 'ni_flit_out_wr' => {
- 'intfc_port' => 'flit_out_wr',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => '',
- 'type' => 'output'
- },
- 'ni_current_x' => {
- 'intfc_port' => 'current_x',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_Xw-1 : 0',
- 'type' => 'input'
- },
- 'ni_current_y' => {
- 'intfc_port' => 'current_y',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_Yw-1 : 0',
- 'type' => 'input'
- },
- 'ni_flit_out' => {
- 'intfc_port' => 'flit_out',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'output'
- },
- 'ni_credit_out' => {
- 'intfc_port' => 'credit_out',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_V-1: 0',
- 'type' => 'output'
- },
- 'ni_flit_in_wr' => {
- 'intfc_port' => 'flit_in_wr',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => '',
- 'type' => 'input'
- },
- 'ni_credit_in' => {
- 'intfc_port' => 'credit_in',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_V-1 : 0',
- 'type' => 'input'
- },
- 'ni_flit_in' => {
- 'intfc_port' => 'flit_in',
- 'intfc_name' => 'socket:ni[0]',
- 'range' => 'ni_Fw-1 : 0',
- 'type' => 'input'
- }
- },
- 'module_name' => 'ni',
- 'category' => 'NoC',
- 'instance' => 'ni',
- 'module' => 'ni'
- },
- 'Altera_single_port_ram0' => {
- 'parameters' => {
- 'ram_Dw' => {
- 'info' => undef,
- 'deafult' => '32',
- 'global_param' => 1,
- 'content' => '8,1024,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- },
- 'ram_Aw' => {
- 'info' => undef,
- 'deafult' => 12,
- 'global_param' => 1,
- 'content' => '4,31,1',
- 'redefine_param' => 1,
- 'type' => 'Spin-button'
- }
- },
- 'module_name' => 'Altera_single_port_ram',
- 'category' => 'RAM',
- 'instance' => 'ram',
- 'module' => 'Altera_single_port_ram'
- },
- 'timer0' => {
- 'module_name' => 'timer',
- 'category' => 'TIM',
- 'instance' => 'timer',
- 'module' => 'timer'
- }
- }
- }, 'ip_gen' ),
- 'instances' => {
- 'clk_source0' => {
- 'instance_name' => 'ss',
- 'plugs' => {
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => undef,
- 'connect_id' => 'IO',
- 'name' => 'reset',
- 'connect_socket' => undef
- }
- }
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'IO',
- 'connect_socket_num' => undef,
- 'name' => 'clk',
- 'connect_socket' => undef
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {},
- 'parameters_order' => [],
- 'clk_source0' => {},
- 'sockets' => {
- 'clk' => {
- 'connection_num' => 'multi connection',
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'name' => 'clk'
- }
- },
- 'type' => 'num'
- },
- 'reset' => {
- 'connection_num' => 'multi connection',
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ }
+ },
+ 'wb_slave' => {
+ 'connection_num' => undef,
'value' => 1,
'type' => 'num',
'nums' => {
'0' => {
- 'name' => 'reset'
+ 'connect_socket_num' => '0',
+ 'width' => 'WB_Aw',
+ 'base' => 0,
+ 'name' => 'wb',
+ 'connect_socket' => 'wb_slave',
+ 'end' => 16383,
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0x0000_0000 0x3fff_ffff RAM'
}
}
}
+ },
+ 'parameters' => {
+ 'SELw' => {
+ 'value' => 'Dw/8'
+ },
+ 'Dw' => {
+ 'value' => '32'
+ },
+ 'BTEw' => {
+ 'value' => '2'
+ },
+ 'WB_Aw' => {
+ 'value' => 'Aw+2'
+ },
+ 'Aw' => {
+ 'value' => '12'
+ },
+ 'TAGw' => {
+ 'value' => '3'
+ },
+ 'JTAG_INDEX' => {
+ 'value' => 'CORE_ID'
+ },
+ 'BURST_MODE' => {
+ 'value' => '"ENABLED"'
+ },
+ 'JTAG_CONNECT' => {
+ 'value' => '"DISABLED"'
+ },
+ 'BYTE_WR_EN' => {
+ 'value' => '"YES"'
+ },
+ 'INIT_FILE_NAME' => {
+ 'value' => '"ram0"'
+ },
+ 'CTIw' => {
+ 'value' => '3'
+ },
+ 'FPGA_VENDOR' => {
+ 'value' => '"ALTERA"'
+ }
+ },
+ 'parameters_order' => [
+ 'Dw',
+ 'Aw',
+ 'BYTE_WR_EN',
+ 'FPGA_VENDOR',
+ 'JTAG_CONNECT',
+ 'JTAG_INDEX',
+ 'TAGw',
+ 'SELw',
+ 'CTIw',
+ 'BTEw',
+ 'WB_Aw',
+ 'BURST_MODE'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'wb_single_port_ram',
+ 'category' => 'RAM',
+ 'module' => 'single_port_ram'
+ },
+ 'lm320' => {
+ 'instance_name' => 'cpu',
+ 'plugs' => {
+ 'wb_master' => {
+ 'connection_num' => undef,
+ 'value' => 2,
+ 'type' => 'num',
+ 'nums' => {
+ '1' => {
+ 'connect_id' => 'wishbone_bus0',
+ 'connect_socket_num' => '1',
+ 'name' => 'dwb',
+ 'connect_socket' => 'wb_master'
+ },
+ '0' => {
+ 'connect_id' => 'wishbone_bus0',
+ 'connect_socket_num' => '0',
+ 'name' => 'iwb',
+ 'connect_socket' => 'wb_master'
+ }
+ }
+ },
+ 'enable' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'IO',
+ 'connect_socket_num' => undef,
+ 'name' => 'enable',
+ 'connect_socket' => undef
+ }
+ }
},
- 'module_name' => 'clk_source',
- 'category' => 'source',
- 'module' => 'clk_source'
- },
- 'lm320' => {
- 'instance_name' => 'lm32',
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ }
+ }
+ },
+ 'parameters' => {
+ 'CFG_PL_BARREL_SHIFT' => {
+ 'value' => '"ENABLED"'
+ },
+ 'CFG_SIGN_EXTEND' => {
+ 'value' => '"ENABLED"'
+ },
+ 'CFG_PL_MULTIPLY' => {
+ 'value' => '"ENABLED"'
+ },
+ 'INTR_NUM' => {
+ 'value' => '32'
+ },
+ 'CFG_MC_DIVIDE' => {
+ 'value' => '"DISABLED"'
+ }
+ },
+ 'lm320' => {},
+ 'parameters_order' => [
+ 'INTR_NUM',
+ 'CFG_PL_MULTIPLY',
+ 'CFG_PL_BARREL_SHIFT',
+ 'CFG_SIGN_EXTEND',
+ 'CFG_MC_DIVIDE'
+ ],
+ 'sockets' => {
+ 'interrupt_peripheral' => {
+ 'connection_num' => 'single connection',
+ 'value' => 'INTR_NUM',
+ 'type' => 'param',
+ 'nums' => {
+ '0' => {
+ 'name' => 'interrupt_peripheral'
+ }
+ }
+ }
+ },
+ 'module_name' => 'lm32',
+ 'category' => 'Processor',
+ 'module' => 'lm32'
+ },
+ 'clk_source0' => {
+ 'instance_name' => 'ss',
'plugs' => {
- 'wb_master' => {
- 'connection_num' => undef,
- 'value' => 2,
- 'type' => 'num',
- 'nums' => {
- '1' => {
- 'connect_id' => 'wishbone_bus0',
- 'connect_socket_num' => '1',
- 'name' => 'dwb',
- 'connect_socket' => 'wb_master'
- },
- '0' => {
- 'connect_id' => 'wishbone_bus0',
- 'connect_socket_num' => '0',
- 'name' => 'iwb',
- 'connect_socket' => 'wb_master'
- }
- }
- },
'clk' => {
'connection_num' => undef,
'value' => 1,
@@ -481,10 +233,10 @@
'type' => 'num',
'nums' => {
'0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
+ 'connect_id' => 'IO',
+ 'connect_socket_num' => undef,
'name' => 'clk',
- 'connect_socket' => 'clk'
+ 'connect_socket' => undef
}
}
},
@@ -494,601 +246,914 @@
'type' => 'num',
'nums' => {
'0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
+ 'connect_id' => 'IO',
+ 'connect_socket_num' => undef,
'name' => 'reset',
- 'connect_socket' => 'reset'
+ 'connect_socket' => undef
}
}
}
},
- 'parameters' => {
- 'CFG_PL_BARREL_SHIFT' => {
- 'value' => '"ENABLED"'
- },
- 'CFG_SIGN_EXTEND' => {
- 'value' => '"ENABLED"'
- },
- 'CFG_PL_MULTIPLY' => {
- 'value' => '"ENABLED"'
- },
- 'INTR_NUM' => {
- 'value' => '32'
- },
- 'CFG_MC_DIVIDE' => {
- 'value' => '"DISABLED"'
- }
- },
- 'lm320' => {},
- 'parameters_order' => [
- 'INTR_NUM',
- 'CFG_PL_MULTIPLY',
- 'CFG_PL_BARREL_SHIFT',
- 'CFG_SIGN_EXTEND',
- 'CFG_MC_DIVIDE'
- ],
+ 'parameters' => {},
+ 'clk_source0' => {},
+ 'parameters_order' => [],
'sockets' => {
- 'interrupt_peripheral' => {
- 'connection_num' => 'single connection',
- 'value' => 'INTR_NUM',
- 'type' => 'param',
- 'nums' => {
- '0' => {
- 'name' => 'interrupt_peripheral'
- }
- }
- }
+ 'clk' => {
+ 'connection_num' => 'multi connection',
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'name' => 'clk'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => 'multi connection',
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'name' => 'reset'
+ }
+ }
+ }
},
- 'module_name' => 'lm32',
- 'category' => 'Processor',
- 'module' => 'lm32'
+ 'module_name' => 'clk_source',
+ 'category' => 'Source',
+ 'module' => 'clk_source'
},
- 'gpo0' => {
- 'gpo0' => {},
- 'instance_name' => 'led',
- 'parameters' => {
- 'PORT_WIDTH' => {
- 'value' => ' 1'
- },
- 'Aw' => {
- 'value' => ' 2'
- },
- 'SELw' => {
- 'value' => ' 4'
+ 'gpo0' => {
+ 'gpo0' => {},
+ 'instance_name' => 'gpo',
+ 'plugs' => {
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ }
+ },
+ 'wb_slave' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '1',
+ 'width' => 5,
+ 'base' => 2432696320,
+ 'name' => 'wb',
+ 'connect_socket' => 'wb_slave',
+ 'end' => 2432696351,
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0x9100_0000 0x91ff_ffff General-Purpose I/O'
+ }
+ }
+ }
+ },
+ 'parameters' => {
+ 'PORT_WIDTH' => {
+ 'value' => ' 1'
},
- 'TAGw' => {
- 'value' => ' 3'
- },
- 'Dw' => {
- 'value' => ' 32'
- }
- },
- 'plugs' => {
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- }
+ 'Aw' => {
+ 'value' => ' 2'
+ },
+ 'SELw' => {
+ 'value' => ' 4'
},
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- },
- 'type' => 'num'
- },
- 'wb_slave' => {
+ 'TAGw' => {
+ 'value' => ' 3'
+ },
+ 'Dw' => {
+ 'value' => 'PORT_WIDTH'
+ }
+ },
+ 'parameters_order' => [
+ 'PORT_WIDTH',
+ 'Aw',
+ 'TAGw',
+ 'SELw',
+ 'Dw'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'gpo',
+ 'category' => 'GPIO',
+ 'module' => 'gpo'
+ },
+ 'wishbone_bus0' => {
+ 'wishbone_bus0' => {},
+ 'instance_name' => 'bus',
+ 'plugs' => {
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ }
+ },
+ 'reset' => {
'connection_num' => undef,
'value' => 1,
+ 'type' => 'num',
'nums' => {
'0' => {
- 'base' => 2432696320,
- 'width' => 5,
+ 'connect_id' => 'clk_source0',
'connect_socket_num' => '0',
- 'name' => 'wb',
- 'end' => 2432696351,
- 'connect_socket' => 'wb_slave',
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x9100_0000 0x91ff_ffff General-Purpose I/O'
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
}
- },
- 'type' => 'num'
+ }
}
- },
- 'parameters_order' => [
- 'PORT_WIDTH',
- 'Dw',
- 'Aw',
- 'TAGw',
- 'SELw'
- ],
- 'sockets' => {},
- 'module_name' => 'gpo',
- 'category' => 'GPI',
- 'module' => 'gpo'
- },
- 'ni0' => {
- 'instance_name' => 'ni',
- 'plugs' => {
- 'wb_master' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '2',
- 'connect_id' => 'wishbone_bus0',
- 'name' => 'wb_master',
- 'connect_socket' => 'wb_master'
- }
- },
- 'type' => 'num'
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
+ },
+ 'parameters' => {
+ 'S' => {
+ 'value' => 3
+ },
+ 'SELw' => {
+ 'value' => 'Dw/8'
+ },
+ 'Dw' => {
+ 'value' => '32'
+ },
+ 'BTEw' => {
+ 'value' => '2 '
+ },
+ 'Aw' => {
+ 'value' => '32'
+ },
+ 'M' => {
+ 'value' => 4
+ },
+ 'TAGw' => {
+ 'value' => '3'
+ },
+ 'CTIw' => {
+ 'value' => '3'
+ }
+ },
+ 'parameters_order' => [
+ 'M',
+ 'S',
+ 'Dw',
+ 'Aw',
+ 'SELw',
+ 'TAGw',
+ 'CTIw',
+ 'BTEw'
+ ],
+ 'sockets' => {
+ 'wb_master' => {
+ 'connection_num' => 'single connection',
+ 'value' => 'M',
+ 'type' => 'param',
+ 'nums' => {
+ '0' => {
+ 'name' => 'wb_master'
+ }
+ }
+ },
+ 'wb_addr_map' => {
+ 'connection_num' => 'single connection',
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'name' => 'wb_addr_map'
+ }
+ }
+ },
+ 'wb_slave' => {
+ 'connection_num' => 'single connection',
+ 'value' => 'S',
+ 'type' => 'param',
+ 'nums' => {
+ '0' => {
+ 'name' => 'wb_slave'
+ }
}
- },
- 'type' => 'num'
- },
- 'interrupt_peripheral' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'lm320',
- 'name' => 'int_peripheral',
- 'connect_socket' => 'interrupt_peripheral'
- }
- },
- 'type' => 'num'
- },
- 'clk' => {
+ }
+ },
+ 'module_name' => 'wishbone_bus',
+ 'category' => 'Bus',
+ 'module' => 'wishbone_bus'
+ },
+ 'ni0' => {
+ 'instance_name' => 'ni',
+ 'plugs' => {
+ 'wb_master' => {
'connection_num' => undef,
'value' => 1,
+ 'type' => 'num',
'nums' => {
'0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
+ 'connect_id' => 'wishbone_bus0',
+ 'connect_socket_num' => '2',
+ 'name' => 'wb_master',
+ 'connect_socket' => 'wb_master'
}
+ }
+ },
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ }
+ },
+ 'interrupt_peripheral' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'lm320',
+ 'connect_socket_num' => '0',
+ 'name' => 'int_peripheral',
+ 'connect_socket' => 'interrupt_peripheral'
+ }
+ }
+ },
+ 'reset' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_id' => 'clk_source0',
+ 'connect_socket_num' => '0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
+ }
+ }
+ },
+ 'wb_slave' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '2',
+ 'width' => 9,
+ 'base' => 3087007744,
+ 'name' => 'wb_slave',
+ 'connect_socket' => 'wb_slave',
+ 'end' => 3087008255,
+ 'connect_id' => 'wishbone_bus0',
+ 'addr' => '0xb800_0000 0xbfff_ffff custom devices'
+ }
+ }
+ }
+ },
+ 'parameters' => {
+ 'Dw' => {
+ 'value' => ' 32'
+ },
+ 'DEBUG_EN' => {
+ 'value' => '0'
+ },
+ 'NY' => {
+ 'value' => ' 2'
+ },
+ 'NX' => {
+ 'value' => ' 2'
+ },
+ 'V' => {
+ 'value' => ' 4'
+ },
+ 'CONGESTION_INDEX' => {
+ 'value' => '3'
},
- 'type' => 'num'
+ 'COMB_PCK_SIZE_W' => {
+ 'value' => '12'
+ },
+ 'Fw' => {
+ 'value' => '2+V+Fpay'
+ },
+ 'TAGw' => {
+ 'value' => '3'
},
- 'wb_slave' => {
+ 'COMB_MEM_PTR_W' => {
+ 'value' => '20'
+ },
+ 'M_Aw' => {
+ 'value' => '32'
+ },
+ 'ROUTE_NAME' => {
+ 'value' => '"XY"'
+ },
+ 'Xw ' => {
+ 'value' => 'log2(NX)'
+ },
+ 'Fpay' => {
+ 'value' => ' 32'
+ },
+ 'ROUTE_TYPE' => {
+ 'value' => '"DETERMINISTIC"'
+ },
+ 'SELw' => {
+ 'value' => '4 '
+ },
+ 'P' => {
+ 'value' => ' 5'
+ },
+ 'B' => {
+ 'value' => ' 4'
+ },
+ 'S_Aw' => {
+ 'value' => '7'
+ },
+ 'TOPOLOGY' => {
+ 'value' => '"MESH"'
+ },
+ 'Xw' => {
+ 'value' => 'log2(NX)'
+ },
+ 'Yw' => {
+ 'value' => 'log2(NY)'
+ },
+ 'SSA_EN' => {
+ 'value' => '"NO"'
+ },
+ 'Xwj' => {
+ 'value' => 'fvf'
+ }
+ },
+ 'parameters_order' => [
+ 'V',
+ 'B',
+ 'NX',
+ 'NY',
+ 'Fpay',
+ 'TOPOLOGY',
+ 'ROUTE_NAME',
+ 'DEBUG_EN',
+ 'COMB_MEM_PTR_W',
+ 'COMB_PCK_SIZE_W',
+ 'Dw',
+ 'S_Aw',
+ 'M_Aw',
+ 'TAGw',
+ 'SELw',
+ 'Yw',
+ 'Fw',
+ 'Xw'
+ ],
+ 'sockets' => {
+ 'ni' => {
+ 'connection_num' => 'single connection',
+ 'value' => 1,
+ 'type' => 'num',
+ 'nums' => {
+ '0' => {
+ 'name' => 'ni'
+ }
+ }
+ }
+ },
+ 'ni0' => {},
+ 'module_name' => 'ni',
+ 'category' => 'NoC',
+ 'module' => 'ni'
+ },
+ 'jtag_wb0' => {
+ 'instance_name' => 'jtag_wb0',
+ 'plugs' => {
+ 'wb_master' => {
'connection_num' => undef,
'value' => 1,
'nums' => {
'0' => {
- 'base' => 3087007744,
- 'width' => 5,
- 'connect_socket_num' => '2',
- 'name' => 'wb_slave',
- 'end' => 3087007775,
- 'connect_socket' => 'wb_slave',
+ 'connect_socket_num' => '3',
'connect_id' => 'wishbone_bus0',
- 'addr' => '0xb800_0000 0xbfff_ffff custom devices'
+ 'name' => 'wbm',
+ 'connect_socket' => 'wb_master'
}
},
'type' => 'num'
- }
- },
- 'parameters' => {
- 'Dw' => {
- 'value' => ' 32'
- },
- 'NY' => {
- 'value' => ' 2'
- },
- 'DEBUG_EN' => {
- 'value' => '0'
- },
- 'NX' => {
- 'value' => ' 2'
- },
- 'V' => {
- 'value' => ' 4'
- },
- 'COMB_PCK_SIZE_W' => {
- 'value' => '12'
- },
- 'Fw' => {
- 'value' => '2+V+Fpay'
- },
- 'TAGw' => {
- 'value' => '3'
- },
- 'COMB_MEM_PTR_W' => {
- 'value' => '20'
- },
- 'M_Aw' => {
- 'value' => '32'
- },
- 'ROUTE_NAME' => {
- 'value' => '"XY"'
- },
- 'Xw ' => {
- 'value' => 'log2(NX)'
- },
- 'Fpay' => {
- 'value' => ' 32'
- },
- 'ROUTE_TYPE' => {
- 'value' => '"DETERMINISTIC"'
- },
- 'SELw' => {
- 'value' => '4 '
- },
- 'P' => {
- 'value' => ' 5'
- },
- 'B' => {
- 'value' => ' 4'
- },
- 'Xw' => {
- 'value' => 'log2(NX)'
- },
- 'TOPOLOGY' => {
- 'value' => '"MESH"'
- },
- 'S_Aw' => {
- 'value' => ' 3'
- },
- 'Yw' => {
- 'value' => 'log2(NY)'
- },
- 'Xwj' => {
- 'value' => 'fvf'
- }
- },
- 'parameters_order' => [
- 'V',
- 'P',
- 'B',
- 'NX',
- 'NY',
- 'Fpay',
- 'TOPOLOGY',
- 'ROUTE_TYPE',
- 'ROUTE_NAME',
- 'DEBUG_EN',
- 'COMB_MEM_PTR_W',
- 'COMB_PCK_SIZE_W',
- 'Dw',
- 'S_Aw',
- 'M_Aw',
- 'TAGw',
- 'SELw',
- 'Yw',
- 'Fw',
- 'Xw'
- ],
- 'sockets' => {
- 'ni' => {
- 'connection_num' => 'single connection',
+ },
+ 'reset' => {
+ 'connection_num' => undef,
'value' => 1,
'nums' => {
'0' => {
- 'name' => 'ni'
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'reset',
+ 'connect_socket' => 'reset'
}
},
'type' => 'num'
- }
- },
- 'module_name' => 'ni',
- 'category' => 'NoC',
- 'module' => 'ni'
+ },
+ 'clk' => {
+ 'connection_num' => undef,
+ 'value' => 1,
+ 'nums' => {
+ '0' => {
+ 'connect_socket_num' => '0',
+ 'connect_id' => 'clk_source0',
+ 'name' => 'clk',
+ 'connect_socket' => 'clk'
+ }
+ },
+ 'type' => 'num'
+ }
+ },
+ 'parameters' => {
+ 'AW' => {
+ 'value' => '32'
+ },
+ 'TAGw' => {
+ 'value' => ' 3'
+ },
+ 'SELw' => {
+ 'value' => ' 4'
+ },
+ 'VJTAG_INDEX' => {
+ 'value' => 'CORE_ID'
+ },
+ 'DW' => {
+ 'value' => '32'
+ },
+ 'S_Aw' => {
+ 'value' => ' 7'
+ },
+ 'M_Aw' => {
+ 'value' => ' 32'
+ }
+ },
+ 'parameters_order' => [
+ 'DW',
+ 'AW',
+ 'S_Aw',
+ 'M_Aw',
+ 'TAGw',
+ 'SELw',
+ 'VJTAG_INDEX'
+ ],
+ 'sockets' => {},
+ 'module_name' => 'vjtag_wb',
+ 'jtag_wb0' => {},
+ 'category' => 'JTAG',
+ 'module' => 'jtag_wb'
+ }
+ },
+ 'top_ip' => bless( {
+ 'ports' => {
+ 'ni_flit_out_wr' => {
+ 'intfc_port' => 'flit_out_wr',
+ 'intfc_name' => 'socket:ni[0]',
+ 'instance_name' => 'ni0',
+ 'range' => '',
+ 'type' => 'output'
+ },
+ 'ni_current_x' => {
+ 'intfc_port' => 'current_x',
+ 'intfc_name' => 'socket:ni[0]',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_Xw-1 : 0',
+ 'type' => 'input'
+ },
+ 'ss_clk_in' => {
+ 'intfc_port' => 'clk_i',
+ 'intfc_name' => 'plug:clk[0]',
+ 'instance_name' => 'clk_source0',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'cpu_en_i' => {
+ 'intfc_port' => 'enable_i',
+ 'intfc_name' => 'plug:enable[0]',
+ 'instance_name' => 'lm320',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'ni_flit_out' => {
+ 'intfc_port' => 'flit_out',
+ 'intfc_name' => 'socket:ni[0]',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_Fw-1 : 0',
+ 'type' => 'output'
+ },
+ 'ni_current_y' => {
+ 'intfc_port' => 'current_y',
+ 'intfc_name' => 'socket:ni[0]',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_Yw-1 : 0',
+ 'type' => 'input'
+ },
+ 'ni_credit_out' => {
+ 'intfc_port' => 'credit_out',
+ 'intfc_name' => 'socket:ni[0]',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_V-1: 0',
+ 'type' => 'output'
+ },
+ 'ni_flit_in_wr' => {
+ 'intfc_port' => 'flit_in_wr',
+ 'intfc_name' => 'socket:ni[0]',
+ 'instance_name' => 'ni0',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'gpo_port_o' => {
+ 'intfc_port' => 'IO',
+ 'intfc_name' => 'IO',
+ 'instance_name' => 'gpo0',
+ 'range' => 'gpo_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ },
+ 'ni_credit_in' => {
+ 'intfc_port' => 'credit_in',
+ 'intfc_name' => 'socket:ni[0]',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_V-1 : 0',
+ 'type' => 'input'
+ },
+ 'ss_reset_in' => {
+ 'intfc_port' => 'reset_i',
+ 'intfc_name' => 'plug:reset[0]',
+ 'instance_name' => 'clk_source0',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'ni_flit_in' => {
+ 'intfc_port' => 'flit_in',
+ 'intfc_name' => 'socket:ni[0]',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_Fw-1 : 0',
+ 'type' => 'input'
+ }
},
- 'wishbone_bus0' => {
- 'wishbone_bus0' => {},
- 'instance_name' => 'bus',
- 'parameters' => {
- 'S' => {
- 'value' => 4
- },
- 'SELw' => {
- 'value' => '4'
- },
- 'Dw' => {
- 'value' => '32'
- },
- 'BTEw' => {
- 'value' => '2 '
- },
- 'Aw' => {
- 'value' => '32'
- },
- 'M' => {
- 'value' => 3
- },
- 'TAGw' => {
- 'value' => '3 '
- },
- 'CTIw' => {
- 'value' => '3'
- }
- },
- 'plugs' => {
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
+ 'interface' => {
+ 'plug:enable[0]' => {
+ 'ports' => {
+ 'cpu_en_i' => {
+ 'intfc_port' => 'enable_i',
+ 'instance_name' => 'lm320',
+ 'range' => '',
+ 'type' => 'input'
}
- }
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- },
- 'type' => 'num'
+ }
+ },
+ 'socket:ni[0]' => {
+ 'ports' => {
+ 'ni_flit_out_wr' => {
+ 'intfc_port' => 'flit_out_wr',
+ 'instance_name' => 'ni0',
+ 'range' => '',
+ 'type' => 'output'
+ },
+ 'ni_current_x' => {
+ 'intfc_port' => 'current_x',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_Xw-1 : 0',
+ 'type' => 'input'
+ },
+ 'ni_current_y' => {
+ 'intfc_port' => 'current_y',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_Yw-1 : 0',
+ 'type' => 'input'
+ },
+ 'ni_flit_out' => {
+ 'intfc_port' => 'flit_out',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_Fw-1 : 0',
+ 'type' => 'output'
+ },
+ 'ni_credit_out' => {
+ 'intfc_port' => 'credit_out',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_V-1: 0',
+ 'type' => 'output'
+ },
+ 'ni_flit_in_wr' => {
+ 'intfc_port' => 'flit_in_wr',
+ 'instance_name' => 'ni0',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'ni_credit_in' => {
+ 'intfc_port' => 'credit_in',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_V-1 : 0',
+ 'type' => 'input'
+ },
+ 'ni_flit_in' => {
+ 'intfc_port' => 'flit_in',
+ 'instance_name' => 'ni0',
+ 'range' => 'ni_Fw-1 : 0',
+ 'type' => 'input'
+ }
+ }
+ },
+ 'IO' => {
+ 'ports' => {
+ 'gpo_port_o' => {
+ 'intfc_port' => 'IO',
+ 'instance_name' => 'gpo0',
+ 'range' => 'gpo_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ }
+ }
+ },
+ 'plug:clk[0]' => {
+ 'ports' => {
+ 'ss_clk_in' => {
+ 'intfc_port' => 'clk_i',
+ 'instance_name' => 'clk_source0',
+ 'range' => '',
+ 'type' => 'input'
+ }
}
},
- 'parameters_order' => [
- 'S',
- 'M',
- 'Aw',
- 'TAGw',
- 'SELw',
- 'Dw',
- 'CTIw',
- 'BTEw'
- ],
- 'sockets' => {
- 'wb_master' => {
- 'connection_num' => 'single connection',
- 'value' => 'M',
- 'nums' => {
- '0' => {
- 'name' => 'wb_master'
+ 'plug:reset[0]' => {
+ 'ports' => {
+ 'ss_reset_in' => {
+ 'intfc_port' => 'reset_i',
+ 'instance_name' => 'clk_source0',
+ 'range' => '',
+ 'type' => 'input'
+ }
+ }
+ }
+ },
+ 'instance_ids' => {
+ 'single_port_ram0' => {
+ 'parameters' => {
+ 'ram_Dw' => {
+ 'info' => 'Memory data width in Bits.',
+ 'deafult' => '32',
+ 'global_param' => 'Parameter',
+ 'content' => '8,1024,1',
+ 'redefine_param' => 1,
+ 'type' => 'Spin-button'
+ },
+ 'ram_Aw' => {
+ 'info' => 'Memory address width',
+ 'deafult' => '12',
+ 'global_param' => 'Parameter',
+ 'content' => '4,31,1',
+ 'redefine_param' => 1,
+ 'type' => 'Spin-button'
}
- },
- 'type' => 'param'
- },
- 'wb_addr_map' => {
- 'connection_num' => 'single connection',
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'name' => 'wb_addr_map'
- }
- }
- },
- 'wb_slave' => {
- 'connection_num' => 'single connection',
- 'value' => 'S',
- 'type' => 'param',
- 'nums' => {
- '0' => {
- 'name' => 'wb_slave'
- }
- }
- }
- },
- 'module_name' => 'wishbone_bus',
- 'category' => 'bus',
- 'module' => 'wishbone_bus'
- },
- 'Altera_single_port_ram0' => {
- 'instance_name' => 'ram',
- 'Altera_single_port_ram0' => {},
- 'plugs' => {
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '0',
- 'connect_id' => 'clk_source0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
+ },
+ 'module_name' => 'wb_single_port_ram',
+ 'category' => 'RAM',
+ 'instance' => 'ram',
+ 'module' => 'single_port_ram'
+ },
+ 'lm320' => {
+ 'ports' => {
+ 'cpu_en_i' => {
+ 'intfc_port' => 'enable_i',
+ 'intfc_name' => 'plug:enable[0]',
+ 'range' => '',
+ 'type' => 'input'
+ }
+ },
+ 'module_name' => 'lm32',
+ 'category' => 'Processor',
+ 'instance' => 'cpu',
+ 'module' => 'lm32'
+ },
+ 'clk_source0' => {
+ 'ports' => {
+ 'ss_reset_in' => {
+ 'intfc_port' => 'reset_i',
+ 'intfc_name' => 'plug:reset[0]',
+ 'range' => '',
+ 'type' => 'input'
},
- 'type' => 'num'
- },
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
+ 'ss_clk_in' => {
+ 'intfc_port' => 'clk_i',
+ 'intfc_name' => 'plug:clk[0]',
+ 'range' => '',
+ 'type' => 'input'
}
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '1',
- 'width' => 'WBAw',
- 'base' => 0,
- 'name' => 'wb_slave',
- 'end' => 16383,
- 'connect_socket' => 'wb_slave',
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x0000_0000 0x3fff_ffff RAM'
- }
- },
- 'type' => 'num'
- }
- },
- 'parameters' => {
- 'RAM_TAG_STRING' => {
- 'value' => 'i2s(CORE_ID)'
- },
- 'SELw' => {
- 'value' => '4'
- },
- 'Dw' => {
- 'value' => '32'
+ },
+ 'module_name' => 'clk_source',
+ 'category' => 'Source',
+ 'instance' => 'ss',
+ 'module' => 'clk_source'
+ },
+ 'gpo0' => {
+ 'parameters' => {
+ 'gpo_PORT_WIDTH' => {
+ 'info' => 'output port width',
+ 'deafult' => ' 1',
+ 'global_param' => 'Parameter',
+ 'content' => '1,32,1',
+ 'redefine_param' => 1,
+ 'type' => 'Spin-button'
+ }
+ },
+ 'ports' => {
+ 'gpo_port_o' => {
+ 'intfc_port' => 'IO',
+ 'intfc_name' => 'IO',
+ 'range' => 'gpo_PORT_WIDTH-1 : 0',
+ 'type' => 'output'
+ }
+ },
+ 'module_name' => 'gpo',
+ 'category' => 'GPIO',
+ 'instance' => 'gpo',
+ 'module' => 'gpo'
+ },
+ 'wishbone_bus0' => {
+ 'module_name' => 'wishbone_bus',
+ 'category' => 'Bus',
+ 'instance' => 'bus',
+ 'module' => 'wishbone_bus'
+ },
+ 'ni0' => {
+ 'parameters' => {
+ 'ni_TOPOLOGY' => {
+ 'info' => undef,
+ 'deafult' => '"MESH"',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Fixed'
+ },
+ 'ni_Fpay' => {
+ 'info' => undef,
+ 'deafult' => ' 32',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Fixed'
+ },
+ 'ni_NX' => {
+ 'info' => undef,
+ 'deafult' => ' 2',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Fixed'
+ },
+ 'ni_NY' => {
+ 'info' => undef,
+ 'deafult' => ' 2',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Fixed'
+ },
+ 'ni_B' => {
+ 'info' => '',
+ 'deafult' => ' 4',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Fixed'
},
- 'WBAw' => {
- 'value' => 'Aw+2'
- },
- 'BTEw' => {
- 'value' => '2'
- },
- 'Aw' => {
- 'value' => 12
+ 'ni_V' => {
+ 'info' => '',
+ 'deafult' => ' 4',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Fixed'
},
- 'TAGw' => {
- 'value' => '3'
+ 'ni_DEBUG_EN' => {
+ 'info' => undef,
+ 'deafult' => '0',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Fixed'
+ },
+ 'ni_ROUTE_NAME' => {
+ 'info' => undef,
+ 'deafult' => '"XY"',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Fixed'
+ }
+ },
+ 'ports' => {
+ 'ni_flit_out_wr' => {
+ 'intfc_port' => 'flit_out_wr',
+ 'intfc_name' => 'socket:ni[0]',
+ 'range' => '',
+ 'type' => 'output'
+ },
+ 'ni_current_x' => {
+ 'intfc_port' => 'current_x',
+ 'intfc_name' => 'socket:ni[0]',
+ 'range' => 'ni_Xw-1 : 0',
+ 'type' => 'input'
+ },
+ 'ni_current_y' => {
+ 'intfc_port' => 'current_y',
+ 'intfc_name' => 'socket:ni[0]',
+ 'range' => 'ni_Yw-1 : 0',
+ 'type' => 'input'
+ },
+ 'ni_flit_out' => {
+ 'intfc_port' => 'flit_out',
+ 'intfc_name' => 'socket:ni[0]',
+ 'range' => 'ni_Fw-1 : 0',
+ 'type' => 'output'
},
- 'CTIw' => {
- 'value' => '3'
- }
- },
- 'parameters_order' => [
- 'Dw',
- 'Aw',
- 'TAGw',
- 'SELw',
- 'CTIw',
- 'BTEw',
- 'RAM_TAG_STRING',
- 'WBAw'
- ],
- 'sockets' => {},
- 'module_name' => 'Altera_single_port_ram',
- 'category' => 'RAM',
- 'module' => 'Altera_single_port_ram'
- },
- 'timer0' => {
- 'instance_name' => 'timer',
- 'plugs' => {
- 'clk' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'clk',
- 'connect_socket' => 'clk'
- }
- }
- },
- 'interrupt_peripheral' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'lm320',
- 'connect_socket_num' => '1',
- 'name' => 'interrupt_peripheral',
- 'connect_socket' => 'interrupt_peripheral'
- }
- }
- },
- 'reset' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_id' => 'clk_source0',
- 'connect_socket_num' => '0',
- 'name' => 'reset',
- 'connect_socket' => 'reset'
- }
- }
- },
- 'wb_slave' => {
- 'connection_num' => undef,
- 'value' => 1,
- 'type' => 'num',
- 'nums' => {
- '0' => {
- 'connect_socket_num' => '3',
- 'width' => 5,
- 'base' => 2516582400,
- 'name' => 'wb',
- 'connect_socket' => 'wb_slave',
- 'end' => 2516582431,
- 'connect_id' => 'wishbone_bus0',
- 'addr' => '0x9600_0000 0x96ff_ffff PWM/Timer/Counter Ctrl'
- }
- }
- }
- },
- 'parameters' => {
- 'Aw' => {
- 'value' => ' 3'
+ 'ni_credit_out' => {
+ 'intfc_port' => 'credit_out',
+ 'intfc_name' => 'socket:ni[0]',
+ 'range' => 'ni_V-1: 0',
+ 'type' => 'output'
+ },
+ 'ni_flit_in_wr' => {
+ 'intfc_port' => 'flit_in_wr',
+ 'intfc_name' => 'socket:ni[0]',
+ 'range' => '',
+ 'type' => 'input'
+ },
+ 'ni_credit_in' => {
+ 'intfc_port' => 'credit_in',
+ 'intfc_name' => 'socket:ni[0]',
+ 'range' => 'ni_V-1 : 0',
+ 'type' => 'input'
+ },
+ 'ni_flit_in' => {
+ 'intfc_port' => 'flit_in',
+ 'intfc_name' => 'socket:ni[0]',
+ 'range' => 'ni_Fw-1 : 0',
+ 'type' => 'input'
+ }
},
- 'SELw' => {
- 'value' => ' 4'
- },
- 'TAGw' => {
- 'value' => '3'
- },
- 'CNTw' => {
- 'value' => '32 '
- },
- 'Dw' => {
- 'value' => ' 32'
- }
- },
- 'parameters_order' => [
- 'CNTw',
- 'Dw',
- 'Aw',
- 'TAGw',
- 'SELw'
- ],
- 'sockets' => {},
- 'module_name' => 'timer',
- 'category' => 'TIM',
- 'timer0' => {},
- 'module' => 'timer'
- }
- },
- 'instance_order' => [
- 'lm320',
- 'gpo0',
- 'clk_source0',
- 'wishbone_bus0',
- 'Altera_single_port_ram0',
- 'timer0',
- 'ni0'
- ]
- }, 'soc' );
+ 'module_name' => 'ni',
+ 'category' => 'NoC',
+ 'instance' => 'ni',
+ 'module' => 'ni'
+ },
+ 'jtag_wb0' => {
+ 'parameters' => {
+ 'jtag_wb0_VJTAG_INDEX' => {
+ 'info' => 'JTAG control host identifies each instance of this IP core by a unique index number. The default value is the tile ID number. You assign an index value between 0 to 255.',
+ 'deafult' => 'CORE_ID',
+ 'global_param' => 'Parameter',
+ 'content' => '',
+ 'redefine_param' => 1,
+ 'type' => 'Entry'
+ }
+ },
+ 'module_name' => 'vjtag_wb',
+ 'category' => 'JTAG',
+ 'instance' => 'jtag_wb0',
+ 'module' => 'jtag_wb'
+ }
+ }
+ }, 'ip_gen' ),
+ 'instance_order' => [
+ 'lm320',
+ 'single_port_ram0',
+ 'gpo0',
+ 'clk_source0',
+ 'wishbone_bus0',
+ 'ni0',
+ 'jtag_wb0'
+ ],
+ 'modules' => {},
+ 'gui_status' => {
+ 'status' => 'ideal',
+ 'timeout' => 0
+ },
+ 'global_param' => {
+ 'CORE_ID' => 3
+ }
+ }, 'soc' );
Index: mpsoc/script/foo
===================================================================
--- mpsoc/script/foo (revision 27)
+++ mpsoc/script/foo (nonexistent)
mpsoc/script/foo
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/script/Makefile
===================================================================
--- mpsoc/script/Makefile (revision 27)
+++ mpsoc/script/Makefile (revision 28)
@@ -1,26 +1,51 @@
-VERILATED_CPP = /usr/share/verilator/include/verilated.cpp
-VERILATED_INC = -I/usr/share/verilator/include
+# -*- Makefile -*-
+#*****************************************************************************
+#
+# DESCRIPTION: Verilator Example: Makefile for inside object directory
+#
+# This is executed in the object directory, and called by ../Makefile
+#
+# Copyright 2003-2014 by Wilson Snyder. This program is free software; you can
+# redistribute it and/or modify it under the terms of either the GNU
+# Lesser General Public License Version 3 or the Perl Artistic License
+# Version 2.0.
+#
+#*****************************************************************************
+
+default: sim
+
MUDULB = Vnoc
MUDULA = Vrouter
MUDULC = Vtraffic
-sim:
- #Compile your test code
- g++ -I. -L. $(VERILATED_INC) -o testbench testbench.cpp -l$(MUDULA) -l$(MUDULB) -l$(MUDULC) -Wall -O3
-
-
-lib:
- #Create object files
- g++ -c -I. $(VERILATED_INC) $(VERILATED_CPP) -O3
- g++ -c -I. $(VERILATED_INC) $(MUDULA).cpp $(MUDULA)__Syms.cpp -O3
- g++ -c -I. $(VERILATED_INC) $(MUDULB).cpp $(MUDULB)__Syms.cpp -O3
- g++ -c -I. $(VERILATED_INC) $(MUDULC).cpp $(MUDULC)__Syms.cpp -O3
- #Link object files into static library
- ar rcs lib$(MUDULA).a $(MUDULA).o $(MUDULA)__Syms.o verilated.o
- ar rcs lib$(MUDULB).a $(MUDULB).o $(MUDULB)__Syms.o
- ar rcs lib$(MUDULC).a $(MUDULC).o $(MUDULC)__Syms.o
- #Remove object files
- rm *.o
+include Vrouter.mk
+
+lib:
+ $(MAKE) -f $(MUDULA).mk
+ $(MAKE) -f $(MUDULB).mk
+ $(MAKE) -f $(MUDULC).mk
+
+
+#######################################################################
+# Compile flags
+
+CPPFLAGS += -DVL_DEBUG=1
+ifeq ($(CFG_WITH_CCWARN),yes) # Local... Else don't burden users
+CPPFLAGS += -DVL_THREADED=1
+CPPFLAGS += -W -Werror -Wall
+endif
+
+#######################################################################
+# Linking final exe -- presumes have a sim_main.cpp
+
+
+sim: testbench.o $(VK_GLOBAL_OBJS) $(MUDULB)__ALL.a $(MUDULA)__ALL.a $(MUDULC)__ALL.a
+ $(LINK) $(LDFLAGS) -g $^ $(LOADLIBES) $(LDLIBS) -o testbench $(LIBS) -Wall -O3 2>&1 | c++filt
+
+testbench.o: testbench.cpp $(MUDULA).h $(MUDULB).h $(MUDULC).h
+
clean:
rm *.o *.a main
+
+
/mpsoc/script/parameter.sh
11,7 → 11,8
|
# NoC parameters: |
V=2 # number of VC per port |
P=5 # number of port per router |
TOPOLOGY="MESH" #"MESH" or "TORUS" |
P="(TOPOLOGY==\"RING\")? 3 : 5" # number of port per router |
B=4 # buffer space :flit per VC |
NX=8 # number of node in x axis |
NY=8 # number of node in y axis |
21,7 → 22,7
VC_REALLOCATION_TYPE="NONATOMIC" # "ATOMIC" or "NONATOMIC" |
COMBINATION_TYPE="COMB_NONSPEC" # "BASELINE" or "COMB_SPEC1" or "COMB_SPEC2" or "COMB_NONSPEC" |
FIRST_ARBITER_EXT_P_EN=0 |
TOPOLOGY="MESH" #"MESH" or "TORUS" |
|
ROUTE_NAME="XY" # Routing algorithm |
# mesh : "XY" , "WEST_FIRST" , "NORTH_LAST" , "NEGETIVE_FIRST" , "DUATO" |
# torus: "TRANC_XY" , "TRANC_WEST_FIRST", "TRANC_NORTH_LAST", "TRANC_NEGETIVE_FIRST", "TRANC_DUATO" |
28,10 → 29,12
|
|
CLASS_SETTING="{CVw{1'b1}}" |
|
SSA_EN="NO" |
|
|
ADD_PIPREG_AFTER_CROSSBAR=0 |
ADD_PIPREG_BEFORE_CROSSBAR=0 |
|
#simulation parameters: |
C0_p=100 # the percentage of injected packets with class 0 |
C1_p=0 |
85,7 → 88,8
|
generate_parameter_v (){ |
printf " \`ifdef INCLUDE_PARAM \n\n" >> parameter.v |
printf " parameter V=$V;\n" >> parameter.v |
printf " parameter V=$V;\n" >> parameter.v |
printf " parameter TOPOLOGY=\"$TOPOLOGY\";\n" >> parameter.v |
printf " parameter P=$P;\n" >> parameter.v |
printf " parameter B=$B;\n" >> parameter.v |
printf " parameter NX=$NX;\n" >> parameter.v |
96,7 → 100,7
printf " parameter VC_REALLOCATION_TYPE=\"$VC_REALLOCATION_TYPE\";\n" >> parameter.v |
printf " parameter COMBINATION_TYPE=\"$COMBINATION_TYPE\";\n" >> parameter.v |
printf " parameter FIRST_ARBITER_EXT_P_EN=$FIRST_ARBITER_EXT_P_EN;\n" >> parameter.v |
printf " parameter TOPOLOGY=\"$TOPOLOGY\";\n" >> parameter.v |
|
printf " parameter ROUTE_NAME=\"$ROUTE_NAME\";\n" >> parameter.v |
printf " parameter CONGESTION_INDEX=$CONGESTION_INDEX;\n" >> parameter.v |
printf " parameter C0_p=$C0_p;\n" >> parameter.v |
122,10 → 126,10
printf " parameter AVC_ATOMIC_EN= $AVC_ATOMIC_EN;\n">> parameter.v |
printf " parameter AVG_LATENCY_METRIC= \"$AVG_LATENCY_METRIC\";\n">> parameter.v |
printf " parameter ADD_PIPREG_AFTER_CROSSBAR= $ADD_PIPREG_AFTER_CROSSBAR;\n" >> parameter.v |
printf " parameter ADD_PIPREG_BEFORE_CROSSBAR= $ADD_PIPREG_BEFORE_CROSSBAR;\n" >> parameter.v |
printf " parameter CVw=(C==0)? V : C * V;\n" >> parameter.v |
printf " parameter [CVw-1: 0] CLASS_SETTING = $CLASS_SETTING;\n">> parameter.v |
printf " parameter [V-1 : 0] ESCAP_VC_MASK=$ESCAP_VC_MASK;\n" >> parameter.v |
printf " parameter [V-1 : 0] ESCAP_VC_MASK=$ESCAP_VC_MASK;\n" >> parameter.v |
printf " parameter SSA_EN= \"$SSA_EN\";\n">> parameter.v |
printf " \n\n \`endif " >> parameter.v |
|
|
170,10 → 174,10
printf "\t #define STND_DEV_EN $STND_DEV_EN\n">> parameter.h |
printf "\t #define AVG_LATENCY_METRIC \"$AVG_LATENCY_METRIC\"\n">> parameter.h |
printf "\t #define ADD_PIPREG_AFTER_CROSSBAR $ADD_PIPREG_AFTER_CROSSBAR\n" >> parameter.h |
printf "\t #define ADD_PIPREG_BEFORE_CROSSBAR $ADD_PIPREG_BEFORE_CROSSBAR\n" >> parameter.h |
printf "\t #define CVw (C==0)? V : C * V\n" >> parameter.h |
printf "\t #define CLASS_SETTING \"$CLASS_SETTING\"\n">> parameter.h |
printf "\t #define ESCAP_VC_MASK $ESCAP_VC_MASK\n">> parameter.h |
printf "\t #define ESCAP_VC_MASK $ESCAP_VC_MASK\n">> parameter.h |
printf "\t #define SSA_EN \"$SSA_EN\"\n" >> parameter.h |
printf " \n\n #endif " >> parameter.h |
|
} |
/mpsoc/script/verilator_2D_mesh.sh
115,7 → 115,6
printf " parameter ROUTE_TYPE = (ROUTE_NAME == \"XY\" || ROUTE_NAME == \"TRANC_XY\" )? \"DETERMINISTIC\" : \n" >> parameter.v |
printf " (ROUTE_NAME == \"DUATO\" || ROUTE_NAME == \"TRANC_DUATO\" )? \"FULL_ADAPTIVE\": \"PAR_ADAPTIVE\"; \n" >> parameter.v |
printf " parameter ADD_PIPREG_AFTER_CROSSBAR= $ADD_PIPREG_AFTER_CROSSBAR;\n" >> parameter.v |
printf " parameter ADD_PIPREG_BEFORE_CROSSBAR= $ADD_PIPREG_BEFORE_CROSSBAR;\n" >> parameter.v |
printf " parameter CVw=(C==0)? V : C * V;\n" >> parameter.v |
printf " parameter [CVw-1: 0] CLASS_SETTING = $CLASS_SETTING;\n">> parameter.v |
printf " parameter [V-1 : 0] ESCAP_VC_MASK=$ESCAP_VC_MASK;\n" >> parameter.v |
156,7 → 155,6
printf "\t #define PACKET_SIZE $PACKET_SIZE\n" >> parameter.h |
printf "\t #define DEBUG_EN $DEBUG_EN \n" >> parameter.h |
printf "\t #define ADD_PIPREG_AFTER_CROSSBAR $ADD_PIPREG_AFTER_CROSSBAR\n" >> parameter.h |
printf "\t #define ADD_PIPREG_BEFORE_CROSSBAR $ADD_PIPREG_BEFORE_CROSSBAR\n" >> parameter.h |
printf "\t #define CVw (C==0)? V : C * V\n" >> parameter.h |
printf "\t #define CLASS_SETTING \"$CLASS_SETTING\"\n">> parameter.h |
printf "\t #define ESCAP_VC_MASK $ESCAP_VC_MASK\n">> parameter.h |
/mpsoc/script/verilator_compile_hw.sh
33,9 → 33,9
|
cd processed_rtl |
|
verilator --cc router_verilator.v --profile-cfuncs --prefix "Vrouter" -O3 |
verilator --cc noc_connection.sv --prefix "Vnoc" -O3 |
verilator --cc --profile-cfuncs traffic_gen_verilator.v --prefix "Vtraffic" -O3 |
verilator --cc router_verilator.v --profile-cfuncs --prefix "Vrouter" -O3 -CFLAGS -O3 |
verilator --cc noc_connection.sv --prefix "Vnoc" -O3 -CFLAGS -O3 |
verilator --cc --profile-cfuncs traffic_gen_verilator.v --prefix "Vtraffic" -O3 -CFLAGS -O3 |
|
|
cp $script_path/Makefile obj_dir/ |
/mpsoc/script/verilator_multiple/verilator_ssa.sh
0,0 → 1,304
#!/bin/sh |
set -e |
# Any subsequent commands which fail will cause the shell script to exit immediately |
|
my_dir="$(dirname "$0")" |
source "$my_dir/../parameter.sh" |
|
|
cd .. |
script_path=$(pwd) |
path=$script_path/.. |
comp_path=$path/../mpsoc_work/verilator |
work_path=$comp_path/work |
bin_path=$work_path/bin |
multiple_path=$work_path/ssa4 |
data_path=$multiple_path/data |
plot_path=$multiple_path/plot |
src_c_path=$path/src_c |
plot_c_path=$src_c_path/plot |
|
rm -Rf $multiple_path |
mkdir -p $data_path |
mkdir -p $plot_path |
|
#cp $path/src_c/plot/plot $multiple_path/plot_bin |
|
|
|
V=4 # number of VC per port |
B=5 # buffer space :flit per VC |
NX=8 # number of node in x axis |
NY=8 # number of node in y axis |
C=4 # number of flit class |
COMBINATION_TYPE="COMB_NONSPEC" # "BASELINE" or "COMB_SPEC1" or "COMB_SPEC2" or "COMB_NONSPEC" |
FIRST_ARBITER_EXT_P_EN=0 |
ROUTE_NAME="XY" |
CLASS_SETTING="16'b111111111111111" |
|
#simulation parameters: |
C0_p=25 # the percentage of injected packets with class 0 |
C1_p=25 |
C2_p=25 |
C3_p=25 |
|
|
|
# Simulation parameters: |
|
#Hotspot Traffic setting |
HOTSPOT_PERCENTAGE=3 #maximum 20 |
HOTSOPT_NUM=4 #maximum 5 |
HOTSPOT_CORE_1=$(CORE_NUM 2 2) |
HOTSPOT_CORE_2=$(CORE_NUM 2 6) |
HOTSPOT_CORE_3=$(CORE_NUM 6 2) |
HOTSPOT_CORE_4=$(CORE_NUM 6 6) |
|
|
|
|
|
MAX_PCK_NUM=256000 |
MAX_SIM_CLKs=100000 |
MAX_PCK_SIZ=10 # maximum flit number in a single packet |
|
|
|
|
ESCAP_VC_MASK="4'b0001" # mask scape vc |
DEBUG_EN=1 |
|
CONGESTION_INDEX=3 # 0: packets are routed to the ports with more available VCs |
# 1: packets are routed to the ports with more available credits |
# 2: packets are routed to the ports connected to the routers with less active ivc requests |
# 3: packets are routed to the ports connected to the routers with less active ivc requests that are not granted |
|
|
|
|
|
|
# |
|
AVC_ATOMIC_EN=0 |
STND_DEV_EN=0 # 1: generate standard devision |
TIMSTMP_FIFO_NUM=8 |
|
|
|
|
generate_plot_command(){ |
|
rm -f plot_command.h |
|
cat > plot_command.h << EOF |
#ifndef PLOT_COMMAND_H |
#define PLOT_COMMAND_H |
|
char * commandsForGnuplot[] = { |
"set terminal postscript eps enhanced color font 'Helvetica,15'", |
"set output 'temp.eps' ", |
"set style line 1 lc rgb \"red\" lt 1 lw 2 pt 4 ps 1.5", |
"set style line 2 lc rgb \"blue\" lt 1 lw 2 pt 6 ps 1.5", |
"set style line 3 lc rgb \"green\" lt 1 lw 2 pt 10 ps 1.5", |
"set style line 4 lc rgb '#8B008B' lt 1 lw 2 pt 14 ps 1.5",//darkmagenta |
"set style line 5 lc rgb '#B8860B' lt 1 lw 2 pt 2 ps 1.5", //darkgoldenrod |
"set style line 6 lc rgb \"gold\" lt 1 lw 2 pt 3 ps 1.5", |
"set style line 7 lc rgb '#FF8C00' lt 1 lw 2 pt 10 ps 1.5",//darkorange |
"set style line 8 lc rgb \"black\" lt 1 lw 2 pt 1 ps 1.5", |
"set style line 9 lc rgb \"spring-green\" lt 1 lw 2 pt 8 ps 1.5", |
"set style line 10 lc rgb \"yellow4\" lt 1 lw 2 pt 0 ps 1.5", |
"set yrange [0:45]", |
"set xrange [0:]", |
|
0 |
}; |
|
#endif |
|
EOF |
|
mv -f plot_command.h $plot_c_path/plot_command.h |
cd $plot_c_path |
make |
cp $plot_c_path/plot $multiple_path/plot_bin |
cd $script_path |
|
} |
|
|
|
|
################ |
# |
# regenerate_NoC |
# |
################ |
|
regenerate_NoC() { |
generate_parameter_v |
mv -f parameter.v ../src_verilator/ |
|
#verilate the NoC and make the library files |
#################################################################3 |
./verilator_compile_hw.sh |
|
# compile the testbench file |
generate_parameter_h |
mv -f parameter.h ../src_verilator/ |
|
./verilator_compile_sw.sh |
|
|
cp $bin_path/testbench $multiple_path/$testbench_name |
} |
|
|
################ |
# |
# merg_files |
# |
################ |
|
|
merg_files(){ |
if [ $STND_DEV_EN -eq 1 ] |
then |
|
target="_std" |
else |
target="_all" |
|
fi |
|
data_file=$data_path/${plot_name}${target}".txt" |
plot_file=$plot_path/${plot_name}${target}".eps" |
|
printf "#name:"$CURVE_NAME"\n" >> $data_file |
cat ${testbench_name}${target}".txt" >> $data_file |
printf "\n\n" >> $data_file |
|
./plot_bin $data_file $plot_file "Injection ratio flits/node/clk" "Average latency clk" "outside left" |
|
|
|
if [ $C -gt 1 ] |
then |
|
data_file=$data_path/$plot_name"_c0.txt" |
plot_file=$plot_path/$plot_name"_c0.eps" |
|
|
printf "#name:"$CURVE_NAME"\n" >> $data_file |
cat $testbench_name"_c0.txt" >> $data_file |
printf "\n\n" >> $data_file |
|
./plot_bin $data_file $plot_file "Injection ratio flits/node/clk" "Average latency clk" "outside left" |
|
data_file=$data_path/$plot_name"_c1.txt" |
plot_file=$plot_path/$plot_name"_c1.eps" |
|
|
printf "#name:"$CURVE_NAME"\n" >> $data_file |
cat $testbench_name"_c1.txt" >> $data_file |
printf "\n\n" >> $data_file |
|
./plot_bin $data_file $plot_file "Injection ratio flits/node/clk" "Average latency clk" "outside left" |
|
fi |
|
|
rm $testbench_name* |
|
} |
|
gen_testbench_name(){ |
testbench_name=$routename"_"$SSA_EN |
|
} |
|
gen_plot_name(){ |
plot_name=$routename"_"$TRAFFIC"_"$PACKET_SIZE |
|
} |
|
|
|
|
|
|
|
|
################ |
# |
# run_sim |
# |
################ |
run_sim(){ |
|
for SSA_EN in "YES" "NO" |
do |
|
gen_testbench_name |
regenerate_NoC |
done |
|
|
|
|
|
cd $multiple_path |
|
for SSA_EN in "YES" "NO" |
do |
|
gen_testbench_name |
CMD="./$testbench_name $testbench_name" |
|
command $CMD & |
done |
|
|
# wait for all simulation to be done |
wait |
|
|
|
# merge the results in one file |
VC_REALLOCATION_TYPE="NONATOMIC" |
|
for SSA_EN in "YES" "NO" |
do |
|
|
gen_testbench_name |
gen_plot_name |
CURVE_NAME=$SSA_EN |
merg_files |
done # ROUTE_NAME |
|
|
cd $script_path |
|
} |
|
|
generate_plot_command |
|
|
|
|
|
|
for PACKET_SIZE in 4 # 6 |
do |
for TRAFFIC in "RANDOM" # "BIT_REVERSE" "BIT_COMPLEMENT" "RANDOM" "HOTSPOT" "TRANSPOSE1" "TORNADO" #"CUSTOM" |
do |
|
|
run_sim |
|
|
done |
done #PACKET_SIZE |
|
mpsoc/script/verilator_multiple/verilator_ssa.sh
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/Makefile
===================================================================
--- mpsoc/src_c/Makefile (revision 27)
+++ mpsoc/src_c/Makefile (revision 28)
@@ -1,6 +1,6 @@
TOOLCHAIN:=${PRONOC_WORK}/toolchain
SUBDIRS = ihex2bin ihex2mif jtag plot
-BIN_FILES = ihex2bin/ihex2bin ihex2mif/ihex2mif jtag/jtag_main
+BIN_FILES = ihex2bin/ihex2bin ihex2mif/ihex2mif
PRONOC_WORK_BIN := $(TOOLCHAIN)/bin
@@ -14,5 +14,6 @@
binfiles:
mkdir -p $(PRONOC_WORK_BIN)
- cp -f $(BIN_FILES) $(PRONOC_WORK_BIN)
-
+ cp -f $(BIN_FILES) $(PRONOC_WORK_BIN)
+ cp jtag/simple_jtag/jtag_main $(PRONOC_WORK_BIN)/jtag_main
+# cp jtag/urjtag-0.10/src/jtag_main $(PRONOC_WORK_BIN)/jtag_main
/mpsoc/src_c/jtag/jinfo
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
mpsoc/src_c/jtag/jinfo
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: mpsoc/src_c/jtag/jtag-virtual.c
===================================================================
--- mpsoc/src_c/jtag/jtag-virtual.c (revision 27)
+++ mpsoc/src_c/jtag/jtag-virtual.c (nonexistent)
@@ -1,139 +0,0 @@
-/* Copyright 2012 Brian Swetland
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include
-#include
-
-#include "jtag.h"
-
-int jtag_dr_8x4(unsigned *out) {
- unsigned bits = 0;
- unsigned tmp;
- int n, r;
-
- for (n = 0; n < 8; n++) {
- if ((r = jtag_dr(4, 0, &tmp)) < 0) return r;
- bits |= (tmp <<= (n * 4));
- }
- *out = bits;
- return 0;
-}
-
-/* number of bits needed given a max value 1-255 */
-unsigned needbits(unsigned max) {
- if (max > 127) return 8;
- if (max > 63) return 7;
- if (max > 31) return 6;
- if (max > 15) return 5;
- if (max > 7) return 4;
- if (max > 3) return 3;
- if (max > 1) return 2;
- return 1;
-}
-
-static unsigned ir_width = 10;
-
-static unsigned hub_version = 0;
-static unsigned hub_nodecount = 0;
-static unsigned hub_mfg = 0;
-
-static unsigned vir_width = 0;
-static unsigned vir_width_addr = 0;
-static unsigned vir_width_ir = 0;
-static unsigned vir_addr = 0;
-
-
-int jtag_vir(unsigned vir) {
- int r;
- if ((r = jtag_ir(ir_width, 14)) < 0) return r;
- if ((r = jtag_dr(vir_width, vir_addr | vir, 0)) < 0) return r;
- return 0;
-}
-
-int jtag_vdr(unsigned sz, unsigned bits, unsigned *out) {
- int r;
- if ((r = jtag_ir(ir_width, 12)) < 0) return r;
- if ((r = jtag_dr(sz, bits, out)) < 0) return r;
- return 0;
-}
-
-int jtag_vdr_long(unsigned sz, unsigned * bits, unsigned *out, int words) {
- int r;
- if ((r = jtag_ir(ir_width, 12)) < 0) return r;
- if ((r = jtag_dr_long(sz, bits, out, words)) < 0) return r;
- return 0;
-}
-
-int jtag_open_virtual_device(unsigned iid) {
- unsigned n, bits;
- int r;
-
- if ((r = jtag_open()) < 0) return r;
-
- if ((r = jtag_reset()) < 0) return r;
-
- /* select empty node_addr + node_vir -- all zeros */
- if ((r = jtag_ir(ir_width, 14)) < 0) return r;
- if ((r = jtag_dr(32, 0, 0)) < 0) return r;
-
- /* select vdr - this will be the hub info (addr=0,vir=0) */
- if ((r = jtag_ir(ir_width, 12)) < 0) return r;
-
- /* read hub info */
- if ((r = jtag_dr_8x4(&bits)) < 0) return r;
- hub_version = (bits >> 27) & 0x1F;
- hub_nodecount = (bits >> 19) & 0xFF;
- hub_mfg = (bits >> 8) & 0x7FF;
-
- if (hub_mfg != 0x06e) {
- fprintf(stderr,"HUB: Cannot Find Virtual JTAG HUB\n");
- return -1;
- }
-
- /* altera docs claim this field is the sum of M bits (VIR field) and
- * N bits (ADDR field), but empirical evidence suggests it is actually
- * just the width of the ADDR field and the docs are wrong...
- */
- vir_width_ir = bits & 0xFF;
- vir_width_addr = needbits(hub_nodecount);
- vir_width = vir_width_ir + vir_width_addr;
-
- fprintf(stderr,"HUB: Mfg=0x%03x, Ver=0x%02x, Nodes=%d, VIR=%d+%d bits\n",
- hub_mfg, hub_version, hub_nodecount, vir_width_addr, vir_width_ir);
-
- for (n = 0; n < hub_nodecount; n++) {
- unsigned node_ver, node_id, node_mfg, node_iid;
- if ((r = jtag_dr_8x4(&bits)) < 0) return r;
- node_ver = (bits >> 27) & 0x1F;
- node_id = (bits >> 19) & 0xFF;
- node_mfg = (bits >> 8) & 0x7FF;
- node_iid = bits & 0xFF;
-
- fprintf(stderr,"NODE: Mfg=0x%03x, Ver=0x%02x, ID=0x%02x, IID=0x%02x\n",
- node_mfg, node_ver, node_id, node_iid);
-
- if ((node_id == 0x08) && (node_iid) == iid) {
- vir_addr = (n + 1) << vir_width_ir;
- }
- }
-
- if ((vir_addr == 0) && (iid < 256)) {
- fprintf(stderr,"ERROR: IID 0x%02x not found\n", iid);
- return -1;
- }
- return 0;
-}
-
-
mpsoc/src_c/jtag/jtag-virtual.c
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_c/jtag/jtag.h
===================================================================
--- mpsoc/src_c/jtag/jtag.h (revision 27)
+++ mpsoc/src_c/jtag/jtag.h (nonexistent)
@@ -1,50 +0,0 @@
-/* Copyright 2012 Brian Swetland
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _JTAG_H_
-#define _JTAG_H_
-
-int jtag_open(void);
-int jtag_close(void);
-
-/* move into RESET state */
-int jtag_reset(void);
-
-/* clock count times, TDI=0, TMS=bits[0], bits >>= 1 */
-int jtag_move(int count, unsigned bits);
-
-/* clock count-1 times, TMS=0, TDI=bits[0], bits >>= 1
- * clock 1 time, TMS=1, TDI=bits[0]
- * if out, capture TDO into out
- */
-int jtag_shift(int count, unsigned bits, unsigned *out);
-
-
-/* load sz bits into IR */
-int jtag_ir(unsigned sz, unsigned bits);
-
-/* load sz bits into DR, capture sz bits into out if non-null */
-int jtag_dr(unsigned sz, unsigned bits, unsigned *out);
-int jtag_dr_long(unsigned sz, unsigned * bits, unsigned *out, int words);
-
-
-
-/* altera virtual jtag support */
-int jtag_open_virtual_device(unsigned iid);
-int jtag_vir(unsigned vir);
-int jtag_vdr(unsigned sz, unsigned bits, unsigned *out);
-int jtag_vdr_long(unsigned , unsigned * , unsigned *, int );
-
-#endif
mpsoc/src_c/jtag/jtag.h
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_c/jtag/jinfo.c
===================================================================
--- mpsoc/src_c/jtag/jinfo.c (revision 27)
+++ mpsoc/src_c/jtag/jinfo.c (nonexistent)
@@ -1,36 +0,0 @@
-/* Copyright 2012 Brian Swetland
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include
-#include "jtag.h"
-
-int main(int argc, char **argv) {
- unsigned bits;
-
- if (jtag_open() < 0)
- return -1;
-
- if (jtag_reset() < 0)
- return -1;
- if (jtag_dr(32, 0, &bits) < 0)
- return -1;
- fprintf(stderr,"IDCODE: %08x\n", bits);
-
- if (jtag_open_virtual_device(0xffffffff))
- return -1;
-
- jtag_close();
- return 0;
-}
mpsoc/src_c/jtag/jinfo.c
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_c/jtag/rom.bin
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: mpsoc/src_c/jtag/rom.bin
===================================================================
--- mpsoc/src_c/jtag/rom.bin (revision 27)
+++ mpsoc/src_c/jtag/rom.bin (nonexistent)
mpsoc/src_c/jtag/rom.bin
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: mpsoc/src_c/jtag/README
===================================================================
--- mpsoc/src_c/jtag/README (revision 27)
+++ mpsoc/src_c/jtag/README (nonexistent)
@@ -1,20 +0,0 @@
-
-Quick hack commandline tools to interact with Altera FPGA Virtual JTAG interfaces,
-using the USB Blaster device (as integrated on Terasic dev boards, etc).
-
-Not terribly fancy or optimized but only depends on libusb-1.0
-
-Currently does not support multiple devices on the chain.
-
-jtag.c - provides simple jtag interface
-jtag-virtual.c - provides simple virtual jtag interface
-
-jload.c - example of using the virtual jtag interface for a downloader interface
- with a CTRL/ADDR/DATA register set. CTRL[0] asserts reset, writes to
- DATA store to [ADDR] and auto-increment ADRR.
-
-jinfo.c - dumps idcode and virtual jtag hub and device info table
-
-
-Why? Scripting the Altera quartus_stp tool in TCL was driving me nuts.
-
mpsoc/src_c/jtag/README
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_c/jtag/jtag_main
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: mpsoc/src_c/jtag/jtag_main
===================================================================
--- mpsoc/src_c/jtag/jtag_main (revision 27)
+++ mpsoc/src_c/jtag/jtag_main (nonexistent)
mpsoc/src_c/jtag/jtag_main
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: mpsoc/src_c/jtag/jtag_main.c
===================================================================
--- mpsoc/src_c/jtag/jtag_main.c (revision 27)
+++ mpsoc/src_c/jtag/jtag_main.c (nonexistent)
@@ -1,363 +0,0 @@
-#include
-#include
-#include
-#include
-#include // getopt
-#include
-#include
-#include "jtag.h"
-
-
-
-
-#define UPDATE_WB_ADDR 0x7
-#define UPDATE_WB_WR_DATA 0x6
-#define UPDATE_WB_RD_DATA 0x5
-#define RD_WR_STATUS 0x4
-
-#define BIT_NUM (word_width<<3)
-#define BYTE_NUM word_width
-/* Global vars */
-unsigned int index_num=126;
-unsigned int word_width=4; //
-unsigned int write_verify=0;
-unsigned int memory_offset=0;
-unsigned int memory_boundary=0xFFFFFFFF;
-
-
-
-char * binary_file_name=0;
-char enable_binary_send=0;
-char * write_data=0;
-
-
-
-
-/* functions */
-int send_binary_file();
-void usage();
-void processArgs (int , char** );
-int send_data ();
-int hexcut( char * , unsigned * , int );
-int vdr_large (unsigned , char * , char *);
-void hexgen( char * , unsigned *, int );
-
-int main(int argc, char **argv) {
- //unsigned bits;
- //unsigned int val;
-
- //unsigned bits;
- //unsigned val;
-
- processArgs (argc, argv );
- printf("index num=%u\n",index_num);
- if (jtag_open_virtual_device(index_num)){
- fprintf (stderr, "Error openning jtag IP with %d index num\n",index_num);
- return -1;
- }
- if (enable_binary_send) {
- if( send_binary_file() == -1) return -1;
- }
-
- if (write_data!=0){
- printf("send %s to jtag\n",write_data);
- send_data();
-
-
- }
-
- return 0;
-}
-
-
-
-void usage(){
-
- printf ("usage:./jtag_main [-n index number] [-i file_name][-c][-s rd/wr offset address][-d string]\n");
-
- printf ("\t-n index number: the target jtag IP core index number. The default number is 126\n");
- printf ("\t-i file_name: input binary file name (.bin file)\n");
- printf ("\t-w bin file word width in byte. default is 4 bytes (32 bits)\n");
- printf ("\t-c verify after write\n");
- printf ("\t-s memory wr/rd offset address in hex. The default value is 0x0000000\n");
- printf ("\t-e memory boundary address in hex. The default value is 0xFFFFFFFF\n");
- printf ("\t-d string: use for setting instruction or data value to jtag tap. string format : \"instr1,instr2,...,instrn\"\n \tinstri = I:instruct_num: send instruct_num to instruction register \n \tD:data_size_in_bit:data : send data in hex to data register\n \tR:data_size_in_bit:data : Read data register and show it on screan then write given data in hex to data register\n");
-
-}
-
-void processArgs (int argc, char **argv )
-{
- char c;
-int p;
-
- /* don't want getopt to moan - I can do that just fine thanks! */
- opterr = 0;
- if (argc < 2) usage();
- while ((c = getopt (argc, argv, "s:e:d:n:i:w:c")) != -1)
- {
- switch (c)
- {
- case 'n': /* index number */
- index_num = atoi(optarg);
- break;
- case 'i': /* input binary file name */
- binary_file_name = optarg;
- enable_binary_send=1;
- break;
- case 'w': /* word width in byte */
- word_width= atoi(optarg);
- break;
- case 'c': /* word width in byte */
- write_verify= 1;
- break;
- case 'd': /* word width in byte */
- write_data= optarg;
- break;
- case 's': /* word width in byte */
-
- p=sscanf(optarg,"%x",&memory_offset);
- if( p==0){
- fprintf (stderr, "invalid memory offset adress format `%s'.\n", optarg);
- usage();
- exit(1);
- }
- //printf("p=%d,memory_offset=%x\n",p,memory_offset);
- break;
- case 'e': /* word width in byte */
- p=sscanf(optarg,"%x",&memory_boundary);
- if( p==0){
- fprintf (stderr, "invalid memory boundary adress format `%s'.\n", optarg);
- usage();
- exit(1);
- }
- break;
-
- case '?':
- if (isprint (optopt))
- fprintf (stderr, "Unknown option `-%c'.\n", optopt);
- else
- fprintf (stderr,
- "Unknown option character `\\x%x'.\n",
- optopt);
- default:
- usage();
- exit(1);
- }
- }
-}
-
-unsigned * read_file (FILE * fp, unsigned int * n ){
-
- unsigned * buffer;
- unsigned val;
- unsigned char ch;
- unsigned int i=0;
- char cnt=0;
- unsigned int num=0;
- fseek(fp, 0, SEEK_END); // seek to end of file
- num = ftell(fp); // get current file pointer
- *n=num;// number of bytes from the beginning of the file
- num=(num/BYTE_NUM)+2;
- fseek(fp, 0, SEEK_SET);
- //printf ("num=%u\n",num);
- buffer = (unsigned *) malloc(num * sizeof(unsigned)); //memory allocated using malloc
- if(buffer == NULL)
- {
- printf("Error! memory not allocated.");
- exit(0);
- }
- ch=fgetc(fp);
- while(!feof(fp)){
- val<<=8;
- val|=ch;
- cnt++;
- //printf("ch=%x\t",ch);
- if(cnt==BYTE_NUM){
- //printf("%d:%x\n",i,val);
- buffer[i] = val;
- val=0;
- cnt=0;
- i++;
- }
- ch=fgetc(fp);
- }
- if( cnt>0){
- val<<=(8 *(BYTE_NUM-cnt));
- printf("%d:%x\n",i,val);
- buffer[i] = val;
-
- }
-
-return buffer;
-
-}
-
-
-
-int send_data ()
-{
- char * pch;
- char string[100];
- int bit=0, inst=0, d=0;
- char out[100];
- pch = strtok (write_data,",");
- printf("%s\n",pch);
- while (pch != NULL)
- {
- while(1){
- d=1;
- if(sscanf( pch, "D:%d:%s", &bit, string )) break;
- if(sscanf( pch, "d:%d:%s", &bit, string )) break;
- //if(sscanf( pch, "D:%d:" PRIx64 , &bit, &data )) break;
- //if(sscanf( pch, "d:%d:%016x", &bit, &data )) break;
- d=2;
- if(sscanf( pch, "R:%d:%s",&bit, string)) break;
- if(sscanf( pch, "r:%d:%s",&bit, string)) break;
- d=0;
- if(sscanf( pch, "I:%d", &inst)) break;
- if(sscanf( pch, "i:%d", &inst)) break;
- printf("invalid format : %s\n",pch);
- return -1;
-
- }
- if(d==1){
- //printf ("(bit=%d, data=%s)",bit, string);
- //jtag_vdr(bit, data, 0);
- vdr_large(bit,string,0);
- }if(d==2){
-
- vdr_large(bit,string,out);
- printf("###read data#%s###read data#\n",out);
- }else{
-
- jtag_vir(inst);
- //printf("%d\n",inst);
- }
-
- pch = strtok (NULL, ",");
-
- }
- return 0;
-}
-
-
-
-int send_binary_file(){
- FILE *fp;
- int i=0;
- unsigned out;
- unsigned int num=0;
- unsigned int mem_size;
- unsigned int memory_offset_in_word;
- printf("send %s to the wishbone bus\n",binary_file_name);
- fp = fopen(binary_file_name,"rb");
- if (!fp) {
- fprintf (stderr,"Error: can not open %s file in read mode\n",binary_file_name);
- return -1;
- }
- unsigned * buffer;
- buffer=read_file (fp, &num);
- mem_size=memory_boundary-memory_offset;
- if(num>mem_size){
- printf("\n\n Warning: %s file size (%x) is larger than the given memory size (%x). I will stop writing on end of memory address\n\n",binary_file_name,num,mem_size);
- num=mem_size;
- }
- fclose(fp);
- //disable the cpu
- jtag_vir(RD_WR_STATUS);
- jtag_vdr(BIT_NUM, 0x1, &out);
- //getchar();
- jtag_vir(UPDATE_WB_ADDR);
- // change memory sizes from byte to word
- memory_offset_in_word=memory_offset /BYTE_NUM;
- num=num /BYTE_NUM;
-
- jtag_vdr(BIT_NUM, memory_offset_in_word, 0);
- jtag_vir(UPDATE_WB_WR_DATA);
-
- printf ("start programing\n");
- //printf ("num=%d\n",num);
- for(i=0;isize)? 0 : size-count*8;
-
- sscanf(hexstring+start, "%08x", &val[count-1]);
- *(hexstring+start)=0;
- }
-
- // printf("size=%d, hexnum=%u\n",size,hexnum);
-
-
- return hexnum;
-}
-
-
-void hexgen( char * hexstring, unsigned * val, int words ){
- size_t count = 0;
- sprintf(hexstring,"0x");
- for(count = 0; count < words; count++) {
- if(count == 0) sprintf((hexstring+2),"%x",val[words-count-1]);
- else sprintf(hexstring,"%08x",val[words-count-1]);
- hexstring+=strlen(hexstring);
- }
-
- // return hexnum;
-}
-
-
mpsoc/src_c/jtag/jtag_main.c
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_c/jtag/jconsole.c
===================================================================
--- mpsoc/src_c/jtag/jconsole.c (revision 27)
+++ mpsoc/src_c/jtag/jconsole.c (nonexistent)
@@ -1,135 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-
-
-#include
-#include "jtag.h"
-
-#define VIR_CTRL 0x0
-#define VIR_ADDR 0x1
-#define VIR_DATA 0x2
-#define VIR_UART 0x7
-
-
-#define UPDATE_WB_ADDR 0x7
-#define UPDATE_WB_WR_DATA 0x6
-#define UPDATE_WB_RD_DATA 0x5
-#define RD_WR_STATUS 0x4
-
-int main(int argc, char **argv) {
- //unsigned bits;
- //unsigned int val;
-
- //unsigned bits;
- uint32_t val;
- FILE *fp;
-
- if (argc != 2) {
- fprintf(stderr,"usage: download bin file\n");
- return -1;
- }
- fp = fopen(argv[1],"rb");
- if (!fp) return -1;
-
- if (jtag_open_virtual_device(126))
- return -1;
-
-
- int i=0;
- unsigned int out;
-//disable the cpu
- jtag_vir(RD_WR_STATUS);
- jtag_vdr(32, 0xFFFFFFFF, &out);
- printf ("status=%x\n",out);
- getchar();
-//
- jtag_vir(UPDATE_WB_WR_DATA);
- unsigned char ch;
- char cnt=0;
- val=0;
- ch=fgetc(fp);
- while(!feof(fp)){
- val<<=8;
- val|=ch;
- cnt++;
- printf("ch=%x\t",ch);
- if(cnt==4){
- printf("%d:%x\n",i,val);
- jtag_vdr(32, val, 0);
- val=0;
- cnt=0;
- i++;
- }
- ch=fgetc(fp);
- }
- if( cnt>0){
- val<<=(8 *(4-cnt));
- printf("%d:%x\n",i,val);
- jtag_vdr(32, val, 0);
-
- }
-
-
- getchar();
-/*
- printf ("start=\n");
- jtag_vir(UPDATE_WB_ADDR);
- jtag_vdr(32, 0, 0);
- jtag_vir(UPDATE_WB_WR_DATA);
-
- for(i=0;i<1000; i++){
- //printf ("addr=\n");
- //scanf("%x", &val);
-
- jtag_vdr(32, 2*i, 0);
- //jtag_vdr(32, 0, &out);
- //printf ("out=%x\n",out);
-
- printf ("data=\n");
- scanf("%x", &val);
- jtag_vir(UPDATE_WB_WR_DATA);
- jtag_vdr(32, val, 0);
-
- printf ("data=\n");
- scanf("%x", &val);
- jtag_vdr(32, val, 0);
-
- printf ("data=\n");
- scanf("%x", &val);
- jtag_vdr(32, val, 0);
-
-
- }
-*/
- printf ("done programing\n");
- jtag_vir(UPDATE_WB_RD_DATA);
- jtag_vdr(32, 0, &out);
- for(i=1;i<1001; i++){
- jtag_vdr(32, i, &out);
- printf ("out[%d]=%x\n",i-1,out);
-
-
- }
-
- jtag_vir(RD_WR_STATUS);
- jtag_vdr(32, 0, &out);
- printf ("status=%x\n",out);
- for (;;) {
- /*
- jtag_vdr(9, 0, &bits);
- if (bits & 0x100) {
- bits &= 0xFF;
- if ((bits < ' ') || (bits > 127))
- fputc('.', stderr);
- else
- fputc(bits, stderr);
- }
- */
- }
-
- return 0;
-}
-
mpsoc/src_c/jtag/jconsole.c
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_c/jtag/jtag.c
===================================================================
--- mpsoc/src_c/jtag/jtag.c (revision 27)
+++ mpsoc/src_c/jtag/jtag.c (nonexistent)
@@ -1,321 +0,0 @@
-/* Copyright 2012 Brian Swetland
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-#define TRACE_USB 0
-#define TRACE_JTAG 0
-
-static struct libusb_device_handle *udev;
-static int usb_open(unsigned vid, unsigned pid) {
- if (libusb_init(NULL) < 0)
- return -1;
-
- if (!(udev = libusb_open_device_with_vid_pid(NULL, vid, pid))) {
- fprintf(stderr,"cannot find device\n");
- return -1;
- }
-
- if (libusb_claim_interface(udev, 0) < 0) {
- fprintf(stderr,"cannot claim interface\n");
- return -1;
- }
- return 0;
-}
-static void usb_close(void) {
- libusb_exit(NULL);
-}
-#if TRACE_USB
-static void dump(char *prefix, void *data, int len) {
- unsigned char *x = data;
- fprintf(stderr,"%s: (%d)", prefix, len);
- while (len > 0) {
- fprintf(stderr," %02x", *x++);
- len--;
- }
- fprintf(stderr,"\n");
-}
-#endif
-static int usb_bulk(unsigned char ep, void *data, int len, unsigned timeout) {
- int r, xfer;
-#if TRACE_USB
- if (!(ep & 0x80))
- dump("xmit", data, len);
-#endif
- r = libusb_bulk_transfer(udev, ep, data, len, &xfer, timeout);
- if (r < 0) {
- fprintf(stderr,"bulk: error: %d\n", r);
- return r;
- }
-#if TRACE_USB
- if (ep & 0x80)
- dump("recv", data, xfer);
-#endif
- return xfer;
-}
-
-#define EP1_IN 0x81
-#define EP2_OUT 0x02
-
-#define UB_BYTEMODE 0x80
-#define UB_BITMODE 0x00
-#define UB_READBACK 0x40
-
-/* bits in bit mode */
-#define UB_OE 0x20
-#define UB_TDI 0x10
-#define UB_nCS 0x08
-#define UB_nCE 0x04
-#define UB_TMS 0x02
-#define UB_TCK 0x01
-#define BUFF_SZ 512
-/* bytecount for data bytes that follow in byte mode */
-#define UB_COUNT(n) ((n) & 0x3F)
-
-int jtag_move(int count, unsigned bits){
- unsigned char buf[BUFF_SZ];
- int n = 0;
-#if TRACE_JTAG
- fprintf(stderr,"move: %08x (%d)\n", bits, count);
-#endif
- while (count-- > 0) {
- if (bits & 1) {
- buf[n++] = UB_TMS;
- buf[n++] = UB_TMS | UB_TCK;
- } else {
- buf[n++] = 0;
- buf[n++] = UB_TCK;
- }
- bits >>= 1;
- }
- return usb_bulk(EP2_OUT, buf, n, 1000);
-}
-
-int jtag_shift(int count, unsigned bits, unsigned *out) {
- unsigned char buf[BUFF_SZ];
- unsigned RB = out ? UB_READBACK : 0;
- int n = 0;
- int readcount = count;
- int r,bit;
-#if TRACE_JTAG
- fprintf(stderr,"xfer: %08x (%d)\n", bits, count);
-#endif
- while (count-- > 0) {
- if (bits & 1) {
- buf[n++] = UB_TDI;
- buf[n++] = UB_TDI | UB_TCK | RB;
- } else {
- buf[n++] = 0;
- buf[n++] = UB_TCK | RB;
- }
- bits >>= 1;
- }
- buf[n-1] |= UB_TMS;
- buf[n-2] |= UB_TMS;
- r = usb_bulk(EP2_OUT, buf, n, 1000);
- if (r < 0)
- return r;
- if (!out)
- return 0;
- bits = 0;
- bit = 1;
- while (readcount > 0) {
- r = usb_bulk(EP1_IN, buf, BUFF_SZ, 1000);
- if (r < 0)
- return r;
- if (r < 3)
- continue;
- for (n = 2; n < r; n++) {
- if (buf[n] & 1)
- bits |= bit;
- bit <<= 1;
- readcount--;
- if (readcount == 0) {
-#if TRACE_JTAG
- fprintf(stderr," : %08x\n", bits);
-#endif
- *out = bits;
- return 0;
- }
- }
- }
- return -1;
-}
-
-
-int jtag_shift_long(int count, unsigned * bits, unsigned *out) {
- unsigned char buf[BUFF_SZ];
- unsigned RB = out ? UB_READBACK : 0;
- int n = 0;
- int readcount = count;
- int r,bit;
- unsigned int p=0;
-
-#if TRACE_JTAG
- fprintf(stderr,"xfer: %08x (%d)\n", bits[count>>5], count);
-#endif
- while (count-- > 0) {
- p=((readcount-count)-1)>>5;
- if (bits[p] & 1) {
- buf[n++] = UB_TDI;
- buf[n++] = UB_TDI | UB_TCK | RB;
- } else {
- buf[n++] = 0;
- buf[n++] = UB_TCK | RB;
- }
- bits[p] = bits[p] >> 1;
- }
- buf[n-1] |= UB_TMS;
- buf[n-2] |= UB_TMS;
- r = usb_bulk(EP2_OUT, buf, n, 1000);
- if (r < 0)
- return r;
- if (!out)
- return 0;
-
- unsigned B = 0;
- bit = 1;
-
- count=readcount;
- int shift=0;
- while (readcount > 0) {
-
- r = usb_bulk(EP1_IN, buf, BUFF_SZ, 1000);
- //int j;
- //for(j=0;j>5;
- //printf("%u",buf[n]&1);
- if (buf[n] & 1)
- B |= bit;
- bit <<= 1;
- shift++;
- if(shift%32==0){
- bit=1;
- out[p]= B;
- //printf("out[%u]=%x\n",p, out[p]);
- B=0;
-
-
- }
- readcount--;
- if (readcount == 0) {
-#if TRACE_JTAG
- fprintf(stderr," : %08x\n", bits[p]);
-#endif
- out[p]= B;
- //printf("out[%u]=%x\n",p, out[p]);
- return 0;
- }
- }
- }
- return -1;
-}
-
-
-
-/* JTAG notes
- *
- * TMS is sampled on +TCK
- * Capture-XR state loads shift register on +TCK as state is exited
- * Shift-XR state TDO goes active (containing shiftr[0]) on the first -TCK
- * after entry, shifts occur on each +TCK, *including* the +TCK
- * that will exist Shift-XR when TMS=1 again
- * Update-XR update occurs on the -TCK after entry to state
- *
- * Any -> Reset: 11111
- * Any -> Reset -> RTI: 111110
- * RTI -> ShiftDR: 100
- * ShiftDR shifting: 0 x N
- * ShiftDR -> UpdateDR -> RTI: 110
- * ShiftDR -> UpdateDR -> ShiftDR: 11100
- * RTI -> ShiftIR: 1100
- * ShiftIR shifting: 0 x N
- * ShiftIR -> UpdateIR -> RTI: 110
- */
-
-#define RESET 8,0b01111111
-#define SHIFTDR 3,0b001
-#define SHIFTIR 4,0b0011
-#define DONE 2,0b01
-#define AGAIN 4,0b0011
-
-int jtag_ir(unsigned sz, unsigned bits) {
- int r;
- if ((r = jtag_move(SHIFTIR)) < 0) return r;
- if ((r = jtag_shift(sz, bits, 0)) < 0) return r;
- if ((r = jtag_move(DONE)) < 0) return r;
- return 0;
-}
-
-int jtag_dr(unsigned sz, unsigned bits, unsigned *out) {
- int r;
- if ((r = jtag_move(SHIFTDR)) < 0) return r;
- if ((r = jtag_shift(sz, bits, out)) < 0) return r;
- if ((r = jtag_move(DONE)) < 0) return r;
- return 0;
-}
-
-int jtag_dr_long(unsigned sz, unsigned * bits, unsigned *out, int words) {
- int r;
- //unsigned s=32;
- if ((r = jtag_move(SHIFTDR)) < 0) return r;
- //for(i=0;i
mpsoc/src_c/jtag/jtag.c
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_c/jtag/usb-blaster-protocol.txt
===================================================================
--- mpsoc/src_c/jtag/usb-blaster-protocol.txt (revision 27)
+++ mpsoc/src_c/jtag/usb-blaster-protocol.txt (nonexistent)
@@ -1,60 +0,0 @@
-http://sf.net/apps/mediawiki/urjtag/index.php?title=Cable_Altera_USB-Blaster
-----------------------------------------------------------------------------
-
-Altera USB-Blaster
-------------------
-
-General
--------
- _________
- | |
- | AT93C46 |
- |_________|
- __|__________ _________
- | | | |
- USB__| FTDI 245BM |__| EPM7064 |__JTAG (B_TDO,B_TDI,B_TMS,B_TCK)
- |_____________| |_________|
- __|__________ _|___________
- | | | |
- | 6 MHz XTAL | | 24 MHz Osc. |
- |_____________| |_____________|
-
-
-Quoting from ixo.de (http://www.ixo.de/info/usb_jtag/)
-usb_jtag/device/c51/usbjtag.c comments:
-
-usb_jtag firmware now happens to behave just like the combination of
-FT245BM and Altera-programmed EPM7064 CPLD in Altera's USB-Blaster.
-The CPLD knows two major modes: Bit banging mode and Byte shift mode.
-It starts in Bit banging mode. While bytes are received from the host
-on EP2OUT, each byte B of them is processed as follows:
-
-Bit banging mode
-----------------
-1. Remember bit 6 (0x40) in B as the "Read bit".
-2. If bit 7 (0x80) is set, switch to Byte shift mode for the coming X
- bytes ( X := B & 0x3F ), and don't do anything else now.
-3. Otherwise, set the JTAG signals as follows:
- - TCK/DCLK high if bit 0 was set (0x01), otherwise low
- - TMS/nCONFIG high if bit 1 was set (0x02), otherwise low
- - nCE high if bit 2 was set (0x04), otherwise low
- - nCS high if bit 3 was set (0x08), otherwise low
- - TDI/ASDI/DATAO high if bit 4 was set (0x10), otherwise low
- - Output Enable/LED active if bit 5 was set (0x20), otherwise low
-4. If "Read bit" (0x40) was set, record the state of TDO(CONF_DONE) and
- DATAOUT/(nSTATUS) pins and put is as a byte( (DATAOUT<<1)|TDO) in the
- output FIFO _to_ the host.
-
-Byte shift mode
----------------
-1. Load shift register with byte from host
-2. Do 8 times (i.e. for each bit of the byte; implemented in shift.a51)
- - if nCS=1, set carry bit from TDO, else set carry bit from DATAOUT
- (Active Serial mode)
- - Rotate shift register through carry bit
- - TDI := Carry bit
- - Raise TCK, then lower TCK.
-3. If "Read bit" was set when switching into byte shift mode, record the
- shift register content and put it into the FIFO to the host.
-
-
mpsoc/src_c/jtag/usb-blaster-protocol.txt
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_c/jtag/Makefile
===================================================================
--- mpsoc/src_c/jtag/Makefile (revision 27)
+++ mpsoc/src_c/jtag/Makefile (revision 28)
@@ -1,23 +1,3 @@
-
-CFLAGS := -g -Wall
-LIBS := -lusb-1.0
-
-all: jinfo jtag_main
-
-jinfo.c: jtag.h
-jtag_main.c: jtag.h
-jtag.c: jtag.h
-jtag-virtual.c: jtag.h
-
-
-
-JINFO_OBJS := jinfo.o jtag-virtual.o jtag.o
-jinfo: $(JINFO_OBJS)
- $(CC) -o jinfo $(JINFO_OBJS) $(LIBS)
-
-JTAG_MAIN_OBJS := jtag_main.o jtag-virtual.o jtag.o
-jtag_main: $(JTAG_MAIN_OBJS)
- $(CC) -o jtag_main $(JTAG_MAIN_OBJS) $(LIBS)
-
-clean::
- rm -f jinfo jtag_main *.o
+all:
+ cd simple_jtag; make
+ #cd urjtag-0.10; ./configure; wait; make
Index: mpsoc/src_c/jtag/simple_jtag/Makefile
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/Makefile (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/Makefile (revision 28)
@@ -0,0 +1,29 @@
+
+CFLAGS := -g -Wall
+LIBS := -lusb-1.0
+
+all: jinfo jtag_main usblist
+
+
+jinfo.c: jtag.h
+jtag_main.c: jtag.h
+jtag.c: jtag.h
+jtag-virtual.c: jtag.h
+list_usb_dev.c: jtag.h
+
+
+
+JINFO_OBJS := jinfo.o jtag-virtual.o jtag.o
+jinfo: $(JINFO_OBJS)
+ $(CC) -o jinfo $(JINFO_OBJS) $(LIBS)
+
+JTAG_MAIN_OBJS := jtag_main.o jtag-virtual.o jtag.o
+jtag_main: $(JTAG_MAIN_OBJS)
+ $(CC) -o jtag_main $(JTAG_MAIN_OBJS) $(LIBS)
+
+LIST_USB_OBJS := list_usb_dev.o jtag-virtual.o jtag.o
+usblist: $(LIST_USB_OBJS)
+ $(CC) -o list_usb_dev $(LIST_USB_OBJS) $(LIBS)
+
+clean::
+ rm -f jinfo jtag_main list_usb_dev *.o
mpsoc/src_c/jtag/simple_jtag/Makefile
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/README
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/README (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/README (revision 28)
@@ -0,0 +1,20 @@
+
+Quick hack commandline tools to interact with Altera FPGA Virtual JTAG interfaces,
+using the USB Blaster device (as integrated on Terasic dev boards, etc).
+
+Not terribly fancy or optimized but only depends on libusb-1.0
+
+Currently does not support multiple devices on the chain.
+
+jtag.c - provides simple jtag interface
+jtag-virtual.c - provides simple virtual jtag interface
+
+jload.c - example of using the virtual jtag interface for a downloader interface
+ with a CTRL/ADDR/DATA register set. CTRL[0] asserts reset, writes to
+ DATA store to [ADDR] and auto-increment ADRR.
+
+jinfo.c - dumps idcode and virtual jtag hub and device info table
+
+
+Why? Scripting the Altera quartus_stp tool in TCL was driving me nuts.
+
mpsoc/src_c/jtag/simple_jtag/README
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/jconsole.c
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/jconsole.c (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/jconsole.c (revision 28)
@@ -0,0 +1,135 @@
+#include
+#include
+#include
+#include
+#include
+
+
+#include
+#include "jtag.h"
+
+#define VIR_CTRL 0x0
+#define VIR_ADDR 0x1
+#define VIR_DATA 0x2
+#define VIR_UART 0x7
+
+
+#define UPDATE_WB_ADDR 0x7
+#define UPDATE_WB_WR_DATA 0x6
+#define UPDATE_WB_RD_DATA 0x5
+#define RD_WR_STATUS 0x4
+
+int main(int argc, char **argv) {
+ //unsigned bits;
+ //unsigned int val;
+
+ //unsigned bits;
+ uint32_t val;
+ FILE *fp;
+
+ if (argc != 2) {
+ fprintf(stderr,"usage: download bin file\n");
+ return -1;
+ }
+ fp = fopen(argv[1],"rb");
+ if (!fp) return -1;
+
+ if (jtag_open_virtual_device(126))
+ return -1;
+
+
+ int i=0;
+ unsigned int out;
+//disable the cpu
+ jtag_vir(RD_WR_STATUS);
+ jtag_vdr(32, 0xFFFFFFFF, &out);
+ printf ("status=%x\n",out);
+ getchar();
+//
+ jtag_vir(UPDATE_WB_WR_DATA);
+ unsigned char ch;
+ char cnt=0;
+ val=0;
+ ch=fgetc(fp);
+ while(!feof(fp)){
+ val<<=8;
+ val|=ch;
+ cnt++;
+ printf("ch=%x\t",ch);
+ if(cnt==4){
+ printf("%d:%x\n",i,val);
+ jtag_vdr(32, val, 0);
+ val=0;
+ cnt=0;
+ i++;
+ }
+ ch=fgetc(fp);
+ }
+ if( cnt>0){
+ val<<=(8 *(4-cnt));
+ printf("%d:%x\n",i,val);
+ jtag_vdr(32, val, 0);
+
+ }
+
+
+ getchar();
+/*
+ printf ("start=\n");
+ jtag_vir(UPDATE_WB_ADDR);
+ jtag_vdr(32, 0, 0);
+ jtag_vir(UPDATE_WB_WR_DATA);
+
+ for(i=0;i<1000; i++){
+ //printf ("addr=\n");
+ //scanf("%x", &val);
+
+ jtag_vdr(32, 2*i, 0);
+ //jtag_vdr(32, 0, &out);
+ //printf ("out=%x\n",out);
+
+ printf ("data=\n");
+ scanf("%x", &val);
+ jtag_vir(UPDATE_WB_WR_DATA);
+ jtag_vdr(32, val, 0);
+
+ printf ("data=\n");
+ scanf("%x", &val);
+ jtag_vdr(32, val, 0);
+
+ printf ("data=\n");
+ scanf("%x", &val);
+ jtag_vdr(32, val, 0);
+
+
+ }
+*/
+ printf ("done programing\n");
+ jtag_vir(UPDATE_WB_RD_DATA);
+ jtag_vdr(32, 0, &out);
+ for(i=1;i<1001; i++){
+ jtag_vdr(32, i, &out);
+ printf ("out[%d]=%x\n",i-1,out);
+
+
+ }
+
+ jtag_vir(RD_WR_STATUS);
+ jtag_vdr(32, 0, &out);
+ printf ("status=%x\n",out);
+ for (;;) {
+ /*
+ jtag_vdr(9, 0, &bits);
+ if (bits & 0x100) {
+ bits &= 0xFF;
+ if ((bits < ' ') || (bits > 127))
+ fputc('.', stderr);
+ else
+ fputc(bits, stderr);
+ }
+ */
+ }
+
+ return 0;
+}
+
mpsoc/src_c/jtag/simple_jtag/jconsole.c
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/jinfo.c
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/jinfo.c (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/jinfo.c (revision 28)
@@ -0,0 +1,37 @@
+/* Copyright 2012 Brian Swetland
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include "jtag.h"
+
+int main(int argc, char **argv) {
+ unsigned bits;
+
+ if (jtag_open() < 0)
+ return -1;
+
+ if (jtag_reset() < 0)
+ return -1;
+
+ if (jtag_dr(32, 0, &bits) < 0)
+ return -1;
+ fprintf(stderr,"IDCODE: %08x\n", bits);
+
+ if (jtag_open_virtual_device(0xffffffff))
+ return -1;
+
+ jtag_close();
+ return 0;
+}
mpsoc/src_c/jtag/simple_jtag/jinfo.c
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/jtag-virtual.c
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/jtag-virtual.c (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/jtag-virtual.c (revision 28)
@@ -0,0 +1,141 @@
+/* Copyright 2012 Brian Swetland
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+
+#include "jtag.h"
+
+int jtag_dr_8x4(unsigned *out) {
+ unsigned bits = 0;
+ unsigned tmp;
+ int n, r;
+
+ for (n = 0; n < 8; n++) {
+ if ((r = jtag_dr(4, 0, &tmp)) < 0) return r;
+ bits |= (tmp <<= (n * 4));
+ }
+ *out = bits;
+ return 0;
+}
+
+/* number of bits needed given a max value 1-255 */
+unsigned needbits(unsigned max) {
+ if (max > 127) return 8;
+ if (max > 63) return 7;
+ if (max > 31) return 6;
+ if (max > 15) return 5;
+ if (max > 7) return 4;
+ if (max > 3) return 3;
+ if (max > 1) return 2;
+ return 1;
+}
+
+static unsigned ir_width = 10;
+
+static unsigned hub_version = 0;
+static unsigned hub_nodecount = 0;
+static unsigned hub_mfg = 0;
+
+static unsigned vir_width = 0;
+static unsigned vir_width_addr = 0;
+static unsigned vir_width_ir = 0;
+static unsigned vir_addr = 0;
+
+
+int jtag_vir(unsigned vir) {
+ int r;
+ if ((r = jtag_ir(ir_width, 14)) < 0) return r;
+ if ((r = jtag_dr(vir_width, vir_addr | vir, 0)) < 0) return r;
+ return 0;
+}
+
+int jtag_vdr(unsigned sz, unsigned bits, unsigned *out) {
+ int r;
+ if ((r = jtag_ir(ir_width, 12)) < 0) return r;
+ if ((r = jtag_dr(sz, bits, out)) < 0) return r;
+ return 0;
+}
+
+int jtag_vdr_long(unsigned sz, unsigned * bits, unsigned *out, int words) {
+ int r;
+ if ((r = jtag_ir(ir_width, 12)) < 0) return r;
+ if ((r = jtag_dr_long(sz, bits, out, words)) < 0) return r;
+ return 0;
+}
+
+int jtag_open_virtual_device(unsigned iid) {
+ unsigned n, bits;
+ int r;
+
+ if ((r = jtag_open()) < 0) return r;
+
+ if ((r = jtag_reset()) < 0) return r;
+
+ /* select empty node_addr + node_vir -- all zeros */
+ if ((r = jtag_ir(ir_width, 14)) < 0) return r;
+ if ((r = jtag_dr(32, 0, 0)) < 0) return r;
+
+ /* select vdr - this will be the hub info (addr=0,vir=0) */
+ if ((r = jtag_ir(ir_width, 12)) < 0) return r;
+
+ /* read hub info */
+ if ((r = jtag_dr_8x4(&bits)) < 0) return r;
+ hub_version = (bits >> 27) & 0x1F;
+ hub_nodecount = (bits >> 19) & 0xFF;
+ hub_mfg = (bits >> 8) & 0x7FF;
+
+ if (hub_mfg != 0x06e) {
+ fprintf(stderr,"hub_version=%x, hub_nodecount=%x, hub_mfg=%x \n",hub_version, hub_nodecount, hub_mfg);
+
+ fprintf(stderr,"HUB: Cannot Find Virtual JTAG HUB\n");
+ return -1;
+ }
+
+ /* altera docs claim this field is the sum of M bits (VIR field) and
+ * N bits (ADDR field), but empirical evidence suggests it is actually
+ * just the width of the ADDR field and the docs are wrong...
+ */
+ vir_width_ir = bits & 0xFF;
+ vir_width_addr = needbits(hub_nodecount);
+ vir_width = vir_width_ir + vir_width_addr;
+
+ fprintf(stderr,"HUB: Mfg=0x%03x, Ver=0x%02x, Nodes=%d, VIR=%d+%d bits\n",
+ hub_mfg, hub_version, hub_nodecount, vir_width_addr, vir_width_ir);
+
+ for (n = 0; n < hub_nodecount; n++) {
+ unsigned node_ver, node_id, node_mfg, node_iid;
+ if ((r = jtag_dr_8x4(&bits)) < 0) return r;
+ node_ver = (bits >> 27) & 0x1F;
+ node_id = (bits >> 19) & 0xFF;
+ node_mfg = (bits >> 8) & 0x7FF;
+ node_iid = bits & 0xFF;
+
+ fprintf(stderr,"NODE: Mfg=0x%03x, Ver=0x%02x, ID=0x%02x, IID=0x%02x\n",
+ node_mfg, node_ver, node_id, node_iid);
+
+ if ((node_id == 0x08) && (node_iid) == iid) {
+ vir_addr = (n + 1) << vir_width_ir;
+ }
+ }
+
+ if ((vir_addr == 0) && (iid < 256)) {
+ fprintf(stderr,"ERROR: IID 0x%02x not found\n", iid);
+ return -1;
+ }
+ return 0;
+}
+
+
mpsoc/src_c/jtag/simple_jtag/jtag-virtual.c
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/jtag.c
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/jtag.c (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/jtag.c (revision 28)
@@ -0,0 +1,332 @@
+/* Copyright 2012 Brian Swetland
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+#include
+
+#define TRACE_USB 0
+#define TRACE_JTAG 0
+
+#define TIMOUT 1000
+
+/* You may want to change the VENDOR_ID and PRODUCT_ID
+ * depending on your device.
+ */
+#define VENDOR_ID 0x09fb // Altera
+#define PRODUCT_ID 0x6001 // usb blaster (DE2-115)
+// Altera usb blaster product IDs "6001", "6002", "6003", MODE="0666"
+// dose not work for USB-Blaster II "6010", "6810"
+// run ./list_usb_dev to see the list of all usb devices' vid and pid
+
+static struct libusb_device_handle *udev;
+static int usb_open(unsigned vid, unsigned pid) {
+ if (libusb_init(NULL) < 0)
+ return -1;
+
+ if (!(udev = libusb_open_device_with_vid_pid(NULL, vid, pid))) {
+ fprintf(stderr,"cannot find device\n");
+ return -1;
+ }
+
+ if (libusb_claim_interface(udev, 0) < 0) {
+ fprintf(stderr,"cannot claim interface\n");
+ return -1;
+ }
+ return 0;
+}
+static void usb_close(void) {
+ libusb_exit(NULL);
+}
+#if TRACE_USB
+static void dump(char *prefix, void *data, int len) {
+ unsigned char *x = data;
+ fprintf(stderr,"%s: (%d)", prefix, len);
+ while (len > 0) {
+ fprintf(stderr," %02x", *x++);
+ len--;
+ }
+ fprintf(stderr,"\n");
+}
+#endif
+static int usb_bulk(unsigned char ep, void *data, int len, unsigned timeout) {
+ int r, xfer;
+#if TRACE_USB
+ if (!(ep & 0x80))
+ dump("xmit", data, len);
+#endif
+ r = libusb_bulk_transfer(udev, ep, data, len, &xfer, timeout);
+ if (r < 0) {
+ fprintf(stderr,"bulk: error: %d\n", r);
+ return r;
+ }
+#if TRACE_USB
+ if (ep & 0x80)
+ dump("recv", data, xfer);
+#endif
+ return xfer;
+}
+
+#define EP1_IN 0x81
+#define EP2_OUT 0x02
+
+#define UB_BYTEMODE 0x80
+#define UB_BITMODE 0x00
+#define UB_READBACK 0x40
+
+/* bits in bit mode */
+#define UB_OE 0x20
+#define UB_TDI 0x10
+#define UB_nCS 0x08
+#define UB_nCE 0x04
+#define UB_TMS 0x02
+#define UB_TCK 0x01
+#define BUFF_SZ 512
+/* bytecount for data bytes that follow in byte mode */
+#define UB_COUNT(n) ((n) & 0x3F)
+
+int jtag_move(int count, unsigned bits){
+ unsigned char buf[BUFF_SZ];
+ int n = 0;
+#if TRACE_JTAG
+ fprintf(stderr,"move: %08x (%d)\n", bits, count);
+#endif
+ while (count-- > 0) {
+ if (bits & 1) {
+ buf[n++] = UB_TMS;
+ buf[n++] = UB_TMS | UB_TCK;
+ } else {
+ buf[n++] = 0;
+ buf[n++] = UB_TCK;
+ }
+ bits >>= 1;
+ }
+ return usb_bulk(EP2_OUT, buf, n, TIMOUT);
+}
+
+int jtag_shift(int count, unsigned bits, unsigned *out) {
+ unsigned char buf[BUFF_SZ];
+ unsigned RB = out ? UB_READBACK : 0;
+ int n = 0;
+ int readcount = count;
+ int r,bit;
+#if TRACE_JTAG
+ fprintf(stderr,"xfer: %08x (%d)\n", bits, count);
+#endif
+ while (count-- > 0) {
+ if (bits & 1) {
+ buf[n++] = UB_TDI;
+ buf[n++] = UB_TDI | UB_TCK | RB;
+ } else {
+ buf[n++] = 0;
+ buf[n++] = UB_TCK | RB;
+ }
+ bits >>= 1;
+ }
+ buf[n-1] |= UB_TMS;
+ buf[n-2] |= UB_TMS;
+ r = usb_bulk(EP2_OUT, buf, n, TIMOUT);
+ if (r < 0)
+ return r;
+ if (!out)
+ return 0;
+ bits = 0;
+ bit = 1;
+ while (readcount > 0) {
+ r = usb_bulk(EP1_IN, buf, BUFF_SZ, TIMOUT);
+ if (r < 0)
+ return r;
+ if (r < 3)
+ continue;
+ for (n = 2; n < r; n++) {
+ if (buf[n] & 1)
+ bits |= bit;
+ bit <<= 1;
+ readcount--;
+ if (readcount == 0) {
+#if TRACE_JTAG
+ fprintf(stderr," : %08x\n", bits);
+#endif
+ *out = bits;
+ return 0;
+ }
+ }
+ }
+ return -1;
+}
+
+
+int jtag_shift_long(int count, unsigned * bits, unsigned *out) {
+ unsigned char buf[BUFF_SZ];
+ unsigned RB = out ? UB_READBACK : 0;
+ int n = 0;
+ int readcount = count;
+ int r,bit;
+ unsigned int p=0;
+
+#if TRACE_JTAG
+ fprintf(stderr,"xfer: %08x (%d)\n", bits[count>>5], count);
+#endif
+ while (count-- > 0) {
+ p=((readcount-count)-1)>>5;
+ if (bits[p] & 1) {
+ buf[n++] = UB_TDI;
+ buf[n++] = UB_TDI | UB_TCK | RB;
+ } else {
+ buf[n++] = 0;
+ buf[n++] = UB_TCK | RB;
+ }
+ bits[p] = bits[p] >> 1;
+ }
+ buf[n-1] |= UB_TMS;
+ buf[n-2] |= UB_TMS;
+ r = usb_bulk(EP2_OUT, buf, n, TIMOUT);
+ if (r < 0)
+ return r;
+ if (!out)
+ return 0;
+
+ unsigned B = 0;
+ bit = 1;
+
+ count=readcount;
+ int shift=0;
+ while (readcount > 0) {
+
+ r = usb_bulk(EP1_IN, buf, BUFF_SZ, TIMOUT);
+ //int j;
+ //for(j=0;j>5;
+ //printf("%u",buf[n]&1);
+ if (buf[n] & 1)
+ B |= bit;
+ bit <<= 1;
+ shift++;
+ if(shift%32==0){
+ bit=1;
+ out[p]= B;
+ //printf("out[%u]=%x\n",p, out[p]);
+ B=0;
+
+
+ }
+ readcount--;
+ if (readcount == 0 ) {
+#if TRACE_JTAG
+ fprintf(stderr," : %08x\n", bits[p]);
+#endif
+ if (shift%32!=0) out[p]= B;
+ //printf("out[%u]=%x\n",p, out[p]);
+ return 0;
+ }
+ }
+ }
+ return -1;
+}
+
+
+
+/* JTAG notes
+ *
+ * TMS is sampled on +TCK
+ * Capture-XR state loads shift register on +TCK as state is exited
+ * Shift-XR state TDO goes active (containing shiftr[0]) on the first -TCK
+ * after entry, shifts occur on each +TCK, *including* the +TCK
+ * that will exist Shift-XR when TMS=1 again
+ * Update-XR update occurs on the -TCK after entry to state
+ *
+ * Any -> Reset: 11111
+ * Any -> Reset -> RTI: 111110
+ * RTI -> ShiftDR: 100
+ * ShiftDR shifting: 0 x N
+ * ShiftDR -> UpdateDR -> RTI: 110
+ * ShiftDR -> UpdateDR -> ShiftDR: 11100
+ * RTI -> ShiftIR: 1100
+ * ShiftIR shifting: 0 x N
+ * ShiftIR -> UpdateIR -> RTI: 110
+ */
+
+#define RESET 8,0b01111111
+#define SHIFTDR 3,0b001
+#define SHIFTIR 4,0b0011
+#define DONE 2,0b01
+#define AGAIN 4,0b0011
+
+int jtag_ir(unsigned sz, unsigned bits) {
+ int r;
+ if ((r = jtag_move(SHIFTIR)) < 0) return r;
+ if ((r = jtag_shift(sz, bits, 0)) < 0) return r;
+ if ((r = jtag_move(DONE)) < 0) return r;
+ return 0;
+}
+
+int jtag_dr(unsigned sz, unsigned bits, unsigned *out) {
+ int r;
+ if ((r = jtag_move(SHIFTDR)) < 0) return r;
+ if ((r = jtag_shift(sz, bits, out)) < 0) return r;
+ if ((r = jtag_move(DONE)) < 0) return r;
+ return 0;
+}
+
+int jtag_dr_long(unsigned sz, unsigned * bits, unsigned *out, int words) {
+ int r;
+ //unsigned s=32;
+ if ((r = jtag_move(SHIFTDR)) < 0) return r;
+ //for(i=0;i
mpsoc/src_c/jtag/simple_jtag/jtag.c
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/jtag.h
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/jtag.h (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/jtag.h (revision 28)
@@ -0,0 +1,50 @@
+/* Copyright 2012 Brian Swetland
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _JTAG_H_
+#define _JTAG_H_
+
+int jtag_open(void);
+int jtag_close(void);
+
+/* move into RESET state */
+int jtag_reset(void);
+
+/* clock count times, TDI=0, TMS=bits[0], bits >>= 1 */
+int jtag_move(int count, unsigned bits);
+
+/* clock count-1 times, TMS=0, TDI=bits[0], bits >>= 1
+ * clock 1 time, TMS=1, TDI=bits[0]
+ * if out, capture TDO into out
+ */
+int jtag_shift(int count, unsigned bits, unsigned *out);
+
+
+/* load sz bits into IR */
+int jtag_ir(unsigned sz, unsigned bits);
+
+/* load sz bits into DR, capture sz bits into out if non-null */
+int jtag_dr(unsigned sz, unsigned bits, unsigned *out);
+int jtag_dr_long(unsigned sz, unsigned * bits, unsigned *out, int words);
+
+
+
+/* altera virtual jtag support */
+int jtag_open_virtual_device(unsigned iid);
+int jtag_vir(unsigned vir);
+int jtag_vdr(unsigned sz, unsigned bits, unsigned *out);
+int jtag_vdr_long(unsigned , unsigned * , unsigned *, int );
+
+#endif
mpsoc/src_c/jtag/simple_jtag/jtag.h
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/jtag_main.c
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/jtag_main.c (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/jtag_main.c (revision 28)
@@ -0,0 +1,438 @@
+#include
+#include
+#include
+#include
+#include // getopt
+#include
+#include
+#include "jtag.h"
+
+
+
+
+#define UPDATE_WB_ADDR 0x7
+#define UPDATE_WB_WR_DATA 0x6
+#define UPDATE_WB_RD_DATA 0x5
+#define RD_WR_STATUS 0x4
+
+#define BIT_NUM (word_width<<3)
+#define BYTE_NUM word_width
+/* Global vars */
+unsigned int index_num=126;
+unsigned int word_width=4; //
+unsigned int write_verify=0;
+unsigned int memory_offset=0;
+unsigned int memory_boundary=0xFFFFFFFF;
+
+
+
+char * binary_file_name=0;
+char enable_binary_send=0;
+char * write_data=0;
+
+
+
+
+/* functions */
+int send_binary_file();
+void usage();
+void processArgs (int , char** );
+int send_data ();
+int hexcut( char * , unsigned * , int );
+int vdr_large (unsigned , char * , char *);
+void hexgen( char * , unsigned *, int );
+
+int main(int argc, char **argv) {
+ //unsigned bits;
+ //unsigned int val;
+
+ //unsigned bits;
+ //unsigned val;
+
+ processArgs (argc, argv );
+ printf("index num=%u\n",index_num);
+ if (jtag_open_virtual_device(index_num)){
+ fprintf (stderr, "Error openning jtag IP with %d index num\n",index_num);
+ return -1;
+ }
+ if (enable_binary_send) {
+ if( send_binary_file() == -1) return -1;
+ }
+
+ if (write_data!=0){
+ printf("send %s to jtag\n",write_data);
+ send_data();
+
+
+ }
+
+ return 0;
+}
+
+
+
+void usage(){
+
+ printf ("usage:./jtag_main [-n index number] [-i file_name][-c][-s rd/wr offset address][-d string]\n");
+
+ printf ("\t-n index number: the target jtag IP core index number. The default number is 126\n");
+ printf ("\t-i file_name: input binary file name (.bin file)\n");
+ printf ("\t-w bin file word width in byte. default is 4 bytes (32 bits)\n");
+ printf ("\t-c verify after write\n");
+ printf ("\t-s memory wr/rd offset address in hex. The default value is 0x0000000\n");
+ printf ("\t-e memory boundary address in hex. The default value is 0xFFFFFFFF\n");
+ printf ("\t-d string: use for setting instruction or data value to jtag tap. string format : \"instr1,instr2,...,instrn\"\n \tinstri = I:instruct_num: send instruct_num to instruction register \n \tD:data_size_in_bit:data : send data in hex to data register\n \tR:data_size_in_bit:data : Read data register and show it on screan then write given data in hex to data register\n");
+
+}
+
+void processArgs (int argc, char **argv )
+{
+ char c;
+int p;
+
+ /* don't want getopt to moan - I can do that just fine thanks! */
+ opterr = 0;
+ if (argc < 2) usage();
+ while ((c = getopt (argc, argv, "s:e:d:n:i:w:c")) != -1)
+ {
+ switch (c)
+ {
+ case 'n': /* index number */
+ index_num = atoi(optarg);
+ break;
+ case 'i': /* input binary file name */
+ binary_file_name = optarg;
+ enable_binary_send=1;
+ break;
+ case 'w': /* word width in byte */
+ word_width= atoi(optarg);
+ break;
+ case 'c': /* word width in byte */
+ write_verify= 1;
+ break;
+ case 'd': /* word width in byte */
+ write_data= optarg;
+ break;
+ case 's': /* word width in byte */
+
+ p=sscanf(optarg,"%x",&memory_offset);
+ if( p==0){
+ fprintf (stderr, "invalid memory offset adress format `%s'.\n", optarg);
+ usage();
+ exit(1);
+ }
+ //printf("p=%d,memory_offset=%x\n",p,memory_offset);
+ break;
+ case 'e': /* word width in byte */
+ p=sscanf(optarg,"%x",&memory_boundary);
+ if( p==0){
+ fprintf (stderr, "invalid memory boundary adress format `%s'.\n", optarg);
+ usage();
+ exit(1);
+ }
+ break;
+
+ case '?':
+ if (isprint (optopt))
+ fprintf (stderr, "Unknown option `-%c'.\n", optopt);
+ else
+ fprintf (stderr,
+ "Unknown option character `\\x%x'.\n",
+ optopt);
+ default:
+ usage();
+ exit(1);
+ }
+ }
+}
+
+unsigned * read_file (FILE * fp, unsigned int * n ){
+
+ unsigned * buffer;
+ unsigned val;
+ unsigned char ch;
+ unsigned int i=0;
+ char cnt=0;
+ unsigned int num=0;
+ unsigned int width= (BYTE_NUM < sizeof(unsigned )) ? BYTE_NUM : sizeof(unsigned ); //max is 4 then
+ fseek(fp, 0, SEEK_END); // seek to end of file
+ num = ftell(fp); // get current file pointer
+ *n=num;// number of bytes from the beginning of the file
+
+
+
+
+ num=(num/width)+2;
+ fseek(fp, 0, SEEK_SET);
+ //printf ("num=%u\n",num);
+ buffer = (unsigned *) malloc(num * sizeof(unsigned ) ); //memory allocated using malloc
+ if(buffer == NULL)
+ {
+ printf("Error! memory not allocated.");
+ exit(0);
+ }
+ ch=fgetc(fp);
+
+ while(!feof(fp)){
+ val<<=8;
+ val|=ch;
+ cnt++;
+ //printf("ch=%x\t",ch);
+ if(cnt==width){
+ //printf("%d:%x\n",i,val);
+ buffer[i] = val;
+ val=0;
+ cnt=0;
+ i++;
+ }
+ ch=fgetc(fp);
+ }
+ if( cnt>0){
+ val<<=(8 *(width-cnt));
+ printf("%d:%x\n",i,val);
+ buffer[i] = val;
+
+ }
+
+return buffer;
+
+}
+
+
+
+int send_data ()
+{
+ char * pch;
+ char string[100];
+ int bit=0, inst=0, d=0;
+ char out[100];
+ pch = strtok (write_data,",");
+ printf("%s\n",pch);
+ while (pch != NULL)
+ {
+ while(1){
+ d=1;
+ if(sscanf( pch, "D:%d:%s", &bit, string )) break;
+ if(sscanf( pch, "d:%d:%s", &bit, string )) break;
+ //if(sscanf( pch, "D:%d:" PRIx64 , &bit, &data )) break;
+ //if(sscanf( pch, "d:%d:%016x", &bit, &data )) break;
+ d=2;
+ if(sscanf( pch, "R:%d:%s",&bit, string)) break;
+ if(sscanf( pch, "r:%d:%s",&bit, string)) break;
+ d=0;
+ if(sscanf( pch, "I:%d", &inst)) break;
+ if(sscanf( pch, "i:%d", &inst)) break;
+ printf("invalid format : %s\n",pch);
+ return -1;
+
+ }
+ if(d==1){
+ //printf ("(bit=%d, data=%s)",bit, string);
+ //jtag_vdr(bit, data, 0);
+ vdr_large(bit,string,0);
+ }if(d==2){
+
+ vdr_large(bit,string,out);
+ printf("###read data#%s###read data#\n",out);
+ }else{
+
+ jtag_vir(inst);
+ //printf("%d\n",inst);
+ }
+
+ pch = strtok (NULL, ",");
+
+ }
+ return 0;
+}
+
+int compare_values( unsigned * val1, unsigned * val2, int words, unsigned int address){
+
+ int i,error=0;
+ for(i=0;imem_size){
+ printf("\n\n Warning: %s file size (%x) is larger than the given memory size (%x). I will stop writing on end of memory address\n\n",binary_file_name,file_size,mem_size);
+ file_size=mem_size;
+ }
+ fclose(fp);
+ //disable the cpu
+ jtag_vir(RD_WR_STATUS);
+ jtag_vdr(BIT_NUM, 0x1, &out);
+ //getchar();
+ jtag_vir(UPDATE_WB_ADDR);
+ // change memory sizes from byte to word
+ memory_offset_in_word=memory_offset /BYTE_NUM;
+ //size of buffer
+ num= (BYTE_NUM < sizeof(unsigned )) ? file_size /BYTE_NUM : file_size /sizeof(unsigned );
+
+ jtag_vdr(BIT_NUM, memory_offset_in_word, 0);
+ jtag_vir(UPDATE_WB_WR_DATA);
+
+ printf ("start programing\n");
+ //printf ("num=%d\n",num);
+ for(i=0;isize)? 0 : size-count*8;
+
+ sscanf(hexstring+start, "%08x", &val[count-1]);
+ *(hexstring+start)=0;
+ }
+
+ // printf("size=%d, hexnum=%u\n",size,hexnum);
+
+
+ return hexnum;
+}
+
+
+void hexgen( char * hexstring, unsigned * val, int words ){
+ size_t count = 0;
+ sprintf(hexstring,"0x");
+ for(count = 0; count < words; count++) {
+ if(count == 0) sprintf((hexstring+2),"%x",val[words-count-1]);
+ else sprintf(hexstring,"%08x",val[words-count-1]);
+ hexstring+=strlen(hexstring);
+ }
+
+ // return hexnum;
+}
+
+
mpsoc/src_c/jtag/simple_jtag/jtag_main.c
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/list_usb_dev.c
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/list_usb_dev.c (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/list_usb_dev.c (revision 28)
@@ -0,0 +1,59 @@
+#include
+#include
+#include
+#include
+#include
+#include
+
+
+int main(){
+// discover devices
+
+if (libusb_init(NULL) < 0)
+ return -1;
+
+
+
+
+
+
+
+
+
+
+libusb_context *ctx=NULL;
+//uint16_t vendor_id,
+//uint16_t product_id
+
+ struct libusb_device **devs;
+ //struct libusb_device *found = NULL;
+ struct libusb_device *dev;
+ //struct libusb_device_handle *handle = NULL;
+ size_t i = 0;
+ int r;
+ if (libusb_get_device_list(ctx, &devs) < 0)
+ return -1;
+ while ((dev = devs[i++]) != NULL) {
+ struct libusb_device_descriptor desc;
+ r = libusb_get_device_descriptor(dev, &desc);
+ if (r < 0)
+ goto out;
+ printf("vid=%x,\t pid=%x\n",desc.idVendor,desc.idProduct);
+ //if (desc.idVendor == vendor_id && desc.idProduct == product_id) {
+ // found = dev;
+ // break;
+ //}
+ }
+ //if (found) {
+ // r = libusb_open(found, &handle);
+ // if (r < 0)
+ // handle = NULL;
+ //}
+out:
+ libusb_free_device_list(devs, 1);
+ //return handle;
+
+return 0;
+
+}
+
mpsoc/src_c/jtag/simple_jtag/list_usb_dev.c
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_c/jtag/simple_jtag/usb-blaster-protocol.txt
===================================================================
--- mpsoc/src_c/jtag/simple_jtag/usb-blaster-protocol.txt (nonexistent)
+++ mpsoc/src_c/jtag/simple_jtag/usb-blaster-protocol.txt (revision 28)
@@ -0,0 +1,60 @@
+http://sf.net/apps/mediawiki/urjtag/index.php?title=Cable_Altera_USB-Blaster
+----------------------------------------------------------------------------
+
+Altera USB-Blaster
+------------------
+
+General
+-------
+ _________
+ | |
+ | AT93C46 |
+ |_________|
+ __|__________ _________
+ | | | |
+ USB__| FTDI 245BM |__| EPM7064 |__JTAG (B_TDO,B_TDI,B_TMS,B_TCK)
+ |_____________| |_________|
+ __|__________ _|___________
+ | | | |
+ | 6 MHz XTAL | | 24 MHz Osc. |
+ |_____________| |_____________|
+
+
+Quoting from ixo.de (http://www.ixo.de/info/usb_jtag/)
+usb_jtag/device/c51/usbjtag.c comments:
+
+usb_jtag firmware now happens to behave just like the combination of
+FT245BM and Altera-programmed EPM7064 CPLD in Altera's USB-Blaster.
+The CPLD knows two major modes: Bit banging mode and Byte shift mode.
+It starts in Bit banging mode. While bytes are received from the host
+on EP2OUT, each byte B of them is processed as follows:
+
+Bit banging mode
+----------------
+1. Remember bit 6 (0x40) in B as the "Read bit".
+2. If bit 7 (0x80) is set, switch to Byte shift mode for the coming X
+ bytes ( X := B & 0x3F ), and don't do anything else now.
+3. Otherwise, set the JTAG signals as follows:
+ - TCK/DCLK high if bit 0 was set (0x01), otherwise low
+ - TMS/nCONFIG high if bit 1 was set (0x02), otherwise low
+ - nCE high if bit 2 was set (0x04), otherwise low
+ - nCS high if bit 3 was set (0x08), otherwise low
+ - TDI/ASDI/DATAO high if bit 4 was set (0x10), otherwise low
+ - Output Enable/LED active if bit 5 was set (0x20), otherwise low
+4. If "Read bit" (0x40) was set, record the state of TDO(CONF_DONE) and
+ DATAOUT/(nSTATUS) pins and put is as a byte( (DATAOUT<<1)|TDO) in the
+ output FIFO _to_ the host.
+
+Byte shift mode
+---------------
+1. Load shift register with byte from host
+2. Do 8 times (i.e. for each bit of the byte; implemented in shift.a51)
+ - if nCS=1, set carry bit from TDO, else set carry bit from DATAOUT
+ (Active Serial mode)
+ - Rotate shift register through carry bit
+ - TDI := Carry bit
+ - Raise TCK, then lower TCK.
+3. If "Read bit" was set when switching into byte shift mode, record the
+ shift register content and put it into the FIFO to the host.
+
+
mpsoc/src_c/jtag/simple_jtag/usb-blaster-protocol.txt
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_emulate/fpga/DE4_230/DE4_230.qsf
===================================================================
--- mpsoc/src_emulate/fpga/DE4_230/DE4_230.qsf (nonexistent)
+++ mpsoc/src_emulate/fpga/DE4_230/DE4_230.qsf (revision 28)
@@ -0,0 +1,2288 @@
+#============================================================
+# Build by Terasic System Builder V1.0.0
+#============================================================
+
+set_global_assignment -name FAMILY "Stratix IV"
+set_global_assignment -name DEVICE EP4SGX230KF40C2
+set_global_assignment -name ORIGINAL_QUARTUS_VERSION 9.1
+set_global_assignment -name LAST_QUARTUS_VERSION "11.1 SP1"
+set_global_assignment -name PROJECT_CREATION_TIME_DATE "17:41:29 NOVEMBER 25,2009"
+set_global_assignment -name DEVICE_FILTER_PIN_COUNT 1152
+set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 2
+
+#============================================================
+# Pin Assign
+#============================================================
+set_location_assignment PIN_AH5 -to BUTTON[0]
+set_location_assignment PIN_AG5 -to BUTTON[1]
+set_location_assignment PIN_AG7 -to BUTTON[2]
+set_location_assignment PIN_AG8 -to BUTTON[3]
+set_location_assignment PIN_V34 -to CPU_RESET_n
+set_location_assignment PIN_AK13 -to CSENSE_ADC_F0
+set_location_assignment PIN_AG14 -to CSENSE_CS_n[0]
+set_location_assignment PIN_AG15 -to CSENSE_CS_n[1]
+set_location_assignment PIN_AH13 -to CSENSE_SCK
+set_location_assignment PIN_AJ13 -to CSENSE_SDI
+set_location_assignment PIN_AK14 -to CSENSE_SDO
+set_location_assignment PIN_G33 -to EEP_SCL
+set_location_assignment PIN_F33 -to EEP_SDA
+set_location_assignment PIN_B20 -to ETH_INT_n[0]
+set_location_assignment PIN_AG30 -to ETH_INT_n[1]
+set_location_assignment PIN_AE30 -to ETH_INT_n[2]
+set_location_assignment PIN_AE31 -to ETH_INT_n[3]
+set_location_assignment PIN_R30 -to ETH_MDC[0]
+set_location_assignment PIN_J6 -to ETH_MDC[1]
+set_location_assignment PIN_K6 -to ETH_MDC[2]
+set_location_assignment PIN_N7 -to ETH_MDC[3]
+set_location_assignment PIN_W32 -to ETH_MDIO[0]
+set_location_assignment PIN_J5 -to ETH_MDIO[1]
+set_location_assignment PIN_K5 -to ETH_MDIO[2]
+set_location_assignment PIN_N8 -to ETH_MDIO[3]
+set_location_assignment PIN_V29 -to ETH_RST_n
+set_location_assignment PIN_U31 -to ETH_RX_p[0]
+set_location_assignment PIN_N33 -to ETH_RX_p[1]
+set_location_assignment PIN_K34 -to ETH_RX_p[2]
+set_location_assignment PIN_J34 -to ETH_RX_p[3]
+set_location_assignment PIN_T30 -to ETH_TX_p[0]
+set_location_assignment PIN_R32 -to ETH_TX_p[1]
+set_location_assignment PIN_M32 -to ETH_TX_p[2]
+set_location_assignment PIN_P31 -to ETH_TX_p[3]
+set_location_assignment PIN_AC11 -to EXT_IO
+set_location_assignment PIN_AP20 -to FAN_CTRL
+set_location_assignment PIN_F21 -to FLASH_ADV_n
+set_location_assignment PIN_F23 -to FLASH_CE_n
+set_location_assignment PIN_E22 -to FLASH_CLK
+set_location_assignment PIN_N21 -to FLASH_OE_n
+set_location_assignment PIN_G21 -to FLASH_RYBY_n
+set_location_assignment PIN_D21 -to FLASH_RESET_n
+set_location_assignment PIN_R20 -to FLASH_WE_n
+set_location_assignment PIN_G22 -to FSM_A[1]
+set_location_assignment PIN_F34 -to FSM_A[10]
+set_location_assignment PIN_G35 -to FSM_A[11]
+set_location_assignment PIN_E34 -to FSM_A[12]
+set_location_assignment PIN_J32 -to FSM_A[13]
+set_location_assignment PIN_F35 -to FSM_A[14]
+set_location_assignment PIN_C24 -to FSM_A[15]
+set_location_assignment PIN_A24 -to FSM_A[16]
+set_location_assignment PIN_D23 -to FSM_A[17]
+set_location_assignment PIN_D24 -to FSM_A[18]
+set_location_assignment PIN_T27 -to FSM_A[19]
+set_location_assignment PIN_G23 -to FSM_A[2]
+set_location_assignment PIN_T28 -to FSM_A[20]
+set_location_assignment PIN_D22 -to FSM_A[21]
+set_location_assignment PIN_E23 -to FSM_A[22]
+set_location_assignment PIN_N20 -to FSM_A[23]
+set_location_assignment PIN_P20 -to FSM_A[24]
+set_location_assignment PIN_C22 -to FSM_A[25]
+set_location_assignment PIN_A25 -to FSM_A[3]
+set_location_assignment PIN_H22 -to FSM_A[4]
+set_location_assignment PIN_H23 -to FSM_A[5]
+set_location_assignment PIN_J22 -to FSM_A[6]
+set_location_assignment PIN_K22 -to FSM_A[7]
+set_location_assignment PIN_M21 -to FSM_A[8]
+set_location_assignment PIN_J23 -to FSM_A[9]
+set_location_assignment PIN_K29 -to FSM_D[0]
+set_location_assignment PIN_J30 -to FSM_D[1]
+set_location_assignment PIN_C35 -to FSM_D[10]
+set_location_assignment PIN_D35 -to FSM_D[11]
+set_location_assignment PIN_M22 -to FSM_D[12]
+set_location_assignment PIN_M28 -to FSM_D[13]
+set_location_assignment PIN_C31 -to FSM_D[14]
+set_location_assignment PIN_D31 -to FSM_D[15]
+set_location_assignment PIN_K30 -to FSM_D[2]
+set_location_assignment PIN_L29 -to FSM_D[3]
+set_location_assignment PIN_K31 -to FSM_D[4]
+set_location_assignment PIN_E32 -to FSM_D[5]
+set_location_assignment PIN_F32 -to FSM_D[6]
+set_location_assignment PIN_H32 -to FSM_D[7]
+set_location_assignment PIN_B32 -to FSM_D[8]
+set_location_assignment PIN_C32 -to FSM_D[9]
+set_location_assignment PIN_A21 -to GCLKIN
+set_location_assignment PIN_AH19 -to GCLKOUT_FPGA
+set_location_assignment PIN_AF6 -to GPIO0_D[0]
+set_location_assignment PIN_AU9 -to GPIO0_D[1]
+set_location_assignment PIN_AT5 -to GPIO0_D[10]
+set_location_assignment PIN_AT8 -to GPIO0_D[11]
+set_location_assignment PIN_AP5 -to GPIO0_D[12]
+set_location_assignment PIN_AP7 -to GPIO0_D[13]
+set_location_assignment PIN_AN5 -to GPIO0_D[14]
+set_location_assignment PIN_AN10 -to GPIO0_D[15]
+set_location_assignment PIN_AM5 -to GPIO0_D[16]
+set_location_assignment PIN_AM10 -to GPIO0_D[17]
+set_location_assignment PIN_AL10 -to GPIO0_D[18]
+set_location_assignment PIN_AM8 -to GPIO0_D[19]
+set_location_assignment PIN_AE5 -to GPIO0_D[2]
+set_location_assignment PIN_AL8 -to GPIO0_D[20]
+set_location_assignment PIN_AK8 -to GPIO0_D[21]
+set_location_assignment PIN_AJ11 -to GPIO0_D[22]
+set_location_assignment PIN_AK7 -to GPIO0_D[23]
+set_location_assignment PIN_AJ5 -to GPIO0_D[24]
+set_location_assignment PIN_AH12 -to GPIO0_D[25]
+set_location_assignment PIN_AG10 -to GPIO0_D[26]
+set_location_assignment PIN_AG13 -to GPIO0_D[27]
+set_location_assignment PIN_AG9 -to GPIO0_D[28]
+set_location_assignment PIN_AF11 -to GPIO0_D[29]
+set_location_assignment PIN_AR8 -to GPIO0_D[3]
+set_location_assignment PIN_AT9 -to GPIO0_D[30]
+set_location_assignment PIN_AF10 -to GPIO0_D[31]
+set_location_assignment PIN_AD10 -to GPIO0_D[32]
+set_location_assignment PIN_AD9 -to GPIO0_D[33]
+set_location_assignment PIN_AD12 -to GPIO0_D[34]
+set_location_assignment PIN_AD13 -to GPIO0_D[35]
+set_location_assignment PIN_AN9 -to GPIO0_D[4]
+set_location_assignment PIN_AP9 -to GPIO0_D[5]
+set_location_assignment PIN_AV5 -to GPIO0_D[6]
+set_location_assignment PIN_AW6 -to GPIO0_D[7]
+set_location_assignment PIN_AV7 -to GPIO0_D[8]
+set_location_assignment PIN_AW7 -to GPIO0_D[9]
+set_location_assignment PIN_AW5 -to GPIO1_D[0]
+set_location_assignment PIN_AW8 -to GPIO1_D[1]
+set_location_assignment PIN_AU6 -to GPIO1_D[10]
+set_location_assignment PIN_AT6 -to GPIO1_D[11]
+set_location_assignment PIN_AU7 -to GPIO1_D[12]
+set_location_assignment PIN_AR5 -to GPIO1_D[13]
+set_location_assignment PIN_AP6 -to GPIO1_D[14]
+set_location_assignment PIN_AT7 -to GPIO1_D[15]
+set_location_assignment PIN_AN7 -to GPIO1_D[16]
+set_location_assignment PIN_AN6 -to GPIO1_D[17]
+set_location_assignment PIN_AL6 -to GPIO1_D[18]
+set_location_assignment PIN_AM6 -to GPIO1_D[19]
+set_location_assignment PIN_AW4 -to GPIO1_D[2]
+set_location_assignment PIN_AL5 -to GPIO1_D[20]
+set_location_assignment PIN_AL9 -to GPIO1_D[21]
+set_location_assignment PIN_AK9 -to GPIO1_D[22]
+set_location_assignment PIN_AJ6 -to GPIO1_D[23]
+set_location_assignment PIN_AJ10 -to GPIO1_D[24]
+set_location_assignment PIN_AH11 -to GPIO1_D[25]
+set_location_assignment PIN_AH8 -to GPIO1_D[26]
+set_location_assignment PIN_AH9 -to GPIO1_D[27]
+set_location_assignment PIN_AG12 -to GPIO1_D[28]
+set_location_assignment PIN_AH10 -to GPIO1_D[29]
+set_location_assignment PIN_AV10 -to GPIO1_D[3]
+set_location_assignment PIN_AF13 -to GPIO1_D[30]
+set_location_assignment PIN_AE13 -to GPIO1_D[31]
+set_location_assignment PIN_AE10 -to GPIO1_D[32]
+set_location_assignment PIN_AP10 -to GPIO1_D[33]
+set_location_assignment PIN_AE12 -to GPIO1_D[34]
+set_location_assignment PIN_AE11 -to GPIO1_D[35]
+set_location_assignment PIN_AV8 -to GPIO1_D[4]
+set_location_assignment PIN_AW10 -to GPIO1_D[5]
+set_location_assignment PIN_AU10 -to GPIO1_D[6]
+set_location_assignment PIN_AU8 -to GPIO1_D[7]
+set_location_assignment PIN_AP8 -to GPIO1_D[8]
+set_location_assignment PIN_AT10 -to GPIO1_D[9]
+set_location_assignment PIN_AA35 -to HSMA_CLKIN_N1
+set_location_assignment PIN_AE35 -to HSMA_CLKIN_N2
+set_location_assignment PIN_AB34 -to HSMA_CLKIN_P1
+set_location_assignment PIN_AF34 -to HSMA_CLKIN_P2
+set_location_assignment PIN_AC34 -to HSMA_CLKIN0
+set_location_assignment PIN_AG35 -to HSMA_CLKOUT_n2
+set_location_assignment PIN_AG34 -to HSMA_CLKOUT_p2
+set_location_assignment PIN_AC26 -to HSMA_D[0]
+set_location_assignment PIN_AC31 -to HSMA_D[1]
+set_location_assignment PIN_AD26 -to HSMA_D[2]
+set_location_assignment PIN_AC32 -to HSMA_D[3]
+set_location_assignment PIN_N38 -to HSMA_GXB_RX_p[0]
+set_location_assignment PIN_L38 -to HSMA_GXB_RX_p[1]
+set_location_assignment PIN_E38 -to HSMA_GXB_RX_p[2]
+set_location_assignment PIN_C38 -to HSMA_GXB_RX_p[3]
+set_location_assignment PIN_M36 -to HSMA_GXB_TX_p[0]
+set_location_assignment PIN_K36 -to HSMA_GXB_TX_p[1]
+set_location_assignment PIN_D36 -to HSMA_GXB_TX_p[2]
+set_location_assignment PIN_B36 -to HSMA_GXB_TX_p[3]
+set_location_assignment PIN_AH28 -to HSMA_OUT_n1
+set_location_assignment PIN_AG28 -to HSMA_OUT_p1
+set_location_assignment PIN_AF29 -to HSMA_OUT0
+set_location_assignment PIN_J38 -to HSMA_REFCLK_p
+set_location_assignment PIN_AK33 -to HSMA_RX_n[0]
+set_location_assignment PIN_AH35 -to HSMA_RX_n[1]
+set_location_assignment PIN_AU33 -to HSMA_RX_n[10]
+set_location_assignment PIN_AV34 -to HSMA_RX_n[11]
+set_location_assignment PIN_AU32 -to HSMA_RX_n[12]
+set_location_assignment PIN_AU31 -to HSMA_RX_n[13]
+set_location_assignment PIN_AR35 -to HSMA_RX_n[14]
+set_location_assignment PIN_AP33 -to HSMA_RX_n[15]
+set_location_assignment PIN_AR34 -to HSMA_RX_n[16]
+set_location_assignment PIN_AJ35 -to HSMA_RX_n[2]
+set_location_assignment PIN_AK35 -to HSMA_RX_n[3]
+set_location_assignment PIN_AP30 -to HSMA_RX_n[4]
+set_location_assignment PIN_AM35 -to HSMA_RX_n[5]
+set_location_assignment PIN_AN31 -to HSMA_RX_n[6]
+set_location_assignment PIN_AP34 -to HSMA_RX_n[7]
+set_location_assignment PIN_AR32 -to HSMA_RX_n[8]
+set_location_assignment PIN_AT30 -to HSMA_RX_n[9]
+set_location_assignment PIN_AJ32 -to HSMA_RX_p[0]
+set_location_assignment PIN_AH34 -to HSMA_RX_p[1]
+set_location_assignment PIN_AT33 -to HSMA_RX_p[10]
+set_location_assignment PIN_AU34 -to HSMA_RX_p[11]
+set_location_assignment PIN_AT32 -to HSMA_RX_p[12]
+set_location_assignment PIN_AT31 -to HSMA_RX_p[13]
+set_location_assignment PIN_AP35 -to HSMA_RX_p[14]
+set_location_assignment PIN_AN32 -to HSMA_RX_p[15]
+set_location_assignment PIN_AT34 -to HSMA_RX_p[16]
+set_location_assignment PIN_AJ34 -to HSMA_RX_p[2]
+set_location_assignment PIN_AK34 -to HSMA_RX_p[3]
+set_location_assignment PIN_AN30 -to HSMA_RX_p[4]
+set_location_assignment PIN_AM34 -to HSMA_RX_p[5]
+set_location_assignment PIN_AM31 -to HSMA_RX_p[6]
+set_location_assignment PIN_AN33 -to HSMA_RX_p[7]
+set_location_assignment PIN_AP32 -to HSMA_RX_p[8]
+set_location_assignment PIN_AR31 -to HSMA_RX_p[9]
+set_location_assignment PIN_AB28 -to HSMA_TX_n[0]
+set_location_assignment PIN_AB31 -to HSMA_TX_n[1]
+set_location_assignment PIN_AD31 -to HSMA_TX_n[10]
+set_location_assignment PIN_AL32 -to HSMA_TX_n[11]
+set_location_assignment PIN_AH27 -to HSMA_TX_n[12]
+set_location_assignment PIN_AL31 -to HSMA_TX_n[13]
+set_location_assignment PIN_AH30 -to HSMA_TX_n[14]
+set_location_assignment PIN_AM29 -to HSMA_TX_n[15]
+set_location_assignment PIN_AL30 -to HSMA_TX_n[16]
+set_location_assignment PIN_AE27 -to HSMA_TX_n[2]
+set_location_assignment PIN_AD29 -to HSMA_TX_n[3]
+set_location_assignment PIN_AE29 -to HSMA_TX_n[4]
+set_location_assignment PIN_AF26 -to HSMA_TX_n[5]
+set_location_assignment PIN_AG32 -to HSMA_TX_n[6]
+set_location_assignment PIN_AH29 -to HSMA_TX_n[7]
+set_location_assignment PIN_AC29 -to HSMA_TX_n[8]
+set_location_assignment PIN_AK29 -to HSMA_TX_n[9]
+set_location_assignment PIN_AB27 -to HSMA_TX_p[0]
+set_location_assignment PIN_AB30 -to HSMA_TX_p[1]
+set_location_assignment PIN_AD30 -to HSMA_TX_p[10]
+set_location_assignment PIN_AK32 -to HSMA_TX_p[11]
+set_location_assignment PIN_AG27 -to HSMA_TX_p[12]
+set_location_assignment PIN_AK31 -to HSMA_TX_p[13]
+set_location_assignment PIN_AJ31 -to HSMA_TX_p[14]
+set_location_assignment PIN_AL29 -to HSMA_TX_p[15]
+set_location_assignment PIN_AK30 -to HSMA_TX_p[16]
+set_location_assignment PIN_AD27 -to HSMA_TX_p[2]
+set_location_assignment PIN_AD28 -to HSMA_TX_p[3]
+set_location_assignment PIN_AE28 -to HSMA_TX_p[4]
+set_location_assignment PIN_AE26 -to HSMA_TX_p[5]
+set_location_assignment PIN_AG31 -to HSMA_TX_p[6]
+set_location_assignment PIN_AG29 -to HSMA_TX_p[7]
+set_location_assignment PIN_AC28 -to HSMA_TX_p[8]
+set_location_assignment PIN_AJ29 -to HSMA_TX_p[9]
+set_location_assignment PIN_W35 -to HSMB_CLKIN_N1
+set_location_assignment PIN_W5 -to HSMB_CLKIN_N2
+set_location_assignment PIN_W34 -to HSMB_CLKIN_P1
+set_location_assignment PIN_W6 -to HSMB_CLKIN_P2
+set_location_assignment PIN_AA5 -to HSMB_CLKIN0
+set_location_assignment PIN_W11 -to HSMB_CLKOUT_n2
+set_location_assignment PIN_W12 -to HSMB_CLKOUT_p2
+set_location_assignment PIN_H10 -to HSMB_D[0]
+set_location_assignment PIN_D6 -to HSMB_D[1]
+set_location_assignment PIN_G10 -to HSMB_D[2]
+set_location_assignment PIN_C6 -to HSMB_D[3]
+set_location_assignment PIN_AE2 -to HSMB_GXB_RX_p[0]
+set_location_assignment PIN_AC2 -to HSMB_GXB_RX_p[1]
+set_location_assignment PIN_U2 -to HSMB_GXB_RX_p[2]
+set_location_assignment PIN_R2 -to HSMB_GXB_RX_p[3]
+set_location_assignment PIN_N2 -to HSMB_GXB_RX_p[4]
+set_location_assignment PIN_L2 -to HSMB_GXB_RX_p[5]
+set_location_assignment PIN_E2 -to HSMB_GXB_RX_p[6]
+set_location_assignment PIN_C2 -to HSMB_GXB_RX_p[7]
+set_location_assignment PIN_AD4 -to HSMB_GXB_TX_p[0]
+set_location_assignment PIN_AB4 -to HSMB_GXB_TX_p[1]
+set_location_assignment PIN_T4 -to HSMB_GXB_TX_p[2]
+set_location_assignment PIN_P4 -to HSMB_GXB_TX_p[3]
+set_location_assignment PIN_M4 -to HSMB_GXB_TX_p[4]
+set_location_assignment PIN_K4 -to HSMB_GXB_TX_p[5]
+set_location_assignment PIN_D4 -to HSMB_GXB_TX_p[6]
+set_location_assignment PIN_B4 -to HSMB_GXB_TX_p[7]
+set_location_assignment PIN_J8 -to HSMB_OUT_n1
+set_location_assignment PIN_K8 -to HSMB_OUT_p1
+set_location_assignment PIN_L8 -to HSMB_OUT0
+set_location_assignment PIN_AA2 -to HSMB_REFCLK_p
+set_location_assignment PIN_C5 -to HSMB_RX_n[0]
+set_location_assignment PIN_C10 -to HSMB_RX_n[1]
+set_location_assignment PIN_F9 -to HSMB_RX_n[10]
+set_location_assignment PIN_N5 -to HSMB_RX_n[11]
+set_location_assignment PIN_L5 -to HSMB_RX_n[12]
+set_location_assignment PIN_R5 -to HSMB_RX_n[13]
+set_location_assignment PIN_P6 -to HSMB_RX_n[14]
+set_location_assignment PIN_U5 -to HSMB_RX_n[15]
+set_location_assignment PIN_W7 -to HSMB_RX_n[16]
+set_location_assignment PIN_C9 -to HSMB_RX_n[2]
+set_location_assignment PIN_C8 -to HSMB_RX_n[3]
+set_location_assignment PIN_C7 -to HSMB_RX_n[4]
+set_location_assignment PIN_E10 -to HSMB_RX_n[5]
+set_location_assignment PIN_F5 -to HSMB_RX_n[6]
+set_location_assignment PIN_F6 -to HSMB_RX_n[7]
+set_location_assignment PIN_E7 -to HSMB_RX_n[8]
+set_location_assignment PIN_F8 -to HSMB_RX_n[9]
+set_location_assignment PIN_D5 -to HSMB_RX_p[0]
+set_location_assignment PIN_D10 -to HSMB_RX_p[1]
+set_location_assignment PIN_G9 -to HSMB_RX_p[10]
+set_location_assignment PIN_N6 -to HSMB_RX_p[11]
+set_location_assignment PIN_M6 -to HSMB_RX_p[12]
+set_location_assignment PIN_R6 -to HSMB_RX_p[13]
+set_location_assignment PIN_R7 -to HSMB_RX_p[14]
+set_location_assignment PIN_V6 -to HSMB_RX_p[15]
+set_location_assignment PIN_W8 -to HSMB_RX_p[16]
+set_location_assignment PIN_D9 -to HSMB_RX_p[2]
+set_location_assignment PIN_D8 -to HSMB_RX_p[3]
+set_location_assignment PIN_D7 -to HSMB_RX_p[4]
+set_location_assignment PIN_F10 -to HSMB_RX_p[5]
+set_location_assignment PIN_G5 -to HSMB_RX_p[6]
+set_location_assignment PIN_G6 -to HSMB_RX_p[7]
+set_location_assignment PIN_F7 -to HSMB_RX_p[8]
+set_location_assignment PIN_G8 -to HSMB_RX_p[9]
+set_location_assignment PIN_J9 -to HSMB_TX_n[0]
+set_location_assignment PIN_J10 -to HSMB_TX_n[1]
+set_location_assignment PIN_L11 -to HSMB_TX_n[10]
+set_location_assignment PIN_P8 -to HSMB_TX_n[11]
+set_location_assignment PIN_R8 -to HSMB_TX_n[12]
+set_location_assignment PIN_T9 -to HSMB_TX_n[13]
+set_location_assignment PIN_V9 -to HSMB_TX_n[14]
+set_location_assignment PIN_R10 -to HSMB_TX_n[15]
+set_location_assignment PIN_V11 -to HSMB_TX_n[16]
+set_location_assignment PIN_N10 -to HSMB_TX_n[2]
+set_location_assignment PIN_M12 -to HSMB_TX_n[3]
+set_location_assignment PIN_R11 -to HSMB_TX_n[4]
+set_location_assignment PIN_T12 -to HSMB_TX_n[5]
+set_location_assignment PIN_P13 -to HSMB_TX_n[6]
+set_location_assignment PIN_G7 -to HSMB_TX_n[7]
+set_location_assignment PIN_L10 -to HSMB_TX_n[8]
+set_location_assignment PIN_M7 -to HSMB_TX_n[9]
+set_location_assignment PIN_K9 -to HSMB_TX_p[0]
+set_location_assignment PIN_K10 -to HSMB_TX_p[1]
+set_location_assignment PIN_M11 -to HSMB_TX_p[10]
+set_location_assignment PIN_N9 -to HSMB_TX_p[11]
+set_location_assignment PIN_R9 -to HSMB_TX_p[12]
+set_location_assignment PIN_U10 -to HSMB_TX_p[13]
+set_location_assignment PIN_V10 -to HSMB_TX_p[14]
+set_location_assignment PIN_T10 -to HSMB_TX_p[15]
+set_location_assignment PIN_V12 -to HSMB_TX_p[16]
+set_location_assignment PIN_N11 -to HSMB_TX_p[2]
+set_location_assignment PIN_N12 -to HSMB_TX_p[3]
+set_location_assignment PIN_R12 -to HSMB_TX_p[4]
+set_location_assignment PIN_T13 -to HSMB_TX_p[5]
+set_location_assignment PIN_R13 -to HSMB_TX_p[6]
+set_location_assignment PIN_H7 -to HSMB_TX_p[7]
+set_location_assignment PIN_M10 -to HSMB_TX_p[8]
+set_location_assignment PIN_M8 -to HSMB_TX_p[9]
+set_location_assignment PIN_L19 -to HSMC_SCL
+set_location_assignment PIN_M19 -to HSMC_SDA
+set_location_assignment PIN_V28 -to LED[0]
+set_location_assignment PIN_W28 -to LED[1]
+set_location_assignment PIN_R29 -to LED[2]
+set_location_assignment PIN_P29 -to LED[3]
+set_location_assignment PIN_N29 -to LED[4]
+set_location_assignment PIN_M29 -to LED[5]
+set_location_assignment PIN_M30 -to LED[6]
+set_location_assignment PIN_N30 -to LED[7]
+set_location_assignment PIN_AV23 -to M1_DDR2_addr[0]
+set_location_assignment PIN_AL25 -to M1_DDR2_addr[1]
+set_location_assignment PIN_AJ26 -to M1_DDR2_addr[10]
+set_location_assignment PIN_AU28 -to M1_DDR2_addr[11]
+set_location_assignment PIN_AP26 -to M1_DDR2_addr[12]
+set_location_assignment PIN_AD21 -to M1_DDR2_addr[13]
+set_location_assignment PIN_AU29 -to M1_DDR2_addr[14]
+set_location_assignment PIN_AT29 -to M1_DDR2_addr[15]
+set_location_assignment PIN_AW23 -to M1_DDR2_addr[2]
+set_location_assignment PIN_AM26 -to M1_DDR2_addr[3]
+set_location_assignment PIN_AN26 -to M1_DDR2_addr[4]
+set_location_assignment PIN_AK26 -to M1_DDR2_addr[5]
+set_location_assignment PIN_AU27 -to M1_DDR2_addr[6]
+set_location_assignment PIN_AT27 -to M1_DDR2_addr[7]
+set_location_assignment PIN_AL27 -to M1_DDR2_addr[8]
+set_location_assignment PIN_AN27 -to M1_DDR2_addr[9]
+set_location_assignment PIN_AH26 -to M1_DDR2_ba[0]
+set_location_assignment PIN_AD25 -to M1_DDR2_ba[1]
+set_location_assignment PIN_AP27 -to M1_DDR2_ba[2]
+set_location_assignment PIN_AJ25 -to M1_DDR2_cas_n
+set_location_assignment PIN_AT28 -to M1_DDR2_cke[0]
+set_location_assignment PIN_AK27 -to M1_DDR2_cke[1]
+set_location_assignment PIN_AR28 -to M1_DDR2_clk_n[0]
+set_location_assignment PIN_AF20 -to M1_DDR2_clk_n[1]
+set_location_assignment PIN_AP28 -to M1_DDR2_clk[0]
+set_location_assignment PIN_AE20 -to M1_DDR2_clk[1]
+set_location_assignment PIN_AG21 -to M1_DDR2_cs_n[0]
+set_location_assignment PIN_AE25 -to M1_DDR2_cs_n[1]
+set_location_assignment PIN_AW31 -to M1_DDR2_dm[0]
+set_location_assignment PIN_AW26 -to M1_DDR2_dm[1]
+set_location_assignment PIN_AU23 -to M1_DDR2_dm[2]
+set_location_assignment PIN_AH22 -to M1_DDR2_dm[3]
+set_location_assignment PIN_AL17 -to M1_DDR2_dm[4]
+set_location_assignment PIN_AT16 -to M1_DDR2_dm[5]
+set_location_assignment PIN_AU14 -to M1_DDR2_dm[6]
+set_location_assignment PIN_AN13 -to M1_DDR2_dm[7]
+set_location_assignment PIN_AV32 -to M1_DDR2_dq[0]
+set_location_assignment PIN_AV31 -to M1_DDR2_dq[1]
+set_location_assignment PIN_AU25 -to M1_DDR2_dq[10]
+set_location_assignment PIN_AT25 -to M1_DDR2_dq[11]
+set_location_assignment PIN_AM25 -to M1_DDR2_dq[12]
+set_location_assignment PIN_AN25 -to M1_DDR2_dq[13]
+set_location_assignment PIN_AR25 -to M1_DDR2_dq[14]
+set_location_assignment PIN_AN24 -to M1_DDR2_dq[15]
+set_location_assignment PIN_AN23 -to M1_DDR2_dq[16]
+set_location_assignment PIN_AP23 -to M1_DDR2_dq[17]
+set_location_assignment PIN_AL22 -to M1_DDR2_dq[18]
+set_location_assignment PIN_AM22 -to M1_DDR2_dq[19]
+set_location_assignment PIN_AW29 -to M1_DDR2_dq[2]
+set_location_assignment PIN_AM23 -to M1_DDR2_dq[20]
+set_location_assignment PIN_AR23 -to M1_DDR2_dq[21]
+set_location_assignment PIN_AT23 -to M1_DDR2_dq[22]
+set_location_assignment PIN_AL21 -to M1_DDR2_dq[23]
+set_location_assignment PIN_AJ22 -to M1_DDR2_dq[24]
+set_location_assignment PIN_AH23 -to M1_DDR2_dq[25]
+set_location_assignment PIN_AF22 -to M1_DDR2_dq[26]
+set_location_assignment PIN_AE23 -to M1_DDR2_dq[27]
+set_location_assignment PIN_AK24 -to M1_DDR2_dq[28]
+set_location_assignment PIN_AJ23 -to M1_DDR2_dq[29]
+set_location_assignment PIN_AV28 -to M1_DDR2_dq[3]
+set_location_assignment PIN_AF23 -to M1_DDR2_dq[30]
+set_location_assignment PIN_AE22 -to M1_DDR2_dq[31]
+set_location_assignment PIN_AK17 -to M1_DDR2_dq[32]
+set_location_assignment PIN_AM17 -to M1_DDR2_dq[33]
+set_location_assignment PIN_AH16 -to M1_DDR2_dq[34]
+set_location_assignment PIN_AJ16 -to M1_DDR2_dq[35]
+set_location_assignment PIN_AG16 -to M1_DDR2_dq[36]
+set_location_assignment PIN_AH17 -to M1_DDR2_dq[37]
+set_location_assignment PIN_AF17 -to M1_DDR2_dq[38]
+set_location_assignment PIN_AE17 -to M1_DDR2_dq[39]
+set_location_assignment PIN_AW34 -to M1_DDR2_dq[4]
+set_location_assignment PIN_AR17 -to M1_DDR2_dq[40]
+set_location_assignment PIN_AN16 -to M1_DDR2_dq[41]
+set_location_assignment PIN_AU16 -to M1_DDR2_dq[42]
+set_location_assignment PIN_AW16 -to M1_DDR2_dq[43]
+set_location_assignment PIN_AN17 -to M1_DDR2_dq[44]
+set_location_assignment PIN_AP17 -to M1_DDR2_dq[45]
+set_location_assignment PIN_AU15 -to M1_DDR2_dq[46]
+set_location_assignment PIN_AT15 -to M1_DDR2_dq[47]
+set_location_assignment PIN_AW11 -to M1_DDR2_dq[48]
+set_location_assignment PIN_AW12 -to M1_DDR2_dq[49]
+set_location_assignment PIN_AW33 -to M1_DDR2_dq[5]
+set_location_assignment PIN_AT14 -to M1_DDR2_dq[50]
+set_location_assignment PIN_AU12 -to M1_DDR2_dq[51]
+set_location_assignment PIN_AW14 -to M1_DDR2_dq[52]
+set_location_assignment PIN_AV14 -to M1_DDR2_dq[53]
+set_location_assignment PIN_AU11 -to M1_DDR2_dq[54]
+set_location_assignment PIN_AT12 -to M1_DDR2_dq[55]
+set_location_assignment PIN_AP13 -to M1_DDR2_dq[56]
+set_location_assignment PIN_AN14 -to M1_DDR2_dq[57]
+set_location_assignment PIN_AL15 -to M1_DDR2_dq[58]
+set_location_assignment PIN_AM14 -to M1_DDR2_dq[59]
+set_location_assignment PIN_AW28 -to M1_DDR2_dq[6]
+set_location_assignment PIN_AR14 -to M1_DDR2_dq[60]
+set_location_assignment PIN_AP14 -to M1_DDR2_dq[61]
+set_location_assignment PIN_AL14 -to M1_DDR2_dq[62]
+set_location_assignment PIN_AL13 -to M1_DDR2_dq[63]
+set_location_assignment PIN_AW27 -to M1_DDR2_dq[7]
+set_location_assignment PIN_AP25 -to M1_DDR2_dq[8]
+set_location_assignment PIN_AV26 -to M1_DDR2_dq[9]
+set_location_assignment PIN_AW30 -to M1_DDR2_dqsn[0]
+set_location_assignment PIN_AU26 -to M1_DDR2_dqsn[1]
+set_location_assignment PIN_AU24 -to M1_DDR2_dqsn[2]
+set_location_assignment PIN_AL23 -to M1_DDR2_dqsn[3]
+set_location_assignment PIN_AL16 -to M1_DDR2_dqsn[4]
+set_location_assignment PIN_AR16 -to M1_DDR2_dqsn[5]
+set_location_assignment PIN_AW13 -to M1_DDR2_dqsn[6]
+set_location_assignment PIN_AT13 -to M1_DDR2_dqsn[7]
+set_location_assignment PIN_AV29 -to M1_DDR2_dqs[0]
+set_location_assignment PIN_AT26 -to M1_DDR2_dqs[1]
+set_location_assignment PIN_AT24 -to M1_DDR2_dqs[2]
+set_location_assignment PIN_AK23 -to M1_DDR2_dqs[3]
+set_location_assignment PIN_AK16 -to M1_DDR2_dqs[4]
+set_location_assignment PIN_AP16 -to M1_DDR2_dqs[5]
+set_location_assignment PIN_AV13 -to M1_DDR2_dqs[6]
+set_location_assignment PIN_AR13 -to M1_DDR2_dqs[7]
+set_location_assignment PIN_AG20 -to M1_DDR2_odt[0]
+set_location_assignment PIN_AE24 -to M1_DDR2_odt[1]
+set_location_assignment PIN_AE21 -to M1_DDR2_ras_n
+set_location_assignment PIN_AV25 -to M1_DDR2_SA[0]
+set_location_assignment PIN_AW25 -to M1_DDR2_SA[1]
+set_location_assignment PIN_AH24 -to M1_DDR2_SCL
+set_location_assignment PIN_AG24 -to M1_DDR2_SDA
+set_location_assignment PIN_AK25 -to M1_DDR2_we_n
+set_location_assignment PIN_B14 -to M2_DDR2_addr[0]
+set_location_assignment PIN_B11 -to M2_DDR2_addr[1]
+set_location_assignment PIN_R18 -to M2_DDR2_addr[10]
+set_location_assignment PIN_L14 -to M2_DDR2_addr[11]
+set_location_assignment PIN_N15 -to M2_DDR2_addr[12]
+set_location_assignment PIN_C19 -to M2_DDR2_addr[13]
+set_location_assignment PIN_K14 -to M2_DDR2_addr[14]
+set_location_assignment PIN_M13 -to M2_DDR2_addr[15]
+set_location_assignment PIN_D14 -to M2_DDR2_addr[2]
+set_location_assignment PIN_R14 -to M2_DDR2_addr[3]
+set_location_assignment PIN_C13 -to M2_DDR2_addr[4]
+set_location_assignment PIN_C11 -to M2_DDR2_addr[5]
+set_location_assignment PIN_A11 -to M2_DDR2_addr[6]
+set_location_assignment PIN_N13 -to M2_DDR2_addr[7]
+set_location_assignment PIN_A10 -to M2_DDR2_addr[8]
+set_location_assignment PIN_M14 -to M2_DDR2_addr[9]
+set_location_assignment PIN_C12 -to M2_DDR2_ba[0]
+set_location_assignment PIN_C14 -to M2_DDR2_ba[1]
+set_location_assignment PIN_B10 -to M2_DDR2_ba[2]
+set_location_assignment PIN_A13 -to M2_DDR2_cas_n
+set_location_assignment PIN_D11 -to M2_DDR2_cke[0]
+set_location_assignment PIN_K12 -to M2_DDR2_cke[1]
+set_location_assignment PIN_K13 -to M2_DDR2_clk_n[0]
+set_location_assignment PIN_A17 -to M2_DDR2_clk_n[1]
+set_location_assignment PIN_L13 -to M2_DDR2_clk[0]
+set_location_assignment PIN_B17 -to M2_DDR2_clk[1]
+set_location_assignment PIN_H19 -to M2_DDR2_cs_n[0]
+set_location_assignment PIN_B13 -to M2_DDR2_cs_n[1]
+set_location_assignment PIN_H14 -to M2_DDR2_dm[0]
+set_location_assignment PIN_M17 -to M2_DDR2_dm[1]
+set_location_assignment PIN_G15 -to M2_DDR2_dm[2]
+set_location_assignment PIN_F17 -to M2_DDR2_dm[3]
+set_location_assignment PIN_P23 -to M2_DDR2_dm[4]
+set_location_assignment PIN_B25 -to M2_DDR2_dm[5]
+set_location_assignment PIN_D28 -to M2_DDR2_dm[6]
+set_location_assignment PIN_C30 -to M2_DDR2_dm[7]
+set_location_assignment PIN_F12 -to M2_DDR2_dq[0]
+set_location_assignment PIN_H13 -to M2_DDR2_dq[1]
+set_location_assignment PIN_L16 -to M2_DDR2_dq[10]
+set_location_assignment PIN_K17 -to M2_DDR2_dq[11]
+set_location_assignment PIN_P16 -to M2_DDR2_dq[12]
+set_location_assignment PIN_N16 -to M2_DDR2_dq[13]
+set_location_assignment PIN_J17 -to M2_DDR2_dq[14]
+set_location_assignment PIN_H17 -to M2_DDR2_dq[15]
+set_location_assignment PIN_B16 -to M2_DDR2_dq[16]
+set_location_assignment PIN_A16 -to M2_DDR2_dq[17]
+set_location_assignment PIN_F15 -to M2_DDR2_dq[18]
+set_location_assignment PIN_D16 -to M2_DDR2_dq[19]
+set_location_assignment PIN_E14 -to M2_DDR2_dq[2]
+set_location_assignment PIN_C16 -to M2_DDR2_dq[20]
+set_location_assignment PIN_E16 -to M2_DDR2_dq[21]
+set_location_assignment PIN_G16 -to M2_DDR2_dq[22]
+set_location_assignment PIN_G17 -to M2_DDR2_dq[23]
+set_location_assignment PIN_C17 -to M2_DDR2_dq[24]
+set_location_assignment PIN_E17 -to M2_DDR2_dq[25]
+set_location_assignment PIN_F19 -to M2_DDR2_dq[26]
+set_location_assignment PIN_G19 -to M2_DDR2_dq[27]
+set_location_assignment PIN_C18 -to M2_DDR2_dq[28]
+set_location_assignment PIN_D18 -to M2_DDR2_dq[29]
+set_location_assignment PIN_F14 -to M2_DDR2_dq[3]
+set_location_assignment PIN_F20 -to M2_DDR2_dq[30]
+set_location_assignment PIN_G20 -to M2_DDR2_dq[31]
+set_location_assignment PIN_N22 -to M2_DDR2_dq[32]
+set_location_assignment PIN_M23 -to M2_DDR2_dq[33]
+set_location_assignment PIN_K24 -to M2_DDR2_dq[34]
+set_location_assignment PIN_J25 -to M2_DDR2_dq[35]
+set_location_assignment PIN_R22 -to M2_DDR2_dq[36]
+set_location_assignment PIN_P22 -to M2_DDR2_dq[37]
+set_location_assignment PIN_M24 -to M2_DDR2_dq[38]
+set_location_assignment PIN_J24 -to M2_DDR2_dq[39]
+set_location_assignment PIN_J12 -to M2_DDR2_dq[4]
+set_location_assignment PIN_G25 -to M2_DDR2_dq[40]
+set_location_assignment PIN_C25 -to M2_DDR2_dq[41]
+set_location_assignment PIN_A26 -to M2_DDR2_dq[42]
+set_location_assignment PIN_C26 -to M2_DDR2_dq[43]
+set_location_assignment PIN_G24 -to M2_DDR2_dq[44]
+set_location_assignment PIN_F24 -to M2_DDR2_dq[45]
+set_location_assignment PIN_D25 -to M2_DDR2_dq[46]
+set_location_assignment PIN_D26 -to M2_DDR2_dq[47]
+set_location_assignment PIN_F27 -to M2_DDR2_dq[48]
+set_location_assignment PIN_G27 -to M2_DDR2_dq[49]
+set_location_assignment PIN_J13 -to M2_DDR2_dq[5]
+set_location_assignment PIN_F28 -to M2_DDR2_dq[50]
+set_location_assignment PIN_H28 -to M2_DDR2_dq[51]
+set_location_assignment PIN_H26 -to M2_DDR2_dq[52]
+set_location_assignment PIN_J26 -to M2_DDR2_dq[53]
+set_location_assignment PIN_E28 -to M2_DDR2_dq[54]
+set_location_assignment PIN_G29 -to M2_DDR2_dq[55]
+set_location_assignment PIN_C29 -to M2_DDR2_dq[56]
+set_location_assignment PIN_A31 -to M2_DDR2_dq[57]
+set_location_assignment PIN_C27 -to M2_DDR2_dq[58]
+set_location_assignment PIN_D27 -to M2_DDR2_dq[59]
+set_location_assignment PIN_G14 -to M2_DDR2_dq[6]
+set_location_assignment PIN_A27 -to M2_DDR2_dq[60]
+set_location_assignment PIN_A28 -to M2_DDR2_dq[61]
+set_location_assignment PIN_B29 -to M2_DDR2_dq[62]
+set_location_assignment PIN_B31 -to M2_DDR2_dq[63]
+set_location_assignment PIN_D13 -to M2_DDR2_dq[7]
+set_location_assignment PIN_P17 -to M2_DDR2_dq[8]
+set_location_assignment PIN_N17 -to M2_DDR2_dq[9]
+set_location_assignment PIN_E13 -to M2_DDR2_dqsn[0]
+set_location_assignment PIN_J16 -to M2_DDR2_dqsn[1]
+set_location_assignment PIN_C15 -to M2_DDR2_dqsn[2]
+set_location_assignment PIN_F18 -to M2_DDR2_dqsn[3]
+set_location_assignment PIN_K23 -to M2_DDR2_dqsn[4]
+set_location_assignment PIN_E25 -to M2_DDR2_dqsn[5]
+set_location_assignment PIN_D29 -to M2_DDR2_dqsn[6]
+set_location_assignment PIN_B28 -to M2_DDR2_dqsn[7]
+set_location_assignment PIN_F13 -to M2_DDR2_dqs[0]
+set_location_assignment PIN_K16 -to M2_DDR2_dqs[1]
+set_location_assignment PIN_D15 -to M2_DDR2_dqs[2]
+set_location_assignment PIN_G18 -to M2_DDR2_dqs[3]
+set_location_assignment PIN_L23 -to M2_DDR2_dqs[4]
+set_location_assignment PIN_F25 -to M2_DDR2_dqs[5]
+set_location_assignment PIN_E29 -to M2_DDR2_dqs[6]
+set_location_assignment PIN_C28 -to M2_DDR2_dqs[7]
+set_location_assignment PIN_D19 -to M2_DDR2_odt[0]
+set_location_assignment PIN_A14 -to M2_DDR2_odt[1]
+set_location_assignment PIN_J18 -to M2_DDR2_ras_n
+set_location_assignment PIN_A18 -to M2_DDR2_SA[0]
+set_location_assignment PIN_B19 -to M2_DDR2_SA[1]
+set_location_assignment PIN_K15 -to M2_DDR2_SCL
+set_location_assignment PIN_J15 -to M2_DDR2_SDA
+set_location_assignment PIN_P18 -to M2_DDR2_we_n
+set_location_assignment PIN_AW32 -to MAX_CONF_D[0]
+set_location_assignment PIN_AG22 -to MAX_CONF_D[1]
+set_location_assignment PIN_AV11 -to MAX_CONF_D[2]
+set_location_assignment PIN_AG17 -to MAX_CONF_D[3]
+set_location_assignment PIN_AP24 -to MAX_I2C_SCLK
+set_location_assignment PIN_AN22 -to MAX_I2C_SDAT
+set_location_assignment PIN_AC35 -to OSC_50_BANK2
+set_location_assignment PIN_AV22 -to OSC_50_BANK3
+set_location_assignment PIN_AV19 -to OSC_50_BANK4
+set_location_assignment PIN_AC6 -to OSC_50_BANK5
+set_location_assignment PIN_AB6 -to OSC_50_BANK6
+set_location_assignment PIN_A19 -to OSC_50_BANK7
+set_location_assignment PIN_K26 -to OTG_A[1]
+set_location_assignment PIN_A29 -to OTG_A[10]
+set_location_assignment PIN_J27 -to OTG_A[11]
+set_location_assignment PIN_G26 -to OTG_A[12]
+set_location_assignment PIN_F26 -to OTG_A[13]
+set_location_assignment PIN_G28 -to OTG_A[14]
+set_location_assignment PIN_B26 -to OTG_A[15]
+set_location_assignment PIN_D17 -to OTG_A[16]
+set_location_assignment PIN_F16 -to OTG_A[17]
+set_location_assignment PIN_P25 -to OTG_A[2]
+set_location_assignment PIN_N25 -to OTG_A[3]
+set_location_assignment PIN_R24 -to OTG_A[4]
+set_location_assignment PIN_P24 -to OTG_A[5]
+set_location_assignment PIN_M25 -to OTG_A[6]
+set_location_assignment PIN_L25 -to OTG_A[7]
+set_location_assignment PIN_N23 -to OTG_A[8]
+set_location_assignment PIN_K28 -to OTG_A[9]
+set_location_assignment PIN_P19 -to OTG_CS_n
+set_location_assignment PIN_AF16 -to OTG_D[0]
+set_location_assignment PIN_AJ14 -to OTG_D[1]
+set_location_assignment PIN_AG19 -to OTG_D[10]
+set_location_assignment PIN_AM19 -to OTG_D[11]
+set_location_assignment PIN_AN19 -to OTG_D[12]
+set_location_assignment PIN_AV16 -to OTG_D[13]
+set_location_assignment PIN_AT17 -to OTG_D[14]
+set_location_assignment PIN_AV17 -to OTG_D[15]
+set_location_assignment PIN_AU17 -to OTG_D[16]
+set_location_assignment PIN_AW18 -to OTG_D[17]
+set_location_assignment PIN_AT18 -to OTG_D[18]
+set_location_assignment PIN_AU18 -to OTG_D[19]
+set_location_assignment PIN_AD15 -to OTG_D[2]
+set_location_assignment PIN_AR19 -to OTG_D[20]
+set_location_assignment PIN_AW20 -to OTG_D[21]
+set_location_assignment PIN_AW21 -to OTG_D[22]
+set_location_assignment PIN_AF19 -to OTG_D[23]
+set_location_assignment PIN_AE19 -to OTG_D[24]
+set_location_assignment PIN_AE18 -to OTG_D[25]
+set_location_assignment PIN_AD19 -to OTG_D[26]
+set_location_assignment PIN_G13 -to OTG_D[27]
+set_location_assignment PIN_M16 -to OTG_D[28]
+set_location_assignment PIN_M27 -to OTG_D[29]
+set_location_assignment PIN_AE15 -to OTG_D[3]
+set_location_assignment PIN_K27 -to OTG_D[30]
+set_location_assignment PIN_L26 -to OTG_D[31]
+set_location_assignment PIN_AE16 -to OTG_D[4]
+set_location_assignment PIN_AH14 -to OTG_D[5]
+set_location_assignment PIN_AM13 -to OTG_D[6]
+set_location_assignment PIN_AN15 -to OTG_D[7]
+set_location_assignment PIN_AP15 -to OTG_D[8]
+set_location_assignment PIN_AG18 -to OTG_D[9]
+set_location_assignment PIN_AH20 -to OTG_DC_DACK
+set_location_assignment PIN_AP21 -to OTG_DC_DREQ
+set_location_assignment PIN_AT22 -to OTG_DC_IRQ
+set_location_assignment PIN_AT21 -to OTG_HC_DACK
+set_location_assignment PIN_AN21 -to OTG_HC_DREQ
+set_location_assignment PIN_AJ20 -to OTG_HC_IRQ
+set_location_assignment PIN_N19 -to OTG_OE_n
+set_location_assignment PIN_AU22 -to OTG_RESET_n
+set_location_assignment PIN_AR22 -to OTG_WE_n
+set_location_assignment PIN_V30 -to PCIE_PREST_n
+set_location_assignment PIN_AN38 -to PCIE_REFCLK_p
+set_location_assignment PIN_AU38 -to PCIE_RX_p[0]
+set_location_assignment PIN_AR38 -to PCIE_RX_p[1]
+set_location_assignment PIN_AJ38 -to PCIE_RX_p[2]
+set_location_assignment PIN_AG38 -to PCIE_RX_p[3]
+set_location_assignment PIN_AE38 -to PCIE_RX_p[4]
+set_location_assignment PIN_AC38 -to PCIE_RX_p[5]
+set_location_assignment PIN_U38 -to PCIE_RX_p[6]
+set_location_assignment PIN_R38 -to PCIE_RX_p[7]
+set_location_assignment PIN_R31 -to PCIE_SMBCLK
+set_location_assignment PIN_W33 -to PCIE_SMBDAT
+set_location_assignment PIN_AT36 -to PCIE_TX_p[0]
+set_location_assignment PIN_AP36 -to PCIE_TX_p[1]
+set_location_assignment PIN_AH36 -to PCIE_TX_p[2]
+set_location_assignment PIN_AF36 -to PCIE_TX_p[3]
+set_location_assignment PIN_AD36 -to PCIE_TX_p[4]
+set_location_assignment PIN_AB36 -to PCIE_TX_p[5]
+set_location_assignment PIN_T36 -to PCIE_TX_p[6]
+set_location_assignment PIN_P36 -to PCIE_TX_p[7]
+set_location_assignment PIN_U35 -to PCIE_WAKE_n
+set_location_assignment PIN_B22 -to PLL_CLKIN_p
+set_location_assignment PIN_AU2 -to SATA_DEVICE_RX_p[0]
+set_location_assignment PIN_AJ2 -to SATA_DEVICE_RX_p[1]
+set_location_assignment PIN_AT4 -to SATA_DEVICE_TX_p[0]
+set_location_assignment PIN_AH4 -to SATA_DEVICE_TX_p[1]
+set_location_assignment PIN_AR2 -to SATA_HOST_RX_p[0]
+set_location_assignment PIN_AG2 -to SATA_HOST_RX_p[1]
+set_location_assignment PIN_AP4 -to SATA_HOST_TX_p[0]
+set_location_assignment PIN_AF4 -to SATA_HOST_TX_p[1]
+set_location_assignment PIN_AN2 -to SATA_REFCLK_p
+set_location_assignment PIN_AT19 -to SD_CLK
+set_location_assignment PIN_AV20 -to SD_CMD
+set_location_assignment PIN_AR20 -to SD_DAT[0]
+set_location_assignment PIN_AT20 -to SD_DAT[1]
+set_location_assignment PIN_AU19 -to SD_DAT[2]
+set_location_assignment PIN_AU20 -to SD_DAT[3]
+set_location_assignment PIN_AH18 -to SD_WP_n
+set_location_assignment PIN_L34 -to SEG0_D[0]
+set_location_assignment PIN_M34 -to SEG0_D[1]
+set_location_assignment PIN_M33 -to SEG0_D[2]
+set_location_assignment PIN_H31 -to SEG0_D[3]
+set_location_assignment PIN_J33 -to SEG0_D[4]
+set_location_assignment PIN_L35 -to SEG0_D[5]
+set_location_assignment PIN_K32 -to SEG0_D[6]
+set_location_assignment PIN_AL34 -to SEG0_DP
+set_location_assignment PIN_E31 -to SEG1_D[0]
+set_location_assignment PIN_F31 -to SEG1_D[1]
+set_location_assignment PIN_G31 -to SEG1_D[2]
+set_location_assignment PIN_C34 -to SEG1_D[3]
+set_location_assignment PIN_C33 -to SEG1_D[4]
+set_location_assignment PIN_D33 -to SEG1_D[5]
+set_location_assignment PIN_D34 -to SEG1_D[6]
+set_location_assignment PIN_AL35 -to SEG1_DP
+set_location_assignment PIN_J7 -to SLIDE_SW[0]
+set_location_assignment PIN_K7 -to SLIDE_SW[1]
+set_location_assignment PIN_AK6 -to SLIDE_SW[2]
+set_location_assignment PIN_L7 -to SLIDE_SW[3]
+set_location_assignment PIN_B23 -to SMA_CLKIN_p
+set_location_assignment PIN_M20 -to SMA_CLKOUT_p
+set_location_assignment PIN_W2 -to SMA_GXBCLK_p
+set_location_assignment PIN_H35 -to SSRAM_ADV
+set_location_assignment PIN_R27 -to SSRAM_BWA_n
+set_location_assignment PIN_N31 -to SSRAM_BWB_n
+set_location_assignment PIN_R28 -to SSRAM_CE_n
+set_location_assignment PIN_N28 -to SSRAM_CKE_n
+set_location_assignment PIN_M31 -to SSRAM_CLK
+set_location_assignment PIN_H34 -to SSRAM_OE_n
+set_location_assignment PIN_L31 -to SSRAM_WE_n
+set_location_assignment PIN_AB13 -to SW[0]
+set_location_assignment PIN_AB12 -to SW[1]
+set_location_assignment PIN_AB11 -to SW[2]
+set_location_assignment PIN_AB10 -to SW[3]
+set_location_assignment PIN_AB9 -to SW[4]
+set_location_assignment PIN_AC8 -to SW[5]
+set_location_assignment PIN_AH6 -to SW[6]
+set_location_assignment PIN_AG6 -to SW[7]
+set_location_assignment PIN_AP19 -to TEMP_INT_n
+set_location_assignment PIN_AN18 -to TEMP_SMCLK
+set_location_assignment PIN_AP18 -to TEMP_SMDAT
+set_location_assignment PIN_AN35 -to UART_CTS
+set_location_assignment PIN_AH33 -to UART_RTS
+set_location_assignment PIN_AH32 -to UART_RXD
+set_location_assignment PIN_AN34 -to UART_TXD
+
+
+
+
+set_location_assignment PIN_P26 -to termination_blk0~_rup_pad
+set_location_assignment PIN_N26 -to termination_blk0~_rdn_pad
+
+
+#============================================================
+# I/O Standard
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to BUTTON[0]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to BUTTON[1]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to BUTTON[2]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to BUTTON[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to CPU_RESET_n
+set_instance_assignment -name IO_STANDARD "1.8 V" -to CSENSE_ADC_F0
+set_instance_assignment -name IO_STANDARD "1.8 V" -to CSENSE_CS_n[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to CSENSE_CS_n[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to CSENSE_SCK
+set_instance_assignment -name IO_STANDARD "1.8 V" -to CSENSE_SDI
+set_instance_assignment -name IO_STANDARD "1.8 V" -to CSENSE_SDO
+set_instance_assignment -name IO_STANDARD "2.5 V" -to EEP_SCL
+set_instance_assignment -name IO_STANDARD "2.5 V" -to EEP_SDA
+set_instance_assignment -name IO_STANDARD "1.8 V" -to ETH_INT_n[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_INT_n[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_INT_n[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_INT_n[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_MDC[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_MDC[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_MDC[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_MDC[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_MDIO[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_MDIO[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_MDIO[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_MDIO[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to ETH_RST_n
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_RX_p[0]
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_RX_p[1]
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_RX_p[2]
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_RX_p[3]
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_TX_p[0]
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_TX_p[1]
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_TX_p[2]
+set_instance_assignment -name IO_STANDARD LVDS -to ETH_TX_p[3]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to EXT_IO
+set_instance_assignment -name IO_STANDARD "1.8 V" -to FAN_CTRL
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FLASH_ADV_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FLASH_CE_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FLASH_CLK
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FLASH_OE_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FLASH_RYBY_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FLASH_RESET_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FLASH_WE_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[17]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[18]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[19]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[20]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[21]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[22]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[23]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[24]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[25]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_A[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to FSM_D[9]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to GCLKIN
+set_instance_assignment -name IO_STANDARD "1.8 V" -to GCLKOUT_FPGA
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[0]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[1]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[10]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[11]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[12]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[13]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[14]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[15]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[16]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[17]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[18]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[19]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[2]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[20]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[21]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[22]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[23]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[24]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[25]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[26]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[27]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[28]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[29]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[3]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[30]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[31]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[32]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[33]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[34]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[35]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[4]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[5]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[6]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[7]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[8]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO0_D[9]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[0]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[1]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[10]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[11]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[12]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[13]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[14]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[15]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[16]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[17]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[18]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[19]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[2]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[20]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[21]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[22]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[23]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[24]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[25]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[26]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[27]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[28]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[29]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[3]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[30]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[31]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[32]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[33]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[34]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[35]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[4]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[5]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[6]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[7]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[8]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to GPIO1_D[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN_N1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN_N2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN_P1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN_P2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN0
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKOUT_n2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKOUT_p2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_D[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_D[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_D[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_D[3]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMA_GXB_RX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMA_GXB_RX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMA_GXB_RX_p[2]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMA_GXB_RX_p[3]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMA_GXB_TX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMA_GXB_TX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMA_GXB_TX_p[2]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMA_GXB_TX_p[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_OUT_n1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_OUT_p1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_OUT0
+set_instance_assignment -name IO_STANDARD LVDS -to HSMA_REFCLK_p
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_n[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_RX_p[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_n[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_TX_p[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN_N1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN_N2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN_P1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN_P2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN0
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKOUT_n2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKOUT_p2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_D[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_D[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_D[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_D[3]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_RX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_RX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_RX_p[2]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_RX_p[3]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_RX_p[4]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_RX_p[5]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_RX_p[6]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_RX_p[7]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_TX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_TX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_TX_p[2]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_TX_p[3]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_TX_p[4]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_TX_p[5]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_TX_p[6]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to HSMB_GXB_TX_p[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_OUT_n1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_OUT_p1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_OUT0
+set_instance_assignment -name IO_STANDARD LVDS -to HSMB_REFCLK_p
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_n[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_RX_p[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_n[9]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[10]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[11]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[12]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[13]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[14]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[15]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[16]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[8]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_TX_p[9]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to HSMC_SCL
+set_instance_assignment -name IO_STANDARD "1.8 V" -to HSMC_SDA
+set_instance_assignment -name IO_STANDARD "2.5 V" -to LED[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to LED[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to LED[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to LED[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to LED[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to LED[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to LED[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to LED[7]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[15]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to M1_DDR2_SA[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to M1_DDR2_SA[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to M1_DDR2_SCL
+set_instance_assignment -name IO_STANDARD "1.8 V" -to M1_DDR2_SDA
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[15]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to M2_DDR2_SA[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to M2_DDR2_SA[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to M2_DDR2_SCL
+set_instance_assignment -name IO_STANDARD "1.8 V" -to M2_DDR2_SDA
+set_instance_assignment -name IO_STANDARD "1.8 V" -to MAX_CONF_D[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to MAX_CONF_D[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to MAX_CONF_D[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to MAX_CONF_D[3]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to MAX_I2C_SCLK
+set_instance_assignment -name IO_STANDARD "1.8 V" -to MAX_I2C_SDAT
+set_instance_assignment -name IO_STANDARD "2.5 V" -to OSC_50_BANK2
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OSC_50_BANK3
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OSC_50_BANK4
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to OSC_50_BANK5
+set_instance_assignment -name IO_STANDARD "2.5 V" -to OSC_50_BANK6
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OSC_50_BANK7
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[10]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[11]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[12]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[13]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[14]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[15]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[16]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[17]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[3]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[4]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[5]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[6]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[7]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[8]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_A[9]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_CS_n
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[10]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[11]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[12]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[13]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[14]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[15]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[16]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[17]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[18]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[19]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[20]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[21]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[22]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[23]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[24]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[25]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[26]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[27]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[28]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[29]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[3]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[30]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[31]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[4]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[5]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[6]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[7]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[8]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_D[9]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_DC_DACK
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_DC_DREQ
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_DC_IRQ
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_HC_DACK
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_HC_DREQ
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_HC_IRQ
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_OE_n
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_RESET_n
+set_instance_assignment -name IO_STANDARD "1.8 V" -to OTG_WE_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to PCIE_PREST_n
+set_instance_assignment -name IO_STANDARD HCSL -to PCIE_REFCLK_p
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_RX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_RX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_RX_p[2]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_RX_p[3]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_RX_p[4]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_RX_p[5]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_RX_p[6]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_RX_p[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to PCIE_SMBCLK
+set_instance_assignment -name IO_STANDARD "2.5 V" -to PCIE_SMBDAT
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_TX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_TX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_TX_p[2]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_TX_p[3]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_TX_p[4]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_TX_p[5]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_TX_p[6]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to PCIE_TX_p[7]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to PCIE_WAKE_n
+set_instance_assignment -name IO_STANDARD LVDS -to PLL_CLKIN_p
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to SATA_DEVICE_RX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to SATA_DEVICE_RX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to SATA_DEVICE_TX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to SATA_DEVICE_TX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to SATA_HOST_RX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to SATA_HOST_RX_p[1]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to SATA_HOST_TX_p[0]
+set_instance_assignment -name IO_STANDARD "1.4-V PCML" -to SATA_HOST_TX_p[1]
+set_instance_assignment -name IO_STANDARD LVDS -to SATA_REFCLK_p
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SD_CLK
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SD_CMD
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SD_DAT[0]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SD_DAT[1]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SD_DAT[2]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SD_DAT[3]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to SD_WP_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG0_D[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG0_D[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG0_D[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG0_D[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG0_D[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG0_D[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG0_D[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG0_DP
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG1_D[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG1_D[1]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG1_D[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG1_D[3]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG1_D[4]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG1_D[5]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG1_D[6]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SEG1_DP
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SLIDE_SW[0]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SLIDE_SW[1]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SLIDE_SW[2]
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SLIDE_SW[3]
+set_instance_assignment -name IO_STANDARD LVDS -to SMA_CLKIN_p
+set_instance_assignment -name IO_STANDARD LVDS -to SMA_CLKOUT_p
+set_instance_assignment -name IO_STANDARD LVDS -to SMA_GXBCLK_p
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SSRAM_ADV
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SSRAM_BWA_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SSRAM_BWB_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SSRAM_CE_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SSRAM_CKE_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SSRAM_CLK
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SSRAM_OE_n
+set_instance_assignment -name IO_STANDARD "2.5 V" -to SSRAM_WE_n
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SW[0]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SW[1]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SW[2]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SW[3]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SW[4]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SW[5]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SW[6]
+set_instance_assignment -name IO_STANDARD "3.0-V PCI-X" -to SW[7]
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TEMP_INT_n
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TEMP_SMCLK
+set_instance_assignment -name IO_STANDARD "1.8 V" -to TEMP_SMDAT
+set_instance_assignment -name IO_STANDARD "2.5 V" -to UART_CTS
+set_instance_assignment -name IO_STANDARD "2.5 V" -to UART_RTS
+set_instance_assignment -name IO_STANDARD "2.5 V" -to UART_RXD
+set_instance_assignment -name IO_STANDARD "2.5 V" -to UART_TXD
+
+
+
+
+
+#============================================================
+# End of pin assignments by Terasic System Builder
+#============================================================
+
+
+set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
+set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
+set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region"
+set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region"
+set_global_assignment -name MISC_FILE "C:/Documents and Settings/user/DE4_GOLDEN_TOP/DE4_GOLDEN_TOP/DE4_GOLDEN_TOP.dpf"
+set_global_assignment -name SEARCH_PATH ddr2
+
+#============================================================
+# DDR2 DIM1 setting
+#============================================================
+
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_odt[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_odt[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_odt[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_odt[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_clk[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_clk[0]
+set_instance_assignment -name TREAT_BIDIR_AS_OUTPUT ON -to M1_DDR2_clk[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_clk[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_clk[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_clk_n[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_clk_n[0]
+set_instance_assignment -name TREAT_BIDIR_AS_OUTPUT ON -to M1_DDR2_clk_n[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_clk_n[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_clk_n[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_cs_n[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_cs_n[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_cs_n[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_cs_n[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_cke[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_cke[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_cke[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_cke[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[2]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[2]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[3]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[3]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[4]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[4]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[5]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[5]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[6]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[6]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[7]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[7]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[8]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[8]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[9]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[9]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[10]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[10]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[11]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[11]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[12]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[12]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[13]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[13]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_addr[14]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_addr[14]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_ba[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_ba[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_ba[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_ba[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_ba[2]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_ba[2]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_ras_n
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_ras_n
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_cas_n
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_cas_n
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_we_n
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M1_DDR2_we_n
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[2]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[3]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[3]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[4]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[4]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[5]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[5]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[6]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[6]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[7]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[7]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[8]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[8]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[8]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[9]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[9]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[9]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[10]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[10]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[10]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[11]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[11]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[11]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[12]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[12]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[12]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[13]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[13]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[13]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[14]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[14]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[14]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[15]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[15]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[15]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[16]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[16]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[16]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[17]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[17]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[17]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[18]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[18]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[18]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[19]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[19]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[19]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[20]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[20]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[20]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[21]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[21]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[21]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[22]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[22]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[22]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[23]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[23]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[23]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[24]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[24]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[24]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[25]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[25]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[25]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[26]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[26]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[26]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[27]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[27]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[27]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[28]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[28]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[28]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[29]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[29]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[29]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[30]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[30]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[30]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[31]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[31]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[31]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[32]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[32]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[32]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[33]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[33]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[33]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[34]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[34]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[34]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[35]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[35]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[35]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[36]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[36]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[36]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[37]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[37]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[37]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[38]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[38]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[38]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[39]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[39]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[39]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[40]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[40]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[40]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[41]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[41]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[41]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[42]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[42]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[42]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[43]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[43]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[43]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[44]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[44]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[44]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[45]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[45]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[45]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[46]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[46]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[46]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[47]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[47]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[47]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[48]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[48]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[48]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[49]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[49]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[49]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[50]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[50]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[50]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[51]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[51]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[51]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[52]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[52]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[52]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[53]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[53]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[53]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[54]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[54]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[54]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[55]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[55]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[55]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[56]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[56]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[56]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[57]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[57]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[57]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[58]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[58]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[58]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[59]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[59]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[59]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[60]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[60]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[60]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[61]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[61]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[61]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[62]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[62]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[62]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dq[63]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[63]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dq[63]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqs[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[0]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqs[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqs[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[2]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqs[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[3]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[3]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqs[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[4]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[4]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqs[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[5]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[5]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqs[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[6]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[6]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqs[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[7]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqs[7]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqsn[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[0]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqsn[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqsn[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[2]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqsn[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[3]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[3]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqsn[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[4]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[4]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqsn[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[5]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[5]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqsn[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[6]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[6]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M1_DDR2_dqsn[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[7]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M1_DDR2_dqsn[7]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dm[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dm[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dm[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dm[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dm[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dm[2]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dm[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dm[3]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dm[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dm[4]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dm[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dm[5]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dm[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dm[6]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M1_DDR2_dm[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M1_DDR2_dm[7]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[0]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[1]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[2]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[3]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[4]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[5]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[6]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[7]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[8]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[9]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[10]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[11]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[12]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[13]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[14]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[15]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[16]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[17]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[18]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[19]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[20]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[21]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[22]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[23]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[24]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[25]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[26]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[27]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[28]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[29]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[30]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[31]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[32]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[33]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[34]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[35]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[36]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[37]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[38]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[39]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[40]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[41]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[42]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[43]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[44]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[45]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[46]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[47]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[48]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[49]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[50]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[51]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[52]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[53]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[54]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[55]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[56]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[57]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[58]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[59]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[60]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[61]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[62]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dq[63]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqs[0]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqs[1]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqs[2]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqs[3]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqs[4]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqs[5]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqs[6]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqs[7]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqsn[0]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqsn[1]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqsn[2]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqsn[3]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqsn[4]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqsn[5]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqsn[6]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dqsn[7]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dm[0]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dm[1]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dm[2]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dm[3]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dm[4]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dm[5]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dm[6]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078784 -to M1_DDR2_dm[7]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[0] -to M1_DDR2_dq[0..7]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[0] -to M1_DDR2_dm[0]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M1_DDR2_dqsn[0] -to M1_DDR2_dqs[0]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[1] -to M1_DDR2_dq[8..15]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[1] -to M1_DDR2_dm[1]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M1_DDR2_dqsn[1] -to M1_DDR2_dqs[1]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[2] -to M1_DDR2_dq[16..23]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[2] -to M1_DDR2_dm[2]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M1_DDR2_dqsn[2] -to M1_DDR2_dqs[2]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[3] -to M1_DDR2_dq[24..31]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[3] -to M1_DDR2_dm[3]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M1_DDR2_dqsn[3] -to M1_DDR2_dqs[3]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[4] -to M1_DDR2_dq[32..39]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[4] -to M1_DDR2_dm[4]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M1_DDR2_dqsn[4] -to M1_DDR2_dqs[4]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[5] -to M1_DDR2_dq[40..47]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[5] -to M1_DDR2_dm[5]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M1_DDR2_dqsn[5] -to M1_DDR2_dqs[5]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[6] -to M1_DDR2_dq[48..55]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[6] -to M1_DDR2_dm[6]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M1_DDR2_dqsn[6] -to M1_DDR2_dqs[6]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[7] -to M1_DDR2_dq[56..63]
+set_instance_assignment -name DQ_GROUP 9 -from M1_DDR2_dqs[7] -to M1_DDR2_dm[7]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M1_DDR2_dqsn[7] -to M1_DDR2_dqs[7]
+
+#============================================================
+# DDR2 DIM2 setting
+#============================================================
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_odt[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_odt[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_odt[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_odt[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_clk[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_clk[0]
+set_instance_assignment -name TREAT_BIDIR_AS_OUTPUT ON -to M2_DDR2_clk[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_clk[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_clk[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_clk_n[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_clk_n[0]
+set_instance_assignment -name TREAT_BIDIR_AS_OUTPUT ON -to M2_DDR2_clk_n[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_clk_n[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_clk_n[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_cs_n[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_cs_n[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_cs_n[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_cs_n[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_cke[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_cke[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_cke[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_cke[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[2]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[2]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[3]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[3]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[4]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[4]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[5]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[5]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[6]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[6]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[7]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[7]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[8]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[8]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[9]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[9]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[10]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[10]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[11]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[11]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[12]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[12]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[13]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[13]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_addr[14]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_addr[14]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_ba[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_ba[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_ba[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_ba[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_ba[2]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_ba[2]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_ras_n
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_ras_n
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_cas_n
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_cas_n
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_we_n
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to M2_DDR2_we_n
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[2]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[3]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[3]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[4]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[4]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[5]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[5]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[6]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[6]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[7]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[7]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[8]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[8]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[8]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[9]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[9]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[9]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[10]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[10]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[10]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[11]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[11]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[11]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[12]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[12]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[12]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[13]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[13]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[13]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[14]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[14]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[14]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[15]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[15]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[15]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[16]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[16]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[16]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[17]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[17]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[17]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[18]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[18]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[18]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[19]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[19]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[19]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[20]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[20]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[20]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[21]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[21]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[21]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[22]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[22]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[22]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[23]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[23]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[23]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[24]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[24]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[24]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[25]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[25]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[25]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[26]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[26]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[26]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[27]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[27]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[27]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[28]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[28]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[28]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[29]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[29]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[29]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[30]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[30]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[30]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[31]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[31]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[31]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[32]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[32]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[32]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[33]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[33]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[33]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[34]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[34]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[34]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[35]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[35]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[35]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[36]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[36]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[36]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[37]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[37]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[37]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[38]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[38]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[38]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[39]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[39]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[39]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[40]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[40]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[40]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[41]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[41]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[41]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[42]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[42]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[42]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[43]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[43]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[43]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[44]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[44]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[44]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[45]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[45]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[45]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[46]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[46]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[46]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[47]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[47]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[47]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[48]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[48]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[48]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[49]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[49]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[49]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[50]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[50]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[50]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[51]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[51]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[51]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[52]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[52]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[52]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[53]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[53]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[53]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[54]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[54]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[54]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[55]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[55]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[55]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[56]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[56]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[56]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[57]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[57]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[57]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[58]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[58]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[58]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[59]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[59]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[59]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[60]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[60]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[60]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[61]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[61]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[61]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[62]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[62]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[62]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dq[63]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[63]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dq[63]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqs[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[0]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqs[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqs[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[2]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqs[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[3]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[3]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqs[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[4]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[4]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqs[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[5]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[5]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqs[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[6]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[6]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqs[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[7]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqs[7]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqsn[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[0]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqsn[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[1]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqsn[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[2]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqsn[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[3]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[3]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqsn[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[4]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[4]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqsn[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[5]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[5]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqsn[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[6]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[6]
+set_instance_assignment -name IO_STANDARD "DIFFERENTIAL 1.8-V SSTL CLASS I" -to M2_DDR2_dqsn[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[7]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to M2_DDR2_dqsn[7]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dm[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dm[0]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dm[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dm[1]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dm[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dm[2]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dm[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dm[3]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dm[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dm[4]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dm[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dm[5]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dm[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dm[6]
+set_instance_assignment -name IO_STANDARD "SSTL-18 CLASS I" -to M2_DDR2_dm[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to M2_DDR2_dm[7]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[0]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[1]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[2]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[3]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[4]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[5]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[6]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[7]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[8]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[9]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[10]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[11]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[12]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[13]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[14]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[15]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[16]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[17]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[18]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[19]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[20]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[21]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[22]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[23]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[24]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[25]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[26]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[27]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[28]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[29]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[30]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[31]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[32]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[33]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[34]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[35]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[36]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[37]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[38]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[39]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[40]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[41]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[42]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[43]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[44]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[45]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[46]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[47]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[48]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[49]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[50]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[51]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[52]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[53]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[54]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[55]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[56]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[57]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[58]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[59]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[60]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[61]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[62]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dq[63]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqs[0]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqs[1]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqs[2]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqs[3]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqs[4]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqs[5]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqs[6]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqs[7]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqsn[0]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqsn[1]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqsn[2]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqsn[3]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqsn[4]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqsn[5]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqsn[6]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dqsn[7]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dm[0]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dm[1]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dm[2]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dm[3]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dm[4]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dm[5]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dm[6]
+set_instance_assignment -name OUTPUT_ENABLE_GROUP 3078785 -to M2_DDR2_dm[7]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[0] -to M2_DDR2_dq[0..7]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[0] -to M2_DDR2_dm[0]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M2_DDR2_dqsn[0] -to M2_DDR2_dqs[0]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[1] -to M2_DDR2_dq[8..15]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[1] -to M2_DDR2_dm[1]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M2_DDR2_dqsn[1] -to M2_DDR2_dqs[1]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[2] -to M2_DDR2_dq[16..23]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[2] -to M2_DDR2_dm[2]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M2_DDR2_dqsn[2] -to M2_DDR2_dqs[2]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[3] -to M2_DDR2_dq[24..31]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[3] -to M2_DDR2_dm[3]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M2_DDR2_dqsn[3] -to M2_DDR2_dqs[3]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[4] -to M2_DDR2_dq[32..39]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[4] -to M2_DDR2_dm[4]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M2_DDR2_dqsn[4] -to M2_DDR2_dqs[4]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[5] -to M2_DDR2_dq[40..47]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[5] -to M2_DDR2_dm[5]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M2_DDR2_dqsn[5] -to M2_DDR2_dqs[5]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[6] -to M2_DDR2_dq[48..55]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[6] -to M2_DDR2_dm[6]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M2_DDR2_dqsn[6] -to M2_DDR2_dqs[6]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[7] -to M2_DDR2_dq[56..63]
+set_instance_assignment -name DQ_GROUP 9 -from M2_DDR2_dqs[7] -to M2_DDR2_dm[7]
+set_instance_assignment -name DQSB_DQS_PAIR ON -from M2_DDR2_dqsn[7] -to M2_DDR2_dqs[7]
+
+#============================================================
+# END
+#============================================================
+set_global_assignment -name MISC_FILE "G:/projet/de4/dev_2/DE4_GOLDEN_TOP/DE4_GOLDEN_TOP.dpf"
+set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V"
+set_global_assignment -name MISC_FILE "G:/projet/de4/test/de4_golden_top/DE4_GOLDEN_TOP.dpf"
+
+set_global_assignment -name MISC_FILE "D:/project/TW/de4/trunk/test/de4_golden_top/DE4_GOLDEN_TOP.dpf"
+set_global_assignment -name MISC_FILE "D:/project_bei/de4/trunk/test/de4_golden_top/DE4_GOLDEN_TOP.dpf"
+set_location_assignment PIN_AA35 -to HSMA_CLKIN_n1
+set_location_assignment PIN_AE35 -to HSMA_CLKIN_n2
+set_location_assignment PIN_AC10 -to HSMA_CLKIN_p1
+set_location_assignment PIN_W35 -to HSMB_CLKIN_n1
+set_location_assignment PIN_W5 -to HSMB_CLKIN_n2
+set_location_assignment PIN_W34 -to HSMB_CLKIN_p1
+set_location_assignment PIN_W6 -to HSMB_CLKIN_p2
+set_location_assignment PIN_AF34 -to HSMA_CLKIN_p2
+set_location_assignment PIN_AK13 -to CSENSE_ADC_FO
+set_instance_assignment -name IO_STANDARD "1.8 V" -to CSENSE_ADC_FO
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN_n1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN_n2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN_p1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMB_CLKIN_p2
+set_global_assignment -name MISC_FILE "D:/project/WH/de4/trunk/test/de4_golden_top/DE4_GOLDEN_TOP.dpf"
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN_n1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN_n2
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN_p1
+set_instance_assignment -name IO_STANDARD "2.5 V" -to HSMA_CLKIN_p2
+set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
+set_global_assignment -name SDC_FILE DE4_GOLDEN_TOP.SDC
+set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
+set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
+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_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
+
+
+
+
+set_global_assignment -name TOP_LEVEL_ENTITY emulator_top
+
+
+set_global_assignment -name VERILOG_FILE src/jtag_wb/vjtag_wb.v
+set_global_assignment -name VERILOG_FILE src/jtag_wb/vjtag.v
+set_global_assignment -name VERILOG_FILE src/jtag_wb/jtag_system_en.v
+set_global_assignment -name VERILOG_FILE src/jtag_wb/jtag_source_probe.v
+set_global_assignment -name VERILOG_FILE src/src_noc/vc_alloc_request_gen.v
+set_global_assignment -name VERILOG_FILE src/src_noc/traffic_gen_old.v
+set_global_assignment -name VERILOG_FILE src/src_noc/traffic_gen.v
+set_global_assignment -name VERILOG_FILE src/src_noc/ss_allocator.v
+set_global_assignment -name VERILOG_FILE src/src_noc/routing.v
+set_global_assignment -name VERILOG_FILE src/src_noc/router.v
+set_global_assignment -name VERILOG_FILE src/src_noc/route_torus.v
+set_global_assignment -name VERILOG_FILE src/src_noc/route_mesh.v
+set_global_assignment -name VERILOG_FILE src/src_noc/noc.v
+set_global_assignment -name VERILOG_FILE src/src_noc/main_comp.v
+set_global_assignment -name VERILOG_FILE src/src_noc/input_ports.v
+set_global_assignment -name VERILOG_FILE src/src_noc/inout_ports.v
+set_global_assignment -name VERILOG_FILE src/src_noc/flit_buffer.v
+set_global_assignment -name VERILOG_FILE src/src_noc/crossbar.v
+set_global_assignment -name VERILOG_FILE src/src_noc/credit_count.v
+set_global_assignment -name VERILOG_FILE src/src_noc/congestion_analyzer.v
+set_global_assignment -name VERILOG_FILE src/src_noc/combined_vc_sw_alloc.v
+set_global_assignment -name VERILOG_FILE src/src_noc/comb_spec2.v
+set_global_assignment -name VERILOG_FILE src/src_noc/comb_nonspec.v
+set_global_assignment -name VERILOG_FILE "src/src_noc/comb-spec1.v"
+set_global_assignment -name VERILOG_FILE src/src_noc/class_table.v
+set_global_assignment -name VERILOG_FILE src/src_noc/canonical_credit_count.v
+set_global_assignment -name VERILOG_FILE src/src_noc/baseline.v
+set_global_assignment -name VERILOG_FILE src/src_noc/arbiter.v
+set_global_assignment -name VERILOG_FILE src/src_noc/agent.v
+set_global_assignment -name VERILOG_FILE src/reset_jtag.v
+set_global_assignment -name VERILOG_FILE src/noc_emulator.v
+set_global_assignment -name VERILOG_FILE src/generic_ram.v
+set_global_assignment -name VERILOG_FILE src/emulator_top.v
+set_global_assignment -name VERILOG_FILE src/altera_reset_synchronizer.v
+
+
+
+
+
+
+
+
+
+
+
+
mpsoc/src_emulate/fpga/DE4_230/DE4_230.qsf
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_emulate/fpga/DE4_230/DE4_230.sdc
===================================================================
--- mpsoc/src_emulate/fpga/DE4_230/DE4_230.sdc (nonexistent)
+++ mpsoc/src_emulate/fpga/DE4_230/DE4_230.sdc (revision 28)
@@ -0,0 +1,83 @@
+#**************************************************************
+# This .sbc file is created by Terasic Tool.
+# Users are recommended to modify this file to match users logic.
+#**************************************************************
+
+#**************************************************************
+# Create Clock
+#**************************************************************
+
+#**************************************************************
+# Create Generated Clock
+#**************************************************************
+derive_pll_clocks
+
+
+
+#**************************************************************
+# Set Clock Latency
+#**************************************************************
+
+
+
+#**************************************************************
+# Set Clock Uncertainty
+#**************************************************************
+derive_clock_uncertainty
+
+
+
+#**************************************************************
+# Set Input Delay
+#**************************************************************
+
+
+
+#**************************************************************
+# Set Output Delay
+#**************************************************************
+
+
+
+#**************************************************************
+# Set Clock Groups
+#**************************************************************
+
+
+
+#**************************************************************
+# Set False Path
+#**************************************************************
+
+
+
+#**************************************************************
+# Set Multicycle Path
+#**************************************************************
+
+
+
+#**************************************************************
+# Set Maximum Delay
+#**************************************************************
+
+
+
+#**************************************************************
+# Set Minimum Delay
+#**************************************************************
+
+
+
+#**************************************************************
+# Set Input Transition
+#**************************************************************
+
+
+
+#**************************************************************
+# Set Load
+#**************************************************************
+
+
+
mpsoc/src_emulate/fpga/DE4_230/DE4_230.sdc
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_emulate/fpga/DE4_230/src/altera_reset_synchronizer.v
===================================================================
--- mpsoc/src_emulate/fpga/DE4_230/src/altera_reset_synchronizer.v (nonexistent)
+++ mpsoc/src_emulate/fpga/DE4_230/src/altera_reset_synchronizer.v (revision 28)
@@ -0,0 +1,87 @@
+// (C) 2001-2013 Altera Corporation. All rights reserved.
+// Your use of Altera Corporation's design tools, logic functions and other
+// software and tools, and its AMPP partner logic functions, and any output
+// files 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 Altera Program License Subscription
+// Agreement, Altera MegaCore Function License Agreement, or other applicable
+// license agreement, including, without limitation, that your use is for the
+// sole purpose of programming logic devices manufactured by Altera and sold by
+// Altera or its authorized distributors. Please refer to the applicable
+// agreement for further details.
+
+
+// $Id: //acds/rel/13.0/ip/merlin/altera_reset_controller/altera_reset_synchronizer.v#1 $
+// $Revision: #1 $
+// $Date: 2013/02/11 $
+// $Author: swbranch $
+
+// -----------------------------------------------
+// Reset Synchronizer
+// -----------------------------------------------
+`timescale 1 ns / 1 ns
+
+module altera_reset_synchronizer
+#(
+ parameter ASYNC_RESET = 1,
+ parameter DEPTH = 2
+)
+(
+ input reset_in /* synthesis ALTERA_ATTRIBUTE = "SUPPRESS_DA_RULE_INTERNAL=R101" */,
+
+ input clk,
+ output reset_out
+);
+
+ // -----------------------------------------------
+ // Synchronizer register chain. We cannot reuse the
+ // standard synchronizer in this implementation
+ // because our timing constraints are different.
+ //
+ // Instead of cutting the timing path to the d-input
+ // on the first flop we need to cut the aclr input.
+ //
+ // We omit the "preserve" attribute on the final
+ // output register, so that the synthesis tool can
+ // duplicate it where needed.
+ // -----------------------------------------------
+ (*preserve*) reg [DEPTH-1:0] altera_reset_synchronizer_int_chain;
+ reg altera_reset_synchronizer_int_chain_out;
+
+ generate if (ASYNC_RESET) begin
+
+ // -----------------------------------------------
+ // Assert asynchronously, deassert synchronously.
+ // -----------------------------------------------
+ always @(posedge clk or posedge reset_in) begin
+ if (reset_in) begin
+ altera_reset_synchronizer_int_chain <= {DEPTH{1'b1}};
+ altera_reset_synchronizer_int_chain_out <= 1'b1;
+ end
+ else begin
+ 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_out <= altera_reset_synchronizer_int_chain[0];
+ end
+ end
+
+ assign reset_out = altera_reset_synchronizer_int_chain_out;
+
+ end else begin
+
+ // -----------------------------------------------
+ // Assert synchronously, deassert synchronously.
+ // -----------------------------------------------
+ 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-1] <= reset_in;
+ altera_reset_synchronizer_int_chain_out <= altera_reset_synchronizer_int_chain[0];
+ end
+
+ assign reset_out = altera_reset_synchronizer_int_chain_out;
+
+ end
+ endgenerate
+
+endmodule
+
mpsoc/src_emulate/fpga/DE4_230/src/altera_reset_synchronizer.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_emulate/fpga/DE4_230/src/emulator_top.v
===================================================================
--- mpsoc/src_emulate/fpga/DE4_230/src/emulator_top.v (nonexistent)
+++ mpsoc/src_emulate/fpga/DE4_230/src/emulator_top.v (revision 28)
@@ -0,0 +1,160 @@
+module emulator_top
+(
+
+//////// CLOCK //////////
+ OSC_50_BANK2,
+ OSC_50_BANK3,
+ OSC_50_BANK4,
+ OSC_50_BANK5,
+ OSC_50_BANK6,
+ OSC_50_BANK7,
+
+ //////// CPU RESET //////////
+ CPU_RESET_n,
+
+
+ //////// LED x 8 //////////
+ LED,
+
+ //////// BUTTON x 4 //////////
+ BUTTON,
+
+ //////// SWITCH x 8 //////////
+ SW,
+
+ //////// SLIDE SWITCH x 4 //////////
+ SLIDE_SW
+
+
+);
+
+
+
+ //////////// CLOCK //////////
+ input OSC_50_BANK2;
+ input OSC_50_BANK3;
+ input OSC_50_BANK4;
+ input OSC_50_BANK5;
+ input OSC_50_BANK6;
+ input OSC_50_BANK7;
+
+
+ //////// CPU RESET //////////
+ input CPU_RESET_n;
+
+
+
+ //////////// LED x 8 //////////
+ output [7:0] LED;
+
+ //////////// BUTTON x 4 //////////
+ input [3:0] BUTTON;
+
+ //////////// SWITCH x 8 //////////
+ input [7:0] SW;
+
+ //////////// SLIDE SWITCH x 4 //////////
+ input [3:0] SLIDE_SW;
+
+
+
+
+
+
+
+
+
+ //NoC parameters will be defined by user
+ `define NOC_PARAM
+ `include "noc_parameters.v"
+
+
+
+ wire clk, reset, reset_noc, reset_injector, reset_noc_sync, reset_injector_sync, done;
+ wire jtag_reset_injector, jtag_reset_noc;
+
+
+
+ assign clk = OSC_50_BANK2;
+ assign reset = ~CPU_RESET_n;
+ assign LED[0] = ~done;
+ assign LED[1] = ~reset_noc;
+ assign LED[2] = ~reset_injector;
+ assign LED[7:3] = 5'b11111;
+
+
+ assign reset = (jtag_reset | reset_in);
+
+ reg[31:0]time_cnt;
+
+ // two reset sources which can be controled using jtag. One for reseting NoC another packet injectors
+ jtag_source_probe #(
+ .VJTAG_INDEX(127),
+ .Dw(2) //source/probe width in bits
+ )the_reset(
+ .probe({1'b0,done}),
+ .source({jtag_reset_injector,jtag_reset_noc})
+ );
+
+
+ assign reset_noc = (jtag_reset_noc | reset);
+ assign reset_injector = (jtag_reset_injector | reset);
+
+ altera_reset_synchronizer noc_rst_sync
+ (
+ .reset_in(reset_noc),
+ .clk(clk),
+ .reset_out(reset_noc_sync)
+ );
+
+
+ altera_reset_synchronizer inject_rst_sync
+ (
+ .reset_in(reset_injector),
+ .clk(clk),
+ .reset_out(reset_injector_sync)
+ );
+
+
+
+ noc_emulator #(
+ `include "pass_parameters.v"
+
+ )
+ noc_emulate_top
+ (
+ .reset(reset_noc_sync),
+ .jtag_ctrl_reset(reset_injector_sync),
+ .clk(clk),
+ .done(done)
+ );
+
+
+ jtag_source_probe #(
+ .VJTAG_INDEX(126),
+ .Dw(32) //source/probe width in bits
+
+
+ )
+ src_pb
+ (
+ .probe(time_cnt),
+ .source()
+ );
+
+
+ always @(posedge clk or posedge reset)begin
+ if(reset) begin
+ time_cnt<=0;
+ end else begin
+ if(!done) time_cnt<=time_cnt+1;
+ end
+ end
+
+
+
+
+endmodule
+
+
+
mpsoc/src_emulate/fpga/DE4_230/src/emulator_top.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_emulate/fpga/DE4_230/src/reset_jtag.v
===================================================================
--- mpsoc/src_emulate/fpga/DE4_230/src/reset_jtag.v (nonexistent)
+++ mpsoc/src_emulate/fpga/DE4_230/src/reset_jtag.v (revision 28)
@@ -0,0 +1,107 @@
+// megafunction wizard: %In-System Sources and Probes%
+// GENERATION: STANDARD
+// VERSION: WM1.0
+// MODULE: altsource_probe
+
+// ============================================================
+// File Name: reset_jtag.v
+// Megafunction Name(s):
+// altsource_probe
+//
+// Simulation Library Files(s):
+// altera_mf
+// ============================================================
+// ************************************************************
+// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
+//
+// 13.0.0 Build 156 04/24/2013 SJ Full Version
+// ************************************************************
+
+
+//Copyright (C) 1991-2013 Altera Corporation
+//Your use of Altera Corporation's design tools, logic functions
+//and other software and tools, and its AMPP 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 Altera Program License
+//Subscription Agreement, Altera MegaCore Function License
+//Agreement, or other applicable license agreement, including,
+//without limitation, that your use is for the sole purpose of
+//programming logic devices manufactured by Altera and sold by
+//Altera or its authorized distributors. Please refer to the
+//applicable agreement for further details.
+
+
+// synopsys translate_off
+`timescale 1 ps / 1 ps
+// synopsys translate_on
+module reset_jtag (
+ probe,
+ source);
+
+ input [0:0] probe;
+ output [0:0] source;
+
+ wire [0:0] sub_wire0;
+ wire [0:0] source = sub_wire0[0:0];
+
+ altsource_probe altsource_probe_component (
+ .probe (probe),
+ .source (sub_wire0)
+ // synopsys translate_off
+ ,
+ .clrn (),
+ .ena (),
+ .ir_in (),
+ .ir_out (),
+ .jtag_state_cdr (),
+ .jtag_state_cir (),
+ .jtag_state_e1dr (),
+ .jtag_state_sdr (),
+ .jtag_state_tlr (),
+ .jtag_state_udr (),
+ .jtag_state_uir (),
+ .raw_tck (),
+ .source_clk (),
+ .source_ena (),
+ .tdi (),
+ .tdo (),
+ .usr1 ()
+ // synopsys translate_on
+ );
+ defparam
+ altsource_probe_component.enable_metastability = "NO",
+ altsource_probe_component.instance_id = "RST",
+ altsource_probe_component.probe_width = 1,
+ altsource_probe_component.sld_auto_instance_index = "NO",
+ altsource_probe_component.sld_instance_index = 127,
+ altsource_probe_component.source_initial_value = " 0",
+ altsource_probe_component.source_width = 1;
+
+
+endmodule
+
+// ============================================================
+// CNX file retrieval info
+// ============================================================
+// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
+// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
+// Retrieval info: CONSTANT: ENABLE_METASTABILITY STRING "NO"
+// Retrieval info: CONSTANT: INSTANCE_ID STRING "RST"
+// Retrieval info: CONSTANT: PROBE_WIDTH NUMERIC "1"
+// Retrieval info: CONSTANT: SLD_AUTO_INSTANCE_INDEX STRING "NO"
+// Retrieval info: CONSTANT: SLD_INSTANCE_INDEX NUMERIC "127"
+// Retrieval info: CONSTANT: SOURCE_INITIAL_VALUE STRING " 0"
+// Retrieval info: CONSTANT: SOURCE_WIDTH NUMERIC "1"
+// Retrieval info: USED_PORT: probe 0 0 1 0 INPUT NODEFVAL "probe[0..0]"
+// Retrieval info: USED_PORT: source 0 0 1 0 OUTPUT NODEFVAL "source[0..0]"
+// Retrieval info: CONNECT: @probe 0 0 1 0 probe 0 0 1 0
+// Retrieval info: CONNECT: source 0 0 1 0 @source 0 0 1 0
+// Retrieval info: GEN_FILE: TYPE_NORMAL reset_jtag.v TRUE
+// Retrieval info: GEN_FILE: TYPE_NORMAL reset_jtag.inc FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL reset_jtag.cmp FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL reset_jtag.bsf FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL reset_jtag_inst.v FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL reset_jtag_bb.v TRUE
+// Retrieval info: LIB_FILE: altera_mf
mpsoc/src_emulate/fpga/DE4_230/src/reset_jtag.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_emulate/fpga/De2-115/De2-115.inf
===================================================================
--- mpsoc/src_emulate/fpga/De2-115/De2-115.inf (nonexistent)
+++ mpsoc/src_emulate/fpga/De2-115/De2-115.inf (revision 28)
@@ -0,0 +1,12 @@
+#######################################################################
+## File: De2-115.inf
+##
+## Copyright (C) 2014-2016 Alireza Monemi
+##
+## This file is part of ProNoC 1.5.0
+##
+###############################################################################
+
+$board_info = {
+ 'device_name' => {'EP4CE115F29'}
+};
mpsoc/src_emulate/fpga/De2-115/De2-115.inf
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_emulate/fpga/De2-115/De2-115.qsf
===================================================================
--- mpsoc/src_emulate/fpga/De2-115/De2-115.qsf (revision 27)
+++ mpsoc/src_emulate/fpga/De2-115/De2-115.qsf (revision 28)
@@ -1271,39 +1271,39 @@
set_instance_assignment -name TSU_REQUIREMENT "10 ns" -from * -to *
-set_global_assignment -name VERILOG_FILE src/vjtag_wb.v
-set_global_assignment -name VERILOG_FILE src/vjtag.v
+
+set_global_assignment -name VERILOG_FILE src/jtag_wb/vjtag_wb.v
+set_global_assignment -name VERILOG_FILE src/jtag_wb/vjtag.v
+set_global_assignment -name VERILOG_FILE src/jtag_wb/jtag_system_en.v
+set_global_assignment -name VERILOG_FILE src/jtag_wb/jtag_source_probe.v
+set_global_assignment -name VERILOG_FILE src/src_noc/vc_alloc_request_gen.v
+set_global_assignment -name VERILOG_FILE src/src_noc/traffic_gen_old.v
+set_global_assignment -name VERILOG_FILE src/src_noc/traffic_gen.v
+set_global_assignment -name VERILOG_FILE src/src_noc/ss_allocator.v
+set_global_assignment -name VERILOG_FILE src/src_noc/routing.v
+set_global_assignment -name VERILOG_FILE src/src_noc/router.v
+set_global_assignment -name VERILOG_FILE src/src_noc/route_torus.v
+set_global_assignment -name VERILOG_FILE src/src_noc/route_mesh.v
+set_global_assignment -name VERILOG_FILE src/src_noc/noc.v
+set_global_assignment -name VERILOG_FILE src/src_noc/main_comp.v
+set_global_assignment -name VERILOG_FILE src/src_noc/input_ports.v
+set_global_assignment -name VERILOG_FILE src/src_noc/inout_ports.v
+set_global_assignment -name VERILOG_FILE src/src_noc/flit_buffer.v
+set_global_assignment -name VERILOG_FILE src/src_noc/crossbar.v
+set_global_assignment -name VERILOG_FILE src/src_noc/credit_count.v
+set_global_assignment -name VERILOG_FILE src/src_noc/congestion_analyzer.v
+set_global_assignment -name VERILOG_FILE src/src_noc/combined_vc_sw_alloc.v
+set_global_assignment -name VERILOG_FILE src/src_noc/comb_spec2.v
+set_global_assignment -name VERILOG_FILE src/src_noc/comb_nonspec.v
+set_global_assignment -name VERILOG_FILE "src/src_noc/comb-spec1.v"
+set_global_assignment -name VERILOG_FILE src/src_noc/class_table.v
+set_global_assignment -name VERILOG_FILE src/src_noc/canonical_credit_count.v
+set_global_assignment -name VERILOG_FILE src/src_noc/baseline.v
+set_global_assignment -name VERILOG_FILE src/src_noc/arbiter.v
+set_global_assignment -name VERILOG_FILE src/reset_jtag.v
set_global_assignment -name VERILOG_FILE src/noc_emulator.v
-set_global_assignment -name VERILOG_FILE src/jtag_system_en.v
-set_global_assignment -name VERILOG_FILE src/ram_single_port_jtag.v
-set_global_assignment -name VERILOG_FILE src/jtag_source_probe.v
+set_global_assignment -name VERILOG_FILE src/generic_ram.v
+set_global_assignment -name VERILOG_FILE src/emulator_top.v
set_global_assignment -name VERILOG_FILE src/altera_reset_synchronizer.v
-set_global_assignment -name VERILOG_FILE src/reset_jtag.v
-set_global_assignment -name VERILOG_FILE src/vc_alloc_request_gen.v
-set_global_assignment -name VERILOG_FILE src/traffic_gen_old.v
-set_global_assignment -name VERILOG_FILE src/traffic_gen.v
-set_global_assignment -name VERILOG_FILE src/ss_allocator.v
-set_global_assignment -name VERILOG_FILE src/routing.v
-set_global_assignment -name VERILOG_FILE src/router.v
-set_global_assignment -name VERILOG_FILE src/route_torus.v
-set_global_assignment -name VERILOG_FILE src/route_mesh.v
-set_global_assignment -name VERILOG_FILE src/noc.v
-set_global_assignment -name VERILOG_FILE src/main_comp.v
-set_global_assignment -name VERILOG_FILE src/input_ports.v
-set_global_assignment -name VERILOG_FILE src/inout_ports.v
-set_global_assignment -name VERILOG_FILE src/flit_buffer.v
-set_global_assignment -name VERILOG_FILE src/crossbar.v
-set_global_assignment -name VERILOG_FILE src/credit_count.v
-set_global_assignment -name VERILOG_FILE src/congestion_analyzer.v
-set_global_assignment -name VERILOG_FILE src/combined_vc_sw_alloc.v
-set_global_assignment -name VERILOG_FILE src/comb_spec2.v
-set_global_assignment -name VERILOG_FILE src/comb_nonspec.v
-set_global_assignment -name VERILOG_FILE "src/comb-spec1.v"
-set_global_assignment -name VERILOG_FILE src/class_table.v
-set_global_assignment -name VERILOG_FILE src/canonical_credit_count.v
-set_global_assignment -name VERILOG_FILE src/baseline.v
-set_global_assignment -name VERILOG_FILE src/arbiter.v
-set_global_assignment -name VERILOG_FILE src/altera_noc_emulator.v
-set_global_assignment -name VERILOG_FILE emulator_top.v
-set_global_assignment -name QIP_FILE probe.qip
+
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
/mpsoc/src_emulate/fpga/De2-115/src/emulator_top.v
0,0 → 1,103
module emulator_top ( |
output [0:0]LEDR, |
output [1:0]LEDG, |
input [0:0]KEY, |
input CLOCK_50 |
); |
|
|
|
|
//NoC parameters will be defined by user |
`define NOC_PARAM |
`include "noc_parameters.v" |
|
|
|
|
wire clk, reset, reset_noc, reset_injector, reset_noc_sync, reset_injector_sync, done; |
wire jtag_reset_injector, jtag_reset_noc; |
|
assign clk = CLOCK_50; |
assign reset = ~KEY[0]; |
assign LEDR[0] = done; |
assign LEDG[0] = reset_noc; |
assign LEDG[1] = reset_injector; |
|
|
|
|
reg[31:0]time_cnt; |
|
// two reset sources which can be controled using jtag. One for reseting NoC another packet injectors |
jtag_source_probe #( |
.VJTAG_INDEX(127), |
.Dw(2) //source/probe width in bits |
)the_reset( |
.probe({1'b0,done}), |
.source({jtag_reset_injector,jtag_reset_noc}) |
); |
|
|
assign reset_noc = (jtag_reset_noc | reset); |
assign reset_injector = (jtag_reset_injector | reset); |
|
altera_reset_synchronizer noc_rst_sync |
( |
.reset_in(reset_noc), |
.clk(clk), |
.reset_out(reset_noc_sync) |
); |
|
|
altera_reset_synchronizer inject_rst_sync |
( |
.reset_in(reset_injector), |
.clk(clk), |
.reset_out(reset_injector_sync) |
); |
|
|
|
noc_emulator #( |
`include "pass_parameters.v" |
|
) |
noc_emulate_top |
( |
.reset(reset_noc_sync), |
.jtag_ctrl_reset(reset_injector_sync), |
.clk(clk), |
.done(done) |
); |
|
|
jtag_source_probe #( |
.VJTAG_INDEX(126), |
.Dw(32) //source/probe width in bits |
|
|
) |
src_pb |
( |
.probe(time_cnt), |
.source() |
); |
|
|
always @(posedge clk or posedge reset)begin |
if(reset) begin |
time_cnt<=0; |
end else begin |
if(!done) time_cnt<=time_cnt+1; |
end |
end |
|
|
|
|
|
endmodule |
|
|
|
mpsoc/src_emulate/fpga/De2-115/src/emulator_top.v
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_emulate/rtl/noc_emulator.v
===================================================================
--- mpsoc/src_emulate/rtl/noc_emulator.v (revision 27)
+++ mpsoc/src_emulate/rtl/noc_emulator.v (revision 28)
@@ -1,5 +1,10 @@
-
-
+/**************************************
+* Module: emulator
+* Date:2017-01-20
+* Author: alireza
+*
+* Description:
+***************************************/
module noc_emulator #(
//NoC parameters
parameter V = 1, // V
@@ -25,81 +30,58 @@
parameter SSA_EN="NO", // "YES" , "NO"
// simulation
- parameter MAX_PCK_NUM=2560000,
- parameter MAX_SIM_CLKs=1000000,
- parameter MAX_PCK_SIZ=10,
- parameter TIMSTMP_FIFO_NUM=16
-
+ parameter MAX_PATTERN = 124,
+ parameter VJTAG_INDEX=128,
+ parameter TIMSTMP_FIFO_NUM=16
)(
+ jtag_ctrl_reset,
reset,
clk,
done
);
- input reset,clk;
- output done;
+ input reset,jtag_ctrl_reset,clk;
+ output done;
- function integer log2;
- input integer number; begin
- log2=0;
- while(2**log21)? log2(C): 1,
- NCw = log2(NC),
- RATIOw = log2(100),
+ localparam Fw = 2+V+Fpay,
+ NC = (TOPOLOGY=="RING")? NX : NX*NY,
NCV = NC * V,
- NCFw = NC * Fw,
- PCK_CNTw= log2(MAX_PCK_NUM+1),
- CLK_CNTw= log2(MAX_SIM_CLKs+1),
- PCK_SIZw= log2(MAX_PCK_SIZ+1);
+ NCFw = NC * Fw;
+
- wire [Fw-1 : 0] ni_flit_out [NC-1 :0];
- wire [NC-1 : 0] ni_flit_out_wr;
- wire [V-1 : 0] ni_credit_in [NC-1 :0];
- wire [Fw-1 : 0] ni_flit_in [NC-1 :0];
- wire [NC-1 : 0] ni_flit_in_wr;
- wire [V-1 : 0] ni_credit_out [NC-1 :0];
- wire [NCFw-1 : 0] flit_out_all;
- wire [NC-1 : 0] flit_out_wr_all;
- wire [NCV-1 : 0] credit_in_all;
- wire [NCFw-1 : 0] flit_in_all;
- wire [NC-1 : 0] flit_in_wr_all;
- wire [NCV-1 : 0] credit_out_all;
+ localparam PCK_CNTw =30, // 1 G packets
+ PCK_SIZw =14, // 16 K flit
+ MAXXw =4, // 16 nodes in x dimention
+ MAXYw =4, // 16 nodes in y dimention : max emulator size is 16X16
+ MAXCw =4; // 16 message classes
+
+
+ localparam MAX_PCK_NUM = (2**PCK_CNTw)-1,
+ MAX_SIM_CLKs = 1_000_000_000,
+ MAX_PCK_SIZ = (2**PCK_SIZw)-1; // max packet size
+
+
- wire [NC-1 : 0] done_sep;
- assign done = &done_sep;
+
reg start_i;
reg [10:0] cnt;
- always @(posedge clk or posedge reset) begin
- if(reset) begin
- cnt <=0;
- start_i <=0;
- end else begin
- if(cnt < 1020) cnt<= cnt+1'b1;
- if(cnt== 1000)begin
- start_i<=1'b1;
- end else if(cnt== 1010)begin
- start_i<=1'b0;
- end
-
-
- end
- end
+
+
+ wire [NCFw-1 : 0] noc_flit_out_all;
+ wire [NC-1 : 0] noc_flit_out_wr_all;
+ wire [NCV-1 : 0] noc_credit_in_all;
+ wire [NCFw-1 : 0] noc_flit_in_all;
+ wire [NC-1 : 0] noc_flit_in_wr_all;
+ wire [NCV-1 : 0] noc_credit_out_all;
+
noc #(
.V(V),
@@ -128,38 +110,19 @@
)
the_noc
(
- .flit_out_all(flit_out_all),
- .flit_out_wr_all(flit_out_wr_all),
- .credit_in_all(credit_in_all),
- .flit_in_all(flit_in_all),
- .flit_in_wr_all(flit_in_wr_all),
- .credit_out_all(credit_out_all),
+ .flit_out_all(noc_flit_out_all),
+ .flit_out_wr_all(noc_flit_out_wr_all),
+ .credit_in_all(noc_credit_in_all),
+ .flit_in_all(noc_flit_in_all),
+ .flit_in_wr_all(noc_flit_in_wr_all),
+ .credit_out_all(noc_credit_out_all),
.reset(reset),
.clk(clk)
);
- wire [NC-1 : 0] start;
-
- start_delay_gen #(
- .NC(NC) //number of cores
-
- )st_gen(
- .clk(clk),
- .reset(reset),
- .start_i(start_i),
- .start_o(start)
- );
-
- genvar x,y;
-
-
- generate
- for (x=0; x1)? log2(C): 1,
+ localparam Fw = 2+V+Fpay,
+ NC = (TOPOLOGY=="RING")? NX : NX*NY,
NCw = log2(NC),
- RATIOw = log2(100),
NCV = NC * V,
- NCFw = NC * Fw,
- PCK_CNTw= log2(MAX_PCK_NUM+1),
- CLK_CNTw= log2(MAX_SIM_CLKs+1),
- PCK_SIZw= log2(MAX_PCK_SIZ+1);
+ NCFw = NC * Fw;
+
+
- wire [Fw-1 : 0] ni_flit_out [NC-1 :0];
- wire [NC-1 : 0] ni_flit_out_wr;
- wire [V-1 : 0] ni_credit_in [NC-1 :0];
- wire [Fw-1 : 0] ni_flit_in [NC-1 :0];
- wire [NC-1 : 0] ni_flit_in_wr;
- wire [V-1 : 0] ni_credit_out [NC-1 :0];
- wire [NCFw-1 : 0] flit_out_all;
- wire [NC-1 : 0] flit_out_wr_all;
- wire [NCV-1 : 0] credit_in_all;
- wire [NCFw-1 : 0] flit_in_all;
- wire [NC-1 : 0] flit_in_wr_all;
- wire [NCV-1 : 0] credit_out_all;
-
- wire [NC-1 : 0] done_sep;
- assign done = &done_sep;
- reg start;
- reg [10:0] cnt;
+
- always @(posedge clk or posedge reset) begin
- if(reset) begin
- cnt <=0;
- start <=0;
- end else begin
- if(cnt < 1020) cnt<= cnt+1'b1;
- if(cnt== 1000)begin
- start<=1'b1;
- end else if(cnt== 1010)begin
- start<=1'b0;
- end
-
-
- end
- end
+ input reset,jtag_ctrl_reset, clk;
+ input start_i;
+
+ output done;
+
+ // NOC interfaces
+ output [NCFw-1 : 0] flit_out_all;
+ output [NC-1 : 0] flit_out_wr_all;
+ input [NCV-1 : 0] credit_in_all;
+ input [NCFw-1 : 0] flit_in_all;
+ input [NC-1 : 0] flit_in_wr_all;
+ output [NCV-1 : 0] credit_out_all;
+
+
+
+
+ wire [Fw-1 : 0] flit_out [NC-1 :0];
+ wire [NC-1 : 0] flit_out_wr;
+ wire [V-1 : 0] credit_in [NC-1 :0];
+ wire [Fw-1 : 0] flit_in [NC-1 :0];
+ wire [NC-1 : 0] flit_in_wr;
+ wire [V-1 : 0] credit_out [NC-1 :0];
+
+
+
+
+
+ wire [NC-1 : 0] start;
+ wire [NC-1 : 0] done_sep;
+ assign done = &done_sep;
+
+ start_delay_gen #(
+ .NC(NC) //number of cores
- noc #(
- .V(V),
- .B(B),
- .NX(NX),
- .NY(NY),
- .C(C),
- .Fpay(Fpay),
- .MUX_TYPE(MUX_TYPE),
- .VC_REALLOCATION_TYPE(VC_REALLOCATION_TYPE),
- .COMBINATION_TYPE(COMBINATION_TYPE),
- .FIRST_ARBITER_EXT_P_EN(FIRST_ARBITER_EXT_P_EN),
- .TOPOLOGY(TOPOLOGY),
- .ROUTE_NAME(ROUTE_NAME),
- .CONGESTION_INDEX(CONGESTION_INDEX),
- .DEBUG_EN (DEBUG_EN),
- .ROUTE_SUBFUNC(ROUTE_SUBFUNC),
- .AVC_ATOMIC_EN(AVC_ATOMIC_EN),
- .ADD_PIPREG_AFTER_CROSSBAR(ADD_PIPREG_AFTER_CROSSBAR),
- .CVw(CVw),
- .CLASS_SETTING(CLASS_SETTING), // shows how each class can use VCs
- .ESCAP_VC_MASK(ESCAP_VC_MASK), //
- .SSA_EN(SSA_EN)
-
-
- )
- the_noc
- (
- .flit_out_all(flit_out_all),
- .flit_out_wr_all(flit_out_wr_all),
- .credit_in_all(credit_in_all),
- .flit_in_all(flit_in_all),
- .flit_in_wr_all(flit_in_wr_all),
- .credit_out_all(credit_out_all),
+ )st_gen(
+ .clk(clk),
.reset(reset),
- .clk(clk)
+ .start_i(start_i),
+ .start_o(start)
);
+
+
+ //jtag_emulator_controller
+
- genvar x,y;
+
+ localparam Dw=64,
+ Aw =log2(MAX_PATTERN+4); // 124 + 4 =128; 4: ramcounter + total latency + total reseived packet + total sent packet;
+
+
+
+ wire [Dw-1 : 0] jtag_data ;
+ wire [Aw-1 : 0] jtag_addr ;
+ wire jtag_we;
+ wire [Dw-1 : 0] jtag_q ;
+ wire [NCw-1: 0] jtag_RAM_select;
+ wire [NC-1 : 0] jtag_we_sep;
+ wire [Dw-1 : 0] jtag_q_sep [NC-1 : 0];
+
+ assign jtag_q = jtag_q_sep[jtag_RAM_select];
+
+
+
+
+
+ jtag_emulator_controller #(
+ .VJTAG_INDEX(VJTAG_INDEX),
+ .Dw(Dw),
+ .Aw(Aw+NCw)
+
+ )
+ jtag_controller
+ (
+ .dat_o(jtag_data),
+ .addr_o({jtag_RAM_select,jtag_addr}),
+ .we_o(jtag_we),
+ .q_i(jtag_q),
+ .clk(clk),
+ .reset(jtag_ctrl_reset)
+
+ );
+
+
+
+
+
+ genvar x,y;
generate
- for (x=0; x 1)? log2(C): 1,
- Fw = 2+V+Fpay,
- RATIOw = log2(100),
- PCK_CNTw = log2(MAX_PCK_NUM+1),
- CLK_CNTw = log2(MAX_SIM_CLKs+1),
- PCK_SIZw = log2(MAX_PCK_SIZ+1);
+ Fw = 2+V+Fpay;
+
+ //define maximum width for each parameter of packet injector
+
+ localparam RATIOw =7; // log2(100)
+
+
+
+ localparam Dw=PCK_CNTw+ RATIOw + PCK_SIZw + MAXXw + MAXYw + MAXCw +1;//=64
+ localparam Aw=log2(MAX_PATTERN+4); // 124 + 4 =128; 4: ramcounter + total latency + total reseived packet + total sent packet;
+
+ localparam STATE_NUM=6,
+ IDEAL =1,
+ SEND_PCK=2,
+ SAVE_SENT_PCK_NUM=4,
+ SAVE_RSVD_PCK_NUM=8,
+ SAVE_LATENCY_NUM=16,
+ ASSET_DONE=32;
+
+ localparam CLK_CNTw = log2(MAX_SIM_CLKs+1),
+ MAX_PCK_NUM = (2**PCK_CNTw)-1,
+ MAX_PCK_SIZ = (2**PCK_SIZw)-1; // max packet size
+ localparam [Aw-1 : 0] RAM_CNT_ADDR = 0,
+ PATTERN_START_ADDR=1,
+ PATTERN_END_ADDR= MAX_PATTERN,
+ SENT_PCK_ADDR = PATTERN_END_ADDR+1,
+ RSVD_PCK_ADDR = PATTERN_END_ADDR+2,
+ LATENCY_ADDR = PATTERN_END_ADDR+3;
+
input reset, clk;
input [Xw-1 :0] current_x;
input [Yw-1 :0] current_y;
@@ -505,7 +545,15 @@
input start;
output reg done;
-
+ reg done_next;
+
+ input [Dw-1 : 0] jtag_data_b;
+ input [Aw-1 : 0] jtag_addr_b;
+ input jtag_we_b;
+ output [Dw-1 : 0] jtag_q_b;
+
+
+
// NOC interfaces
output [Fw-1 :0] flit_out;
output flit_out_wr;
@@ -515,35 +563,80 @@
output [V-1 :0] credit_out;
+
+
+
+
+ wire [Dw-1 : 0] q_a;
+ reg [Aw-1 : 0] addr_a,addr_a_next;
+ reg we_a;
+ reg [Dw-1 : 0] data_a;
+
+
+
+ wire [PCK_CNTw-1 :0] pck_num_to_send_in;
+ wire [RATIOw-1 :0] ratio,ratio_in;
+ wire [PCK_SIZw-1 :0] pck_size_in;
+ wire [MAXXw-1 :0] dest_x_in;
+ wire [MAXYw-1 :0] dest_y_in;
+ wire [MAXCw-1 :0] pck_class_in;
+ wire last_adr_in;
+
+ assign {pck_num_to_send_in,ratio_in, pck_size_in,dest_x_in, dest_y_in,pck_class_in, last_adr_in}= q_a;
-
- //wires
- wire [RATIOw-1 :0] ratio,ratio_in;
+ wire [Xw-1 :0] dest_x = dest_x_in [Xw-1 :0];
+ wire [Yw-1 :0] dest_y = dest_y_in [Yw-1 :0];
+ wire [Cw-1 :0] pck_class= pck_class_in[Cw-1 :0];
- wire [PCK_SIZw-1 :0] pck_size;
- wire [Xw-1 :0] dest_x;
- wire [Yw-1 :0] dest_y;
- wire [Cw-1 :0] pck_class_in;
-
- //
- wire update;
- wire [CLK_CNTw-1 :0] time_stamp_h2h,time_stamp_h2t;
- wire [31 :0] distance;
- wire [Cw-1 :0] pck_class_out;
+
+ wire [CLK_CNTw-1 :0] time_stamp_h2t;
+ wire sent_done, update;
+ reg [ STATE_NUM-1 : 0] ps,ns;
+ reg [63 : 0] total_pck_recieved,total_pck_recieved_next,total_pck_sent,total_pck_sent_next;
+ reg [63 : 0] total_latency_cnt,total_latency_cnt_next;
+ reg [31 : 0] ram_counter,ram_counter_next;
+ reg [PCK_CNTw-1 :0] pck_number_sent,pck_number_sent_next;
+
+ reg nvalid_dest,reset_pck_number_sent_old;
+ wire nvalid_dest_next= (current_x==dest_x && current_y==dest_y);
+ wire reset_pck_number_sent= ((pck_number_sent==pck_num_to_send_in) | nvalid_dest) & ~reset_pck_number_sent_old;
+
+ assign ratio=(ps==SEND_PCK)? ratio_in : {RATIOw{1'b0}};
+
+
+
- wire [PCK_CNTw-1 :0] pck_number_recieved,pck_num_to_send;
- reg [PCK_CNTw-1 :0] pck_number_sent;
+
+ dual_port_ram #(
+ .Dw (Dw),
+ .Aw (Aw)
+ )
+ the_ram
+ (
+ .clk (clk),
+ //port a
+ .data_a (data_a),
+ .addr_a (addr_a),
+ .we_a (we_a),
+ .q_a (q_a),
+
+ //port b connected to the jtag
+ .data_b (jtag_data_b),
+ .addr_b (jtag_addr_b),
+ .we_b (jtag_we_b),
+ .q_b (jtag_q_b)
+
+ );
- wire sent_done;
- wire hdr_flit_sent;
- reg [31 : 0] total_pck_recieved,total_pck_sent;
- reg [35 : 0] total_latency_cnt;
- reg [31 : 0] ram_counter;
- wire [31 : 0] initial_ram_cnt;
+
+
+
+
-
+
+
traffic_gen #(
.V(V),
.B(B),
@@ -563,22 +656,23 @@
(
//input
.ratio (ratio),
- .pck_size(pck_size),
+ .pck_size_in(pck_size_in),
.current_x(current_x),
.current_y(current_y),
.dest_x(dest_x),
.dest_y(dest_y),
- .pck_class_in(pck_class_in),
+ .pck_class_in(pck_class),
.start(start),
.report (),
+
//output
- .pck_number(pck_number_recieved),
+ .pck_number( ),
.sent_done(sent_done), // tail flit has been sent
- .hdr_flit_sent(hdr_flit_sent),
+ .hdr_flit_sent( ),
.update(update), // update the noc_analayzer
- .distance(distance),
- .pck_class_out(pck_class_out),
- .time_stamp_h2h(time_stamp_h2h),
+ .distance( ),
+ .pck_class_out( ),
+ .time_stamp_h2h( ),
.time_stamp_h2t(time_stamp_h2t),
//noc
.flit_out(flit_out),
@@ -592,124 +686,268 @@
.clk(clk)
);
+
+
+
+
+
+
+
+
+ always @ (*)begin
+ ns=ps;
+ addr_a_next = addr_a;
+ pck_number_sent_next = pck_number_sent;
+ done_next =done;
+ total_latency_cnt_next = total_latency_cnt;
+ total_pck_recieved_next = total_pck_recieved;
+ total_pck_sent_next = total_pck_sent;
+ ram_counter_next = ram_counter;
+ data_a = total_pck_sent;
+ we_a = 0;
+
+ case(ps)
+ IDEAL : begin
+ done_next =1'b0;
+ addr_a_next =RAM_CNT_ADDR;
+ ram_counter_next = q_a[31:0]; // first ram dada shows howmany times need to read the RAM
+ if( start) begin
+ addr_a_next=PATTERN_START_ADDR;
+ ns= SEND_PCK;
+ end
+
+ end//IDEAL
+ SEND_PCK: begin
+ if (reset_pck_number_sent) begin
+ pck_number_sent_next={PCK_CNTw{1'b0}};
+ if(last_adr_in)begin
+ if(ram_counter==0)begin
+ ns = SAVE_SENT_PCK_NUM;
+ addr_a_next = SENT_PCK_ADDR;
+ end else addr_a_next = 1;
+ ram_counter_next=ram_counter-1'b1;
+ end else begin
+ addr_a_next=addr_a+1'b1;
+
+ end
+
+ end
+ else if(sent_done)begin
+ pck_number_sent_next =pck_number_sent+1'b1;
+ total_pck_sent_next =total_pck_sent+1'b1;
+ end
+ if(update)begin
+ total_latency_cnt_next = total_latency_cnt + time_stamp_h2t;
+ total_pck_recieved_next =total_pck_recieved+1'b1;
+ end
+
+
+
+ end//SEND_PCk
+ SAVE_SENT_PCK_NUM: begin
+ data_a = total_pck_sent;
+ we_a = 1;
+ addr_a_next =RSVD_PCK_ADDR ;
+ ns= SAVE_RSVD_PCK_NUM;
+
+ end
+ SAVE_RSVD_PCK_NUM: begin
+ data_a = total_pck_recieved;
+ addr_a_next =LATENCY_ADDR;
+ we_a = 1;
+ ns= SAVE_LATENCY_NUM;
+
+
+ end
+ SAVE_LATENCY_NUM: begin
+ data_a = total_latency_cnt;
+ we_a = 1;
+ ns= ASSET_DONE;
+
+ end
+ ASSET_DONE: begin
+ done_next =1'b1;
+ end
+ endcase
+ end//always
+
+
+
+ always @(posedge clk) begin
+ if(reset)begin
+ ps <= IDEAL;
+ addr_a <={Aw{1'b0}};
+ pck_number_sent<={PCK_CNTw{1'b0}};
+ done<=1'b0;
+ total_latency_cnt<=64'd0;
+ total_pck_recieved<=64'd0;
+ total_pck_sent<=64'd0;
+ ram_counter<= 32'd0;
+ nvalid_dest<=1'b0;
+ reset_pck_number_sent_old<=1'b0;
+ end else begin
+ ps <= ns;
+ addr_a<= addr_a_next;
+ pck_number_sent<= pck_number_sent_next;
+ done <=done_next;
+ total_latency_cnt<= total_latency_cnt_next;
+ total_pck_recieved<= total_pck_recieved_next;
+ total_pck_sent<= total_pck_sent_next;
+ ram_counter<= ram_counter_next;
+ nvalid_dest<=nvalid_dest_next;
+ reset_pck_number_sent_old<=reset_pck_number_sent;
+ end
+ end
+
+endmodule
-localparam RAM_TAG_STRING=IP_NUM;
-localparam SRC_PRB_TAG=IP_NUM+128;
-localparam RAM_ID = {"ENABLE_RUNTIME_MOD=NO"};
-localparam Dw=PCK_CNTw+ RATIOw + PCK_SIZw + Xw + Yw + Cw +1;
-localparam Aw=7;
-reg [Aw-1 : 0] ram_addr;
-wire [Dw-1 : 0] ram_do;
-wire last_adr;
+/***********************
+*
+* jtag_emulator_controller
+*
+***********************/
-// control/monitor packet injector using In-System Sources and Probes Editor
-localparam PRBw=36+32+32,
- SRCw=32;
-
-wire [SRCw-1 : 0] source;
-wire [PRBw-1 : 0] probe;
-assign probe ={total_latency_cnt, total_pck_recieved,total_pck_sent};
-assign initial_ram_cnt =source;
+module jtag_emulator_controller #(
+ parameter VJTAG_INDEX=126,
+ parameter Dw=32,
+ parameter Aw=32
-
- ram_single_port_jtag #(
- .Dw(Dw),
- .Aw(Aw),
- .JTAG_INDEX(RAM_TAG_STRING), //use for programming the memory at run time
- .BENw(1)
-
- ) ram_inst
- (
- .clk(clk),
- .reset(1'b0),
- //memory interface
- .data_a({Dw{1'b0}}),
- .addr_a(ram_addr),
- .byteena_a(1'b1),
- .we_a(1'b0),
- .q_a(ram_do)
-
- );
+)(
+ clk,
+ reset,
+
+
+ //wishbone master interface signals
+
+ dat_o,
+ addr_o,
+
+ we_o,
+ q_i
+
+
+);
+ //IO declaration
+ input reset,clk;
+
+
+ //wishbone master interface signals
+
+ output [Dw-1 : 0] dat_o;
+ output [Aw-1 : 0] addr_o;
+ output we_o;
+ input [Dw-1 : 0] q_i;
+
+
+ localparam STATE_NUM=3,
+ IDEAL =1,
+ WB_WR_DATA=2,
+ WB_RD_DATA=4;
+
+ reg [STATE_NUM-1 : 0] ps,ns;
+
+ wire [Dw-1 :0] data_out, data_in;
+ wire wb_wr_addr_en, wb_wr_data_en, wb_rd_data_en;
+ reg wr_mem_en, wb_cap_rd;
+
+ reg [Aw-1 : 0] wb_addr,wb_addr_next;
+ reg [Dw-1 : 0] wb_wr_data,wb_rd_data;
+ reg wb_addr_inc;
+
+
+
+ assign we_o = wr_mem_en;
+ assign dat_o = wb_wr_data;
+ assign addr_o = wb_addr;
+ assign data_in = wb_rd_data;
+//vjtag vjtag signals declaration
+
-
-
-
-localparam jDw=(PRBw>SRCw)? PRBw : SRCw;
-
- jtag_source_probe #(
- .Dw(jDw),
- .VJTAG_INDEX(SRC_PRB_TAG)
+localparam VJ_DW= (Dw > Aw)? Dw : Aw;
- )
- src_pb
+
+ vjtag_ctrl #(
+ .DW(VJ_DW),
+ .VJTAG_INDEX(VJTAG_INDEX)
+ )
+ vjtag_ctrl_inst
(
- .probe(probe),
- .source(source)
- );
-
-
-
-
-
-
-
-
- assign {pck_num_to_send,ratio_in,pck_size,dest_x,dest_y,pck_class_in,last_adr}=ram_do;
+ .clk(clk),
+ .reset(reset),
+ .data_out(data_out),
+ .data_in(data_in),
+ .wb_wr_addr_en(wb_wr_addr_en),
+ .wb_wr_data_en(wb_wr_data_en),
+ .wb_rd_data_en(wb_rd_data_en),
+ .status_i( )
+ );
- assign ratio=(done)? {RATIOw{1'b0}} : ratio_in;
- wire nvalid_dest= (current_x==dest_x && current_y==dest_y);
- wire reset_pck_number_sent= (pck_number_sent==pck_num_to_send) | nvalid_dest;
+
+
+ always @(posedge clk or posedge reset) begin
+ if(reset) begin
+ wb_addr <= {Aw{1'b0}};
+ wb_wr_data <= {Dw{1'b0}};
+ ps <= IDEAL;
+ end else begin
+ wb_addr <= wb_addr_next;
+ ps <= ns;
+ if(wb_wr_data_en) wb_wr_data <= data_out;
+ if(wb_cap_rd) wb_rd_data <= q_i;
+ end
+ end
+
+
- always @(posedge clk) begin
- if(reset)begin
- ram_addr<={Aw{1'b0}};
- pck_number_sent<={PCK_CNTw{1'b0}};
- done<=1'b0;
- total_latency_cnt<=36'd0;
- total_pck_recieved<=0;
- total_pck_sent<=0;
- ram_counter<= initial_ram_cnt;
- end else begin
- if (reset_pck_number_sent) pck_number_sent<={PCK_CNTw{1'b0}};
- else if(sent_done)begin
- pck_number_sent<=pck_number_sent+1'b1;
- total_pck_sent <=total_pck_sent+1'b1;
- end
+
+
+ always @(*)begin
+ wb_addr_next= wb_addr;
+ if(wb_wr_addr_en) wb_addr_next = data_out [Aw-1 : 0];
+ else if (wb_addr_inc) wb_addr_next = wb_addr + 1'b1;
+ end
+
+
+
+ always @(*)begin
+ ns=ps;
+ wr_mem_en =1'b0;
+
+ wb_addr_inc=1'b0;
+ wb_cap_rd=1'b0;
+ case(ps)
+ IDEAL : begin
+ if(wb_wr_data_en) ns= WB_WR_DATA;
+ if(wb_rd_data_en) ns= WB_RD_DATA;
+ end
+ WB_WR_DATA: begin
+ wr_mem_en =1'b1;
+ ns=IDEAL;
+ wb_addr_inc=1'b1;
- if(update)begin
- total_latency_cnt<= total_latency_cnt + time_stamp_h2t;
- total_pck_recieved<=total_pck_recieved+1'b1;
- end
-
- if (reset_pck_number_sent && done==1'b0)begin
- if(last_adr)begin
- ram_addr<={Aw{1'b0}};
- if(ram_counter==0)begin
- done<=1'b1;
- end
- ram_counter<=ram_counter-1'b1;
- end else begin
- ram_addr<=ram_addr+1'b1;
-
- end
- end
+ end
+ WB_RD_DATA: begin
+
+ wb_cap_rd=1'b1;
+ ns=IDEAL;
+ //wb_addr_inc=1'b1;
-
- end
+ end
+ endcase
+ end
- end
+ //assign led={wb_addr[7:0], wb_wr_data[7:0]};
-
endmodule
@@ -716,6 +954,9 @@
+
+
+
module start_delay_gen #(
parameter NC = 64 //number of cores
@@ -773,3 +1014,9 @@
+
+
+
+
+
+
/mpsoc/src_modelsim/testbench_modelsim.v
22,7 → 22,7
reg start; |
wire done; |
reg [RATIOw-1:0] ratio; |
reg [PCK_SIZw-1 : 0]pck_size; |
reg [PCK_SIZw-1 : 0]pck_size_in; |
|
|
|
32,7 → 32,7
.clk (clk), |
.start (start), |
.ratio (ratio), |
.pck_size(pck_size), |
.pck_size_in(pck_size_in), |
.all_done (done) |
); |
|
47,7 → 47,7
initial begin |
reset = 1'b1; |
start = 1'b0; |
pck_size=4; |
pck_size_in=4; |
ratio =50; |
i=0; |
#40 |
141,7 → 141,7
clk, |
start, |
ratio, |
pck_size, |
pck_size_in, |
all_done |
|
); |
191,7 → 191,7
|
|
input reset ,clk, start; |
input [PCK_SIZw-1:0] pck_size; |
input [PCK_SIZw-1:0] pck_size_in; |
input [RATIOw-1 :0] ratio; |
output all_done; |
|
325,7 → 325,7
( |
//input |
.ratio (ratio), |
.pck_size(pck_size), |
.pck_size_in(pck_size_in), |
.current_x(x[Xw-1 : 0]), |
.current_y(y[Yw-1 : 0]), |
.dest_x(dest_x[IP_NUM]), |
481,7 → 481,7
fp = $fopen("Result.txt","w"); |
`endif |
$fwrite(fp,"TRAFFIC is =%s\n",TRAFFIC); |
$fwrite(fp,"Packet size in flit=%d\n ",pck_size); |
$fwrite(fp,"Packet size in flit=%d\n ",pck_size_in); |
//$fwrite(fp,"ROUTE_ALGRMT =%s",ROUTE_ALGRMT); |
$fwrite(fp,"VC_REALLOCATION_TYPE = %s\n",VC_REALLOCATION_TYPE); |
$fwrite(fp,"COMBINATION_TYPE = %s\n",COMBINATION_TYPE); |
516,7 → 516,7
total_clk = total_clk + clk_count; |
total_pck = total_pck + packet_num; |
total_router = total_router +1'b1; |
ratio_avg <= (total_clk>0)? (total_pck* pck_size*100)/total_clk:0; |
ratio_avg <= (total_clk>0)? (total_pck* pck_size_in*100)/total_clk:0; |
end |
end |
if(inject_report_in) begin |
525,7 → 525,7
$display("Injection ratio is =%f",ratio_avg); |
$display("total_pck =%f",total_pck); |
$display("TRAFFIC is =%s",TRAFFIC); |
$display("Packet size in flit=%d ",pck_size); |
$display("Packet size in flit=%d ",pck_size_in); |
$display("total_clk=%d ",total_clk); |
$display("ROUTE_NAME =%s",ROUTE_NAME); |
$display("ROUTE_TYPE =%s",ROUTE_TYPE); |
/mpsoc/src_noc/traffic_gen_old.v
File deleted
mpsoc/src_noc/traffic_gen_old.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_noc/inout_ports.v
===================================================================
--- mpsoc/src_noc/inout_ports.v (revision 27)
+++ mpsoc/src_noc/inout_ports.v (revision 28)
@@ -171,7 +171,9 @@
.NX(NX), // number of node in x axis
.NY(NY), // number of node in y axis
.X(X), // router x address
- .Y(Y) // router y address
+ .Y(Y), // router y address
+ .DEBUG_EN(DEBUG_EN),
+ .ESCAP_VC_MASK(ESCAP_VC_MASK)
)
the_ssa
@@ -183,7 +185,7 @@
.ovc_avalable_all(ovc_avalable_all),
.ivc_request_all(ivc_request_all),
.assigned_ovc_not_full_all(assigned_ovc_not_full_all),
- .dest_port_all(dest_port_all),
+ .dest_port_all(dest_port_coded_all),
.assigned_ovc_num_all(assigned_ovc_num_all),
.ovc_is_assigned_all(ovc_is_assigned_all),
.clk(clk),
@@ -190,7 +192,7 @@
.reset(reset),
.ovc_allocated_all(ssa_ovc_allocated_all),
- .ovc_released_all(ssa_ovc_released_all),
+ .ovc_released_all(ssa_ovc_released_all),
.granted_ovc_num_all(ssa_granted_ovc_num_all),
.ivc_num_getting_sw_grant_all(ssa_ivc_num_getting_sw_grant_all),
.ivc_num_getting_ovc_grant_all(ssa_ivc_num_getting_ovc_grant_all),
/mpsoc/src_noc/noc.v
197,8 → 197,9
|
|
end else begin :mesh_torus |
for (x=0; x<NX; x=x+1) begin :x_loop |
for (y=0; y<NY; y=y+1) begin: y_loop |
for (y=0; y<NY; y=y+1) begin: y_loop |
for (x=0; x<NX; x=x+1) begin :x_loop |
|
localparam IP_NUM = (y * NX) + x; |
|
|
/mpsoc/src_noc/ss_allocator.v
23,7 → 23,9
parameter NY = 4, // number of node in y axis |
parameter TOPOLOGY = "MESH", |
parameter X = 0, // router x address |
parameter Y = 0 // router y address |
parameter Y = 0, // router y address |
parameter DEBUG_EN = 1, |
parameter [V-1 : 0] ESCAP_VC_MASK = 4'b1000 |
) |
( |
flit_in_we_all, |
143,7 → 145,9
.V(V), |
.P(P), |
.Fpay(Fpay), |
.ROUTE_TYPE(ROUTE_TYPE) |
.ROUTE_TYPE(ROUTE_TYPE), |
.DEBUG_EN(DEBUG_EN), |
.ESCAP_VC_MASK(ESCAP_VC_MASK) |
) |
the_ssa_per_vc |
( |
164,7 → 168,12
.ivc_num_getting_ovc_grant(ivc_num_getting_ovc_grant_all[i]), |
.ivc_reset(ivc_reset_all[i]), |
.decreased_credit_in_ss_ovc(decreased_credit_in_ss_ovc_all[(SS_PORT*V)+(i%V)]) |
// .predict_flit_wr(predict_flit_wr_all[PREDICT_PO]), |
//synthesis translate_off |
//synopsys translate_off |
,.clk(clk) |
//synthesis translate_on |
//synopsys translate_on |
// .predict_flit_wr(predict_flit_wr_all[PREDICT_PO]), |
|
|
); |
222,7 → 231,9
parameter V = 4, // vc_num_per_port |
parameter P = 5, // router port num |
parameter Fpay = 32, //pa |
parameter ROUTE_TYPE="DETERMINISTIC" // "DETERMINISTIC", "FULL_ADAPTIVE", "PAR_ADAPTIVE" |
parameter ROUTE_TYPE="DETERMINISTIC", // "DETERMINISTIC", "FULL_ADAPTIVE", "PAR_ADAPTIVE" |
parameter DEBUG_EN = 1, |
parameter [V-1 : 0] ESCAP_VC_MASK = 4'b1000 |
) |
( |
flit_in_we, |
241,7 → 252,12
ovc_released, |
ovc_allocated, |
decreased_credit_in_ss_ovc, |
ivc_reset |
ivc_reset |
//synthesis translate_off |
//synopsys translate_off |
,clk |
//synthesis translate_on |
//synopsys translate_on |
|
); |
|
251,7 → 267,8
|
|
|
|
localparam SSA_EN = ((ROUTE_TYPE == "FULL_ADAPTIVE") && (SS_PORT==2 || SS_PORT == 4) && ((1<<V_LOCAL & ~ESCAP_VC_MASK ) != {V{1'b0}})) ? 1'b0 :1'b1; |
|
|
|
|
283,6 → 300,11
output ivc_reset; |
output decreased_credit_in_ss_ovc; |
|
//synthesis translate_off |
//synopsys translate_off |
input clk; |
//synthesis translate_on |
//synopsys translate_on |
|
|
|
397,7 → 419,26
assign ss_port_hdr_flit = b; |
assign ss_port_nonhdr_flit = bb; |
end |
end |
|
|
|
//synthesis translate_off |
//synopsys translate_off |
|
if(DEBUG_EN) begin :dbg |
always @(posedge clk) begin |
//if(!reset)begin |
if(ivc_num_getting_sw_grant & aa & bb) $display("%t: SSA ERROR: There are two output ports that a non-header flit can be sent to. %m",$time); |
//end |
end |
end //dbg |
|
//synopsys translate_on |
//synthesis translate_on |
|
|
|
end //adaptive |
endgenerate |
|
|
412,9 → 453,15
// check if ssa is permited by input port |
|
wire ssa_permited_by_iport; |
assign ssa_permited_by_iport = ss_ovc_ready & (~ivc_request) & condition_1_2_valid; |
|
|
generate |
if (SSA_EN) begin : enable |
assign ssa_permited_by_iport = ss_ovc_ready & (~ivc_request) & condition_1_2_valid; |
end else begin : disabled |
assign ssa_permited_by_iport = 1'b0; |
end |
endgenerate |
|
/********************************* |
check incomming packet conditions |
/mpsoc/src_noc/traffic_gen.v
28,7 → 28,7
( |
//input |
ratio, |
pck_size, |
pck_size_in, |
current_x, |
current_y, |
dest_x, |
113,7 → 113,7
input [Xw-1 :0] dest_x; |
input [Yw-1 :0] dest_y; |
output [PCK_CNTw-1 :0] pck_number; |
input [PCK_SIZw-1 :0] pck_size; |
input [PCK_SIZw-1 :0] pck_size_in; |
output reg sent_done; |
output hdr_flit_sent; |
input [Cw-1 :0] pck_class_in; |
132,7 → 132,7
|
|
reg inject_en,cand_wr_vc_en,pck_rd; |
|
reg [PCK_SIZw-1 :0] pck_size, pck_size_next; |
|
|
|
261,9 → 261,19
assign time_stamp_h2h = rsv_time_stamp[rd_vc_bin] - flit_in[CLK_CNTw-1 : 0]; |
assign time_stamp_h2t = clk_counter - flit_in[CLK_CNTw-1 : 0]; |
|
assign flit_out = (hdr_flit) ? {2'b10,wr_vc,wr_class_hdr,wr_destport_hdr,wr_des_x_addr,wr_des_y_addr,wr_src_x_addr,wr_src_y_addr}: |
(tail_flit) ? {2'b01,wr_vc,{(Fpay-CLK_CNTw){1'b0}},wr_timestamp}: |
{2'b00,wr_vc,{(Fpay-PCK_SIZw-PCK_CNTw){1'd0}},pck_number,flit_counter}; |
wire [Fpay-1 : 0] flit_out_pyload; |
wire [1 : 0] flit_out_hdr; |
|
assign flit_out_pyload = (hdr_flit) ? {wr_class_hdr,wr_destport_hdr,wr_des_x_addr,wr_des_y_addr,wr_src_x_addr,wr_src_y_addr}: |
(tail_flit) ? wr_timestamp: |
{pck_number,flit_counter}; |
assign flit_out_hdr = (hdr_flit) ? 2'b10: |
(tail_flit) ? 2'b01: |
2'b00; |
|
assign flit_out = {flit_out_hdr, wr_vc, flit_out_pyload }; |
|
|
|
assign {rd_hdr_flg,rd_vc,rd_class_hdr,rd_destport_hdr,rd_des_x_addr,rd_des_y_addr,rd_src_x_addr,rd_src_y_addr} = flit_in; |
|
338,9 → 348,11
pck_rd = 1'b0; |
ns = ps; |
pck_rd =1'b0; |
pck_size_next = pck_size; |
|
case (ps) |
IDEAL: begin |
pck_size_next = pck_size_in; |
if(pck_ready ) begin |
if(wr_vc_avb && valid_dst)begin |
pck_rd=1'b1; |
360,6 → 372,7
flit_cnt_inc = 1'b1; |
end else begin |
flit_cnt_rst = 1'b1; |
pck_size_next = pck_size_in; |
sent_done =1'b1; |
cand_wr_vc_en =1'b1; |
if(cand_vc>0) begin |
399,6 → 412,7
credit_out <= {V{1'd0}}; |
rsv_counter <= 0; |
clk_counter <= 0; |
pck_size <= 0; |
|
|
end |
411,7 → 425,7
if (flit_cnt_rst) flit_counter <= {PCK_SIZw{1'b0}}; |
else if(flit_cnt_inc) flit_counter <= flit_counter + 1'b1; |
credit_out <= credit_out_next; |
|
pck_size <= pck_size_next; |
|
//sink |
if(flit_in_wr) begin |
461,7 → 475,7
wire [PCK_CNTw-1 : 0] rsv_pck_number; |
reg [PCK_CNTw-1 : 0] old_pck_number [V-1 : 0]; |
|
assign {rsv_pck_number,rsv_flit_counter}=flit_in [PCK_CNTw+PCK_SIZw-1 : 0]; |
assign {rsv_pck_number,rsv_flit_counter}=flit_in; |
|
integer ii; |
always @(posedge clk or posedge reset )begin |
577,9 → 591,9
case(sent) |
1'b1: begin |
next_state = state + off_clks; |
next_flit_counter = (flit_counter == pck_size-1'b1) ? {PCK_SIZw{1'b0}} : flit_counter +1'b1; |
next_flit_counter = (flit_counter >= pck_size-1'b1) ? {PCK_SIZw{1'b0}} : flit_counter +1'b1; |
next_inject = (flit_counter=={PCK_SIZw{1'b0}}); |
if (next_flit_counter == pck_size-1'b1) begin |
if (next_flit_counter >= pck_size-1'b1) begin |
if( next_state >= STATE_INIT ) next_sent =1'b0; |
end |
end |
882,3 → 896,4
|
|
|
|
/mpsoc/src_noc/traffic_gen.v.old
0,0 → 1,842
/********************************** |
|
traffic_gen |
|
|
**********************************/ |
`timescale 1ns/1ps |
|
|
module traffic_gen_old#( |
parameter V = 4, // VC num per port |
parameter P = 5, // router port num |
parameter B = 4, // buffer space :flit per VC |
parameter NX= 4, // number of node in x axis |
parameter NY= 4, // number of node in y axis |
parameter C = 4, // number of flit class |
parameter Fpay = 32, |
parameter VC_REALLOCATION_TYPE = "NONATOMIC",// "ATOMIC" , "NONATOMIC" |
parameter TOPOLOGY = "MESH", |
parameter ROUTE_NAME = "XY", |
parameter ROUTE_TYPE = "DETERMINISTIC",// "DETERMINISTIC", "FULL_ADAPTIVE", "PAR_ADAPTIVE" |
parameter TRAFFIC = "RANDOM", |
// "RANDOM", "TRANSPOSE1","TRANSPOSE2", "HOTSPOT", "BIT_REVERSE", "BIT_COMPLEMENT", "CUSTOM" |
|
|
parameter CLASS_3_TRAFFIC_PATTERN= 1, |
/* |
0: 25 % class 0 , 75 % class 1 |
1: 50 % class 0 , 50 % class 1 |
2: 75 % class 0 , 25 % class 1 |
*/ |
|
//setting for hotspot |
parameter HOTSPOT_PERCENTAGE = 3, //maximum 20 |
parameter HOTSOPT_NUM = 4, //maximum 4 |
parameter HOTSPOT_CORE_1 = 10, |
parameter HOTSPOT_CORE_2 = 11, |
parameter HOTSPOT_CORE_3 = 12, |
parameter HOTSPOT_CORE_4 = 13, |
parameter HOTSPOT_CORE_5 = 14, |
|
|
|
//parameter PCK_SIZE_IN_FLIT = 6, |
//total number of packets which is sent by a router |
parameter TOTAL_PKT_PER_ROUTER = 200, |
parameter MAX_DELAY_BTWN_PCKTS = 1024, |
parameter TIMSTAMP_STRT_ON= "INJECT_EN"// "INJECT_EN", "HDR_FLIT_WR" |
) |
( |
delay, |
pck_size, |
pck_counter, |
current_x, |
current_y, |
reset, |
clk, |
start, |
done, |
update, // update the noc_analayzer |
distance, |
msg_class, |
time_stamp, |
flit_out, |
flit_out_wr, |
credit_in, |
flit_in, |
flit_in_wr, |
credit_out, |
report |
); |
|
function integer log2; |
input integer number; begin |
log2=0; |
while(2**log2<number) begin |
log2=log2+1; |
end |
end |
endfunction // log2 |
|
localparam P_1 = P-1 ; |
|
localparam Xw = log2(NX), // number of node in x axis |
Yw = log2(NY), // number of node in y axis |
Cw = log2(C), |
Fw = 2+V+Fpay, |
Dw = log2(MAX_DELAY_BTWN_PCKTS+1), |
PCK_CNTw = log2(TOTAL_PKT_PER_ROUTER+1); |
|
|
localparam CLASS_IN_HDR_WIDTH =8, |
DEST_IN_HDR_WIDTH =8, |
X_Y_IN_HDR_WIDTH =4; |
/* |
reg inject_en; |
|
pck_size, |
wr_des_x_addr, |
wr_des_y_addr, |
wr_class_hdr, |
|
*/ |
|
input reset, clk; |
/* |
input inject_en; |
input [15 :0] pck_size; |
|
|
*/ |
input [Dw-1 :0] delay; |
input start; |
output done; |
output update; |
output [31 :0] time_stamp; |
output [31 :0] distance; |
output [Cw-1 :0] msg_class; |
input [Xw-1 :0] current_x; |
input [Yw-1 :0] current_y; |
output [PCK_CNTw-1 :0] pck_counter; |
input [15 :0] pck_size; |
|
|
|
// NOC interfaces |
output [Fw-1 :0] flit_out; |
output reg flit_out_wr; |
input [V-1 :0] credit_in; |
|
input [Fw-1 :0] flit_in; |
input flit_in_wr; |
output reg [V-1 :0] credit_out; |
reg sent_done; |
input report; |
|
wire [X_Y_IN_HDR_WIDTH-1 :0] wr_des_x_addr,wr_src_x_addr; |
wire [X_Y_IN_HDR_WIDTH-1 :0] wr_des_y_addr,wr_src_y_addr; |
wire [CLASS_IN_HDR_WIDTH-1 :0] wr_class_hdr; |
|
|
wire [V-1 :0] full_vc,empty_vc; |
reg [V-1 :0] wr_vc,wr_vc_next; |
reg [15 :0] counter; |
reg counter_inc,counter_reset; |
wire wr_vc_is_full,wr_vc_avb,wr_vc_is_empty; |
|
|
|
wire [P_1-1 :0] destport; |
reg [V-1 :0] credit_out_next; |
reg [31 :0] clk_counter,clk_counter_lathched; |
|
wire [V-1 :0] ovc_wr_in; |
wire hdr_flit,tail_flit; |
wire [DEST_IN_HDR_WIDTH-1 :0] wr_destport_hdr; |
|
|
|
// noc_analyze |
localparam VC_NUM_BCD_WIDTH = log2(V); |
|
reg [X_Y_IN_HDR_WIDTH-1 : 0] rsv_pck_src_x [V-1:0]; |
reg [X_Y_IN_HDR_WIDTH-1 : 0] rsv_pck_src_y [V-1:0]; |
reg [Cw-1 : 0] rsv_pck_class [V-1:0]; |
wire[V-1 :0] rd_vc; |
|
wire [1 : 0] rd_hdr_flg; |
wire [CLASS_IN_HDR_WIDTH-1 : 0] rd_class_hdr; |
wire [DEST_IN_HDR_WIDTH-1 : 0] rd_destport_hdr; |
wire [X_Y_IN_HDR_WIDTH-1 : 0] rd_des_x_addr, rd_des_y_addr,rd_src_x_addr,rd_src_y_addr; |
|
wire[VC_NUM_BCD_WIDTH-1 : 0] rd_vc_bin,wr_vc_bin; |
reg [31 : 0] sent_time_stamp[V-1:0]; |
reg [31 : 0] rsv_time_stamp[V-1:0]; |
|
reg cand_wr_vc_en; |
wire [V-1 : 0] cand_vc; |
wire [Xw-1 : 0] dest_x; |
wire [Yw-1 : 0] dest_y; |
wire inject_en; |
|
assign update = flit_in_wr & flit_in[Fw-2]; |
assign hdr_flit = (counter == 0); |
assign tail_flit = (counter == pck_size-1'b1); |
assign wr_destport_hdr= {{DEST_IN_HDR_WIDTH-P_1{1'b0}},destport}; |
|
assign flit_out= (hdr_flit) ? {2'b10,wr_vc,wr_class_hdr,wr_destport_hdr,wr_des_x_addr,wr_des_y_addr,wr_src_x_addr,wr_src_y_addr}: |
(tail_flit) ? {2'b01,wr_vc,sent_time_stamp[wr_vc_bin]}: |
{2'b00,wr_vc,{16{1'd0}},counter}; |
|
assign {rd_hdr_flg,rd_vc,rd_class_hdr,rd_destport_hdr,rd_des_x_addr,rd_des_y_addr,rd_src_x_addr,rd_src_y_addr} = flit_in; |
|
|
|
one_hot_to_bin #( .ONE_HOT_WIDTH (V)) conv1 |
( |
.one_hot_code (rd_vc), |
.bin_code (rd_vc_bin) |
); |
|
one_hot_to_bin #( .ONE_HOT_WIDTH (V)) conv2 |
( |
.one_hot_code (wr_vc), |
.bin_code (wr_vc_bin) |
); |
|
|
assign ovc_wr_in = (flit_out_wr ) ? wr_vc : {V{1'b0}}; |
|
assign wr_vc_is_full = | ( full_vc & wr_vc); |
|
assign wr_vc_is_empty = | ( empty_vc & wr_vc); |
|
generate |
if(VC_REALLOCATION_TYPE == "NONATOMIC") begin |
assign wr_vc_avb = ~wr_vc_is_full; |
end else begin |
assign wr_vc_avb = wr_vc_is_empty; |
end |
endgenerate |
|
|
|
ni_conventional_routing #( |
.P(P), |
.NX(NX), |
.NY(NY), |
.ROUTE_TYPE(ROUTE_TYPE), |
.TOPOLOGY(TOPOLOGY), |
.ROUTE_NAME(ROUTE_NAME), |
.LOCATED_IN_NI(1) |
) |
conv_routing( |
.current_x( current_x), |
.current_y( current_y), |
.dest_x (wr_des_x_addr [Xw-1 :0]), |
.dest_y (wr_des_y_addr [Yw-1 :0]), |
.destport (destport) |
); |
|
|
output_vc_status #( |
.V (V), |
.B (B), |
.CAND_VC_SEL_MODE (0) // 0: use arbieration between not full vcs, 1: select the vc with moast availble free space |
) |
nic_ovc_status |
( |
.wr_in (ovc_wr_in), |
.credit_in (credit_in), |
.full_vc (full_vc), |
.empty_vc (empty_vc), |
.cand_vc (cand_vc), |
.cand_wr_vc_en (cand_wr_vc_en), |
.clk (clk), |
.reset (reset) |
); |
|
send_traffic #( |
.V(V), |
.C(C), |
.NX(NX), |
.NY(NY), |
.TRAFFIC(TRAFFIC), |
.CLASS_3_TRAFFIC_PATTERN(CLASS_3_TRAFFIC_PATTERN), |
.HOTSPOT_PERCENTAGE(HOTSPOT_PERCENTAGE), |
.HOTSOPT_NUM(HOTSOPT_NUM), |
.HOTSPOT_CORE_1(HOTSPOT_CORE_1), |
.HOTSPOT_CORE_2(HOTSPOT_CORE_2), |
.HOTSPOT_CORE_3(HOTSPOT_CORE_3), |
.HOTSPOT_CORE_4(HOTSPOT_CORE_4), |
.HOTSPOT_CORE_5(HOTSPOT_CORE_5), |
.MAX_DELAY_BTWN_PCKTS(MAX_DELAY_BTWN_PCKTS), |
.TOTAL_PKT_PER_ROUTER(TOTAL_PKT_PER_ROUTER) |
) |
send_traffic( |
.pck_counter(pck_counter), |
.send_start(start), |
.sent_done(sent_done), |
.current_x(current_x), |
.current_y(current_y), |
.delay(delay), |
.clk(clk), |
.reset(reset), |
.dest_x(dest_x), |
.dest_y(dest_y), |
.class_hdr(wr_class_hdr), |
.inject_en(inject_en), |
.done(done) |
); |
|
assign wr_des_x_addr[Xw-1 : 0]= dest_x; |
assign wr_des_x_addr[X_Y_IN_HDR_WIDTH-1 : Xw]= 0; |
assign wr_des_y_addr[Yw-1 : 0]= dest_y; |
assign wr_des_y_addr[X_Y_IN_HDR_WIDTH-1 : Yw]= 0; |
assign wr_src_x_addr[Xw-1 : 0]= current_x; |
assign wr_src_x_addr[X_Y_IN_HDR_WIDTH-1 : Xw]= 0; |
assign wr_src_y_addr[Yw-1 : 0]= current_y; |
assign wr_src_y_addr[X_Y_IN_HDR_WIDTH-1 : Yw]= 0; |
|
|
|
|
reg [2:0] ps,ns; |
localparam IDEAL =3'b001, SENT =3'b010, WAIT=3'b100; |
|
|
reg capture_done; |
|
always @(*)begin |
wr_vc_next = wr_vc; |
cand_wr_vc_en = 1'b0; |
flit_out_wr = 1'b0; |
counter_inc = 1'b0; |
counter_reset = 1'b0; |
credit_out_next = {V{1'd0}}; |
sent_done =1'b0; |
ns =ps; |
|
case (ps) |
IDEAL: begin |
if(inject_en) begin |
if(wr_vc_avb)begin |
flit_out_wr = 1'b1; |
counter_inc = 1'b1; |
ns = SENT; |
end//wr_vc |
end //injection_en |
end //IDEAL |
SENT: begin |
if(!wr_vc_is_full)begin |
flit_out_wr = 1'b1; |
if(counter < pck_size-1) begin |
counter_inc = 1'b1; |
end else begin |
|
counter_reset = 1'b1; |
sent_done =1'b1; |
cand_wr_vc_en =1'b1; |
if(cand_vc>0) begin |
wr_vc_next = cand_vc; |
ns =IDEAL; |
end else ns = WAIT; |
end//else |
end // if wr_vc_is_full |
end//SENT |
WAIT:begin |
cand_wr_vc_en =1'b1; |
if(cand_vc>0) begin |
wr_vc_next = cand_vc; |
ns =IDEAL; |
end |
end |
default: begin |
ns =IDEAL; |
end |
endcase |
|
|
// packet sink |
if(flit_in_wr) begin |
credit_out_next = rd_vc; |
end else credit_out_next = {V{1'd0}}; |
end |
|
|
integer rsv_counter,last_pck_time; |
|
|
always @(posedge clk or posedge reset )begin |
if(reset) begin |
ps <= IDEAL; |
wr_vc <=1; |
counter <= 16'd0; |
credit_out <= {V{1'd0}}; |
rsv_counter <= 0; |
clk_counter <= 0; |
capture_done <= 0; |
clk_counter_lathched<=0; |
|
end |
else begin |
//injection |
ps <= ns; |
clk_counter <= clk_counter+1'b1; |
wr_vc <=wr_vc_next; |
if (counter_reset) counter <= 16'd0; |
else if(counter_inc) counter <= counter+1'b1; |
credit_out <= credit_out_next; |
|
|
//sink |
if(flit_in_wr) begin |
if (flit_in[Fw-1])begin |
rsv_pck_src_x[rd_vc_bin] <= rd_src_x_addr; |
rsv_pck_src_y[rd_vc_bin] <= rd_src_y_addr; |
rsv_pck_class[rd_vc_bin] <= rd_class_hdr[Cw-1 : 0]; |
rsv_time_stamp[rd_vc_bin] <= clk_counter; |
rsv_counter <= rsv_counter+1'b1; |
|
// distance <= {{(32-8){1'b0}},flit_in[7:0]}; |
// synthesis translate_off |
last_pck_time<=$time; |
//$display ("%d,\t toptal of %d pcks have been recived in core (%d,%d)", last_pck_time,rsv_counter,X,Y); |
// synthesis translate_on |
end |
end |
|
// synthesis translate_off |
if(report) begin |
$display ("%t,\t toptal of %d pcks have been recived in core (%d,%d)", last_pck_time,rsv_counter,current_x,current_y); |
end |
// synthesis translate_on |
|
if (counter_reset) capture_done <= 1'b0; |
else if(inject_en) capture_done <= 1'b1; |
|
if(TIMSTAMP_STRT_ON == "INJECT_EN")begin |
if(~capture_done & inject_en) begin |
clk_counter_lathched <= clk_counter; |
if( hdr_flit && flit_out_wr) sent_time_stamp[wr_vc_bin] <= clk_counter; |
end else if( hdr_flit && flit_out_wr) sent_time_stamp[wr_vc_bin] <= clk_counter_lathched; |
end else begin |
|
if( hdr_flit && flit_out_wr) sent_time_stamp[wr_vc_bin] <= clk_counter; |
end |
|
|
end |
end//always |
|
|
|
wire [X_Y_IN_HDR_WIDTH-1 : 0] src_x,src_y,dst_x,dst_y,x_offset,y_offset; |
assign src_x = rsv_pck_src_x[rd_vc_bin]; |
assign src_y = rsv_pck_src_y[rd_vc_bin]; |
assign msg_class = rsv_pck_class[rd_vc_bin]; |
assign dst_x = current_x; |
assign dst_y = current_y; |
assign x_offset = (src_x> dst_x)? src_x - dst_x : dst_x - src_x; |
assign y_offset = (src_y> dst_y)? src_y - dst_y : dst_y - src_y; |
|
|
assign distance = (TOPOLOGY=="MESH")?x_offset+y_offset+1: 0; |
assign time_stamp = rsv_time_stamp[rd_vc_bin] - flit_in[31 :0]; |
|
|
|
// synthesis translate_off |
always @(posedge clk) begin |
if(flit_out_wr && hdr_flit && wr_des_x_addr == current_x && wr_des_y_addr == current_y) $display("%t: Error: The source and destination address of injected packet is the same in router(%d,%d) ",$time, wr_des_x_addr ,wr_des_y_addr); |
if(flit_in_wr && rd_hdr_flg[1] && rd_des_x_addr!= current_x && rd_des_y_addr!= current_y ) $display("%t: Error: packet with des(%d,%d) has been recieved in wrong router (%d,%d). ",$time,rd_des_x_addr, rd_des_y_addr, current_x , current_y); |
end |
// synthesis translate_on |
|
endmodule |
|
|
|
|
|
|
|
/************************************** |
* |
* |
* |
***************************************/ |
module send_traffic #( |
parameter V = 4, |
parameter C = 4, // number of flit class |
parameter NX = 8, // number of node in x axis |
parameter NY = 8, // number of node in y axis |
parameter TRAFFIC = "RANDOM", |
// "RANDOM", "TRANSPOSE1","TRANSPOSE2", "HOTSPOT", "BIT_REVERSE", "BIT_COMPLEMENT", "CUSTOM"; |
parameter CLASS_3_TRAFFIC_PATTERN= 1, |
/* |
0: 25 % class 0 , 75 % class 1 |
1: 50 % class 0 , 50 % class 1 |
2: 75 % class 0 , 25 % class 1 |
*/ |
|
//setting for hotspot |
parameter HOTSPOT_PERCENTAGE = 3, //maximum 20 |
parameter HOTSOPT_NUM = 4, //maximum 4 |
parameter HOTSPOT_CORE_1 = 10, |
parameter HOTSPOT_CORE_2 = 11, |
parameter HOTSPOT_CORE_3 = 12, |
parameter HOTSPOT_CORE_4 = 13, |
parameter HOTSPOT_CORE_5 = 14, |
parameter MAX_DELAY_BTWN_PCKTS = 100, |
//total number of packets which is sent by a router |
parameter TOTAL_PKT_PER_ROUTER = 200 |
) |
( |
pck_counter, |
send_start, |
sent_done, |
current_x, |
current_y, |
delay, |
clk, |
reset, |
dest_x, |
dest_y, |
class_hdr, |
inject_en, |
done |
|
); |
|
|
function integer log2; |
input integer number; begin |
log2=0; |
while(2**log2<number) begin |
log2=log2+1; |
end |
end |
endfunction // log2 |
|
|
localparam Xw=log2(NX), |
Yw=log2(NY), |
Dw=log2(MAX_DELAY_BTWN_PCKTS+1), |
PCK_CNTw=log2(TOTAL_PKT_PER_ROUTER+1); |
localparam NC = NX*NY, //flit width; |
NCw = log2(NC), |
Cw = log2(C), |
Vw = log2(V); |
|
localparam CLASS_IN_HDR_WIDTH =8; |
|
input send_start,sent_done; |
input [Xw-1 : 0] current_x; |
input [Yw-1 : 0] current_y; |
input [Dw-1 : 0] delay; |
input clk,reset; |
|
output reg [PCK_CNTw-1: 0] pck_counter; |
output [Xw-1 : 0] dest_x; |
output [Yw-1 : 0] dest_y; |
output [CLASS_IN_HDR_WIDTH-1 :0] class_hdr; |
output reg inject_en; |
output reg done; |
|
|
//generate the base addresses |
localparam ST_NUMBER = 5, |
IDEAL_ST = 1, |
WARM_UP = 2, |
SEND_ST = 4, |
DELAY_ST = 8, |
END_ST = 16; |
|
reg [ST_NUMBER-1 : 0] ps; |
reg [Dw-1 : 0] clk_delay_counter; |
wire [NCw-1 : 0] dest_ip_num; |
wire send_en; |
|
//reg core_num; |
//reg [ST_NUMBER-1:0] ps; |
|
always @(posedge clk or posedge reset) begin |
if(reset) begin |
ps<=IDEAL_ST; |
inject_en <= 1'b0; |
clk_delay_counter<=0; |
done <= 1'b0; |
pck_counter<= 0; |
clk_delay_counter<= dest_x+dest_y+2; |
|
end else begin |
case(ps) |
IDEAL_ST: begin |
inject_en <= 1'b0; |
ps<=IDEAL_ST; |
if(send_start & send_en) begin |
ps<=WARM_UP; |
end |
if( ~send_en) done <=1; |
end |
WARM_UP: begin |
clk_delay_counter<=clk_delay_counter-1'b1; |
if(clk_delay_counter==0) ps<=SEND_ST; |
end |
SEND_ST: begin |
done <= 1'b0; |
inject_en <= 1'b1; |
clk_delay_counter <=0; |
if( sent_done )begin |
pck_counter <= pck_counter+1'b1; |
if(pck_counter==TOTAL_PKT_PER_ROUTER-1'b1) begin |
ps <= END_ST; |
inject_en <= 1'b0; |
end |
else if(delay>0) begin |
inject_en <= 1'b0; |
ps <= DELAY_ST; |
|
end |
end |
end |
DELAY_ST: begin |
inject_en <= 1'b0; |
clk_delay_counter <=clk_delay_counter +1'b1; |
if(clk_delay_counter >= delay) begin |
inject_en <= 1'b1; |
ps<= SEND_ST; |
end |
end |
END_ST: begin |
inject_en <= 1'b0; |
clk_delay_counter <=clk_delay_counter +1'b1; |
ps<= IDEAL_ST; |
done <= 1'b1; |
end |
default ps<=IDEAL_ST; |
endcase |
end//else |
end |
|
|
/*************************** |
|
traffic |
|
*****************************/ |
|
|
|
|
|
|
wire [NCw-1 : 0] ip_num; |
wire [Cw-1 : 0] rnd_class; |
|
assign ip_num = current_y * NX + current_x; |
|
|
genvar i; |
generate |
|
if(CLASS_3_TRAFFIC_PATTERN== 1) begin |
|
pseudo_random #( |
.MAX_RND (C-1), |
.MAX_CORE (NC-1), |
.MAX_NUM (TOTAL_PKT_PER_ROUTER) |
) |
rnd_gen |
( |
|
.core(ip_num), |
.num(pck_counter), |
.rnd(rnd_class), |
.rnd_en(1'b1), |
.reset(reset), |
.clk(clk) |
); |
|
end else if(CLASS_3_TRAFFIC_PATTERN== 0) begin |
|
pseudo_hotspot #( |
.MAX_RND(1), // c=0 or 1 |
.MAX_CORE(NC-1), |
.MAX_NUM(TOTAL_PKT_PER_ROUTER), |
.HOTSPOT_PERCENTAGE(50), |
.HOTSOPT_NUM(1), |
.HOTSPOT_CORE_1(1) |
) |
rnd_class_gen |
( |
.core(ip_num), |
.num(pck_counter), |
.rnd(rnd_class ), |
.rnd_en(1'b1), |
.reset(reset), |
.clk(clk) |
); |
|
end else begin |
|
pseudo_hotspot #( |
.MAX_RND (1), // c=0 or 1 |
.MAX_CORE (NC-1), |
.MAX_NUM (TOTAL_PKT_PER_ROUTER), |
.HOTSPOT_PERCENTAGE (50), |
.HOTSOPT_NUM (1), |
.HOTSPOT_CORE_1(0) |
) |
rnd_class_gen |
( |
.core(ip_num), |
.num(pck_counter), |
.rnd(rnd_class ), |
.rnd_en(1'b1), |
.reset(reset), |
.clk(clk) |
); |
end |
|
|
|
assign class_hdr ={{(CLASS_IN_HDR_WIDTH-Vw){1'b0}},rnd_class }; |
|
|
if (TRAFFIC == "RANDOM") begin |
|
pseudo_random_no_core #( |
.MAX_RND (NC-1), |
.MAX_CORE (NC-1 ), |
.MAX_NUM (TOTAL_PKT_PER_ROUTER) |
) |
rnd_dest_gen |
( |
.core (ip_num), |
.num (pck_counter), |
.rnd (dest_ip_num), |
.rnd_en (1'b1), |
.reset (reset), |
.clk (clk) |
|
); |
|
assign dest_x = (dest_ip_num %NX ); |
assign dest_y = (dest_ip_num /NX ); |
|
end else if (TRAFFIC == "HOTSPOT") begin |
|
pseudo_hotspot_no_core #( |
.MAX_RND (NC-1 ), |
.MAX_CORE (NC-1 ), |
.MAX_NUM (TOTAL_PKT_PER_ROUTER), |
.HOTSPOT_PERCENTAGE (HOTSPOT_PERCENTAGE), //maximum 25% |
.HOTSOPT_NUM (HOTSOPT_NUM), //maximum 4 |
.HOTSPOT_CORE_1 (HOTSPOT_CORE_1), |
.HOTSPOT_CORE_2 (HOTSPOT_CORE_2), |
.HOTSPOT_CORE_3 (HOTSPOT_CORE_3), |
.HOTSPOT_CORE_4 (HOTSPOT_CORE_4), |
.HOTSPOT_CORE_5 (HOTSPOT_CORE_5) |
|
)rnd_dest_gen |
( |
|
.core (ip_num), |
.num (pck_counter), |
.rnd (dest_ip_num), |
.rnd_en(1'b1), |
.reset (reset), |
.clk (clk) |
|
); |
|
assign dest_x = (dest_ip_num %NX ); |
assign dest_y = (dest_ip_num /NX ); |
|
|
end else if( TRAFFIC == "TRANSPOSE1") begin |
|
assign dest_x = NX-current_y-1; |
assign dest_y = NY-current_x-1; |
|
|
end else if( TRAFFIC == "TRANSPOSE2") begin :transpose2 |
|
assign dest_x = current_y; |
assign dest_y = current_x; |
|
|
end else if( TRAFFIC == "BIT_REVERSE") begin :bitreverse |
|
wire [(Xw+Yw)-1 : 0] joint_addr, reverse_addr; |
assign joint_addr = {current_x,current_y}; |
|
for(i=0; i<(Xw+Yw); i=i+1'b1) begin :lp//reverse the address |
assign reverse_addr[i] = joint_addr [((Xw+Yw)-1)-i]; |
end |
assign {dest_x,dest_y } = reverse_addr; |
|
end else if( TRAFFIC == "BIT_COMPLEMENT") begin :bitcomp |
|
assign dest_x = ~current_x; |
assign dest_y = ~current_y; |
|
|
end else if(TRAFFIC == "CUSTOM" )begin |
/* |
assign send_en = (current_x==0 && current_y==0);// core (0,0) sends packets to (7,7) |
assign dest_x = 7; |
assign dest_y = 7; |
*/ |
reg [Xw-1 : 0]dest_xx; |
reg [Yw-1 : 0]dest_yy; |
reg send_enen; |
always @(*) begin |
send_enen=1'b0; |
if((current_x==0) && (current_y== 0)) begin |
dest_xx= 1; dest_yy= 1; send_enen=1'b1; |
end |
if((current_x==0) && (current_y== 1)) begin |
dest_xx= 1; dest_yy= 2; send_enen=1'b1; |
end |
if((current_x==1) && (current_y== 0)) begin |
dest_xx= 1; dest_yy= 7; send_enen=1'b1; |
end |
if((current_x==1) && (current_y== 1)) begin |
dest_xx= 1; dest_yy= 6; send_enen=1'b1; |
end |
if((current_x==1) && (current_y== 2)) begin |
dest_xx= 1; dest_yy= 5; send_enen=1'b1; |
end |
if((current_x==1) && (current_y== 3)) begin |
dest_xx= 1; dest_yy= 4; send_enen=1'b1; |
end |
end |
/* |
0 0 1 1 |
0 1 1 2 |
1 0 1 7 |
1 1 1 6 |
1 2 1 5 |
1 3 1 4 |
*/ |
assign send_en = send_enen; |
assign dest_y = dest_yy; |
assign dest_x = dest_xx; |
|
end |
|
|
//check if destination address is valid |
if(TRAFFIC != "CUSTOM" )begin |
assign send_en = ({dest_x,dest_y} != {current_x,current_y} ) & (dest_x <= (NX-1)) & (dest_y <= (NY-1)); |
end |
|
endgenerate |
|
endmodule |
|
|
mpsoc/src_noc/traffic_gen.v.old
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: mpsoc/src_peripheral/GCD/gcd.v
===================================================================
--- mpsoc/src_peripheral/GCD/gcd.v (revision 27)
+++ mpsoc/src_peripheral/GCD/gcd.v (nonexistent)
@@ -1,184 +0,0 @@
-/************************
-* GCD
-*************************/
-
-module gcd #(
-parameter GCDw=32
-
-)( clk, reset, enable, in1, in2, done, gcd);
- input clk, reset;
- input [GCDw-1 : 0] in1, in2;
- output [GCDw-1 : 0] gcd;
- input enable;
- output done;
- wire ldG, ldP, ldQ, selP0, selQ0, selP, selQ;
- wire AeqB, AltB;
-
- gcd_cu CU(
- .clk (clk),
- .reset (reset),
- .AeqB (AeqB),
- .AltB (AltB),
- .enable (enable),
- .ldG (ldG),
- .ldP (ldP),
- .ldQ (ldQ),
- .selP0 (selP0),
- .selQ0 (selQ0),
- .selP (selP),
- .selQ (selQ),
- .done (done)
- );
-
-
- gcd_dpu #(
- .GCDw(GCDw)
- )DPU(
- .clk (clk),
- .reset (reset),
- .in1 (in1),
- .in2 (in2),
- .gcd (gcd),
- .AeqB (AeqB),
- .AltB (AltB),
- .ldG (ldG),
- .ldP (ldP),
- .ldQ (ldQ),
- .selP0 (selP0),
- .selQ0 (selQ0),
- .selP (selP),
- .selQ (selQ)
- );
-
-
-endmodule
-
-
-
-
-/************************
-* gcd_cu
-*************************/
-
-module gcd_cu (clk, reset, ldG, ldP, ldQ, selP0, selQ0, selP, selQ, AeqB, AltB, done, enable);
- input clk, reset;
- input AeqB, AltB, enable;
- output ldG, ldP, ldQ, selP0, selQ0, selP, selQ, done;
- reg ldG, ldP, ldQ, selP0, selQ0, selP, selQ, done;
-
-
- //State encoding
- parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10;
- reg [1:0] y;
- always @ (posedge reset or posedge clk) begin
- if (reset == 1) y <= S0;
- else begin
- case (y)
- S0: begin if (enable == 1) y <= S1;
- else y <= S0;
- end
- S1: begin if (AeqB == 1) y <= S2;
- else y <= S1;
- end
- S2: begin if (enable == 0) y <= S0;
- else y <= S2;
- end
- default: y <= S0;
- endcase
- end
- end
-
-
- always @ (y or enable or AeqB or AltB) begin
- ldG = 1'b0; ldP = 1'b0; ldQ = 1'b0;
- selP0 = 1'b0;
- selQ0 = 1'b0;
- selP = 1'b0;
- selQ = 1'b0;
- done = 1'b0;
- case (y)
- S0: begin
- done = 1'b1;
- if (enable == 1)begin
- selP0 = 1; ldP = 1; selQ0 = 1; ldQ = 1; done = 0;
- end
- end
-
- S1: begin
- if (AeqB == 1) begin
- ldG = 1;
- done = 1;
- end
- else if (AltB == 1) begin
- ldQ = 1;
- end
- else begin
- ldP = 1; selP = 1; selQ = 1;
- end
- end
- S2: begin
- ldG = 1;
- done = 1;
- end
- default: ;
- endcase
- end
- endmodule
-
-
-
-/************************
-* gcd_dpu
-*************************/
-
-module gcd_dpu #(
- parameter GCDw=32
-
-)( clk, reset, in1, in2, gcd, ldG, ldP, ldQ, selP0, selQ0, selP, selQ, AeqB, AltB);
- input clk, reset;
- input [GCDw-1:0] in1, in2;
- output [GCDw-1:0] gcd;
- input ldG, ldP, ldQ, selP0, selQ0, selP, selQ;
- output AeqB, AltB;
- reg [GCDw-1:0] reg_P, reg_Q;
- wire [GCDw-1:0] wire_ALU;
- reg [GCDw-1:0] gcd;
- wire AeqB, AltB;
- //RegP with Multiplex 2:1
- always @ (posedge clk or posedge reset)begin
- if (reset == 1) reg_P <= 0;
- else begin
- if (ldP == 1)begin
- if (selP0==1) reg_P <= in1;
- else reg_P <= wire_ALU;
- end
- end
- end
-
- //RegQ with Multiplex 2:1
- always @ (posedge clk or posedge reset) begin
- if (reset == 1) reg_Q <= 0;
- else begin
- if (ldQ == 1)begin
- if (selQ0==1) reg_Q <= in2;
- else reg_Q <= wire_ALU;
- end
- end
- end
-
- //RegG with enable signal
- always @ (posedge clk or posedge reset)begin
- if (reset == 1) gcd <= {GCDw{1'b0}};
- else begin
- if (ldG == 1) gcd <= reg_P;
- end
- end
-
- //Comparator
- assign AeqB = (reg_P == reg_Q)? 1'b1 : 1'b0;
- assign AltB = (reg_P < reg_Q) ? 1'b1 : 1'b0;
-
- //Subtractor
- assign wire_ALU = ((selP == 1) & (selQ == 1)) ? (reg_P - reg_Q) : (reg_Q - reg_P);
-endmodule
-
mpsoc/src_peripheral/GCD/gcd.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/GCD/gcd_ip.v
===================================================================
--- mpsoc/src_peripheral/GCD/gcd_ip.v (revision 27)
+++ mpsoc/src_peripheral/GCD/gcd_ip.v (nonexistent)
@@ -1,133 +0,0 @@
-module gcd_ip#(
- parameter GCDw=32,
- parameter Dw =GCDw,
- parameter Aw =5,
- parameter TAGw =3,
- parameter SELw =4
-)
-(
- clk,
- reset,
- //wishbone bus interface
- s_dat_i,
- s_sel_i,
- s_addr_i,
- s_tag_i,
- s_stb_i,
- s_cyc_i,
- s_we_i,
- s_dat_o,
- s_ack_o,
- s_err_o,
- s_rty_o
-
-);
- input clk;
- input reset;
-
- //wishbone bus interface
- input [Dw-1 : 0] s_dat_i;
- input [SELw-1 : 0] s_sel_i;
- input [Aw-1 : 0] s_addr_i;
- input [TAGw-1 : 0] s_tag_i;
- input s_stb_i;
- input s_cyc_i;
- input s_we_i;
-
- output [Dw-1 : 0] s_dat_o;
- output reg s_ack_o;
- output s_err_o;
- output s_rty_o;
-
- //Wishbone bus registers address
- localparam DONE_REG_ADDR=0;
- localparam IN_1_REG_ADDR=1;
- localparam IN_2_REG_ADDR=2;
- localparam GCD_REG_ADDR=3;
-
- assign s_err_o = 1'b0;
- assign s_rty_o = 1'b0;
-
- wire[GCDw-1 :0] gcd;
- reg [GCDw-1 :0] readdata,in1,in2;
- wire done;
-
- assign s_dat_o =readdata;
-
- always @ (posedge clk or posedge reset) begin
- if(reset) begin
- s_ack_o <= 1'b0;
- end else begin
- s_ack_o <= (s_stb_i & ~s_ack_o);
- end //reset
- end//always
-
- always @ (posedge clk or posedge reset) begin
- if(reset) begin
- readdata <= 0;
- in1 <= 0;
- in2 <= 0;
- end else begin
- if(s_stb_i && s_we_i) begin //write regiters
- if(s_addr_i==IN_1_REG_ADDR[Aw-1: 0]) in1 <= s_dat_i;
- else if(s_addr_i==IN_2_REG_ADDR[Aw-1: 0]) in2 <= s_dat_i;
- end //sa_stb_i && sa_we_i
- else begin //read registers
- if (s_addr_i==DONE_REG_ADDR) readdata<={{GCDw{1'b0}},done};
- if (s_addr_i==GCD_REG_ADDR) readdata<=gcd;
- end
- end //reset
- end//always
-
- // start gcd calculation by writiing on in2 register
- wire start=(s_stb_i && s_we_i && (s_addr_i==IN_2_REG_ADDR[Aw-1: 0]));
- reg ps,ns;
- reg gcd_reset,gcd_reset_next;
- reg gcd_en,gcd_en_next;
-
- always @ (posedge clk or posedge reset) begin
- if(reset) begin
- ps<=1'b0;
- gcd_reset<=1'b1;
- gcd_en<=1'b0;
- end else begin
- ps<=ns;
- gcd_en<=gcd_en_next;
- gcd_reset<=gcd_reset_next;
- end
- end
-
- always @(*)begin
- gcd_reset_next=1'b0;
- gcd_en_next=1'b0;
- ns=ps;
- case(ps)
- 1'b0:begin
- if(start) begin
- ns=1'b1;
- gcd_reset_next=1'b1;
- end
- end
- 1'b1:begin
- gcd_en_next=1'b1;
- ns=1'b0;
- end
- endcase
- end
-
-
- gcd #(
- .GCDw(GCDw)
- ) the_gcd
- (
- .clk (clk),
- .reset (gcd_reset),
- .enable (gcd_en),
- .in1 (in1),
- .in2 (in2),
- .done (done),
- .gcd (gcd)
- );
-
-endmodule
-
mpsoc/src_peripheral/GCD/gcd_ip.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/jtag/jtag_intfc.v
===================================================================
--- mpsoc/src_peripheral/jtag/jtag_intfc.v (revision 27)
+++ mpsoc/src_peripheral/jtag/jtag_intfc.v (revision 28)
@@ -142,7 +142,7 @@
wire start_source;
wire [WR_RAMw :0] wr_pck_size;
wire [X_Y_IN_HDR_WIDTH-1 :0] x_dest,y_dest;
- wire [31: :0] memory_pointer;
+ wire [31 :0] memory_pointer;
localparam SOURCEw=32+WR_RAMw+1+X_Y_IN_HDR_WIDTH+X_Y_IN_HDR_WIDTH;
/mpsoc/src_peripheral/jtag/jtag_wb/vjtag_wb.v
109,8 → 109,8
|
always @(*)begin |
wb_addr_next= wb_addr; |
if(wb_wr_addr_en) wb_addr_next <= data_out [AW-1 : 0]; |
else if (wb_addr_inc) wb_addr_next <= wb_addr +1'b1; |
if(wb_wr_addr_en) wb_addr_next = data_out [AW-1 : 0]; |
else if (wb_addr_inc) wb_addr_next = wb_addr +1'b1; |
end |
|
|
mpsoc/src_peripheral/ram/old/general_dual_port_ram.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/ram/old/ram (copy).v
===================================================================
--- mpsoc/src_peripheral/ram/old/ram (copy).v (revision 27)
+++ mpsoc/src_peripheral/ram/old/ram (copy).v (nonexistent)
@@ -1,455 +0,0 @@
-/*********************************************************************
-
- File: prog_ram.v
-
- Copyright (C) 2014 Alireza Monemi
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-
- Purpose:
- program ram. The ram is assigned with a ram id and can be programed
- using quartus in system memory contents editor in order to program the chip
-
- Info: monemi@fkegraduate.utm.my
-
-****************************************************************/
-
-
-`timescale 1ns / 1ps
-
-
-
-module prog_ram_single_port #(
- parameter Dw =32,
- parameter Aw =10,
- parameter TAGw =3,
- parameter SELw =4,
- parameter FPGA_FAMILY= "ALTERA",
- parameter RAM_TAG_STRING ="2"
-
-)
-(
- clk,
- reset,
-
- //wishbone bus interface
- sa_dat_i,
- sa_sel_i,
- sa_addr_i,
- sa_tag_i,
- sa_stb_i,
- sa_cyc_i,
- sa_we_i,
- sa_dat_o,
- sa_ack_o,
- sa_err_o,
- sa_rty_o
-
-);
- input clk;
- input reset;
-
-
-
- //wishbone bus interface
- input [Dw-1 : 0] sa_dat_i;
- input [SELw-1 : 0] sa_sel_i;
- input [Aw-1 : 0] sa_addr_i;
- input [TAGw-1 : 0] sa_tag_i;
- input sa_stb_i;
- input sa_cyc_i;
- input sa_we_i;
-
- output [Dw-1 : 0] sa_dat_o;
- output sa_ack_o;
- output sa_err_o;
- output sa_rty_o;
-
-
-
-
- wire [TAGw-1 : 0] sa_cti_i;
-
- assign sa_cti_i = sa_tag_i;
-
-
- wire [Dw-1 : 0] data_a;
- wire [Aw-1 : 0] addr_a;
- wire we_a;
- wire [(Dw-1) : 0] q_a;
- reg sa_ack_classic, sa_ack_classic_next;
- wire sa_ack_burst;
-
- assign sa_dat_o = q_a;
- assign data_a = sa_dat_i ;
- assign addr_a = sa_addr_i;
- assign we_a = sa_stb_i & sa_we_i;
- assign sa_ack_burst = sa_stb_i ; //the ack is registerd inside the master in burst mode
- assign sa_err_o = 1'b0;
- assign sa_rty_o = 1'b0;
-
- assign sa_ack_o = (sa_cti_i == 3'b000 ) ? sa_ack_classic : sa_ack_burst;
-
-
- always @(*) begin
- sa_ack_classic_next = (~sa_ack_o) & sa_stb_i;
- end
-
- always @(posedge clk ) begin
- if(reset) begin
- sa_ack_classic <= 1'b0;
- end else begin
- sa_ack_classic <= sa_ack_classic_next;
- end
- end
-
-`ifdef MODEL_TECH
- localparam INIT_FILE = {"../../sw/ram",RAM_TAG_STRING,".mif"};
-`else
- localparam INIT_FILE = {"sw/ram",RAM_TAG_STRING,".mif"};
-`endif
-
-
-
-generate
- if(FPGA_FAMILY == "ALTERA") begin :altera_atlsyncram
-
- localparam RAM_ID = {"ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=",RAM_TAG_STRING};
-
-
-
- altsyncram #(
- .operation_mode("SINGLE_PORT"),
- .width_a(Dw),
- .lpm_hint(RAM_ID),
- .read_during_write_mode_mixed_ports("DONT_CARE"),
- .widthad_a(Aw),
- .width_byteena_a(4),
- .init_file(INIT_FILE)
-
- ) ram_inst(
- .clock0 (clk),
- .address_a (addr_a),
- .wren_a (we_a),
- .data_a (data_a),
- .q_a (q_a),
- .byteena_a (sa_sel_i),
-
- .wren_b ( ),
- .rden_a ( ),
- .rden_b ( ),
- .data_b ( ),
- .address_b ( ),
- .clock1 ( ),
- .clocken0 ( ),
- .clocken1 ( ),
- .clocken2 ( ),
- .clocken3 ( ),
- .aclr0 ( ),
- .aclr1 ( ),
- .byteena_b ( ),
- .addressstall_a ( ),
- .addressstall_b ( ),
- .q_b ( ),
- .eccstatus ( )
- );
-
-
-
-
- end else begin : other_ram
-
-
-
- single_port_ram #(
- .Dw(Dw),
- .Aw(Aw)
- )
- single_port_ram(
- .data(data_a),
- .addr(addr_a),
- .we(we_a),
- .clk(clk),
- .q(q_a)
- );
-
-
- end
- endgenerate
-
-
-
-
-endmodule
-
-
-
-
-/*********************************
-
- prog_ram_dual_port
-
-
-******************************/
-
-
-module prog_ram_dual_port #(
- parameter Dw =32,
- parameter Aw =10,
- parameter TAGw =3
- )
- (
- clk,
- reset,
- sa_dat_i, sb_dat_i,
- sa_addr_i, sb_addr_i,
- sa_tag_i, sb_tag_i,
- sa_stb_i,sb_stb_i,
- sa_we_i,sb_we_i,
- sa_dat_o, sb_dat_o,
- sa_ack_o,sb_ack_o
- );
- input clk;
- input reset;
-
- input [Dw-1 : 0] sa_dat_i, sb_dat_i;
- //input [SELw-1 : 0] sa_sel_i,sb_sel_i;
- input [Aw-1 : 0] sa_addr_i, sb_addr_i;
- input [TAGw-1 : 0] sa_tag_i, sb_tag_i;
- input sa_stb_i,sb_stb_i;
- input sa_we_i,sb_we_i;
-
- output [Dw-1 : 0] sa_dat_o, sb_dat_o;
- output sa_ack_o,sb_ack_o;
-
- wire [TAGw-1 : 0] sa_cti_i, sb_cti_i;
-
- assign sa_cti_i = sa_tag_i;
- assign sb_cti_i= sb_tag_i;
-
- wire [(Dw-1) :0] data_a, data_b;
- wire [(Aw-1) :0] addr_a, addr_b;
- wire we_a, we_b;
- wire [(Dw-1) :0] q_a, q_b;
- reg sa_ack_classic, sb_ack_classic,sa_ack_classic_next,sb_ack_classic_next;
- wire sa_ack_burst,sb_ack_burst;
-
- assign sa_dat_o = q_a;
- assign data_a = sa_dat_i ;
- assign addr_a = sa_addr_i;
- assign we_a = sa_stb_i & sa_we_i;
- assign sa_ack_burst = sa_stb_i ; //the ack is registerd inside the master in burst mode
-
-
- assign sa_ack_o = (sa_cti_i == 3'b000 ) ? sa_ack_classic : sa_ack_burst;
-
-
-
-
- always @(*) begin
- sa_ack_classic_next = (~sa_ack_o) & sa_stb_i;
- end
-
- always @(posedge clk ) begin
- if(reset) begin
- sa_ack_classic <= 1'b0;
- end else begin
- sa_ack_classic <= sa_ack_classic_next;
- end
- end
-
-
-
-
- assign sb_dat_o = q_b;
- assign data_b = sb_dat_i ;
- assign addr_b = sb_addr_i;
- assign we_b = sb_stb_i & sb_we_i;
- assign sb_ack_burst = sb_stb_i ;
- assign sb_ack_o = (sb_cti_i == 3'b000 ) ? sb_ack_classic : sb_ack_burst;
-
-
-
- always @(*) begin
- sb_ack_classic_next = (~sb_ack_o) & sb_stb_i;
- end
-
- always @(posedge clk ) begin
- if(reset) begin
- sb_ack_classic <= 1'b0;
- end else begin
- sb_ack_classic <= sb_ack_classic_next;
- end
- end
-
-
- dual_port_ram
- #(
- .Dw (Dw),
- .Aw (Aw)
- )
- the_ram
- (
- .data_a (data_a),
- .data_b (data_b),
- .addr_a (addr_a),
- .addr_b (addr_b),
- .we_a (we_a),
- .we_b (we_b),
- .clk (clk),
- .q_a (q_a),
- .q_b (q_b));
-
-
-
-
-
-
-
-
-endmodule
-
-
-/*******************
-
- dual_port_ram
-
-********************/
-
-
-// Quartus II Verilog Template
-// True Dual Port RAM with single clock
-
-
-module dual_port_ram
-#(
- parameter Dw=8,
- parameter Aw=6
-)
-(
- data_a,
- data_b,
- addr_a,
- addr_b,
- we_a,
- we_b,
- clk,
- q_a,
- q_b
-);
-
-
- input [(Dw-1):0] data_a, data_b;
- input [(Aw-1):0] addr_a, addr_b;
- input we_a, we_b, clk;
- output reg [(Dw-1):0] q_a, q_b;
-
- // Declare the RAM variable
- reg [Dw-1:0] ram[2**Aw-1:0];
-
- // Port A
- always @ (posedge clk)
- begin
- if (we_a)
- begin
- ram[addr_a] <= data_a;
- q_a <= data_a;
- end
- else
- begin
- q_a <= ram[addr_a];
- end
- end
-
- // Port B
- always @ (posedge clk)
- begin
- if (we_b)
- begin
- ram[addr_b] <= data_b;
- q_b <= data_b;
- end
- else
- begin
- q_b <= ram[addr_b];
- end
- end
-
-
- /*
- //synthesis translate_off
- integer i;
- initial begin
-
- for(i=0;i<2**Aw;i=i+1)
- ram[i]=i+ (CORE_NUMBER << 25);
- end //initial
-
-
- //synthesis translate_on
- */
-endmodule
-
-
-/*****************************
-
- single_port_ram
-
-
-*****************************/
-
-// Quartus II Verilog Template
-// Single port RAM with single read/write address
-
-module single_port_ram #(
- parameter Dw=8,
- parameter Aw=6
-)
-(
- data,
- addr,
- we,
- clk,
- q
-);
-
- input [(Dw-1):0] data;
- input [(Aw-1):0] addr;
- input we, clk;
- output [(Dw-1):0] q;
-
- // Declare the RAM variable
- reg [Dw-1:0] ram[2**Aw-1:0];
-
- // Variable to hold the registered read address
- reg [Aw-1:0] addr_reg;
-
- always @ (posedge clk)
- begin
- // Write
- if (we)
- ram[addr] <= data;
-
- addr_reg <= addr;
- end
-
- // Continuous assignment implies read returns NEW data.
- // This is the natural behavior of the TriMatrix memory
- // blocks in Single Port mode.
- assign q = ram[addr_reg];
-
-endmodule
-
-
mpsoc/src_peripheral/ram/old/ram (copy).v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/ram/old/test
===================================================================
--- mpsoc/src_peripheral/ram/old/test (revision 27)
+++ mpsoc/src_peripheral/ram/old/test (nonexistent)
@@ -1,2697 +0,0 @@
-module byte_enabled_true_dual_port_ram #(
- parameter int
- BYTE_WIDTH = 8,
- ADDRESS_WIDTH = 6,
- BYTES = 4,
- DATA_WIDTH_R = BYTE_WIDTH * BYTES
-)
-(
- input [ADDRESS_WIDTH-1:0] addr1,
- input [ADDRESS_WIDTH-1:0] addr2,
- input [BYTES-1:0] be1,
- input [BYTES-1:0] be2,
- input [DATA_WIDTH_R-1:0] data_in1,
- input [DATA_WIDTH_R-1:0] data_in2,
- input we1, we2, clk,
- output [DATA_WIDTH_R-1:0] data_out1,
- output [DATA_WIDTH_R-1:0] data_out2
-);
-
-generate
-if (BYTES==1) begin : byte_en1
- byte_enabled_true_dual_port_ram_1
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==2) begin : byte_en2
- byte_enabled_true_dual_port_ram_2
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==3) begin : byte_en3
- byte_enabled_true_dual_port_ram_3
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==4) begin : byte_en4
- byte_enabled_true_dual_port_ram_4
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==5) begin : byte_en5
- byte_enabled_true_dual_port_ram_5
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==6) begin : byte_en6
- byte_enabled_true_dual_port_ram_6
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==7) begin : byte_en7
- byte_enabled_true_dual_port_ram_7
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==8) begin : byte_en8
- byte_enabled_true_dual_port_ram_8
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==9) begin : byte_en9
- byte_enabled_true_dual_port_ram_9
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==10) begin : byte_en10
- byte_enabled_true_dual_port_ram_10
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==11) begin : byte_en11
- byte_enabled_true_dual_port_ram_11
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==12) begin : byte_en12
- byte_enabled_true_dual_port_ram_12
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==13) begin : byte_en13
- byte_enabled_true_dual_port_ram_13
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==14) begin : byte_en14
- byte_enabled_true_dual_port_ram_14
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-if (BYTES==15) begin : byte_en15
- byte_enabled_true_dual_port_ram_15
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-endgenerate
-endmodule: byte_enabled_true_dual_port_ram
-
-module byte_enabled_true_dual_port_ram_1 #(
- parameter int
- BYTE_WIDTH = 8,
- ADDRESS_WIDTH = 6,
- BYTES = 1,
- DATA_WIDTH_R = BYTE_WIDTH * BYTES
-)
-(
- input [ADDRESS_WIDTH-1:0] addr1,
- input [ADDRESS_WIDTH-1:0] addr2,
- input [BYTES-1:0] be1,
- input [BYTES-1:0] be2,
- input [DATA_WIDTH_R-1:0] data_in1,
- input [DATA_WIDTH_R-1:0] data_in2,
- input we1, we2, clk,
- output [DATA_WIDTH_R-1:0] data_out1,
- output [DATA_WIDTH_R-1:0] data_out2
-);
-
-wire [BYTE_WIDTH-1 : 0] data_in_sep1[BYTES-1 : 0];
-wire [BYTE_WIDTH-1 : 0] data_in_sep2[BYTES-1 : 0];
-
-genvar i;
-generate
-for (i=0;i
mpsoc/src_peripheral/ram/old/test
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/ram/old/Altera_single_port_ram.v
===================================================================
--- mpsoc/src_peripheral/ram/old/Altera_single_port_ram.v (revision 27)
+++ mpsoc/src_peripheral/ram/old/Altera_single_port_ram.v (nonexistent)
@@ -1,184 +0,0 @@
-/*********************************************************************
-
- File: Altera_single_port_ram.v
-
- Copyright (C) 2014 Alireza Monemi
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-
- Purpose:
- Altera_single_port_ram. The ram is assigned with a ram id and can be programed
- using quartus in system memory contents editor in order to program the chip
-
- Info: monemi@fkegraduate.utm.my
-
-****************************************************************/
-
-
-`timescale 1ns / 1ps
-
-
-
-module Altera_single_port_ram #(
- parameter Dw =32,
- parameter Aw =10,
- parameter TAGw =3,
- parameter SELw =4,
- parameter CTIw = 3,
- parameter BTEw = 2,
- parameter RAM_TAG_STRING="2" //use for programming the memory at run time
-
-)
-(
- clk,
- reset,
-
- //wishbone bus interface
- sa_dat_i,
- sa_sel_i,
- sa_addr_i,
- sa_tag_i,
- sa_cti_i,
- sa_bte_i,
- sa_stb_i,
- sa_cyc_i,
- sa_we_i,
- sa_dat_o,
- sa_ack_o,
- sa_err_o,
- sa_rty_o
-
-);
- input clk;
- input reset;
-
-
-
- //wishbone bus interface
- input [Dw-1 : 0] sa_dat_i;
- input [SELw-1 : 0] sa_sel_i;
- input [Aw-1 : 0] sa_addr_i;
- input [TAGw-1 : 0] sa_tag_i;
- input sa_stb_i;
- input sa_cyc_i;
- input sa_we_i;
- input [CTIw-1 : 0] sa_cti_i;
- input [BTEw-1 : 0] sa_bte_i;
-
- output [Dw-1 : 0] sa_dat_o;
- output sa_ack_o;
- output sa_err_o;
- output sa_rty_o;
-
-
-
-
- wire [TAGw-1 : 0] sa_cti_i;
-
-
-
- wire [Dw-1 : 0] data_a;
- wire [Aw-1 : 0] addr_a;
- wire we_a;
- wire [(Dw-1) : 0] q_a;
- reg sa_ack_classic, sa_ack_classic_next;
- wire sa_ack_ni_burst;
-
- assign sa_dat_o = q_a;
- assign data_a = sa_dat_i ;
- assign addr_a = sa_addr_i;
- assign we_a = sa_stb_i & sa_we_i;
- assign sa_ack_ni_burst = sa_stb_i ; //the ack is registerd inside the master in burst mode
- assign sa_err_o = 1'b0;
- assign sa_rty_o = 1'b0;
-
-
-
- // 3'b100 is reserved in wb4 interface. It used for ni
- assign sa_ack_o = (sa_cti_i == 3'b100 ) ? sa_ack_ni_burst: sa_ack_classic;
-
- localparam CLASSIC =3'b000,
- CONSTANT_BURST = 3'b001,
- INCRMNT_BURST = 3'b010,
- END_BURST = 3'b111;
-
- always @(*) begin
- case(sa_cti_i)
- CLASSIC: sa_ack_classic_next = (~sa_ack_o) & sa_stb_i;
- default: sa_ack_classic_next = sa_stb_i;
- endcase
- end
-
- always @(posedge clk ) begin
- if(reset) begin
- sa_ack_classic <= 1'b0;
- end else begin
- sa_ack_classic <= sa_ack_classic_next;
- end
- end
-
-`ifdef MODEL_TECH
- localparam INIT_FILE = {"../../sw/ram",RAM_TAG_STRING,".mif"};
-`else
- localparam INIT_FILE = {"sw/ram",RAM_TAG_STRING,".mif"};
-`endif
-
-
-
-
-
- localparam RAM_ID = {"ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=",RAM_TAG_STRING};
-
-
-
- altsyncram #(
- .operation_mode("SINGLE_PORT"),
- .width_a(Dw),
- .lpm_hint(RAM_ID),
- .read_during_write_mode_mixed_ports("DONT_CARE"),
- .widthad_a(Aw),
- .width_byteena_a(4),
- .init_file(INIT_FILE)
-
- ) ram_inst(
- .clock0 (clk),
- .address_a (addr_a),
- .wren_a (we_a),
- .data_a (data_a),
- .q_a (q_a),
- .byteena_a (sa_sel_i),
-
- .wren_b ( ),
- .rden_a ( ),
- .rden_b ( ),
- .data_b ( ),
- .address_b ( ),
- .clock1 ( ),
- .clocken0 ( ),
- .clocken1 ( ),
- .clocken2 ( ),
- .clocken3 ( ),
- .aclr0 ( ),
- .aclr1 ( ),
- .byteena_b ( ),
- .addressstall_a ( ),
- .addressstall_b ( ),
- .q_b ( ),
- .eccstatus ( )
- );
-
-endmodule
-
-
mpsoc/src_peripheral/ram/old/Altera_single_port_ram.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/ram/old/Altera_single_port_ram2.v
===================================================================
--- mpsoc/src_peripheral/ram/old/Altera_single_port_ram2.v (revision 27)
+++ mpsoc/src_peripheral/ram/old/Altera_single_port_ram2.v (nonexistent)
@@ -1,416 +0,0 @@
-/*********************************************************************
-
- File: Altera_single_port_ram.v
-
- Copyright (C) 2014 Alireza Monemi
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-
- Purpose:
- Altera_single_port_ram. The ram is assigned with a ram id and can be
- read/written using jtag_man
-
- Info: monemi@fkegraduate.utm.my
-
-****************************************************************/
-
-
-`timescale 1ns / 1ps
-
-
-
-module Altera_single_port_ram2 #(
- parameter Dw =32,
- parameter Aw =10,
- parameter TAGw =3,
- parameter SELw =4,
- parameter CTIw = 3,
- parameter BTEw = 2,
- parameter RAM_TAG_STRING="2" //use for programming the memory at run time
-
-)
-(
- clk,
- reset,
-
- //wishbone bus interface
- sa_dat_i,
- sa_sel_i,
- sa_addr_i,
- sa_tag_i,
- sa_cti_i,
- sa_bte_i,
- sa_stb_i,
- sa_cyc_i,
- sa_we_i,
- sa_dat_o,
- sa_ack_o,
- sa_err_o,
- sa_rty_o
-
-);
- input clk;
- input reset;
-
-
- function integer log2;
- input integer number; begin
- log2=0;
- while(2**log2
mpsoc/src_peripheral/ram/old/Altera_single_port_ram2.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/ram/old/gen.pl
===================================================================
--- mpsoc/src_peripheral/ram/old/gen.pl (revision 27)
+++ mpsoc/src_peripheral/ram/old/gen.pl (nonexistent)
@@ -1,261 +0,0 @@
-#! /usr/bin/perl -w
-my $B=16;
-
-
-
-
-my $file= 'module byte_enabled_true_dual_port_ram #(
- parameter int
- BYTE_WIDTH = 8,
- ADDRESS_WIDTH = 6,
- BYTES = 4,
- DATA_WIDTH_R = BYTE_WIDTH * BYTES
-)
-(
- input [ADDRESS_WIDTH-1:0] addr1,
- input [ADDRESS_WIDTH-1:0] addr2,
- input [BYTES-1:0] be1,
- input [BYTES-1:0] be2,
- input [DATA_WIDTH_R-1:0] data_in1,
- input [DATA_WIDTH_R-1:0] data_in2,
- input we1, we2, clk,
- output [DATA_WIDTH_R-1:0] data_out1,
- output [DATA_WIDTH_R-1:0] data_out2
-);
-
-generate
-';
-
-for (my $i=1; $i<$B; $i++){
-
-$file=$file."if (BYTES==$i) begin : byte_en$i
- byte_enabled_true_dual_port_ram_$i
- #(
- .BYTE_WIDTH(BYTE_WIDTH),
- .ADDRESS_WIDTH(ADDRESS_WIDTH)
- )
- ram_inst
- (
- .addr1(addr1),
- .addr2(addr2),
- .be1(be1),
- .be2(be2),
- .data_in1(data_in1),
- .data_in2(data_in2),
- .we1(we1),
- .we2(we2),
- .clk(clk),
- .data_out1(data_out1),
- .data_out2(data_out2)
- );
-end
-";
-}
-$file=$file."endgenerate
-endmodule: byte_enabled_true_dual_port_ram\n";
-
-
-
-
-for (my $i=1; $i<$B; $i++){
-
-
-$file=$file."
-module byte_enabled_true_dual_port_ram_$i #(
- parameter int
- BYTE_WIDTH = 8,
- ADDRESS_WIDTH = 6,
- BYTES = $i,
- DATA_WIDTH_R = BYTE_WIDTH * BYTES
-)
-(
- input [ADDRESS_WIDTH-1:0] addr1,
- input [ADDRESS_WIDTH-1:0] addr2,
- input [BYTES-1:0] be1,
- input [BYTES-1:0] be2,
- input [DATA_WIDTH_R-1:0] data_in1,
- input [DATA_WIDTH_R-1:0] data_in2,
- input we1, we2, clk,
- output [DATA_WIDTH_R-1:0] data_out1,
- output [DATA_WIDTH_R-1:0] data_out2
-);
-
-wire [BYTE_WIDTH-1 : 0] data_in_sep1[BYTES-1 : 0];
-wire [BYTE_WIDTH-1 : 0] data_in_sep2[BYTES-1 : 0];
-
-genvar i;
-generate
-for (i=0;i
mpsoc/src_peripheral/ram/old/gen.pl
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/ram/old/Altera_dual_port_ram.v
===================================================================
--- mpsoc/src_peripheral/ram/old/Altera_dual_port_ram.v (revision 27)
+++ mpsoc/src_peripheral/ram/old/Altera_dual_port_ram.v (nonexistent)
@@ -1,261 +0,0 @@
-/*********************************************************************
-
- File: Altera_dual_port_ram.v
-
- Copyright (C) 2014 Alireza Monemi
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-
- Purpose:
- Altera_dual_port_ram.
-
- Info: monemi@fkegraduate.utm.my
-
-****************************************************************/
-
-
-`timescale 1ns / 1ps
-
-
-
-module Altera_dual_port_ram #(
- parameter Dw =32,
- parameter Aw =10,
- parameter TAGw =3,
- parameter SELw =4,
- parameter CTIw = 3,
- parameter BTEw = 2,
- parameter RAM_TAG_STRING =0 // used only for initialling the memory
-
-
-)
-(
- clk,
- reset,
-
- //wishbone bus interface
- sa_dat_i,
- sa_sel_i,
- sa_addr_i,
- sa_tag_i,
- sa_cti_i,
- sa_bte_i,
- sa_stb_i,
- sa_cyc_i,
- sa_we_i,
- sa_dat_o,
- sa_ack_o,
- sa_err_o,
- sa_rty_o,
-
- //wishbone bus interface
- sb_dat_i,
- sb_sel_i,
- sb_addr_i,
- sb_tag_i,
- sb_cti_i,
- sb_bte_i,
- sb_stb_i,
- sb_cyc_i,
- sb_we_i,
- sb_dat_o,
- sb_ack_o,
- sb_err_o,
- sb_rty_o
-
-
-);
- input clk;
- input reset;
-
-
- function integer log2;
- input integer number; begin
- log2=0;
- while(2**log2
mpsoc/src_peripheral/ram/old/Altera_dual_port_ram.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_peripheral/ram/old/general_single_port_ram.v
===================================================================
--- mpsoc/src_peripheral/ram/old/general_single_port_ram.v (revision 27)
+++ mpsoc/src_peripheral/ram/old/general_single_port_ram.v (nonexistent)
@@ -1,187 +0,0 @@
-/*********************************************************************
-
- File: general_single_port_ram.v
-
- Copyright (C) 2014 Alireza Monemi
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-
- Purpose:
- ram_single_port. General single port ram. Does not support
- byte enable
-
- Info: monemi@fkegraduate.utm.my
-
-****************************************************************/
-
-
-`timescale 1ns / 1ps
-
-
-
-module general_single_port_ram #(
- parameter Dw =32,
- parameter Aw =10,
- parameter TAGw =3
-
-)
-(
- clk,
- reset,
-
- //wishbone bus interface
- sa_dat_i,
- // sa_sel_i,
- sa_addr_i,
- sa_tag_i,
- sa_stb_i,
- sa_cyc_i,
- sa_we_i,
- sa_dat_o,
- sa_ack_o,
- sa_err_o,
- sa_rty_o
-
-);
- input clk;
- input reset;
-
-
-
- //wishbone bus interface
- input [Dw-1 : 0] sa_dat_i;
- // input [SELw-1 : 0] sa_sel_i;
- input [Aw-1 : 0] sa_addr_i;
- input [TAGw-1 : 0] sa_tag_i;
- input sa_stb_i;
- input sa_cyc_i;
- input sa_we_i;
-
- output [Dw-1 : 0] sa_dat_o;
- output sa_ack_o;
- output sa_err_o;
- output sa_rty_o;
-
-
-
-
- wire [TAGw-1 : 0] sa_cti_i;
-
- assign sa_cti_i = sa_tag_i;
-
-
- wire [Dw-1 : 0] data_a;
- wire [Aw-1 : 0] addr_a;
- wire we_a;
- wire [(Dw-1) : 0] q_a;
- reg sa_ack_classic, sa_ack_classic_next;
- wire sa_ack_burst;
-
- assign sa_dat_o = q_a;
- assign data_a = sa_dat_i ;
- assign addr_a = sa_addr_i;
- assign we_a = sa_stb_i & sa_we_i;
- assign sa_ack_burst = sa_stb_i ; //the ack is registerd inside the master in burst mode
- assign sa_err_o = 1'b0;
- assign sa_rty_o = 1'b0;
-
- assign sa_ack_o = (sa_cti_i == 3'b000 ) ? sa_ack_classic : sa_ack_burst;
-
-
- always @(*) begin
- sa_ack_classic_next = (~sa_ack_o) & sa_stb_i;
- end
-
- always @(posedge clk ) begin
- if(reset) begin
- sa_ack_classic <= 1'b0;
- end else begin
- sa_ack_classic <= sa_ack_classic_next;
- end
- end
-
-
-
-
- single_port_ram #(
- .Dw(Dw),
- .Aw(Aw)
- )
- single_port_ram(
- .data(data_a),
- .addr(addr_a),
- .we(we_a),
- .clk(clk),
- .q(q_a)
- );
-
-
-
-
-
-endmodule
-
-
-
-/*****************************
-
- single_port_ram
-
-
-*****************************/
-
-// Quartus II Verilog Template
-// Single port RAM with single read/write address
-
-module single_port_ram #(
- parameter Dw=8,
- parameter Aw=6
-)
-(
- data,
- addr,
- we,
- clk,
- q
-);
-
- input [(Dw-1):0] data;
- input [(Aw-1):0] addr;
- input we, clk;
- output [(Dw-1):0] q;
-
- // Declare the RAM variable
- reg [Dw-1:0] ram[2**Aw-1:0];
-
- // Variable to hold the registered read address
- reg [Aw-1:0] addr_reg;
-
- always @ (posedge clk)
- begin
- // Write
- if (we)
- ram[addr] <= data;
-
- addr_reg <= addr;
- end
-
- // Continuous assignment implies read returns NEW data.
- // This is the natural behavior of the TriMatrix memory
- // blocks in Single Port mode.
- assign q = ram[addr_reg];
-
-endmodule
-
-
mpsoc/src_peripheral/ram/old/general_single_port_ram.v
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: mpsoc/src_verilator/noc_connection.sv
===================================================================
--- mpsoc/src_verilator/noc_connection.sv (revision 27)
+++ mpsoc/src_verilator/noc_connection.sv (revision 28)
@@ -59,6 +59,7 @@
`define INCLUDE_PARAM
`include"parameter.v"
+
localparam CONGw= (CONGESTION_INDEX==3)? 3:
(CONGESTION_INDEX==5)? 3:
@@ -72,7 +73,7 @@
P_1 = P-1 ,
Fw = 2+V+Fpay, //flit width;
PFw = P * Fw,
- NC = NX * NY, //number of cores
+ NC = (TOPOLOGY=="RING")? NX : NX*NY, //number of cores
NCFw = NC * Fw,
NCV = NC * V;
@@ -110,7 +111,45 @@
genvar x,y;
generate
+ if( TOPOLOGY == "RING") begin : ring
+ for (x=0; x
/mpsoc/src_verilator/parameter.h
2,10 → 2,10
#define INCLUDE_PARAM |
|
#define V 4 |
#define B 4 |
#define B 5 |
#define NX 8 |
#define NY 8 |
#define C 1 |
#define C 4 |
#define Fpay 32 |
#define MUX_TYPE "ONE_HOT" |
#define VC_REALLOCATION_TYPE "NONATOMIC" |
13,23 → 13,23
#define FIRST_ARBITER_EXT_P_EN 0 |
#define TOPOLOGY "MESH" |
#define ROUTE_NAME "XY" |
#define C0_p 100 |
#define C1_p 0 |
#define C2_p 0 |
#define C3_p 0 |
#define C0_p 25 |
#define C1_p 25 |
#define C2_p 25 |
#define C3_p 25 |
#define TRAFFIC "RANDOM" |
#define HOTSPOT_PERCENTAGE 3 |
#define HOTSOPT_NUM 4 |
#define HOTSPOT_CORE_1 9 |
#define HOTSPOT_CORE_2 25 |
#define HOTSPOT_CORE_3 11 |
#define HOTSPOT_CORE_4 27 |
#define HOTSPOT_CORE_1 18 |
#define HOTSPOT_CORE_2 50 |
#define HOTSPOT_CORE_3 22 |
#define HOTSPOT_CORE_4 54 |
#define HOTSPOT_CORE_5 18 |
#define MAX_PCK_NUM 128000 |
#define MAX_PCK_NUM 256000 |
#define MAX_SIM_CLKs 100000 |
#define MAX_PCK_SIZ 10 |
#define TIMSTMP_FIFO_NUM 64 |
#define PACKET_SIZE 2 |
#define TIMSTMP_FIFO_NUM 8 |
#define PACKET_SIZE 4 |
#define DEBUG_EN 1 |
#define ROUTE_SUBFUNC "NORTH_LAST" |
#define AVC_ATOMIC_EN 0 |
37,10 → 37,10
#define STND_DEV_EN 0 |
#define AVG_LATENCY_METRIC "HEAD_2_TAIL" |
#define ADD_PIPREG_AFTER_CROSSBAR 0 |
#define ADD_PIPREG_BEFORE_CROSSBAR 0 |
#define CVw (C==0)? V : C * V |
#define CLASS_SETTING 8'b11111111 |
#define ESCAP_VC_MASK 1 |
#define CLASS_SETTING "16'b111111111111111" |
#define ESCAP_VC_MASK 4'b0001 |
#define SSA_EN "NO" |
|
|
#endif |
/mpsoc/src_verilator/parameter.v
1,35 → 1,35
`ifdef INCLUDE_PARAM |
|
parameter V=4; |
parameter P=5; |
parameter B=4; |
parameter TOPOLOGY="MESH"; |
parameter P=(TOPOLOGY=="RING")? 3 : 5; |
parameter B=5; |
parameter NX=8; |
parameter NY=8; |
parameter C=1; |
parameter C=4; |
parameter Fpay=32; |
parameter MUX_TYPE="ONE_HOT"; |
parameter VC_REALLOCATION_TYPE="NONATOMIC"; |
parameter COMBINATION_TYPE="COMB_NONSPEC"; |
parameter FIRST_ARBITER_EXT_P_EN=0; |
parameter TOPOLOGY="MESH"; |
parameter ROUTE_NAME="XY"; |
parameter CONGESTION_INDEX=3; |
parameter C0_p=100; |
parameter C1_p=0; |
parameter C2_p=0; |
parameter C3_p=0; |
parameter C0_p=25; |
parameter C1_p=25; |
parameter C2_p=25; |
parameter C3_p=25; |
parameter TRAFFIC="RANDOM"; |
parameter HOTSPOT_PERCENTAGE=3; |
parameter HOTSOPT_NUM=4; |
parameter HOTSPOT_CORE_1=9; |
parameter HOTSPOT_CORE_2=25; |
parameter HOTSPOT_CORE_3=11; |
parameter HOTSPOT_CORE_4=27; |
parameter HOTSPOT_CORE_1=18; |
parameter HOTSPOT_CORE_2=50; |
parameter HOTSPOT_CORE_3=22; |
parameter HOTSPOT_CORE_4=54; |
parameter HOTSPOT_CORE_5=18; |
parameter MAX_PCK_NUM=128000; |
parameter MAX_PCK_NUM=256000; |
parameter MAX_SIM_CLKs=100000; |
parameter MAX_PCK_SIZ=10; |
parameter TIMSTMP_FIFO_NUM=64; |
parameter TIMSTMP_FIFO_NUM=8; |
parameter ROUTE_TYPE = (ROUTE_NAME == "XY" || ROUTE_NAME == "TRANC_XY" )? "DETERMINISTIC" : |
(ROUTE_NAME == "DUATO" || ROUTE_NAME == "TRANC_DUATO" )? "FULL_ADAPTIVE": "PAR_ADAPTIVE"; |
parameter DEBUG_EN=1; |
37,10 → 37,10
parameter AVC_ATOMIC_EN= 0; |
parameter AVG_LATENCY_METRIC= "HEAD_2_TAIL"; |
parameter ADD_PIPREG_AFTER_CROSSBAR= 0; |
parameter ADD_PIPREG_BEFORE_CROSSBAR= 0; |
parameter CVw=(C==0)? V : C * V; |
parameter [CVw-1: 0] CLASS_SETTING = 8'b11111111; |
parameter [V-1 : 0] ESCAP_VC_MASK=1; |
parameter [CVw-1: 0] CLASS_SETTING = 16'b111111111111111; |
parameter [V-1 : 0] ESCAP_VC_MASK=4'b0001; |
parameter SSA_EN= "NO"; |
|
|
`endif |
/mpsoc/src_verilator/router_verilator.v
1,4 → 1,4
module router_verilator |
module router_verilator |
( |
current_x, |
current_y, |
73,7 → 73,7
|
|
router # ( |
.V(V), |
.V(V), |
.P(P), |
.B(B), |
.NX(NX), |
93,10 → 93,10
.CONGw(CONGw), |
.DEBUG_EN(DEBUG_EN), |
.ADD_PIPREG_AFTER_CROSSBAR(ADD_PIPREG_AFTER_CROSSBAR), |
.ADD_PIPREG_BEFORE_CROSSBAR(ADD_PIPREG_BEFORE_CROSSBAR), |
.CVw(CVw), |
.CLASS_SETTING(CLASS_SETTING), |
.ESCAP_VC_MASK(ESCAP_VC_MASK) |
.ESCAP_VC_MASK(ESCAP_VC_MASK), |
.SSA_EN(SSA_EN) |
|
|
) |
/mpsoc/src_verilator/testbench.cpp
7,12 → 7,16
#include "Vrouter.h" // From Verilating "router.v" |
#include "Vnoc.h" |
#include "Vtraffic.h" |
|
|
|
|
#include "parameter.h" |
//#include "traffic_tabel.h" |
|
|
#define NC (NX*NY) |
#define RATIO_INIT 5 |
#define RATIO_INIT 2 |
|
unsigned char FIXED_SRC_DST_PAIR; |
|
353,7 → 357,8
sum_clk_pow2+=(double)clk_num_h2h * (double) clk_num_h2h; |
sum_clk_pow2_per_class[class_num]+=(double)clk_num_h2h * (double) clk_num_h2h; |
#endif |
sum_clk_per_hop+= ((double)clk_num_h2h/(double)distance); |
|
sum_clk_per_hop+= ((double)clk_num_h2h/(double)distance); |
total_pck_num_per_class[class_num]+=1; |
sum_clk_h2h_per_class[class_num]+=clk_num_h2h ; |
sum_clk_h2t_per_class[class_num]+=clk_num_h2t ; |
412,11 → 417,13
sprintf(file_name,"%s_all.txt",out_file_name); |
//update_file(file_name ,ratio,avg_latency ); |
if(strcmp (AVG_LATENCY_METRIC,"HEAD_2_TAIL")==0){ |
printf(" Total number of packet = %d \n average latency per hop = %f \n average latency = %f\n",total_pck_num,avg_latency_per_hop,avg_latency_flit); |
printf(" Total number of packet = %d \n average latency per hop = %f \n average latency = %f\n",total_pck_num,avg_latency_per_hop,avg_latency_pck); |
update_file(file_name ,avg_throughput,avg_latency_pck); |
|
}else{ |
printf(" Total number of packet = %d \n average latency per hop = %f \n average latency = %f\n",total_pck_num,avg_latency_per_hop,avg_latency_flit); |
update_file(file_name ,avg_throughput,avg_latency_flit); |
}else{ |
printf(" Total number of packet = %d \n average latency per hop = %f \n average latency = %f\n",total_pck_num,avg_latency_per_hop,avg_latency_pck); |
update_file(file_name ,avg_throughput,avg_latency_pck); |
|
} |
//fwrite(fp,"%d,%f,%f,%f,",total_pck_num,avg_latency_per_hop,avg_latency,max_latency_per_hop); |
min_avg_latency_per_class=1000000; |
426,16 → 433,20
avg_latency_pck = (total_pck_num_per_class[i]>0)? (double)sum_clk_h2t_per_class[i]/total_pck_num_per_class[i]:0; |
avg_latency_per_hop = (total_pck_num_per_class[i]>0)? (double)sum_clk_per_hop_per_class[i]/total_pck_num_per_class[i]:0; |
if(strcmp (AVG_LATENCY_METRIC,"HEAD_2_TAIL")==0){ |
printf ("\nclass : %d \n",i); |
printf (" Total number of packet = %d \n avg_throughput = %f \n average latency per hop = %f \n average latency = %f\n",total_pck_num_per_class[i],avg_throughput,avg_latency_per_hop,avg_latency_flit); |
sprintf(file_name,"%s_c%u.txt",out_file_name,i); |
update_file( file_name,avg_throughput,avg_latency_flit ); |
}else{ |
printf ("\nclass : %d \n",i); |
printf ("\nclass : %d \n",i); |
printf (" Total number of packet = %d \n avg_throughput = %f \n average latency per hop = %f \n average latency = %f\n",total_pck_num_per_class[i],avg_throughput,avg_latency_per_hop,avg_latency_pck); |
sprintf(file_name,"%s_c%u.txt",out_file_name,i); |
update_file( file_name,avg_throughput,avg_latency_pck ); |
}else{ |
|
printf ("\nclass : %d \n",i); |
printf (" Total number of packet = %d \n avg_throughput = %f \n average latency per hop = %f \n average latency = %f\n",total_pck_num_per_class[i],avg_throughput,avg_latency_per_hop,avg_latency_flit); |
sprintf(file_name,"%s_c%u.txt",out_file_name,i); |
update_file( file_name,avg_throughput,avg_latency_flit ); |
|
|
|
|
} |
if(min_avg_latency_per_class > avg_latency_flit) min_avg_latency_per_class=avg_latency_flit; |
|
472,7 → 483,7
printf ("\tAVC_ATOMIC_EN:%d \n", AVC_ATOMIC_EN); |
printf ("\tCongestion Index:%d \n",CONGESTION_INDEX); |
printf ("\tADD_PIPREG_AFTER_CROSSBAR:%d\n",ADD_PIPREG_AFTER_CROSSBAR); |
printf ("\tADD_PIPREG_BEFORE_CROSSBAR:%d\n",ADD_PIPREG_BEFORE_CROSSBAR); |
|
|
|
#if(DEBUG_EN) |
498,6 → 509,7
printf ("\t Simulation timeout =%d\n", MAX_SIM_CLKs); |
printf ("\t Simulation ends on total packet num of =%d\n", MAX_PCK_NUM); |
printf ("\tPacket size: %u flits\n",PACKET_SIZE); |
printf ("\t SSA_EN enabled:%s \n",SSA_EN); |
} |
|
|
550,7 → 562,7
int update_ratio(){ |
//printf("current_avg_latency=%f\n",current_avg_latency_flit); |
if(current_avg_latency_flit <= (2*first_avg_latency_flit)) ratio+=2; |
else if(current_avg_latency_flit <= (6*first_avg_latency_flit)) ratio+=1; |
else if(current_avg_latency_flit <= (4*first_avg_latency_flit)) ratio+=1; |
else return 1; |
return 0; |
} |
692,8 → 704,19
(*dest_y) = ((current_y + ((NY/2)-1))%NY); |
|
|
} |
} else if( strcmp(TRAFFIC ,"CUSTOM") == 0){ |
//[(x+(k/2-1)) mod k, (y+(k/2-1)) mod k], |
if(current_x ==0 && current_y == 0 ){ |
(*dest_x) = NX-1; |
(*dest_y) = NY-1; |
}else{// make it unvalid |
(*dest_x) = current_x; |
(*dest_y) = current_y; |
|
} |
|
} |
|
else printf ("traffic %s is an unsupported traffic pattern\n",TRAFFIC); |
|
} |
/mpsoc/src_verilator/traffic_gen_verilator.v
8,7 → 8,7
module traffic_gen_verilator ( |
//input |
ratio, |
pck_size, |
pck_size_in, |
current_x, |
current_y, |
dest_x, |
82,7 → 82,7
input [Xw-1 :0] dest_x; |
input [Yw-1 :0] dest_y; |
output [PCK_CNTw-1 :0] pck_number; |
input [PCK_SIZw-1 :0] pck_size; |
input [PCK_SIZw-1 :0] pck_size_in; |
output sent_done; |
output hdr_flit_sent; |
input [Cw-1 :0] pck_class_in; |
100,28 → 100,14
|
traffic_gen #( |
.V(V), |
.P(P), |
.B(B), |
.NX(NX), |
.NY(NY), |
.Fpay(Fpay), |
.C(C), |
.VC_REALLOCATION_TYPE(VC_REALLOCATION_TYPE), |
.TOPOLOGY(TOPOLOGY), |
.ROUTE_NAME(ROUTE_NAME), |
.ROUTE_TYPE(ROUTE_TYPE), |
.TRAFFIC(TRAFFIC), |
.HOTSPOT_PERCENTAGE(HOTSPOT_PERCENTAGE), |
.HOTSOPT_NUM(HOTSOPT_NUM), |
.HOTSPOT_CORE_1(HOTSPOT_CORE_1), |
.HOTSPOT_CORE_2(HOTSPOT_CORE_2), |
.HOTSPOT_CORE_3(HOTSPOT_CORE_3), |
.HOTSPOT_CORE_4(HOTSPOT_CORE_4), |
.HOTSPOT_CORE_5(HOTSPOT_CORE_5), |
.C(C), |
.C0_p(C0_p), |
.C1_p(C1_p), |
.C2_p(C2_p), |
.C3_p(C3_p), |
.MAX_PCK_NUM(MAX_PCK_NUM), |
.MAX_SIM_CLKs(MAX_SIM_CLKs), |
.MAX_PCK_SIZ(MAX_PCK_SIZ), |
131,7 → 117,7
( |
//input |
.ratio (ratio), |
.pck_size(pck_size), |
.pck_size_in(pck_size_in), |
.current_x(current_x), |
.current_y(current_y), |
.dest_x(dest_x), |
161,7 → 147,9
|
); |
|
|
// always @(posedge start ) begin |
// $display(" (%d,%d) start at %t",current_x, current_y,$time); |
//end |
|
endmodule |
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.