FC2カウンター FPGAの部屋 Vivado and ZYBO Linux勉強会用のソースファイル
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado and ZYBO Linux勉強会用のソースファイル

Vivado and ZYBO Linux勉強会の必要なソースファイルを貼っておきます。

まずは、LED4ip_v1_0_S_AXI_user_logic追加分.v です。


    reg     [3:0]     LED_Display_Counter;
    reg     [31:0]  LED_Interval_Counter;
    reg     slv_reg_wren_1d;

    // slv_reg_wren_1d generate
    always @(posedge S_AXI_ACLK) begin
        if (~S_AXI_ARESETN)
          slv_reg_wren_1d <= 1'b0;
        else
          slv_reg_wren_1d <= slv_reg_wren;
    end

    //// Conteres
    // LED_Display_Counter
    always @(posedge S_AXI_ACLK) begin : proc_LED_Display_Counter
       if(~S_AXI_ARESETN) begin
            LED_Display_Counter <= 4'd0;
       end else begin
              if (slv_reg_wren_1d && axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB]==2'h1) // Counter Load
                  LED_Display_Counter <= slv_reg0[3:0]; // Error, slv_reg1[3:0]
               else if (slv_reg0[0]) begin // Enable
                if (LED_Interval_Counter == 32'd0)
                    LED_Display_Counter <= LED_Display_Counter + 4'd1;
            end
       end
    end
    assign LED4bit = LED_Display_Counter;

    // LED_Interval_Counter
    always @(posedge S_AXI_ACLK) begin : proc_LED_Interval_Counter
       if(~S_AXI_ARESETN) begin
            LED_Interval_Counter <= 32'd0;
       end else begin
            if (slv_reg0[0]) begin // Enable
                if (LED_Interval_Counter == 32'd0)
                    LED_Interval_Counter <= slv_reg3;
                else
                    LED_Interval_Counter <= LED_Interval_Counter - 32'd1;
            end else
                LED_Interval_Counter <= slv_reg3;
       end
    end


led4_axi_lite_slave.c です。

/*
 * led4_axi_lite_slave.c
 *
 *  Created on: 2013/12/16
 *      Author: Masaaki
 */

#include <stdio.h>
#include "xil_types.h"
#include "xparameters.h"
#include "xil_io.h"
#include "xil_exception.h"
#include "xscugic.h"

#define XPAR_LED4IP_0_S_AXI_BASEADDR 0x43C00000

extern char inbyte(void);

int main() {
    int inbyte_in;
    int val;

    while(1){
        print("********************** LED4 TEST Start ***********************\n\r");
        print("TeraTerm: Please Set Local Echo Mode.\n\r");
        print("Press '1' to show all registers\n\r");
        print("Press '2' to set LED4 Enable or Disable(Toggle, Command Register)\n\r");
        print("Press '3' to set LED Counter Load Register (4bits, Please input hexadecimal)\n\r");
        print("Press '4' to set LED Interval Register (32bits, Please input decimal)\n\r");
        print("Press '5' to exit\n\r");
        print("Selection : ");
        inbyte_in = inbyte();
        print(" \r\n");
        print(" \r\n");

        switch(inbyte_in) {
            case '1' : // Show all registers
                val = (int)Xil_In32((u32)XPAR_LED4IP_0_S_AXI_BASEADDR);
                printf("Command Register is %x\r\n", val);
                val = (int)Xil_In32((u32)(XPAR_LED4IP_0_S_AXI_BASEADDR+4));
                printf("LED Counter Load Register is %x\r\n", val);
                val = (int)Xil_In32((u32)(XPAR_LED4IP_0_S_AXI_BASEADDR+8));
                printf("LED Monitor Register is %x\r\n", val);
                val = (int)Xil_In32((u32)(XPAR_LED4IP_0_S_AXI_BASEADDR+0xc));
                printf("LED Interval Register is %d (decimal)\r\n", val);
                break;
            case '2' : // Set LED4 Enable or Disable(Toggle, Command Register)
                val = (int)Xil_In32((u32)XPAR_LED4IP_0_S_AXI_BASEADDR);
                if (val & 1) {
                    Xil_Out32((u32)XPAR_LED4IP_0_S_AXI_BASEADDR, (u32)0);
                    print("LED4 count is Disable\n\r");
                } else {
                    Xil_Out32((u32)XPAR_LED4IP_0_S_AXI_BASEADDR, (u32)1);
                    print("LED4 count is Enable\n\r");
                }
                break;
            case '3' : // Set LED Counter Load Register (4bits, Please input hexadecimal)
                print("Please input LED Counter Load Register value (hexadecimal)");
                scanf("%x", &val);
                Xil_Out32((u32)(XPAR_LED4IP_0_S_AXI_BASEADDR+4), (u32)val);
                print(" \r\n");
                break;
            case '4' : // Set LED Interval Register (32bits, Please input hexadecimal)
                print("Please input LED Interval Load Register value (decimal) ");
                scanf("%d", &val);
                Xil_Out32((u32)(XPAR_LED4IP_0_S_AXI_BASEADDR+0xc), (u32)val);
                print(" \r\n");
                break;
            case '5' : // exit
                print("exit\r\n");
                return 0;
        }
        print(" \r\n");
    }

}


led4_axi_lslave_linux.c です。

/*
 * led4_axi_lslave_linux.c
 *
 *  Created on: 2014/12/30
 *      Author: Masaaki
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>

char inbyte(void){
    char in_data;
    int ret_val;
    
    in_data = getc(stdin);
    if (in_data == '\n')
        in_data = getc(stdin);
    return(in_data);
};

int main() {
    int inbyte_in;
    int val;
    int fd;
    volatile unsigned int *led4_base;

    // LED4 (UIO0)
    fd = open("/dev/uio0", O_RDWR); // LED4
    if (fd < 1){
        fprintf(stderr, "/dev/uio0 open error\n");
        exit(-1);
    }
    led4_base = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    if (!led4_base){
        fprintf(stderr, "LED4 mmap error\n");
        exit(-1);
    }
    
    while(1){
        printf("********************** LED4 TEST Start ***********************\n");
        printf("TeraTerm: Please Set Local Echo Mode.\n");
        printf("Press '1' to show all registers\n");
        printf("Press '2' to set LED4 Enable or Disable(Toggle, Command Register)\n");
        printf("Press '3' to set LED Counter Load Register (4bits, Please input hexadecimal)\n");
        printf("Press '4' to set LED Interval Register (32bits, Please input decimal)\n");
        printf("Press '5' to exit\n");
        printf("Selection : ");
        inbyte_in = inbyte();
        printf(" \n");
        printf(" \n");

        switch(inbyte_in) {
            case '1' : // Show all registers
                val = led4_base[0];
                printf("Command Register is %x\n", val);
                val = led4_base[1];
                printf("LED Counter Load Register is %x\n", val);
                val = led4_base[2];
                printf("LED Monitor Register is %x\n", val);
                val = led4_base[3];
                printf("LED Interval Register is %d (decimal)\n", val);
                break;
            case '2' : // Set LED4 Enable or Disable(Toggle, Command Register)
                val = led4_base[0];
                if (val & 1) {
                    led4_base[0] = 0;
                    printf("LED4 count is Disable\n");
                } else {
                    led4_base[0] = 1;
                    printf("LED4 count is Enable\n");
                }
                break;
            case '3' : // Set LED Counter Load Register (4bits, Please input hexadecimal)
                printf("Please input LED Counter Load Register value (hexadecimal)");
                scanf("%x", &val);
                led4_base[1] = val;
                printf(" \n");
                break;
            case '4' : // Set LED Interval Register (32bits, Please input hexadecimal)
                printf("Please input LED Interval Load Register value (decimal) ");
                scanf("%d", &val);
                led4_base[3] = val;
                printf(" \n");
                break;
            case '5' : // exit
                printf("exit\n");
                return 0;
        }
        printf(" \n");
    }
    munmap((void *)led4_base, 0x1000);
}


opencv_pre_install.sh はこの辺りを参照下さい。
  1. 2015年02月18日 06:27 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/3080-fdd07ae8
この記事にトラックバックする(FC2ブログユーザー)