OpenCores
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/mpsoc/perl_gui/lib/ip/Communication
    from Rev 38 to Rev 48
    Reverse comparison

Rev 38 → Rev 48

/jtag_uart.IP File deleted
jtag_uart.IP Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: jtag_wb.IP =================================================================== --- jtag_wb.IP (revision 38) +++ jtag_wb.IP (nonexistent) @@ -1,220 +0,0 @@ -####################################################################### -## File: jtag_wb.IP -## -## Copyright (C) 2014-2016 Alireza Monemi -## -## This file is part of ProNoC 1.8.0 -## -## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT -## MAY CAUSE UNEXPECTED BEHAIVOR. -################################################################################ - -$ipgen = bless( { - 'hdl_files' => [ - '/mpsoc/src_peripheral/jtag/jtag_wb' - ], - 'modules' => { - 'vjtag_wb' => {}, - 'vjtag_ctrl' => {}, - 'wb_if' => {} - }, - 'unused' => { - 'plug:wb_master[0]' => [ - 'rty_i', - 'tag_o', - 'err_i', - 'bte_o' - ] - }, - 'parameters_order' => [ - 'DW', - 'AW', - 'S_Aw', - 'M_Aw', - 'TAGw', - 'SELw', - 'VJTAG_INDEX' - ], - 'category' => 'Communication', - 'module_name' => 'vjtag_wb', - 'file_name' => '/home/alireza/Mywork/mpsoc/src_peripheral/jtag/jtag_wb/vjtag_wb.v', - 'version' => 1, - 'ports_order' => [ - 'clk', - 'reset', - 'm_sel_o', - 'm_dat_o', - 'm_addr_o', - 'm_cti_o', - 'm_stb_o', - 'm_cyc_o', - 'm_we_o', - 'm_dat_i', - 'm_ack_i', - 'status_i' - ], - 'plugs' => { - 'clk' => { - 'clk' => {}, - 'type' => 'num', - 'value' => 1, - '0' => { - 'name' => 'clk' - } - }, - 'reset' => { - 'type' => 'num', - 'value' => 1, - 'reset' => {}, - '0' => { - 'name' => 'reset' - } - }, - 'wb_master' => { - 'type' => 'num', - 'value' => 1, - 'wb_master' => {}, - '0' => { - 'name' => 'wbm' - } - } - }, - 'ip_name' => 'jtag_wb', - 'parameters' => { - 'DW' => { - 'default' => '32', - 'info' => 'Parameter', - 'content' => '4,1024,8', - 'redefine_param' => 1, - 'global_param' => 'Localparam', - 'type' => 'Spin-button' - }, - 'VJTAG_INDEX' => { - 'global_param' => 'Localparam', - 'redefine_param' => 1, - 'type' => 'Entry', - 'default' => 'CORE_ID', - 'content' => '', - '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.' - }, - 'S_Aw' => { - 'global_param' => 'Localparam', - 'redefine_param' => 1, - 'type' => 'Fixed', - 'default' => ' 7', - 'content' => '', - 'info' => 'Parameter' - }, - 'SELw' => { - 'content' => '', - 'info' => 'Parameter', - 'default' => ' 4', - 'type' => 'Fixed', - 'global_param' => 'Localparam', - 'redefine_param' => 1 - }, - 'TAGw' => { - 'default' => ' 3', - 'content' => '', - 'info' => 'Parameter', - 'redefine_param' => 1, - 'global_param' => 'Localparam', - 'type' => 'Fixed' - }, - 'AW' => { - 'type' => 'Fixed', - 'global_param' => 'Localparam', - 'redefine_param' => 1, - 'content' => '', - 'info' => 'Parameter', - 'default' => '32' - }, - 'M_Aw' => { - 'type' => 'Fixed', - 'global_param' => 'Localparam', - 'redefine_param' => 1, - 'info' => 'Parameter', - 'content' => '', - 'default' => ' 32' - } - }, - 'description' => 'A jtag to wishbone bus interface.', - 'ports' => { - 'm_stb_o' => { - 'intfc_port' => 'stb_o', - 'range' => '', - 'type' => 'output', - 'intfc_name' => 'plug:wb_master[0]' - }, - 'm_cyc_o' => { - 'range' => '', - 'type' => 'output', - 'intfc_port' => 'cyc_o', - 'intfc_name' => 'plug:wb_master[0]' - }, - 'm_addr_o' => { - 'intfc_name' => 'plug:wb_master[0]', - 'type' => 'output', - 'range' => 'M_Aw-1 : 0', - 'intfc_port' => 'adr_o' - }, - 'm_dat_o' => { - 'type' => 'output', - 'range' => 'DW-1 : 0', - 'intfc_port' => 'dat_o', - 'intfc_name' => 'plug:wb_master[0]' - }, - 'status_i' => { - 'range' => '', - 'type' => 'input', - 'intfc_port' => 'NC', - 'intfc_name' => 'IO' - }, - 'clk' => { - 'intfc_port' => 'clk_i', - 'range' => '', - 'type' => 'input', - 'intfc_name' => 'plug:clk[0]' - }, - 'm_ack_i' => { - 'intfc_name' => 'plug:wb_master[0]', - 'type' => 'input', - 'range' => '', - 'intfc_port' => 'ack_i' - }, - 'm_dat_i' => { - 'type' => 'input', - 'range' => 'DW-1 : 0', - 'intfc_port' => 'dat_i', - 'intfc_name' => 'plug:wb_master[0]' - }, - 'm_sel_o' => { - 'intfc_name' => 'plug:wb_master[0]', - 'range' => 'SELw-1 : 0', - 'type' => 'output', - 'intfc_port' => 'sel_o' - }, - 'm_cti_o' => { - 'intfc_name' => 'plug:wb_master[0]', - 'range' => 'TAGw-1 : 0', - 'type' => 'output', - 'intfc_port' => 'cti_o' - }, - 'reset' => { - 'intfc_port' => 'reset_i', - 'type' => 'input', - 'range' => '', - 'intfc_name' => 'plug:reset[0]' - }, - 'm_we_o' => { - 'intfc_name' => 'plug:wb_master[0]', - 'type' => 'output', - 'range' => '', - 'intfc_port' => 'we_o' - } - }, - 'gui_status' => { - 'timeout' => 0, - 'status' => 'ideal' - } - }, 'ip_gen' );
jtag_wb.IP Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: Altera_jtag_uart.IP =================================================================== --- Altera_jtag_uart.IP (nonexistent) +++ Altera_jtag_uart.IP (revision 48) @@ -0,0 +1,313 @@ +####################################################################### +## File: altera_jtag_uart.IP +## +## Copyright (C) 2014-2019 Alireza Monemi +## +## This file is part of ProNoC 2.0.0 +## +## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT +## MAY CAUSE UNEXPECTED BEHAIVOR. +################################################################################ + +$ipgen = bless( { + 'parameters_order' => [ + 'SIM_BUFFER_SIZE', + 'SIM_WAIT_COUNT', + 'INCLUDE_SIM_PRINTF' + ], + 'ip_name' => 'altera_jtag_uart', + 'modules' => { + 'altera_jtag_uart' => {} + }, + 'system_h' => ' + +#define ${IP}_DATA_REG (*((volatile unsigned int *) ($BASE))) +#define ${IP}_CONTROL_REG (*((volatile unsigned int *) ($BASE+4))) +#define ${IP}_CONTROL_WSPACE_MSK 0xFFFF0000 +#define ${IP}_DATA_RVALID_MSK 0x00008000 +#define ${IP}_DATA_DATA_MSK 0x000000FF + +//////////////////////////////*basic function for jtag_uart*//////////////////////////////////////// +void jtag_putchar(char ch); +char jtag_getchar(void); +void outbyte(char c); //called in printf(); +char inbyte(void); +void jtag_putchar(char ch); +char jtag_getchar(void); +int jtag_scanstr(char* buf); +int jtag_scanint(int *num); +/////////////////////////////*END: basic function for jtag_uart*//////////////////////////////////// + +#define INCLUDE_${INCLUDE_SIM_PRINTF} + +#ifdef INCLUDE_SIMPLE_PRINTF + #include "simple-printf/printf.h" +#endif + +#ifdef INCLUDE_SIMPLE_PRINTF_LONG + #include "simple-printf/printf.h" +#endif', + 'file_name' => 'mpsoc/rtl/src_peripheral/jtag/jtag_uart/altera_jtag_uart.v', + 'module_name' => 'altera_jtag_uart', + 'ports' => { + 's_cyc_i' => { + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '', + 'type' => 'input', + 'intfc_port' => 'cyc_i' + }, + 's_cti_i' => { + 'range' => '2 : 0', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'cti_i', + 'type' => 'input' + }, + 's_dat_i' => { + 'intfc_port' => 'dat_i', + 'type' => 'input', + 'range' => '31 : 0', + 'intfc_name' => 'plug:wb_slave[0]' + }, + 'RxD_wr_sim' => { + 'intfc_port' => 'RxD_wr_sim', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'socket:RxD_sim[0]' + }, + 's_we_i' => { + 'intfc_port' => 'we_i', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]' + }, + 'RxD_din_sim' => { + 'intfc_port' => 'RxD_din_sim', + 'type' => 'input', + 'range' => '7:0 ', + 'intfc_name' => 'socket:RxD_sim[0]' + }, + 'clk' => { + 'intfc_port' => 'clk_i', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:clk[0]' + }, + 's_stb_i' => { + 'intfc_port' => 'stb_i', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]' + }, + 'reset' => { + 'intfc_port' => 'reset_i', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:reset[0]' + }, + 's_addr_i' => { + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'adr_i', + 'type' => 'input' + }, + 'irq' => { + 'range' => '', + 'intfc_name' => 'plug:interrupt_peripheral[0]', + 'intfc_port' => 'int_o', + 'type' => 'output' + }, + 's_dat_o' => { + 'range' => '31 : 0', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'dat_o', + 'type' => 'output' + }, + 'RxD_ready_sim' => { + 'type' => 'output', + 'intfc_port' => 'RxD_ready_sim', + 'intfc_name' => 'socket:RxD_sim[0]', + 'range' => '' + }, + 's_sel_i' => { + 'intfc_port' => 'sel_i', + 'type' => 'input', + 'range' => '3 : 0', + 'intfc_name' => 'plug:wb_slave[0]' + }, + 's_ack_o' => { + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'ack_o', + 'type' => 'output' + } + }, + 'sw_files' => [ + '/mpsoc/src_processor/src_lib/simple-printf' + ], + 'gui_status' => { + 'timeout' => 0, + 'status' => 'ideal' + }, + 'system_c' => ' + +void outbyte(char c){jtag_putchar(c);} //called in printf(); + +char inbyte(){return jtag_getchar();} + +void jtag_putchar(char ch){ //print one char from jtag_uart + while((${IP}_CONTROL_REG&${IP}_CONTROL_WSPACE_MSK)==0); + ${IP}_DATA_REG=ch; +} + +char jtag_getchar(void){ //get one char from jtag_uart + unsigned int data; + data=${IP}_DATA_REG; + while(!(data & ${IP}_DATA_RVALID_MSK)) //wait for terminal input + data=${IP}_DATA_REG; + return (data & ${IP}_DATA_DATA_MSK); +} + +int jtag_scanstr(char* buf){ //scan string until to buf, return str length + char ch; unsigned int i=0; + while(1){ + ch=jtag_getchar(); + if(ch==\'\\n\') { buf[i]=0; jtag_putchar(ch); i++; break; } //ENTER + else if(ch==127) { printf("\\b \\b"); if(i>0) i--; } //backspace + else { jtag_putchar(ch); buf[i]=ch; i++; } //valid + } + return i; +} + +int jtag_scanint(int *num){ //return the scanned integer + unsigned int curr_num,strlen,i=0; + char str[11]; + strlen=jtag_scanstr(str); //scan str + if(strlen>11) { printf("overflows 32-bit integer value\\n");return 1; } //check overflow + *num=0; + for(i=0;i9); //not integer: do nothing + else *num=*num*10+curr_num; //is integer + } + return 0; +} + +#ifdef INCLUDE_SIMPLE_PRINTF + #include "simple-printf/printf.c" +#endif + +#ifdef INCLUDE_SIMPLE_PRINTF_LONG + #include "simple-printf/prinf_long.c" +#endif + + +', + 'category' => 'Communication', + 'parameters' => { + 'SIM_WAIT_COUNT' => { + 'global_param' => 'Localparam', + 'info' => 'This parameter is valid only in simulation. +If internal buffer has a data, the internal timer incremented by one in each clock cycle. If the timer reaches the WAIT_COUNT value, it writes the buffer value on the simulator terminal.', + 'content' => '2,100000,1', + 'redefine_param' => 1, + 'default' => '1000', + 'type' => 'Spin-button' + }, + 'SIM_BUFFER_SIZE' => { + 'info' => 'Internal buffer size. +This parameter is valid only in simulation. +If internal buffer overflows, the buffer content are displayed on simulator terminal.', + 'content' => '10,10000,1', + 'global_param' => 'Localparam', + 'type' => 'Spin-button', + 'default' => '100', + 'redefine_param' => 1 + }, + 'INCLUDE_SIM_PRINTF' => { + 'info' => 'Select source code for printf command: + "NONE": Do not include simple_printf source code. Select "NONE" In case printf command is supported in , or it is not needed in the software code. + "SIMPLE_PRINTF" Include a source code of printf command which supports a subset of formatted data: %%d, %%i, %%u, %%x, %%c, and %%s. long and floating formats are not supported. + "SIMPLE_PRINTF_LONG" Include a source code of printf command which supports a subset of formatted data: %%d, %%i, %%u, %%x, %%c, %%l, and %%s. floating format is not supported. + ', + 'content' => 'NONE,SIMPLE_PRINTF,SIMPLE_PRINTF_LONG', + 'global_param' => 'Don\'t include', + 'redefine_param' => 0, + 'default' => 'SIMPLE_PRINTF', + 'type' => 'Combo-box' + }, + + }, + 'ports_order' => [ + 'reset', + 'clk', + 'irq', + 's_dat_i', + 's_sel_i', + 's_addr_i', + 's_cti_i', + 's_stb_i', + 's_cyc_i', + 's_we_i', + 's_dat_o', + 's_ack_o', + 'RxD_din_sim', + 'RxD_wr_sim', + 'RxD_ready_sim' + ], + 'description' => 'The Altera JTAG UART IP core (qsys_jtag_uart) with Wishbone bus interface.', + 'version' => 20, + 'unused' => { + 'plug:wb_slave[0]' => [ + 'tag_i', + 'bte_i', + 'rty_o', + 'err_o' + ] + }, + 'sockets' => { + 'RxD_sim' => { + 'connection_num' => 'single connection', + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'RxD_sim' + } + } + }, + 'plugs' => { + 'interrupt_peripheral' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'interrupt_peripheral' + } + }, + 'reset' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'reset' + } + }, + 'clk' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'clk' + } + }, + 'wb_slave' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'addr' => '0x9000_0000 0x90ff_ffff UART16550 Controller', + 'width' => 5, + 'name' => 'wb_slave' + } + } + }, + 'hdl_files' => [ + '/mpsoc/rtl/src_peripheral/jtag/jtag_uart/altera_jtag_uart.v', + '/mpsoc/rtl/src_peripheral/jtag/jtag_uart/altera_uart_simulator.v' + ] + }, 'ip_gen' ); Index: ProNoC_jtag_uart.IP =================================================================== --- ProNoC_jtag_uart.IP (nonexistent) +++ ProNoC_jtag_uart.IP (revision 48) @@ -0,0 +1,418 @@ +####################################################################### +## File: ProNoC_jtag_uart.IP +## +## Copyright (C) 2014-2019 Alireza Monemi +## +## This file is part of ProNoC 1.9.1 +## +## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT +## MAY CAUSE UNEXPECTED BEHAIVOR. +################################################################################ + +$ipgen = bless( { + 'system_h' => ' +#define ${IP}_DATA_REG (*((volatile unsigned int *) ($BASE))) +#define ${IP}_CONTROL_REG (*((volatile unsigned int *) ($BASE+4))) +#define ${IP}_CONTROL_WSPACE_MSK 0xFFFF0000 +#define ${IP}_DATA_RVALID_MSK 0x00008000 +#define ${IP}_DATA_DATA_MSK 0x000000FF + +//////////////////////////////*basic function for jtag_uart*//////////////////////////////////////// +void jtag_putchar(char ch); +char jtag_getchar(void); +void outbyte(char c); //called in printf(); +char inbyte(void); +void jtag_putchar(char ch); +char jtag_getchar(void); +int jtag_scanstr(char* buf); +int jtag_scanint(int *num); +/////////////////////////////*END: basic function for jtag_uart*//////////////////////////////////// + +#define INCLUDE_${INCLUDE_SIM_PRINTF} + +#ifdef INCLUDE_SIMPLE_PRINTF + #include "simple-printf/printf.h" +#endif + +#ifdef INCLUDE_SIMPLE_PRINTF_LONG + #include "simple-printf/printf.h" +#endif', + 'ports' => { + 'wb_adr_i' => { + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '', + 'type' => 'input', + 'intfc_port' => 'adr_i' + }, + 'wb_stb_i' => { + 'type' => 'input', + 'intfc_port' => 'stb_i', + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '' + }, + 'clk' => { + 'intfc_name' => 'plug:clk[0]', + 'range' => '', + 'intfc_port' => 'clk_i', + 'type' => 'input' + }, + 'wb_we_i' => { + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'we_i', + 'type' => 'input' + }, + 'wb_dat_o' => { + 'intfc_port' => 'dat_o', + 'type' => 'output', + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => 'Dw-1: 0' + }, + 'wb_to_jtag' => { + 'range' => 'WB2Jw-1 : 0', + 'intfc_name' => 'socket:jtag_to_wb[0]', + 'intfc_port' => 'jwb_o', + 'type' => 'output' + }, + 'reset' => { + 'range' => '', + 'intfc_name' => 'plug:reset[0]', + 'intfc_port' => 'reset_i', + 'type' => 'input' + }, + 'wb_ack_o' => { + 'intfc_port' => 'ack_o', + 'type' => 'output', + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '' + }, + 'wb_cyc_i' => { + 'intfc_port' => 'cyc_i', + 'type' => 'input', + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '' + }, + 'jtag_to_wb' => { + 'range' => 'J2WBw-1 : 0', + 'intfc_name' => 'socket:jtag_to_wb[0]', + 'intfc_port' => 'jwb_i', + 'type' => 'input' + }, +'RxD_wr_sim' => { + 'intfc_port' => 'RxD_wr_sim', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'socket:RxD_sim[0]' + }, + 'RxD_din_sim' => { + 'intfc_port' => 'RxD_din_sim', + 'type' => 'input', + 'range' => '7:0 ', + 'intfc_name' => 'socket:RxD_sim[0]' + }, + 'RxD_ready_sim' => { + 'type' => 'output', + 'intfc_port' => 'RxD_ready_sim', + 'intfc_name' => 'socket:RxD_sim[0]', + 'range' => '' + }, + 'wb_dat_i' => { + 'intfc_port' => 'dat_i', + 'type' => 'input', + 'range' => 'Dw-1: 0', + 'intfc_name' => 'plug:wb_slave[0]' + } + }, + 'unused' => { + 'plug:wb_slave[0]' => [ + 'tag_i', + 'err_o', + 'cti_i', + 'bte_i', + 'rty_o', + 'sel_i' + ] + }, + + 'category' => 'Communication', + 'plugs' => { + 'wb_slave' => { + 'type' => 'num', + '0' => { + 'addr' => '0x9000_0000 0x90ff_ffff UART16550 Controller', + 'width' => 4, + 'name' => 'wb_slave' + }, + 'value' => 1 + }, + 'clk' => { + 'type' => 'num', + '0' => { + 'name' => 'clk' + }, + 'value' => 1 + }, + 'reset' => { + '0' => { + 'name' => 'reset' + }, + 'type' => 'num', + 'value' => 1 + } + }, + 'file_name' => 'mpsoc/rtl/src_peripheral/jtag/jtag_uart/pronoc_jtag_uart.v', + 'parameters' => { + 'JDw' => { + 'type' => 'Fixed', + 'global_param' => 'Parameter', + 'default' => '32', + 'info' => 'Parameter', + 'redefine_param' => 1, + 'content' => '' + }, + 'JINDEXw' => { + 'info' => 'Parameter', + 'default' => '8', + 'content' => '', + 'redefine_param' => 1, + 'global_param' => 'Parameter', + 'type' => 'Fixed' + }, + 'J2WBw' => { + 'type' => 'Fixed', + 'global_param' => 'Parameter', + 'redefine_param' => 1, + 'content' => '', + 'default' => '(JTAG_CONNECT== "XILINX_JTAG_WB") ? 1+1+JDw+JAw : 1', + 'info' => undef + }, + 'Dw' => { + 'default' => '32', + 'info' => 'Parameter', + 'redefine_param' => 1, + 'content' => '', + 'type' => 'Fixed', + 'global_param' => 'Localparam' + }, + 'JAw' => { + 'global_param' => 'Parameter', + 'type' => 'Fixed', + 'info' => 'Parameter', + 'default' => '32', + 'content' => '', + 'redefine_param' => 1 + }, + 'JSTATUSw' => { + 'global_param' => 'Parameter', + 'type' => 'Fixed', + 'content' => '', + 'redefine_param' => 1, + 'info' => 'Parameter', + 'default' => '8' + }, + 'INCLUDE_SIM_PRINTF' => { + 'redefine_param' => 0, + 'content' => 'NONE,SIMPLE_PRINTF,SIMPLE_PRINTF_LONG', + 'default' => 'SIMPLE_PRINTF', + 'info' => 'Select source code for printf command: + "NONE": Do not include simple_printf source code. Select "NONE" In case printf command is supported in , or it is not needed in the software code. + "SIMPLE_PRINTF" Include a source code of printf command which supports a subset of formatted data: %%d, %%i, %%u, %%x, %%c, and %%s. long and floating formats are not supported. + "SIMPLE_PRINTF_LONG" Include a source code of printf command which supports a subset of formatted data: %%d, %%i, %%u, %%x, %%c, %%l, and %%s. floating format is not supported.', + 'type' => 'Combo-box', + 'global_param' => 'Don\'t include' + }, + 'Aw' => { + 'type' => 'Fixed', + 'global_param' => 'Localparam', + 'redefine_param' => 1, + 'content' => '', + 'default' => '1', + 'info' => 'Parameter' + }, + 'JTAG_CONNECT' => { + 'content' => '"XILINX_JTAG_WB","ALTERA_JTAG_WB"', + 'redefine_param' => 1, + 'info' => 'For Altera FPGAs define it as "ALTERA_JTAG_WB". In this case, the UART uses Virtual JTAG tap IP core from Altera lib to communicate with the Host PC. + +For XILINX FPGAs define it as "XILINX_JTAG_WB". In this case, the UART uses BSCANE2 JTAG tap IP core from XILINX lib to communicate with the Host PC.', + 'default' => '"XILINX_JTAG_WB"', + 'global_param' => 'Parameter', + 'type' => 'Combo-box' + }, + 'JTAG_INDEX' => { + 'content' => '', + 'redefine_param' => 1, + 'info' => 'The index number id used for communicating with this IP. all modules connected to the same jtag tab should have a unique JTAG index number. The default value is 126-CORE_ID. The core ID is the tile number in MPSoC. So if each tile has a UART, then each UART index would be different.', + 'default' => '126-CORE_ID', + 'global_param' => 'Parameter', + 'type' => 'Entry' + }, + 'BUFF_Aw' => { + 'global_param' => 'Localparam', + 'type' => 'Spin-button', + 'content' => '2,16,1', + 'redefine_param' => 1, + 'info' => 'UART internal fifo buffer address width shared equally for send and recive FIFOs. Each of send and recive fifo buffers have 2^(BUFF_Aw-1) entry.', + 'default' => '6' + }, + 'SELw' => { + 'global_param' => 'Localparam', + 'type' => 'Fixed', + 'info' => 'Parameter', + 'default' => '4', + 'content' => '', + 'redefine_param' => 1 + }, + 'JTAG_CHAIN' => { + 'global_param' => 'Parameter', + 'type' => 'Combo-box', + 'info' => 'Only used for Virtex 4/5 devices. May be 1, 2, 3, or 4. It is the BSCANE2 JTAG tap number. The default Jtag tap numbers are: + 4: JTAG runtime memory programmers. + 3: UART + 1,2: reserved', + 'default' => '3', + 'content' => '1,2,3,4', + 'redefine_param' => 0 + }, + 'WB2Jw' => { + 'content' => '', + 'redefine_param' => 1, + 'info' => '', + 'default' => '(JTAG_CONNECT== "XILINX_JTAG_WB") ? 1+JSTATUSw+JINDEXw+1+JDw : 1', + 'global_param' => 'Parameter', + 'type' => 'Fixed' + }, + 'TAGw' => { + 'type' => 'Fixed', + 'global_param' => 'Localparam', + 'default' => '3', + 'info' => 'Parameter', + 'redefine_param' => 1, + 'content' => '' + } + }, + 'gui_status' => { + 'status' => 'ideal', + 'timeout' => 0 + }, + 'ip_name' => 'ProNoC_jtag_uart', + 'ports_order' => [ + 'clk', + 'reset', + 'wb_dat_o', + 'wb_ack_o', + 'wb_adr_i', + 'wb_stb_i', + 'wb_cyc_i', + 'wb_we_i', + 'wb_dat_i', + 'wb_to_jtag', + 'jtag_to_wb', + 'RxD_din_sim', + 'RxD_wr_sim', + 'RxD_ready_sim' + ], + 'version' => 11, + 'description' => 'A jtag uart module. Controled using Altera Vjtag or Xilinx BSCANE2.', + 'parameters_order' => [ + 'Aw', + 'SELw', + 'TAGw', + 'Dw', + 'BUFF_Aw', + 'JTAG_INDEX', + 'JDw', + 'JAw', + 'JINDEXw', + 'JSTATUSw', + 'JTAG_CHAIN', + 'JTAG_CONNECT', + 'J2WBw', + 'WB2Jw', + 'INCLUDE_SIM_PRINTF' + ], + 'hdl_files' => [ + '/mpsoc/rtl/src_peripheral/jtag/jtag_uart/pronoc_jtag_uart.v', + '/mpsoc/rtl/src_peripheral/jtag/jtag_uart/altera_uart_simulator.v' + ], + 'sw_files' => [ + '/mpsoc/src_processor/src_lib/simple-printf' + ], + 'sockets' => { + 'RxD_sim' => { + 'connection_num' => 'single connection', + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'RxD_sim' + } + }, + +'jtag_to_wb' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'jtag_to_wb' + }, + 'connection_num' => 'single connection' + } + }, + 'modules' => { + 'uart_dual_port_ram' => {}, + 'pronoc_jtag_uart' => {} + }, + 'system_c' => ' +void outbyte(char c){jtag_putchar(c);} //called in printf(); + +char inbyte(){return jtag_getchar();} + +void jtag_putchar(char ch){ //print one char from jtag_uart + while((${IP}_CONTROL_REG&${IP}_CONTROL_WSPACE_MSK)==0); + ${IP}_DATA_REG=ch; +} + +char jtag_getchar(void){ //get one char from jtag_uart + unsigned int data; + data=${IP}_DATA_REG; + while(!(data & ${IP}_DATA_RVALID_MSK)) //wait for terminal input + data=${IP}_DATA_REG; + return (data & ${IP}_DATA_DATA_MSK); +} + +int jtag_scanstr(char* buf){ //scan string until to buf, return str length + char ch; unsigned int i=0; + while(1){ + ch=jtag_getchar(); + if(ch==\'\\n\') { buf[i]=0; jtag_putchar(ch); i++; break; } //ENTER + else if(ch==127) { printf("\\b \\b"); if(i>0) i--; } //backspace + else { jtag_putchar(ch); buf[i]=ch; i++; } //valid + } + return i; +} + +int jtag_scanint(int *num){ //return the scanned integer + unsigned int curr_num,strlen,i=0; + char str[11]; + strlen=jtag_scanstr(str); //scan str + if(strlen>11) { printf("overflows 32-bit integer value\\n");return 1; } //check overflow + *num=0; + for(i=0;i9); //not integer: do nothing + else *num=*num*10+curr_num; //is integer + } + return 0; +} + +#ifdef INCLUDE_SIMPLE_PRINTF + #include "simple-printf/printf.c" +#endif + +#ifdef INCLUDE_SIMPLE_PRINTF_LONG + #include "simple-printf/prinf_long.c" +#endif + + +', + 'module_name' => 'pronoc_jtag_uart' + }, 'ip_gen' ); Index: ProNoC_jtag_wb.IP =================================================================== --- ProNoC_jtag_wb.IP (nonexistent) +++ ProNoC_jtag_wb.IP (revision 48) @@ -0,0 +1,296 @@ +####################################################################### +## File: ProNoC_jtag_wb.IP +## +## Copyright (C) 2014-2019 Alireza Monemi +## +## This file is part of ProNoC 1.9.1 +## +## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT +## MAY CAUSE UNEXPECTED BEHAIVOR. +################################################################################ + +$ipgen = bless( { + 'modules' => { + 'pronoc_jtag_wb' => {} + }, + 'category' => 'Communication', + 'ports_order' => [ + 'clk', + 'reset', + 'status_i', + 'm_sel_o', + 'm_dat_o', + 'm_addr_o', + 'm_cti_o', + 'm_stb_o', + 'm_cyc_o', + 'm_we_o', + 'm_dat_i', + 'm_ack_i', + 'jtag_to_wb', + 'wb_to_jtag' + ], + 'parameters' => { + 'WB2Jw' => { + 'content' => '', + 'type' => 'Fixed', + 'info' => 'Parameter', + 'redefine_param' => 1, + 'global_param' => 'Parameter', + 'default' => '(JTAG_CONNECT== "XILINX_JTAG_WB") ? 1+JSTATUSw+JINDEXw+1+JDw : 1' + }, + 'Dw' => { + 'type' => 'Fixed', + 'info' => 'Parameter', + 'content' => '', + 'default' => '32', + 'global_param' => 'Localparam', + 'redefine_param' => 1 + }, + 'J2WBw' => { + 'global_param' => 'Parameter', + 'redefine_param' => 1, + 'default' => '(JTAG_CONNECT== "XILINX_JTAG_WB") ? 1+1+JDw+JAw : 1', + 'content' => '', + 'type' => 'Fixed', + 'info' => 'Parameter' + }, + 'JTAG_INDEX' => { + 'redefine_param' => 1, + 'global_param' => 'Parameter', + 'default' => 'CORE_ID', + 'content' => '', + 'info' => 'The index number id used for communicating with this IP. All modules connected to the same jtag tab should have a unique JTAG index number. The default value is CORE_ID. The core ID is the tile number in MPSoC. So if each tile has one JTAG_TO_WB module, its index would be different. In case there are multiple number of JTAG_TO_WB modules in one tile or the CORE_ID index number has been taken by another module such as RAM you need to manualy set a new value for this parameter.', + 'type' => 'Entry' + }, + 'JTAG_CONNECT' => { + 'content' => '"ALTERA_JTAG_WB","XILINX_JTAG_WB"', + 'type' => 'Combo-box', + 'info' => 'For Altera FPGAs define it as "ALTERA_JTAG_WB". In this case, the Virtual JTAG tap IP core from Altera lib is used to communicate with the Host PC. + +For XILINX FPGAs define it as "XILINX_JTAG_WB". In this case, the BSCANE2 JTAG tap IP core from XILINX lib is used to communicate with the Host PC.', + 'redefine_param' => 1, + 'global_param' => 'Parameter', + 'default' => '"XILINX_JTAG_WB"' + }, + 'JDw' => { + 'content' => '', + 'info' => 'Parameter', + 'type' => 'Fixed', + 'global_param' => 'Parameter', + 'redefine_param' => 1, + 'default' => '32' + }, + 'JINDEXw' => { + 'content' => '', + 'type' => 'Fixed', + 'info' => 'Parameter', + 'global_param' => 'Parameter', + 'redefine_param' => 1, + 'default' => '8' + }, + 'JTAG_CHAIN' => { + 'content' => '1,2,3,4', + 'info' => 'Only used for Virtex 4/5 devices. May be 1, 2, 3, or 4. It is the BSCANE2 JTAG tap number. The default Jtag tap numbers are: + 4: JTAG runtime memory programmers. + 3: UART + 1,2: reserved', + 'type' => 'Combo-box', + 'redefine_param' => 0, + 'global_param' => 'Parameter', + 'default' => '4' + }, + 'JSTATUSw' => { + 'info' => 'Parameter', + 'type' => 'Fixed', + 'content' => '', + 'default' => '8', + 'redefine_param' => 1, + 'global_param' => 'Parameter' + }, + 'JAw' => { + 'content' => '', + 'type' => 'Fixed', + 'info' => 'Parameter', + 'redefine_param' => 1, + 'global_param' => 'Parameter', + 'default' => '32' + }, + 'SELw' => { + 'type' => 'Fixed', + 'info' => 'Parameter', + 'content' => '', + 'default' => '4', + 'redefine_param' => 1, + 'global_param' => 'Localparam' + }, + 'Aw' => { + 'content' => '', + 'type' => 'Fixed', + 'info' => 'Parameter', + 'redefine_param' => 1, + 'global_param' => 'Localparam', + 'default' => '32' + }, + 'TAGw' => { + 'redefine_param' => 1, + 'global_param' => 'Localparam', + 'default' => '3', + 'content' => '', + 'info' => 'Parameter', + 'type' => 'Fixed' + } + }, + 'module_name' => 'pronoc_jtag_wb', + 'ports' => { + 'status_i' => { + 'type' => 'input', + 'range' => 'JSTATUSw-1 : 0', + 'intfc_name' => 'IO', + 'intfc_port' => 'NC' + }, + 'm_cyc_o' => { + 'type' => 'output', + 'range' => '', + 'intfc_name' => 'plug:wb_master[0]', + 'intfc_port' => 'cyc_o' + }, + 'clk' => { + 'intfc_port' => 'clk_i', + 'intfc_name' => 'plug:clk[0]', + 'range' => '', + 'type' => 'input' + }, + 'm_sel_o' => { + 'intfc_port' => 'sel_o', + 'intfc_name' => 'plug:wb_master[0]', + 'range' => 'SELw-1 : 0', + 'type' => 'output' + }, + 'm_cti_o' => { + 'intfc_port' => 'cti_o', + 'intfc_name' => 'plug:wb_master[0]', + 'range' => 'TAGw-1 : 0', + 'type' => 'output' + }, + 'wb_to_jtag' => { + 'range' => 'WB2Jw-1: 0', + 'type' => 'output', + 'intfc_port' => 'jwb_o', + 'intfc_name' => 'socket:jtag_to_wb[0]' + }, + 'm_we_o' => { + 'type' => 'output', + 'range' => '', + 'intfc_port' => 'we_o', + 'intfc_name' => 'plug:wb_master[0]' + }, + 'jtag_to_wb' => { + 'range' => 'J2WBw-1 : 0', + 'type' => 'input', + 'intfc_name' => 'socket:jtag_to_wb[0]', + 'intfc_port' => 'jwb_i' + }, + 'm_dat_i' => { + 'intfc_port' => 'dat_i', + 'intfc_name' => 'plug:wb_master[0]', + 'range' => 'Dw-1 : 0', + 'type' => 'input' + }, + 'm_stb_o' => { + 'type' => 'output', + 'range' => '', + 'intfc_port' => 'stb_o', + 'intfc_name' => 'plug:wb_master[0]' + }, + 'm_ack_i' => { + 'type' => 'input', + 'range' => '', + 'intfc_port' => 'ack_i', + 'intfc_name' => 'plug:wb_master[0]' + }, + 'reset' => { + 'intfc_name' => 'plug:reset[0]', + 'intfc_port' => 'reset_i', + 'type' => 'input', + 'range' => '' + }, + 'm_addr_o' => { + 'intfc_port' => 'adr_o', + 'intfc_name' => 'plug:wb_master[0]', + 'range' => 'Aw-1 : 0', + 'type' => 'output' + }, + 'm_dat_o' => { + 'range' => 'Dw-1 : 0', + 'type' => 'output', + 'intfc_port' => 'dat_o', + 'intfc_name' => 'plug:wb_master[0]' + } + }, + 'parameters_order' => [ + 'JTAG_CONNECT', + 'JTAG_INDEX', + 'JDw', + 'JAw', + 'JINDEXw', + 'JSTATUSw', + 'J2WBw', + 'WB2Jw', + 'Dw', + 'Aw', + 'TAGw', + 'SELw', + 'JTAG_CHAIN' + ], + 'sockets' => { + 'jtag_to_wb' => { + 'connection_num' => 'single connection', + 'value' => 1, + '0' => { + 'name' => 'jtag_to_wb' + }, + 'type' => 'num' + } + }, + 'plugs' => { + 'reset' => { + 'type' => 'num', + '0' => { + 'name' => 'reset' + }, + 'value' => 1 + }, + 'wb_master' => { + 'value' => 1, + '0' => { + 'name' => 'wb_master' + }, + 'type' => 'num' + }, + 'clk' => { + '0' => { + 'name' => 'clk' + }, + 'value' => 1, + 'type' => 'num' + } + }, + 'hdl_files' => [], + 'version' => 8, + 'file_name' => 'mpsoc/rtl/src_peripheral/jtag/jtag_wb/pronoc_jtag_wb.v', + 'gui_status' => { + 'timeout' => 0, + 'status' => 'ideal' + }, + 'description' => 'JTAG to Wishbone bus interface. This module allows reading/writing data to the IP cores connected to the wishbone bus (e.g. memory cores). ', + 'ip_name' => 'ProNoC_jtag_wb', + 'unused' => { + 'plug:wb_master[0]' => [ + 'tag_o', + 'bte_o', + 'err_i', + 'rty_i' + ] + } + }, 'ip_gen' ); Index: altera_jtag_uart.IP =================================================================== --- altera_jtag_uart.IP (nonexistent) +++ altera_jtag_uart.IP (revision 48) @@ -0,0 +1,313 @@ +####################################################################### +## File: altera_jtag_uart.IP +## +## Copyright (C) 2014-2019 Alireza Monemi +## +## This file is part of ProNoC 2.0.0 +## +## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT +## MAY CAUSE UNEXPECTED BEHAIVOR. +################################################################################ + +$ipgen = bless( { + 'parameters_order' => [ + 'SIM_BUFFER_SIZE', + 'SIM_WAIT_COUNT', + 'INCLUDE_SIM_PRINTF' + ], + 'ip_name' => 'altera_jtag_uart', + 'modules' => { + 'altera_jtag_uart' => {} + }, + 'system_h' => ' + +#define ${IP}_DATA_REG (*((volatile unsigned int *) ($BASE))) +#define ${IP}_CONTROL_REG (*((volatile unsigned int *) ($BASE+4))) +#define ${IP}_CONTROL_WSPACE_MSK 0xFFFF0000 +#define ${IP}_DATA_RVALID_MSK 0x00008000 +#define ${IP}_DATA_DATA_MSK 0x000000FF + +//////////////////////////////*basic function for jtag_uart*//////////////////////////////////////// +void jtag_putchar(char ch); +char jtag_getchar(void); +void outbyte(char c); //called in printf(); +char inbyte(void); +void jtag_putchar(char ch); +char jtag_getchar(void); +int jtag_scanstr(char* buf); +int jtag_scanint(int *num); +/////////////////////////////*END: basic function for jtag_uart*//////////////////////////////////// + +#define INCLUDE_${INCLUDE_SIM_PRINTF} + +#ifdef INCLUDE_SIMPLE_PRINTF + #include "simple-printf/printf.h" +#endif + +#ifdef INCLUDE_SIMPLE_PRINTF_LONG + #include "simple-printf/printf.h" +#endif', + 'file_name' => 'mpsoc/rtl/src_peripheral/jtag/jtag_uart/altera_jtag_uart.v', + 'module_name' => 'altera_jtag_uart', + 'ports' => { + 's_cyc_i' => { + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '', + 'type' => 'input', + 'intfc_port' => 'cyc_i' + }, + 's_cti_i' => { + 'range' => '2 : 0', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'cti_i', + 'type' => 'input' + }, + 's_dat_i' => { + 'intfc_port' => 'dat_i', + 'type' => 'input', + 'range' => '31 : 0', + 'intfc_name' => 'plug:wb_slave[0]' + }, + 'RxD_wr_sim' => { + 'intfc_port' => 'RxD_wr_sim', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'socket:RxD_sim[0]' + }, + 's_we_i' => { + 'intfc_port' => 'we_i', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]' + }, + 'RxD_din_sim' => { + 'intfc_port' => 'RxD_din_sim', + 'type' => 'input', + 'range' => '7:0 ', + 'intfc_name' => 'socket:RxD_sim[0]' + }, + 'clk' => { + 'intfc_port' => 'clk_i', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:clk[0]' + }, + 's_stb_i' => { + 'intfc_port' => 'stb_i', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]' + }, + 'reset' => { + 'intfc_port' => 'reset_i', + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:reset[0]' + }, + 's_addr_i' => { + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'adr_i', + 'type' => 'input' + }, + 'irq' => { + 'range' => '', + 'intfc_name' => 'plug:interrupt_peripheral[0]', + 'intfc_port' => 'int_o', + 'type' => 'output' + }, + 's_dat_o' => { + 'range' => '31 : 0', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'dat_o', + 'type' => 'output' + }, + 'RxD_ready_sim' => { + 'type' => 'output', + 'intfc_port' => 'RxD_ready_sim', + 'intfc_name' => 'socket:RxD_sim[0]', + 'range' => '' + }, + 's_sel_i' => { + 'intfc_port' => 'sel_i', + 'type' => 'input', + 'range' => '3 : 0', + 'intfc_name' => 'plug:wb_slave[0]' + }, + 's_ack_o' => { + 'range' => '', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'ack_o', + 'type' => 'output' + } + }, + 'sw_files' => [ + '/mpsoc/src_processor/src_lib/simple-printf' + ], + 'gui_status' => { + 'timeout' => 0, + 'status' => 'ideal' + }, + 'system_c' => ' + +void outbyte(char c){jtag_putchar(c);} //called in printf(); + +char inbyte(){return jtag_getchar();} + +void jtag_putchar(char ch){ //print one char from jtag_uart + while((${IP}_CONTROL_REG&${IP}_CONTROL_WSPACE_MSK)==0); + ${IP}_DATA_REG=ch; +} + +char jtag_getchar(void){ //get one char from jtag_uart + unsigned int data; + data=${IP}_DATA_REG; + while(!(data & ${IP}_DATA_RVALID_MSK)) //wait for terminal input + data=${IP}_DATA_REG; + return (data & ${IP}_DATA_DATA_MSK); +} + +int jtag_scanstr(char* buf){ //scan string until to buf, return str length + char ch; unsigned int i=0; + while(1){ + ch=jtag_getchar(); + if(ch==\'\\n\') { buf[i]=0; jtag_putchar(ch); i++; break; } //ENTER + else if(ch==127) { printf("\\b \\b"); if(i>0) i--; } //backspace + else { jtag_putchar(ch); buf[i]=ch; i++; } //valid + } + return i; +} + +int jtag_scanint(int *num){ //return the scanned integer + unsigned int curr_num,strlen,i=0; + char str[11]; + strlen=jtag_scanstr(str); //scan str + if(strlen>11) { printf("overflows 32-bit integer value\\n");return 1; } //check overflow + *num=0; + for(i=0;i9); //not integer: do nothing + else *num=*num*10+curr_num; //is integer + } + return 0; +} + +#ifdef INCLUDE_SIMPLE_PRINTF + #include "simple-printf/printf.c" +#endif + +#ifdef INCLUDE_SIMPLE_PRINTF_LONG + #include "simple-printf/prinf_long.c" +#endif + + +', + 'category' => 'Communication', + 'parameters' => { + 'SIM_WAIT_COUNT' => { + 'global_param' => 'Localparam', + 'info' => 'This parameter is valid only in simulation. +If internal buffer has a data, the internal timer incremented by one in each clock cycle. If the timer reaches the WAIT_COUNT value, it writes the buffer value on the simulator terminal.', + 'content' => '2,100000,1', + 'redefine_param' => 1, + 'default' => '1000', + 'type' => 'Spin-button' + }, + 'SIM_BUFFER_SIZE' => { + 'info' => 'Internal buffer size. +This parameter is valid only in simulation. +If internal buffer overflows, the buffer content are displayed on simulator terminal.', + 'content' => '10,10000,1', + 'global_param' => 'Localparam', + 'type' => 'Spin-button', + 'default' => '100', + 'redefine_param' => 1 + }, + 'INCLUDE_SIM_PRINTF' => { + 'info' => 'Select source code for printf command: + "NONE": Do not include simple_printf source code. Select "NONE" In case printf command is supported in , or it is not needed in the software code. + "SIMPLE_PRINTF" Include a source code of printf command which supports a subset of formatted data: %%d, %%i, %%u, %%x, %%c, and %%s. long and floating formats are not supported. + "SIMPLE_PRINTF_LONG" Include a source code of printf command which supports a subset of formatted data: %%d, %%i, %%u, %%x, %%c, %%l, and %%s. floating format is not supported. + ', + 'content' => 'NONE,SIMPLE_PRINTF,SIMPLE_PRINTF_LONG', + 'global_param' => 'Don\'t include', + 'redefine_param' => 0, + 'default' => 'NONE', + 'type' => 'Combo-box' + }, + + }, + 'ports_order' => [ + 'reset', + 'clk', + 'irq', + 's_dat_i', + 's_sel_i', + 's_addr_i', + 's_cti_i', + 's_stb_i', + 's_cyc_i', + 's_we_i', + 's_dat_o', + 's_ack_o', + 'RxD_din_sim', + 'RxD_wr_sim', + 'RxD_ready_sim' + ], + 'description' => 'The Altera JTAG UART IP core (qsys_jtag_uart) with Wishbone bus interface.', + 'version' => 20, + 'unused' => { + 'plug:wb_slave[0]' => [ + 'tag_i', + 'bte_i', + 'rty_o', + 'err_o' + ] + }, + 'sockets' => { + 'RxD_sim' => { + 'connection_num' => 'single connection', + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'RxD_sim' + } + } + }, + 'plugs' => { + 'interrupt_peripheral' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'interrupt_peripheral' + } + }, + 'reset' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'reset' + } + }, + 'clk' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'name' => 'clk' + } + }, + 'wb_slave' => { + 'value' => 1, + 'type' => 'num', + '0' => { + 'addr' => '0x9000_0000 0x90ff_ffff UART16550 Controller', + 'width' => 5, + 'name' => 'wb_slave' + } + } + }, + 'hdl_files' => [ + '/mpsoc/rtl/src_peripheral/jtag/jtag_uart/altera_jtag_uart.v', + '/mpsoc/rtl/src_peripheral/jtag/jtag_uart/altera_uart_simulator.v' + ] + }, 'ip_gen' ); Index: ethmac_100.IP =================================================================== --- ethmac_100.IP (revision 38) +++ ethmac_100.IP (revision 48) @@ -1,468 +1,527 @@ ####################################################################### ## File: ethmac_100.IP ## -## Copyright (C) 2014-2016 Alireza Monemi +## Copyright (C) 2014-2019 Alireza Monemi ## -## This file is part of ProNoC 1.7.0 +## This file is part of ProNoC 1.9.1 ## ## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ## MAY CAUSE UNEXPECTED BEHAIVOR. ################################################################################ -$ethtop = bless( { - 'version' => 1, - 'module_name' => 'ethtop', - 'unused' => { - 'plug:wb_master[0]' => [ - 'bte_o', - 'rty_i', - 'cti_o', - 'tag_o' - ], - 'plug:wb_slave[0]' => [ - 'cti_i', - 'bte_i', - 'tag_i', - 'rty_o' - ] - }, - 'plugs' => { - 'wb_master' => { - 'wb_master' => {}, - 'value' => 1, - 'type' => 'num', - '0' => { - 'name' => 'wb_master' - } - }, - 'wb_slave' => { +$ipgen = bless( { + 'version' => 2, + 'parameters' => { + 'TX_FIFO_DATA_WIDTH' => { + 'type' => 'Fixed', + 'global_param' => 0, + 'redefine_param' => 1, + 'default' => ' 32', + 'content' => '', + 'info' => undef + }, + 'TX_FIFO_DEPTH' => { + 'default' => ' 16', + 'content' => '', + 'info' => undef, + 'type' => 'Fixed', + 'redefine_param' => 1, + 'global_param' => 0 + }, + 'RX_FIFO_CNT_WIDTH' => { + 'info' => undef, + 'default' => ' 5', + 'content' => '', + 'global_param' => 0, + 'redefine_param' => 1, + 'type' => 'Fixed' + }, + 'RX_FIFO_DATA_WIDTH' => { + 'default' => ' 32', + 'content' => '', + 'info' => undef, + 'type' => 'Fixed', + 'global_param' => 0, + 'redefine_param' => 1 + }, + 'TX_FIFO_CNT_WIDTH' => { + 'content' => '', + 'default' => ' 5', + 'info' => undef, + 'type' => 'Fixed', + 'redefine_param' => 1, + 'global_param' => 0 + }, + 'RX_FIFO_DEPTH' => { + 'default' => ' 16', + 'content' => '', + 'info' => undef, + 'type' => 'Fixed', + 'global_param' => 0, + 'redefine_param' => 1 + } + }, + 'gen_sw_files' => [ + '/mpsoc/rtl/src_peripheral/ethmac/ethfrename_sep_t${IP}.h' + ], + 'system_h' => ' + +void ${IP}_init(); +void ${IP}_interrupt(); +void ${IP}_recv_ack(void); +int ${IP}_send(int length); //return (-1) or length (still processing previous) or asserted + +#define ${IP}_BASE_ADDR $BASE +#define ${IP}_MODER (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x00 ))) +#define ${IP}_INT_SOURCE (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x04 ))) +#define ${IP}_INT_MASK (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x08 ))) +#define ${IP}_IPGT (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x0C ))) +#define ${IP}_IPGR1 (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x10 ))) +#define ${IP}_IPGR2 (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x14 ))) +#define ${IP}_PACKETLEN (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x18 ))) +#define ${IP}_COLLCONF (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x1C ))) +#define ${IP}_TX_BD_NUM (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x20 ))) +#define ${IP}_CTRLMODER (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x24 ))) +#define ${IP}_MIIMODER (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x28 ))) +#define ${IP}_MIICOMMAND (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x2C ))) +#define ${IP}_MIIADDR (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x30 ))) +#define ${IP}_MIITX_DATA (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x34 ))) +#define ${IP}_MIIRX_DATA (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x38 ))) +#define ${IP}_MIISTATUS (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x3C ))) +#define ${IP}_MAC_ADDR0 (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x40 ))) +#define ${IP}_MAC_ADDR1 (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x44 ))) +#define ${IP}_HASH0_ADR (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x48 ))) +#define ${IP}_HASH1_ADR (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x4C ))) +#define ${IP}_TXCTRL (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x50 ))) +#define ${IP}_TXBD0H (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x404 ))) +#define ${IP}_TXBD0L (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x400 ))) +#define ${IP}_RXBD0H (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x604 ))) //this depends on TX_BD_NUM but this is the standard value +#define ${IP}_RXBD0L (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x600 ))) //this depends on TX_BD_NUM but this is the standard value + + +#include "${IP}.h"', + 'plugs' => { + 'reset' => { + 'reset' => {}, + 'type' => 'num', + 'value' => 1, + '0' => { + 'name' => 'reset' + } + }, + 'wb_slave' => { + 'value' => 1, + 'type' => 'num', + 'wb_slave' => {}, + '0' => { + 'width' => 11, + 'name' => 'wb_slave', + 'addr' => '0x9200_0000 0x92ff_ffff Ethernet Controller' + } + }, + 'interrupt_peripheral' => { + '0' => { + 'name' => 'interrupt_peripheral' + }, + 'interrupt_peripheral' => {}, + 'type' => 'num', + 'value' => 1 + }, + 'clk' => { + 'clk' => {}, + '0' => { + 'name' => 'clk' + }, + 'type' => 'num', + 'value' => 1 + }, + 'wb_master' => { 'value' => 1, - 'wb_slave' => {}, 'type' => 'num', + 'wb_master' => {}, '0' => { - 'addr' => '0x9200_0000 0x92ff_ffff Ethernet Controller', - 'width' => 11, - 'name' => 'wb_slave' + 'name' => 'wb_master' } - }, - 'clk' => { - 'value' => 1, - 'clk' => {}, - 'type' => 'num', - '0' => { - 'name' => 'clk' - } - }, - 'interrupt_peripheral' => { - 'value' => 1, - 'interrupt_peripheral' => {}, - '0' => { - 'name' => 'interrupt_peripheral' - }, - 'type' => 'num' - }, - 'reset' => { - 'value' => 1, - '0' => { - 'name' => 'reset' - }, - 'type' => 'num', - 'reset' => {} - } - }, - 'custom_file_num' => 1, - 'ports' => { - 'wb_clk_i' => { - 'range' => '', - 'intfc_name' => 'plug:clk[0]', - 'intfc_port' => 'clk_i', - 'type' => 'input' - }, - 'm_wb_adr_o' => { - 'intfc_port' => 'adr_o', - 'type' => 'output', - 'range' => '31:0', - 'intfc_name' => 'plug:wb_master[0]' + } + }, + 'sw_files' => [], + 'custom_file' => { + '0' => {} + }, + 'file_name' => 'mpsoc/rtl/src_peripheral/ethmac/ethtop.v', + 'custom_file_num' => 1, + 'parameters_order' => [ + 'TX_FIFO_DATA_WIDTH', + 'TX_FIFO_DEPTH', + 'TX_FIFO_CNT_WIDTH', + 'RX_FIFO_DATA_WIDTH', + 'RX_FIFO_DEPTH', + 'RX_FIFO_CNT_WIDTH' + ], + 'ip_name' => 'ethmac_100', + 'description' => 'The Ethernet MAC 10/100 Mbps. +For more information please check: https://opencores.org/project,ethmac', + 'ports' => { + 'm_wb_adr_o' => { + 'intfc_port' => 'adr_o', + 'range' => '31:0', + 'type' => 'output', + 'intfc_name' => 'plug:wb_master[0]' + }, + 'wb_err_o' => { + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '', + 'type' => 'output', + 'intfc_port' => 'err_o' + }, + 'wb_we_i' => { + 'range' => '', + 'type' => 'input', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'we_i' + }, + 'm_wb_sel_o' => { + 'intfc_name' => 'plug:wb_master[0]', + 'range' => '3:0', + 'type' => 'output', + 'intfc_port' => 'sel_o' + }, + 'mrxdv_pad_i' => { + 'range' => '', + 'type' => 'input', + 'intfc_name' => 'IO', + 'intfc_port' => 'IO' }, - 'mtxd_pad_o' => { - 'intfc_port' => 'IO', - 'type' => 'output', - 'range' => '3:0', - 'intfc_name' => 'IO' - }, - 'int_o' => { - 'intfc_port' => 'int_o', - 'type' => 'output', - 'range' => '', - 'intfc_name' => 'plug:interrupt_peripheral[0]' - }, - 'mdc_pad_o' => { + 'int_o' => { + 'intfc_port' => 'int_o', + 'type' => 'output', + 'range' => '', + 'intfc_name' => 'plug:interrupt_peripheral[0]' + }, + 'm_wb_dat_i' => { + 'intfc_port' => 'dat_i', + 'type' => 'input', + 'range' => '31:0', + 'intfc_name' => 'plug:wb_master[0]' + }, + 'wb_clk_i' => { + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:clk[0]', + 'intfc_port' => 'clk_i' + }, + 'm_wb_ack_i' => { + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'plug:wb_master[0]', + 'intfc_port' => 'ack_i' + }, + 'wb_rst_i' => { + 'intfc_port' => 'reset_i', + 'range' => '', + 'type' => 'input', + 'intfc_name' => 'plug:reset[0]' + }, + 'mrxd_pad_i' => { 'intfc_port' => 'IO', - 'type' => 'output', - 'range' => '', + 'range' => '3:0', + 'type' => 'input', 'intfc_name' => 'IO' }, - 'wb_ack_o' => { - 'intfc_port' => 'ack_o', - 'type' => 'output', - 'range' => '', - 'intfc_name' => 'plug:wb_slave[0]' - }, - 'mtxen_pad_o' => { + 'mtxerr_pad_o' => { 'intfc_port' => 'IO', + 'intfc_name' => 'IO', 'type' => 'output', - 'range' => '', - 'intfc_name' => 'IO' + 'range' => '' }, - 'wb_dat_i' => { - 'intfc_port' => 'dat_i', - 'type' => 'input', - 'range' => '31:0', - 'intfc_name' => 'plug:wb_slave[0]' - }, - 'wb_stb_i' => { - 'type' => 'input', - 'intfc_port' => 'stb_i', - 'intfc_name' => 'plug:wb_slave[0]', - 'range' => '' - }, - 'mcrs_pad_i' => { + 'md_pad_o' => { + 'intfc_port' => 'IO', + 'intfc_name' => 'IO', + 'type' => 'output', + 'range' => '' + }, + 'wb_adr_i' => { + 'intfc_port' => 'adr_i', + 'intfc_name' => 'plug:wb_slave[0]', + 'type' => 'input', + 'range' => '9:0' + }, + 'wb_dat_o' => { + 'intfc_port' => 'dat_o', + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '31:0', + 'type' => 'output' + }, + 'm_wb_err_i' => { + 'intfc_name' => 'plug:wb_master[0]', + 'type' => 'input', + 'range' => '', + 'intfc_port' => 'err_i' + }, + 'mtxen_pad_o' => { + 'intfc_port' => 'IO', 'intfc_name' => 'IO', 'range' => '', - 'type' => 'input', - 'intfc_port' => 'IO' + 'type' => 'output' }, - 'wb_rst_i' => { - 'type' => 'input', - 'intfc_port' => 'reset_i', - 'intfc_name' => 'plug:reset[0]', - 'range' => '' - }, - 'm_wb_dat_i' => { - 'range' => '31:0', - 'intfc_name' => 'plug:wb_master[0]', - 'intfc_port' => 'dat_i', - 'type' => 'input' - }, - 'md_pad_o' => { - 'range' => '', - 'intfc_name' => 'IO', - 'intfc_port' => 'IO', - 'type' => 'output' - }, - 'mcoll_pad_i' => { + 'mrxerr_pad_i' => { + 'type' => 'input', 'range' => '', 'intfc_name' => 'IO', - 'intfc_port' => 'IO', - 'type' => 'input' + 'intfc_port' => 'IO' }, - 'm_wb_stb_o' => { - 'range' => '', - 'intfc_name' => 'plug:wb_master[0]', - 'intfc_port' => 'stb_o', - 'type' => 'output' - }, - 'm_wb_err_i' => { - 'type' => 'input', - 'intfc_port' => 'err_i', - 'intfc_name' => 'plug:wb_master[0]', - 'range' => '' - }, - 'm_wb_cyc_o' => { - 'intfc_port' => 'cyc_o', - 'type' => 'output', - 'range' => '', - 'intfc_name' => 'plug:wb_master[0]' - }, - 'mtx_clk_pad_i' => { - 'intfc_port' => 'IO', - 'type' => 'input', - 'range' => '', - 'intfc_name' => 'IO' - }, - 'wb_err_o' => { - 'intfc_port' => 'err_o', + 'mtx_clk_pad_i' => { + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'IO', + 'intfc_port' => 'IO' + }, + 'm_wb_stb_o' => { + 'intfc_port' => 'stb_o', + 'intfc_name' => 'plug:wb_master[0]', + 'type' => 'output', + 'range' => '' + }, + 'mcrs_pad_i' => { + 'type' => 'input', + 'range' => '', + 'intfc_name' => 'IO', + 'intfc_port' => 'IO' + }, + 'm_wb_dat_o' => { + 'intfc_port' => 'dat_o', + 'intfc_name' => 'plug:wb_master[0]', + 'type' => 'output', + 'range' => '31:0' + }, + 'm_wb_we_o' => { + 'intfc_port' => 'we_o', + 'range' => '', 'type' => 'output', - 'range' => '', - 'intfc_name' => 'plug:wb_slave[0]' + 'intfc_name' => 'plug:wb_master[0]' }, - 'wb_cyc_i' => { - 'intfc_name' => 'plug:wb_slave[0]', + 'mdc_pad_o' => { 'range' => '', - 'type' => 'input', - 'intfc_port' => 'cyc_i' + 'type' => 'output', + 'intfc_name' => 'IO', + 'intfc_port' => 'IO' }, - 'm_wb_dat_o' => { - 'range' => '31:0', - 'intfc_name' => 'plug:wb_master[0]', - 'intfc_port' => 'dat_o', - 'type' => 'output' - }, - 'mrxdv_pad_i' => { - 'intfc_port' => 'IO', - 'type' => 'input', - 'range' => '', - 'intfc_name' => 'IO' - }, - 'md_padoe_o' => { + 'mtxd_pad_o' => { + 'type' => 'output', + 'range' => '3:0', + 'intfc_name' => 'IO', + 'intfc_port' => 'IO' + }, + 'wb_stb_i' => { + 'intfc_port' => 'stb_i', + 'intfc_name' => 'plug:wb_slave[0]', + 'type' => 'input', + 'range' => '' + }, + 'md_pad_i' => { + 'intfc_name' => 'IO', + 'range' => '', + 'type' => 'input', + 'intfc_port' => 'IO' + }, + 'wb_ack_o' => { + 'range' => '', + 'type' => 'output', + 'intfc_name' => 'plug:wb_slave[0]', + 'intfc_port' => 'ack_o' + }, + 'mcoll_pad_i' => { 'intfc_name' => 'IO', 'range' => '', - 'type' => 'output', + 'type' => 'input', 'intfc_port' => 'IO' }, - 'wb_dat_o' => { - 'range' => '31:0', - 'intfc_name' => 'plug:wb_slave[0]', - 'intfc_port' => 'dat_o', - 'type' => 'output' - }, - 'm_wb_ack_i' => { - 'range' => '', - 'intfc_name' => 'plug:wb_master[0]', - 'intfc_port' => 'ack_i', - 'type' => 'input' - }, - 'm_wb_we_o' => { - 'intfc_name' => 'plug:wb_master[0]', + 'm_wb_cyc_o' => { 'range' => '', 'type' => 'output', - 'intfc_port' => 'we_o' + 'intfc_name' => 'plug:wb_master[0]', + 'intfc_port' => 'cyc_o' }, - 'mrx_clk_pad_i' => { - 'intfc_port' => 'IO', - 'type' => 'input', - 'range' => '', - 'intfc_name' => 'IO' - }, - 'wb_sel_i' => { - 'intfc_name' => 'plug:wb_slave[0]', - 'range' => '3:0', - 'type' => 'input', - 'intfc_port' => 'sel_i' - }, - 'm_wb_sel_o' => { - 'type' => 'output', - 'intfc_port' => 'sel_o', - 'intfc_name' => 'plug:wb_master[0]', - 'range' => '3:0' - }, - 'mtxerr_pad_o' => { - 'range' => '', - 'intfc_name' => 'IO', - 'intfc_port' => 'IO', - 'type' => 'output' - }, - 'wb_we_i' => { + 'wb_cyc_i' => { 'intfc_name' => 'plug:wb_slave[0]', 'range' => '', 'type' => 'input', - 'intfc_port' => 'we_i' + 'intfc_port' => 'cyc_i' }, - 'mrxerr_pad_i' => { + 'wb_sel_i' => { + 'intfc_port' => 'sel_i', + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '3:0', + 'type' => 'input' + }, + 'wb_dat_i' => { + 'intfc_port' => 'dat_i', + 'intfc_name' => 'plug:wb_slave[0]', + 'range' => '31:0', + 'type' => 'input' + }, + 'md_padoe_o' => { + 'intfc_name' => 'IO', + 'type' => 'output', + 'range' => '', + 'intfc_port' => 'IO' + }, + 'mrx_clk_pad_i' => { + 'intfc_port' => 'IO', 'intfc_name' => 'IO', 'range' => '', - 'type' => 'input', - 'intfc_port' => 'IO' - }, - 'wb_adr_i' => { - 'type' => 'input', - 'intfc_port' => 'adr_i', - 'intfc_name' => 'plug:wb_slave[0]', - 'range' => '9:0' - }, - 'mrxd_pad_i' => { - 'type' => 'input', - 'intfc_port' => 'IO', - 'intfc_name' => 'IO', - 'range' => '3:0' - }, - 'md_pad_i' => { - 'intfc_name' => 'IO', - 'range' => '', - 'type' => 'input', - 'intfc_port' => 'IO' - } + 'type' => 'input' + } + }, + 'module_name' => 'ethtop', + 'unused' => { + 'plug:wb_master[0]' => [ + 'tag_o', + 'rty_i', + 'bte_o', + 'cti_o' + ], + 'plug:wb_slave[0]' => [ + 'cti_i', + 'bte_i', + 'rty_o', + 'tag_i' + ] }, - 'system_h' => ' + 'hdl_files' => [ + '/mpsoc/rtl/src_peripheral/ethmac' + ], + 'category' => 'Communication', + 'modules' => { + 'ethtop' => {} + }, + 'gui_status' => { + 'status' => 'ideal', + 'timeout' => 0 + }, + 'ports_order' => [ + 'wb_clk_i', + 'wb_rst_i', + 'wb_dat_i', + 'wb_dat_o', + 'wb_adr_i', + 'wb_sel_i', + 'wb_we_i', + 'wb_cyc_i', + 'wb_stb_i', + 'wb_ack_o', + 'wb_err_o', + 'm_wb_adr_o', + 'm_wb_sel_o', + 'm_wb_we_o', + 'm_wb_dat_o', + 'm_wb_dat_i', + 'm_wb_cyc_o', + 'm_wb_stb_o', + 'm_wb_ack_i', + 'm_wb_err_i', + 'mtx_clk_pad_i', + 'mtxd_pad_o', + 'mtxen_pad_o', + 'mtxerr_pad_o', + 'mrx_clk_pad_i', + 'mrxd_pad_i', + 'mrxdv_pad_i', + 'mrxerr_pad_i', + 'mcoll_pad_i', + 'mcrs_pad_i', + 'mdc_pad_o', + 'md_pad_i', + 'md_pad_o', + 'md_padoe_o', + 'int_o' + ], + 'system_c' => 'void ${IP}_recv_ack(void) +{ + ${IP}_rx_done = 0; + ${IP}_rx_len = 0; + //accept further data (reset RXBD to empty) + ${IP}_RXBD0L = RX_READY; //len = 0 | IRQ & WR = 1 | EMPTY = 1 +} -void ${IP}_init(); -void ${IP}_interrupt(); -void ${IP}_recv_ack(void); -int ${IP}_send(int length); //return (-1) or length (still processing previous) or asserted +void ${IP}_init() +{ + //TXEN & RXEN = 1; PAD & CRC = 1; FULLD = 1 + ${IP}_MODER = ETH_TXEN | ETH_RXEN | ETH_PAD | ETH_CRCEN | ETH_FULLD; + //PHY ADDR = 0x001 + ${IP}_MIIADDR = 0x00000001; -#define ${IP}_BASE_ADDR $BASE -#define ${IP}_MODER (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x00 ))) -#define ${IP}_INT_SOURCE (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x04 ))) -#define ${IP}_INT_MASK (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x08 ))) -#define ${IP}_IPGT (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x0C ))) -#define ${IP}_IPGR1 (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x10 ))) -#define ${IP}_IPGR2 (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x14 ))) -#define ${IP}_PACKETLEN (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x18 ))) -#define ${IP}_COLLCONF (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x1C ))) -#define ${IP}_TX_BD_NUM (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x20 ))) -#define ${IP}_CTRLMODER (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x24 ))) -#define ${IP}_MIIMODER (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x28 ))) -#define ${IP}_MIICOMMAND (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x2C ))) -#define ${IP}_MIIADDR (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x30 ))) -#define ${IP}_MIITX_DATA (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x34 ))) -#define ${IP}_MIIRX_DATA (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x38 ))) -#define ${IP}_MIISTATUS (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x3C ))) -#define ${IP}_MAC_ADDR0 (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x40 ))) -#define ${IP}_MAC_ADDR1 (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x44 ))) -#define ${IP}_HASH0_ADR (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x48 ))) -#define ${IP}_HASH1_ADR (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x4C ))) -#define ${IP}_TXCTRL (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x50 ))) -#define ${IP}_TXBD0H (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x404 ))) -#define ${IP}_TXBD0L (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x400 ))) -#define ${IP}_RXBD0H (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x604 ))) //this depends on TX_BD_NUM but this is the standard value -#define ${IP}_RXBD0L (*((volatile unsigned int *) (${IP}_BASE_ADDR+0x600 ))) //this depends on TX_BD_NUM but this is the standard value + //enable all interrupts + ${IP}_INT_MASK = ETH_RXB | ETH_TXB; + //set MAC ADDR + ${IP}_MAC_ADDR1 = (${IP}_MAC_ADDR_5 << 8) | ${IP}_MAC_ADDR_4; //low word = mac ADDR high word + ${IP}_MAC_ADDR0 = (${IP}_MAC_ADDR_3 << 24) | (${IP}_MAC_ADDR_2 << 16) + | (${IP}_MAC_ADDR_1 << 8) | ${IP}_MAC_ADDR_0; //mac ADDR rest -#include "${IP}.h"', - 'ip_name' => 'ethmac_100', - 'file_name' => '/home/alireza/Mywork/mpsoc/src_peripheral/ethmac/ethtop.v', - 'ports_order' => [ - 'wb_clk_i', - 'wb_rst_i', - 'wb_dat_i', - 'wb_dat_o', - 'wb_adr_i', - 'wb_sel_i', - 'wb_we_i', - 'wb_cyc_i', - 'wb_stb_i', - 'wb_ack_o', - 'wb_err_o', - 'm_wb_adr_o', - 'm_wb_sel_o', - 'm_wb_we_o', - 'm_wb_dat_o', - 'm_wb_dat_i', - 'm_wb_cyc_o', - 'm_wb_stb_o', - 'm_wb_ack_i', - 'm_wb_err_i', - 'mtx_clk_pad_i', - 'mtxd_pad_o', - 'mtxen_pad_o', - 'mtxerr_pad_o', - 'mrx_clk_pad_i', - 'mrxd_pad_i', - 'mrxdv_pad_i', - 'mrxerr_pad_i', - 'mcoll_pad_i', - 'mcrs_pad_i', - 'mdc_pad_o', - 'md_pad_i', - 'md_pad_o', - 'md_padoe_o', - 'int_o' - ], - 'hdl_files' => [ - '/mpsoc/src_peripheral/ethmac/rtl/eth_clockgen.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_cop.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_crc.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_fifo.v', - '/mpsoc/src_peripheral/ethmac/rtl/ethmac.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_maccontrol.v', - '/mpsoc/src_peripheral/ethmac/rtl/ethmac_defines.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_macstatus.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_miim.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_outputcontrol.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_random.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_receivecontrol.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_register.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_registers.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_rxaddrcheck.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_rxcounters.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_rxethmac.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_rxstatem.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_shiftreg.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_spram_256x32.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_top.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_transmitcontrol.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_txcounters.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_txethmac.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_txstatem.v', - '/mpsoc/src_peripheral/ethmac/rtl/eth_wishbone.v', - '/mpsoc/src_peripheral/ethmac/rtl/timescale.v', - '/mpsoc/src_peripheral/ethmac/rtl/xilinx_dist_ram_16x32.v', - '/mpsoc/src_peripheral/ethmac/ethtop.v', - '/mpsoc/src_peripheral/ethmac/eth_generic_ram.v' - ], - 'parameters_order' => [ - 'TX_FIFO_DATA_WIDTH', - 'TX_FIFO_DEPTH', - 'TX_FIFO_CNT_WIDTH', - 'RX_FIFO_DATA_WIDTH', - 'RX_FIFO_DEPTH', - 'RX_FIFO_CNT_WIDTH' - ], - 'description' => 'The Ethernet MAC 10/100 Mbps. -For more information please check: https://opencores.org/project,ethmac', - 'gen_sw_files' => [ - '/mpsoc/src_peripheral/ethmac/ethfrename_sep_t${IP}.h' - ], - 'parameters' => { - 'RX_FIFO_DEPTH' => { - 'content' => '', - 'redefine_param' => 1, - 'default' => ' 16', - 'info' => undef, - 'type' => 'Fixed', - 'global_param' => 0 - }, - 'TX_FIFO_DEPTH' => { - 'content' => '', - 'redefine_param' => 1, - 'default' => ' 16', - 'info' => undef, - 'global_param' => 0, - 'type' => 'Fixed' - }, - 'RX_FIFO_DATA_WIDTH' => { - 'type' => 'Fixed', - 'global_param' => 0, - 'content' => '', - 'redefine_param' => 1, - 'info' => undef, - 'default' => ' 32' - }, - 'TX_FIFO_DATA_WIDTH' => { - 'redefine_param' => 1, - 'content' => '', - 'default' => ' 32', - 'info' => undef, - 'type' => 'Fixed', - 'global_param' => 0 - }, - 'RX_FIFO_CNT_WIDTH' => { - 'default' => ' 5', - 'redefine_param' => 1, - 'content' => '', - 'info' => undef, - 'global_param' => 0, - 'type' => 'Fixed' - }, - 'TX_FIFO_CNT_WIDTH' => { - 'type' => 'Fixed', - 'global_param' => 0, - 'info' => undef, - 'redefine_param' => 1, - 'content' => '', - 'default' => ' 5' - } - }, - 'sw_files' => [], - 'gui_status' => { - 'status' => 'ideal', - 'timeout' => 0 - }, - 'custom_file' => { - '0' => {} - }, - 'category' => 'Communication', - 'modules' => { - 'ethtop' => {} - } - }, 'ip_gen' ); + //configure TXBD0 + ${IP}_TXBD0H = (unsigned long) ${IP}_tx_packet; //ADDR used for tx_data + ${IP}_TXBD0L = TX_READY; //length = 0 | PAD & CRC = 1 | IRQ & WR = 1 + + //configure RXBD0 + ${IP}_RXBD0H = (unsigned long)${IP}_rx_packet; //ADDR used for tx_data + ${IP}_RXBD0L = RX_READY; //len = 0 | IRQ & WR = 1 | EMPTY = 1 + + //set txdata + ${IP}_tx_packet[0] = ${IP}_BROADCAST_ADDR_5; + ${IP}_tx_packet[1] = ${IP}_BROADCAST_ADDR_4; + ${IP}_tx_packet[2] = ${IP}_BROADCAST_ADDR_3; + ${IP}_tx_packet[3] = ${IP}_BROADCAST_ADDR_2; + ${IP}_tx_packet[4] = ${IP}_BROADCAST_ADDR_1; + ${IP}_tx_packet[5] = ${IP}_BROADCAST_ADDR_0; + + ${IP}_tx_packet[6] = ${IP}_MAC_ADDR_5; + ${IP}_tx_packet[7] = ${IP}_MAC_ADDR_4; + ${IP}_tx_packet[8] = ${IP}_MAC_ADDR_3; + ${IP}_tx_packet[9] = ${IP}_MAC_ADDR_2; + ${IP}_tx_packet[10] = ${IP}_MAC_ADDR_1; + ${IP}_tx_packet[11] = ${IP}_MAC_ADDR_0; + + //erase interrupts + ${IP}_INT_SOURCE = ETH_RXC | ETH_TXC | ETH_BUSY | ETH_RXE | ETH_RXB | ETH_TXE | ETH_TXB; + + ${IP}_tx_done = 1; + ${IP}_rx_done = 0; + ${IP}_rx_len = 0; + ${IP}_tx_data = & ${IP}_tx_packet[HDR_LEN]; + ${IP}_rx_data = & ${IP}_rx_packet[HDR_LEN]; +} + + +int ${IP}_send(int length) +{ + if (!${IP}_tx_done) //if previous command not fully processed, bail out + return -1; + + ${IP}_tx_done = 0; + ${IP}_tx_packet[12] = length >> 8; + ${IP}_tx_packet[13] = length; + + ${IP}_TXBD0L = (( 0x0000FFFF & ( length + HDR_LEN ) ) << 16) | BD_SND; + + return length; +} + +void ${IP}_interrupt() +{ + unsigned long source = ${IP}_INT_SOURCE; + if ( source & ETH_TXB ) + { + ${IP}_tx_done = 1; + //erase interrupt + ${IP}_INT_SOURCE |= ETH_TXB; + } + if ( source & ETH_RXB ) + { + ${IP}_rx_done = 1; + ${IP}_rx_len = (${IP}_RXBD0L >> 16) - HDR_LEN - CRC_LEN; + //erase interrupt + ${IP}_INT_SOURCE |= ETH_RXB; + } +}' + }, 'ip_gen' );
/source_probe.IP
0,0 → 1,194
#######################################################################
## File: source_probe.IP
##
## Copyright (C) 2014-2019 Alireza Monemi
##
## This file is part of ProNoC 1.9.1
##
## WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT
## MAY CAUSE UNEXPECTED BEHAIVOR.
################################################################################
 
$ipgen = bless( {
'ports_order' => [
'reset',
'clk',
'source_o',
'probe_i',
'jtag_to_wb',
'wb_to_jtag'
],
'unused' => undef,
'gui_status' => {
'timeout' => 0,
'status' => 'ideal'
},
'ports' => {
'reset' => {
'intfc_port' => 'reset_i',
'intfc_name' => 'plug:reset[0]',
'type' => 'input',
'range' => ''
},
'jtag_to_wb' => {
'intfc_name' => 'socket:jtag_to_wb[0]',
'intfc_port' => 'jwb_i',
'type' => 'input',
'range' => 'J2WBw-1 : 0'
},
'source_o' => {
'type' => 'output',
'range' => 'Dw-1 :0',
'intfc_name' => 'IO',
'intfc_port' => 'IO'
},
'probe_i' => {
'range' => 'Dw-1 :0',
'type' => 'input',
'intfc_port' => 'IO',
'intfc_name' => 'IO'
},
'clk' => {
'range' => '',
'type' => 'input',
'intfc_port' => 'clk_i',
'intfc_name' => 'plug:clk[0]'
},
'wb_to_jtag' => {
'intfc_port' => 'jwb_o',
'intfc_name' => 'socket:jtag_to_wb[0]',
'range' => 'WB2Jw-1: 0',
'type' => 'output'
}
},
'ip_name' => 'source_probe',
'parameters' => {
'JTAG_CHAIN' => {
'global_param' => 'Parameter',
'default' => '3',
'content' => '1,2,3,4 ',
'redefine_param' => 0,
'type' => 'Combo-box',
'info' => 'Only used for Virtex 4/5 devices. May be 1, 2, 3, or 4. It is the BSCANE2 JTAG tap number.'
},
'JAw' => {
'type' => 'Fixed',
'info' => 'Parameter',
'global_param' => 'Parameter',
'default' => '32',
'redefine_param' => 1,
'content' => ''
},
'Dw' => {
'info' => 'probe/probe width in bits ',
'type' => 'Spin-button',
'content' => '1,32,1',
'redefine_param' => 1,
'global_param' => 'Localparam',
'default' => '2'
},
'JTAG_CONNECT' => {
'info' => 'Parameter',
'type' => 'Combo-box',
'content' => '"ALTERA_JTAG_WB","XILINX_JTAG_WB" ',
'redefine_param' => 1,
'default' => '"XILINX_JTAG_WB"',
'global_param' => 'Parameter'
},
'WB2Jw' => {
'default' => '(JTAG_CONNECT== "XILINX_JTAG_WB") ? 1+JSTATUSw+JINDEXw+1+JDw : 1',
'global_param' => 'Parameter',
'content' => '',
'redefine_param' => 1,
'info' => 'Parameter',
'type' => 'Fixed'
},
'JINDEXw' => {
'default' => '8',
'global_param' => 'Parameter',
'redefine_param' => 1,
'content' => '',
'info' => 'Parameter',
'type' => 'Fixed'
},
'JDw' => {
'info' => 'Parameter',
'type' => 'Fixed',
'content' => '',
'redefine_param' => 1,
'global_param' => 'Parameter',
'default' => '32'
},
'JSTATUSw' => {
'info' => 'Parameter',
'type' => 'Fixed',
'redefine_param' => 1,
'content' => '',
'default' => '8',
'global_param' => 'Parameter'
},
'J2WBw' => {
'info' => 'Parameter',
'type' => 'Fixed',
'redefine_param' => 1,
'content' => '',
'global_param' => 'Parameter',
'default' => '(JTAG_CONNECT== "XILINX_JTAG_WB") ? 1+1+JDw+JAw : 1'
},
'JTAG_INDEX' => {
'global_param' => 'Parameter',
'default' => ' 0',
'content' => '0,128,1',
'redefine_param' => 1,
'info' => ' A unique index number which will be used for adressing this source probe module.',
'type' => 'Spin-button'
}
},
'modules' => {
'pronoc_jtag_source_probe' => {}
},
'version' => 5,
'module_name' => 'pronoc_jtag_source_probe',
'file_name' => 'mpsoc/rtl/src_peripheral/jtag/jtag_wb/pronoc_jtag_source_probe.v',
'plugs' => {
'clk' => {
'value' => 1,
'0' => {
'name' => 'clk'
},
'type' => 'num'
},
'reset' => {
'0' => {
'name' => 'reset'
},
'value' => 1,
'type' => 'num'
}
},
'description' => ' A source/probe that can be controled using xilinx bscan chain or Altera vjtag. ',
'hdl_files' => [],
'parameters_order' => [
'Dw',
'JTAG_CONNECT',
'JTAG_INDEX',
'JDw',
'JAw',
'JINDEXw',
'JSTATUSw',
'J2WBw',
'WB2Jw',
'JTAG_CHAIN'
],
'category' => 'Communication',
'sockets' => {
'jtag_to_wb' => {
'connection_num' => 'single connection',
'type' => 'num',
'0' => {
'name' => 'jtag_to_wb'
},
'value' => 1
}
}
}, 'ip_gen' );

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.