国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SOC FPGA之流水燈設(shè)計(jì)

這篇具有很好參考價(jià)值的文章主要介紹了SOC FPGA之流水燈設(shè)計(jì)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、DS-5簡(jiǎn)介

????????Altera Soc EDS開(kāi)發(fā)套件的核心是Altera版ARM Development Studio 5(DS-5)工具包,為SoC器件提供了完整的嵌入式開(kāi)發(fā)環(huán)境、FPGA自適應(yīng)調(diào)試和對(duì)Altera工具的兼容。

1.1 DS-5 eclipse破解

首先下載破解器

然后進(jìn)入cmd運(yùn)行,進(jìn)入到破解器所在文件夾

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

?然后輸入patcher.exe --license ?:licensepath

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

最后顯示.dat文件即可,將license添加到eclipse中就好了

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

1.2?ARM編譯器

? ? ? ? ARM編譯器用于生成面向ARM、Thumb、Thumb22、VFP和NEON指令集的應(yīng)用程序。
????????ARM編譯器工具鏈可用于編譯由C、C++或ARM匯編語(yǔ)言源代碼編寫的程序,可以為32位ARM、16位Thumb和Thumb-2指令集生成優(yōu)化代碼,并支持完整的符號(hào)ISO標(biāo)準(zhǔn)的C和C++代碼,通過(guò)向量化NEON編譯器支持NEON SIMD指令集。

1.3?GNU編譯器

? ? ? ? Altera Soc EDS自帶的裸機(jī)GNU編譯工具是基于ARM架構(gòu)的處理器,用于編譯Linux應(yīng)用程序,可以直接從命令行直接啟動(dòng),也可以在Eclipse中創(chuàng)建Linux可執(zhí)行程序項(xiàng)目從而調(diào)用此套編譯器。

二、基于ARM編譯器的流水燈實(shí)例

2.1 創(chuàng)建項(xiàng)目

新建C Project

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

用SOC EDS提供的HALIB中給的API訪問(wèn)板上硬件,所以需要在項(xiàng)目編譯選項(xiàng)中添加HWLIB路徑
選擇主菜單Project->Properties,在彈出的Properties for LedWater對(duì)話框中點(diǎn)擊Includes

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

本實(shí)例要添加的是項(xiàng)目編譯時(shí)需要包含的HALIB路徑,點(diǎn)擊Include path(-I),通過(guò)File system選擇<SocEDS安裝路徑>\ip\altera\hps\altera_hps\hwlib\include

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

在C項(xiàng)目中添加主程序main.c,F(xiàn)ile->New->Source File

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

創(chuàng)建硬件設(shè)備描述頭文件hps_0.h
SOC EDS提供了由Qsys硬件系統(tǒng)信息轉(zhuǎn)換為軟件開(kāi)發(fā)所需設(shè)備描述頭文件的工具swinfo2header,通過(guò)Shell進(jìn)入Qsys工程所在目錄并輸入

sopc-create-header-files soc_system.sopcinfo -single hps_0.h -module hps_0

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

根據(jù).sopcinfo文件生成hps_0.h文件,并將其拷貝至Eclipse當(dāng)前項(xiàng)目目錄中
SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

另一種生成hps_0.h文件是編寫Shell腳本generate_hps_qsys_header.sh

#!/bin/sh
sopc-create-header-files\
"/cygdrive/d/chapter7/Hardware/soc_system.sopcinfo"
--single hps_0.h
--module hps_0

腳本文件編譯完成后將其保存在當(dāng)前項(xiàng)目目錄中,在命令行中切換到當(dāng)前項(xiàng)目目錄,然后執(zhí)行哎腳本,即可在當(dāng)前項(xiàng)目目錄下生成?hps_0.h

在Eclipse中右鍵點(diǎn)擊項(xiàng)目名稱選擇Refresh就可以看到hps_0.h文件已經(jīng)被添加至當(dāng)前項(xiàng)目

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

將<SocEDS安裝路徑>\embedded/\ip\altera\hps\altera_hps\hwlib\src\hwmgr中的看門狗驅(qū)動(dòng)程序alt_watchdg.c拷貝至項(xiàng)目目錄并對(duì)其進(jìn)行裁剪

#include <stdint.h>
#include <stdbool.h>
#include "socal/hps.h"
#include "socal/socal.h"
#include "socal/alt_rstmgr.h"
#include "socal/alt_l4wd.h"
#include "hwlib.h"
#include "alt_mpu_registers.h"
#include "alt_watchdog.h"
#include "alt_clock_manager.h"

#define WDOG_RESET_KEY           0x00000076
#define ALT_WDOG_RST_WIDTH       8             //8個(gè)或更多MPU時(shí)鐘周期


bool cpu_wdog_in_gpt_mode(void)
{
    return !(alt_read_word(CPU_WDTGPT_TMR_BASE + WDOG_CTRL_REG_OFFSET) & WDOG_WDT_MODE);
}

/****************************************************************************************/
/* 啟動(dòng)指定看門狗定時(shí)器                                                                 */
/****************************************************************************************/
ALT_STATUS_CODE alt_wdog_start(ALT_WDOG_TIMER_t tmr_id)
{
    ALT_STATUS_CODE     ret = ALT_E_BAD_ARG;    //返回值
    uint32_t            regdata;                //定義數(shù)據(jù)變量


    if (tmr_id == ALT_WDOG_CPU)
    {
        regdata = alt_read_word(CPU_WDTGPT_TMR_BASE + WDOG_CTRL_REG_OFFSET);
        alt_write_word(CPU_WDTGPT_TMR_BASE + WDOG_CTRL_REG_OFFSET, regdata | WDOG_TMR_ENABLE);
        ret = ALT_E_SUCCESS;
    }
    else if ((tmr_id == ALT_WDOG0) || (tmr_id == ALT_WDOG0_INIT))
    {
        regdata = alt_read_word(ALT_L4WD0_WDT_CR_ADDR);
        alt_write_word(ALT_L4WD0_WDT_CR_ADDR, regdata | ALT_L4WD_CR_WDT_EN_SET_MSK);
        ret = ALT_E_SUCCESS;
    }
    else if ((tmr_id == ALT_WDOG1) || (tmr_id == ALT_WDOG1_INIT))
    {
        regdata = alt_read_word(ALT_L4WD1_WDT_CR_ADDR);
        alt_write_word(ALT_L4WD1_WDT_CR_ADDR, regdata | ALT_L4WD_CR_WDT_EN_SET_MSK);
        ret = ALT_E_SUCCESS;
    }
    return  ret;
}

/****************************************************************************************/
/* 重新加載計(jì)數(shù)器的倒數(shù)計(jì)時(shí)器,并重啟看門狗定時(shí)器                                       */
/* 可以在看門狗定時(shí)器計(jì)數(shù)結(jié)束前任意時(shí)刻重啟定時(shí)器                                       */
/* 本質(zhì)上是清除中斷                                                                     */
/****************************************************************************************/
ALT_STATUS_CODE alt_wdog_reset(ALT_WDOG_TIMER_t tmr_id)
{
    uint32_t                regdata;        //定義讀數(shù)據(jù)


    if (tmr_id == ALT_WDOG_CPU)
    {
        regdata = alt_read_word(CPU_WDTGPT_TMR_BASE + WDOG_LOAD_REG_OFFSET);
        alt_write_word(CPU_WDTGPT_TMR_BASE + WDOG_LOAD_REG_OFFSET, regdata);     //驗(yàn)證硬件操作

        if (cpu_wdog_in_wdt_mode())
        {
            alt_write_word((CPU_WDTGPT_TMR_BASE + WDOG_RSTSTAT_REG_OFFSET), WDOG_RST_STAT_BIT);   //根據(jù)當(dāng)前模式,清除復(fù)位位
        }
        else
        {
            alt_write_word((CPU_WDTGPT_TMR_BASE + WDOG_INTSTAT_REG_OFFSET), WDOG_INT_STAT_BIT);   //清除中斷狀態(tài)位
        }
    }
    else if ((tmr_id == ALT_WDOG0) || (tmr_id == ALT_WDOG0_INIT))
    {
        alt_write_word(ALT_L4WD0_WDT_CRR_ADDR, WDOG_RESET_KEY);               //重啟計(jì)數(shù)器,清除看門狗0定時(shí)器中斷
    }
    else if ((tmr_id == ALT_WDOG1) || (tmr_id == ALT_WDOG1_INIT))             //重啟計(jì)數(shù)器,清除看門狗1定時(shí)器中斷
    {
        alt_write_word(ALT_L4WD1_WDT_CRR_ADDR, WDOG_RESET_KEY);
    }
    else { return  ALT_E_BAD_ARG; }
    return ALT_E_SUCCESS;
}

ARM鏈接器支持分散加載機(jī)制,可通過(guò)一個(gè)描述性分散文件(*.scat)指定鏈接生成可執(zhí)行影響存儲(chǔ)器映射情況,使開(kāi)發(fā)人員完全控制映像各部分的組織、布局情況。分散文件通常用于控制需要復(fù)雜存儲(chǔ)器映射的映像。

創(chuàng)建分散文件OnchiioRAM.scat,選擇File->New->Other?,在Scatter File Editor中選擇Scatter File

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

流水燈僅需對(duì)映像存儲(chǔ)器映射進(jìn)行控制,控制映像在片內(nèi)65KB的OnchipRAM連續(xù)的存儲(chǔ)區(qū)域加載執(zhí)行,地址映射為0xFFFF0000~0xFFFFFFFF,編輯該分散文件內(nèi)容如下:

PCRAM 0xFFFF0000 0x10000
{
    ;APP code region
    APP_CODE +0
    {
        *(+RO,+RW,+ZI)
    }
    ;Application heap and stack
    ARM_LIB_STACKHEAP 0xFFFF8000 EMPTY 0x8000
    {}
}

保存編輯好的Scatter文件并保存該文件,再次打開(kāi)該文件即可看到映像加載區(qū)和執(zhí)行區(qū)兩種存儲(chǔ)器映像視圖

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

編輯主程序文件main.c,使板上LED呈現(xiàn)流水燈實(shí)驗(yàn)現(xiàn)象

/************/
/*LedWater example*/
/************/

#include <stdio.h>
#include "hwlib.h"
#include "alt_watchdog.h"
#include "socal\socal.h"
#include "socal\hps.h"
#include "socal\alt_gpio.h"
#include "socal\alt_rstmgr.h"
#include "socal\alt_l4wd.h"
#include "hps_0.h"

void delay(int time);    //delay function declaration

int main()
{
	int i = 0x01000000;
	int j = 0x00000001;
    alt_wdog_start (ALT_WDOG0);                              //start the watchdog
	alt_write_word(ALT_RSTMGR_BRGMODRST_ADDR, 0x00000000);   //remove bridge reset mode
	alt_write_word(ALT_GPIO1_SWPORTA_DDR_ADDR,0x0F000000);   //set GPIO1 direction as output

	while( 1 )
	{
		alt_write_word(ALT_GPIO1_SWPORTA_DR_ADDR,        i);   //update led state controled by GPIO1 value
	    alt_write_word(ALT_LWFPGASLVS_OFST + LED_PIO_BASE, j); //update led state controled by FPGA peripheral

		if ( (i & 0x0F000000) == 0x08000000 )i = 0x01000000;
		else
			i = i << 1;
		if ( (j & 0x0000000F) == 0x00000008 )j = 0x00000001;
		else
			j = j << 1;
        delay(100000000);  //delay
		alt_wdog_reset(ALT_WDOG0);    //kick the watchdog
    }
	return 1;
}
void delay(int time)
{
	int k;
	for( k=0; k<time; k++ );
}

2.2 項(xiàng)目編譯

在編譯之前需要為ARM Linker指定生成可執(zhí)行程序所需的分散文件OnchiioRAM.scat

在Properties中選擇ARM Linker->Image Layout,選擇文件

SOC FPGA之流水燈設(shè)計(jì),fpga開(kāi)發(fā)

在注冊(cè)單選擇Project->Build Project或者工程名右鍵Build Project
編譯過(guò)程中可在Console窗口查看相關(guān)信息,整個(gè)編譯過(guò)程為先啟動(dòng)ARM C Compiler進(jìn)行編譯生成目標(biāo)文件,再啟動(dòng)ARM C Linker鏈接為可執(zhí)行程序,最后生成LedWater.axf可執(zhí)行程序映象

將之前生成的software\spb_bsp\uboot-socfpga\spl\u-boot-spl拷貝至當(dāng)前目錄,將.sof文件下載之FPGA中即可。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-632403.html

到了這里,關(guān)于SOC FPGA之流水燈設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 5.2 FPGA:基于verilog的LED流水燈設(shè)計(jì)(多種方法)

    5.2 FPGA:基于verilog的LED流水燈設(shè)計(jì)(多種方法)

    目錄 設(shè)計(jì)目標(biāo):8個(gè)LED燈以每0.5s的速率進(jìn)行循環(huán)閃爍 方法1:移位法實(shí)現(xiàn) 設(shè)計(jì)模塊 仿真代碼 實(shí)驗(yàn)結(jié)果 ?方法2:循環(huán)移位方法 ?設(shè)計(jì)模塊 方法3:使用三八譯碼器實(shí)現(xiàn)流水燈 頂層模塊 底層模塊 當(dāng)仿真時(shí)時(shí)間長(zhǎng),可以減小設(shè)計(jì)代碼的計(jì)數(shù)次數(shù),對(duì)分析移位功能沒(méi)有影響。 設(shè)計(jì)

    2024年02月06日
    瀏覽(20)
  • FPGA開(kāi)發(fā)之Vivado安裝及HLS環(huán)境配置,并實(shí)現(xiàn)流水燈實(shí)例

    FPGA開(kāi)發(fā)之Vivado安裝及HLS環(huán)境配置,并實(shí)現(xiàn)流水燈實(shí)例

    HLS(High-Level Synthesis)高層綜合,就是將 C/C++的功能用 RTL 來(lái)實(shí)現(xiàn),將 FPGA 的組件在一個(gè)軟件環(huán)境中來(lái)開(kāi)發(fā),這個(gè)模塊的功能驗(yàn)證在軟件環(huán)境中來(lái)實(shí)現(xiàn),無(wú)縫的將硬件仿真環(huán)境集合在一起,使用軟件為中心的工具、報(bào)告以及優(yōu)化設(shè)計(jì),很容易的在 FPGA 傳統(tǒng)的設(shè)計(jì)工具中生成 IP。

    2024年02月05日
    瀏覽(28)
  • 流水燈——FPGA

    流水燈——FPGA

    環(huán)境: 1、Quartus18.0 2、vscode 3、板子型號(hào):EP4CE6F17C8 要求: 每隔0.2s循環(huán)亮起LED燈 從LED0開(kāi)始亮起到LED3又回到LED0循環(huán)往復(fù)。 流水燈 這里使用了拼接符對(duì)LED進(jìn)行處理加上一個(gè)0.2s的計(jì)時(shí)器進(jìn)行控制即可。 led流水燈

    2024年02月16日
    瀏覽(26)
  • fpga--流水燈

    fpga流水燈的設(shè)計(jì) 思路:外部時(shí)鐘頻率50mhz,若要實(shí)現(xiàn)每隔0.5s閃爍一次,則使用內(nèi)部計(jì)數(shù)器計(jì)數(shù)到24999999拉高一個(gè)周期電平,當(dāng)電平被拉高的時(shí)候,進(jìn)行LED燈電平的設(shè)置,每次檢測(cè)到高電平,就進(jìn)行一位LED燈的設(shè)置,進(jìn)行循環(huán)設(shè)置,就形成了流水燈的設(shè)計(jì)。 測(cè)試代碼 ?

    2024年02月15日
    瀏覽(32)
  • FPGA學(xué)習(xí)——點(diǎn)亮流水燈

    FPGA學(xué)習(xí)——點(diǎn)亮流水燈

    在FPGA開(kāi)發(fā)板中,一般板載LED默認(rèn)高電平點(diǎn)亮,因此我們只需要將想要亮起的LED賦值為1即可。 本入門實(shí)驗(yàn)要求為每隔1s開(kāi)發(fā)板上的LED輪流亮起,因此我們需要一個(gè)1s的計(jì)數(shù)器, 由于開(kāi)發(fā)板晶振時(shí)鐘為50MHz,因此我們計(jì)數(shù)50_000_000即為1s。 注意:為了后續(xù)方便仿真所以這里MAX設(shè)置

    2024年02月13日
    瀏覽(46)
  • 按鍵控制流水燈方向——FPGA

    按鍵控制流水燈方向——FPGA

    環(huán)境: 1、Quartus18.0 2、vscode 3、板子型號(hào):EP4CE6F17C8 要求: 按鍵1按下,流水燈從右開(kāi)始向左開(kāi)始流動(dòng),按鍵2按下,流水燈從左開(kāi)始向右開(kāi)始流動(dòng),按鍵3按下LED每隔1s進(jìn)行亮滅,按鍵4按下LED常亮。 “自鎖”是指開(kāi)關(guān)能通過(guò)鎖定機(jī)構(gòu)保持某種狀態(tài)(通或斷),“輕觸”是說(shuō)明操

    2024年02月07日
    瀏覽(24)
  • FPGA學(xué)習(xí)——verilog實(shí)現(xiàn)流水燈

    FPGA學(xué)習(xí)——verilog實(shí)現(xiàn)流水燈

    學(xué)習(xí)芯片: EP4CE6F17C8 verilog代碼如下: 配置引腳,查看芯片的指導(dǎo)書: 燒錄運(yùn)行結(jié)果如下: 如圖我們可以看見(jiàn)開(kāi)發(fā)板上四個(gè)led燈同時(shí)被電亮。 代碼如下: 配置引腳,查看clock和key的引腳: 運(yùn)行結(jié)果如下圖: 此時(shí)可以看見(jiàn)四個(gè)led燈同時(shí)閃爍。 流水燈代碼實(shí)現(xiàn): 實(shí)驗(yàn)效果圖如

    2024年02月16日
    瀏覽(34)
  • FPGA入門————LED流水燈(超詳細(xì)教程)

    FPGA入門————LED流水燈(超詳細(xì)教程)

    本文使用軟件為vivado,其實(shí)用哪個(gè)軟件都是一樣的,主要是掌握核心編程思想。 如有需要下載vivado軟件下載可以參考: vivado及ISE各版本軟件下載方法、鏈接及詳細(xì)步驟,官方網(wǎng)頁(yè)下載_ise軟件下載_千尋xun的博客-CSDN博客 目錄 一、新建工程及設(shè)計(jì)文件 二、編寫LED流水燈程序

    2024年02月08日
    瀏覽(16)
  • FPGA學(xué)習(xí)分享--01 led流水燈的實(shí)現(xiàn)

    FPGA學(xué)習(xí)分享--01 led流水燈的實(shí)現(xiàn)

    需求 : 博宸電子的ZYNQ7020DEV開(kāi)發(fā)板 Vivado 2018.3 一定的verilog語(yǔ)言基礎(chǔ) 博主目前學(xué)習(xí)的是 博宸電子的ZYNQ7020DEV開(kāi)發(fā)板 ,下面是關(guān)于本次分享led流水燈的原理圖 圖1 涉及本次led流水燈的電路 首先,從圖1來(lái)看,每個(gè)led端口都和一個(gè)阻值為4.7k的電阻和一個(gè)發(fā)光二極管相連,并且發(fā)光

    2024年02月04日
    瀏覽(19)
  • FPGA 學(xué)習(xí)筆記:Verilog 實(shí)現(xiàn)LED流水燈控制

    在初步了解 Xilinx Vivado 的使用后,開(kāi)啟了FPGA Hello World 程序:LED 流水燈控制 在嵌入式MCU中,流水燈需要延時(shí)來(lái)實(shí)現(xiàn),F(xiàn)PGA的延時(shí),使用外部晶振來(lái)實(shí)現(xiàn) 實(shí)現(xiàn) 3個(gè) LED 流水燈控制,也就是循環(huán)依次點(diǎn)亮, LED 低電平亮, 高電平滅,F(xiàn)PGA 有一個(gè)40MHz的外部晶振,作為系統(tǒng)時(shí)鐘輸入開(kāi)

    2023年04月08日
    瀏覽(32)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包