190 likes | 340 Vues
This lecture focuses on integrating external I/O with the MicroBlaze architecture using the Avnet Mini-Spartan II Evaluation Board. It covers a range of I/O specifications, including custom board generation, multi-core designs, and the functionalities of various peripherals. Key topics include GPIO, UART, and various button and switch interfaces, elaborated with Xilinx XBD files. The importance of efficiency in design is emphasized, referencing Ecclesiastes 10:18. This resource aims to equip engineers and developers with essential insights for optimizing MicroBlaze-based applications.
E N D
ECT 358 Lecture 29 MicroBlaze External I/O
The train of failure usually runs on the track of laziness. By much slothfulness the building decayeth; and through idleness of the hands the house droppeth through. Ecclesiastes 10:18
MicroBlaze External I/O Additional Inputs/Outputs Custom Board Generation Edit Peripherals Core/Peripheral Combinations Multi-Core Designs
MicroBlaze XBD files Board manufacturer Chip Clock Speed Inputs Outputs Pin Numbers Pin Names
Our.XBD File ATTRIBUTE VENDOR = Avnet ATTRIBUTE SPEC_URL = www.em.avnet.com ATTRIBUTE CONTACT_INFO_URL = http://www.em.avnet.com/xilinxbsbfiles ATTRIBUTE NAME = Mini-Spartan-II Evaluation Board ATTRIBUTE REVISION = A ATTRIBUTE DESC = Avnet Mini-Spartan-II Evaluation Board Rev A ATTRIBUTE LONG_DESC = 'This board utilizes XILINX FPGA XC2S150-5PQ208. The board includes one RS232, two push buttons, one digital thermometer, eight DIP-switches and eight LEDs. Push button SW1 is used as reset.'
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_CLOCK_V1 ATTRIBUTE INSTANCE =clk_40 PARAMETER CLK_FREQ =40000000, IO_IS=clk_freq, RANGE=(40000000) # 40 Mhz PORT GCLK = CONN_GCLK , IO_IS=ext_clk END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_RESET_V1 ATTRIBUTE INSTANCE = rst_0 PARAMETER RST_POLARITY = 1, IO_IS=polarity, VALUE_NOTE=Active HIGH PORT SW1 = CONN_SW1, IO_IS=ext_rst # use SW1 as reset button END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_CPUDEBUG_V1 ATTRIBUTE INSTANCE =cpudbg_0 PORT CPU.TDO = CONN_CPU.TDO, IO_IS=cpu_tdo PORT CPU.TDI = CONN_CPU.TDI, IO_IS=cpu_tdi PORT CPU.TCK = CONN_CPU.TCK, IO_IS=cpu_tck PORT CPU.TMS = CONN_CPU.TMS, IO_IS=cpu_tms #PIN CPU.HALT = CONN_CPU.HALT, IO_IS=cpu_halt PORT CPU.TRST = CONN_CPU.TRST, IO_IS=cpu_trst END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_UART_V1 ATTRIBUTE INSTANCE=RS232 PORT RXD = CONN_RXD, IO_IS=serial_in PORT TXD = CONN_TXD, IO_IS=serial_out PORT DEACTIVATE = CONN_DEACTIVATE, IO_IS=rs232_deactivate, INITIALVAL = VCC #this is for serial tranceiver, not UART controller PORT ENABLE = CONN_ENABLE, IO_IS=rs232_enable, INITIALVAL = GND #this is for serial tranceiver, not UART controllerEND END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_UART_V1 ATTRIBUTE INSTANCE=RS232 PORT RXD = CONN_RXD, IO_IS=serial_in PORT TXD = CONN_TXD, IO_IS=serial_out PORT DEACTIVATE = CONN_DEACTIVATE, IO_IS=rs232_deactivate, INITIALVAL = VCC #this is for serial tranceiver, not UART controller PORT ENABLE = CONN_ENABLE, IO_IS=rs232_enable, INITIALVAL = GND #this is for serial tranceiver, not UART controllerEND END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_GPIO_V1 ATTRIBUTE INSTANCE = LEDs_8Bit PARAMETER num_bits =8, IO_IS=num_bits PARAMETER is_dual=0, IO_IS=is_dual PARAMETER bidir_data=0, IO_IS=is_bidir # Non-bidir data pins PARAMETER all_inputs =0, IO_IS=all_inputs # All outputs PORT D2 = CONN_D2, IO_IS = gpio_data_out[0] PORT D3 = CONN_D3, IO_IS = gpio_data_out[1] PORT D4 = CONN_D4, IO_IS = gpio_data_out[2] PORT D5 = CONN_D5, IO_IS = gpio_data_out[3] PORT D6 = CONN_D6, IO_IS = gpio_data_out[4] PORT D7 = CONN_D7, IO_IS = gpio_data_out[5] PORT D8 = CONN_D8, IO_IS = gpio_data_out[6] PORT D9 = CONN_D9, IO_IS = gpio_data_out[7] END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_GPIO_V1 ATTRIBUTE INSTANCE = Push_Buttons_1Bit PARAMETER num_bits =1, IO_IS=num_bits PARAMETER is_dual=0, IO_IS=is_dual PARAMETER bidir_data=0, IO_IS=is_bidir # Non-bidir data pins PARAMETER all_inputs =1, IO_IS=all_inputs # All inputs PORT SW2 = CONN_SW2, IO_IS = gpio_data_in[0] END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_GPIO_V1 ATTRIBUTE INSTANCE = DIP_Switches_8Bit PARAMETER num_bits =8, IO_IS=num_bits PARAMETER is_dual=0, IO_IS=is_dual PARAMETER bidir_data=0, IO_IS=is_bidir # Non-bidir data pins PARAMETER all_inputs=1, IO_IS=all_inputs # All inputs PORT DIP1 = CONN_DIP1, IO_IS = gpio_data_in[0] PORT DIP2 = CONN_DIP2, IO_IS = gpio_data_in[1] PORT DIP3 = CONN_DIP3, IO_IS = gpio_data_in[2] PORT DIP4 = CONN_DIP4, IO_IS = gpio_data_in[3] PORT DIP5 = CONN_DIP5, IO_IS = gpio_data_in[4] PORT DIP6 = CONN_DIP6, IO_IS = gpio_data_in[5] PORT DIP7 = CONN_DIP7, IO_IS = gpio_data_in[6] PORT DIP8 = CONN_DIP8, IO_IS = gpio_data_in[7] END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_GPIO_V1 ATTRIBUTE INSTANCE = Digital_Thermometer_8Bit PARAMETER num_bits =8, IO_IS=num_bits PARAMETER is_dual=0, IO_IS=is_dual PARAMETER bidir_data=0, IO_IS=is_bidir PARAMETER all_inputs=0, IO_IS=all_inputs PORT TDATA0 = CONN_TDATA0, IO_IS = gpio_io[0] PORT TDATA1 = CONN_TDATA1, IO_IS = gpio_io[1] PORT TDATA2 = CONN_TDATA2, IO_IS = gpio_io[2] PORT TDATA3 = CONN_TDATA3, IO_IS = gpio_io[3] PORT TDATA4 = CONN_TDATA4, IO_IS = gpio_io[4] PORT TDATA5 = CONN_TDATA5, IO_IS = gpio_io[5] PORT TDATA6 = CONN_TDATA6, IO_IS = gpio_io[6] PORT TDATA7 = CONN_TDATA7, IO_IS = gpio_io[7] END
Our.XBD File BEGIN IO_INTERFACE ATTRIBUTE IOTYPE = XIL_GPIO_V1 ATTRIBUTE INSTANCE = Thermo_In PARAMETER num_bits =1, IO_IS=num_bits PARAMETER is_dual=0, IO_IS=is_dual PARAMETER bidir_data=0, IO_IS=is_bidir PARAMETER all_inputs =1, IO_IS=all_inputs PORT SDO = CONN_SDO, IO_IS = gpio_data_in[0] END
Our.XBD File BEGIN FPGA ATTRIBUTE INSTANCE = fpga_0 ATTRIBUTE FAMILY = spartan2 ATTRIBUTE DEVICE = XC2S150 ATTRIBUTE PACKAGE = PQ208 ATTRIBUTE SPEED_GRADE = -5 ATTRIBUTE JTAG_POSITION = 2 ### CLOCK ### PORT CLK_0 = CONN_GCLK, UCF_NET_STRING=("LOC=P80") ### RESET ### PORT RESET = CONN_SW1, UCF_NET_STRING=("LOC=P110") ### CPU DEBUG ### PORT TDO = CONN_CPU.TDO, UCF_NET_STRING=("LOC=P99") PORT TDI = CONN_CPU.TDI, UCF_NET_STRING=("LOC=P101") PORT TCK = CONN_CPU.TCK, UCF_NET_STRING=("LOC=P98") PORT TMS = CONN_CPU.TMS, UCF_NET_STRING=("LOC=P100") PORT TRST = CONN_CPU.TRST, UCF_NET_STRING=("LOC=P102")
Our.XBD File ### UART ### PORT RXD = CONN_RXD, UCF_NET_STRING=("LOC=P152") PORT TXD = CONN_TXD, UCF_NET_STRING=("LOC=P151") PORT DEACTIVATE = CONN_DEACTIVATE, UCF_NET_STRING=("LOC=P149") PORT ENABLE = CONN_ENABLE, UCF_NET_STRING=("LOC=P150") ### LED ### PORT LED0 = CONN_D2, UCF_NET_STRING=("LOC=P141") PORT LED1 = CONN_D3, UCF_NET_STRING=("LOC=P140") PORT LED2 = CONN_D4, UCF_NET_STRING=("LOC=P139") PORT LED3 = CONN_D5, UCF_NET_STRING=("LOC=P138") PORT LED4 = CONN_D6, UCF_NET_STRING=("LOC=P136") PORT LED5 = CONN_D7, UCF_NET_STRING=("LOC=P134") PORT LED6 = CONN_D8, UCF_NET_STRING=("LOC=P133") PORT LED7 = CONN_D9, UCF_NET_STRING=("LOC=P132")
Our.XBD File ### PUSH_BUTTON ### PORT PUSH2 = CONN_SW2, UCF_NET_STRING=("LOC=P109") PORT SDO = CONN_SDO, UCF_NET_STRING=("LOC=P94") ### DIP_Switches ### PORT DIP1 = CONN_DIP1, UCF_NET_STRING=("LOC=P123") PORT DIP2 = CONN_DIP2, UCF_NET_STRING=("LOC=P122") PORT DIP3 = CONN_DIP3, UCF_NET_STRING=("LOC=P121") PORT DIP4 = CONN_DIP4, UCF_NET_STRING=("LOC=P120") PORT DIP5 = CONN_DIP5, UCF_NET_STRING=("LOC=P114") PORT DIP6 = CONN_DIP6, UCF_NET_STRING=("LOC=P113") PORT DIP7 = CONN_DIP7, UCF_NET_STRING=("LOC=P112") PORT DIP8 = CONN_DIP8, UCF_NET_STRING=("LOC=P111")
Our.XBD File ### Digital Thermometer ### PORT TDATA0 = CONN_TDATA0, UCF_NET_STRING=("LOC=P206") PORT TDATA1 = CONN_TDATA1, UCF_NET_STRING=("LOC=P205") PORT TDATA2 = CONN_TDATA2, UCF_NET_STRING=("LOC=P204") PORT TDATA3 = CONN_TDATA3, UCF_NET_STRING=("LOC=P203") PORT TDATA4 = CONN_TDATA4, UCF_NET_STRING=("LOC=P97") PORT TDATA5 = CONN_TDATA5, UCF_NET_STRING=("LOC=P96") PORT TDATA6 = CONN_TDATA6, UCF_NET_STRING=("LOC=P95") PORT TDATA7 = CONN_TDATA7, UCF_NET_STRING=("LOC=P199") END