㈠ 如何利用Zynq-7000的PL和PS進行交互
在Zynq-7000上編程PL大致有3種方法:
1. 用FSBL,將bitstream集成到boot.bin中
2. 用U-BOOT命令
3. 在Linux下用xdevcfg驅動。
步驟:
1. 去掉bitstream的文件頭
用FSBL燒寫PL Images沒有什麼好說的,用Xilinx SDK的Create Boot Image工具即可完成,不再贅述。用後兩種方法需要把bitstream文件的文件頭用bootgen工具去掉。
一個典型的bif文件如下所示:
the_ROM_image:
{
[bootloader]<fsbl_name>.elf
<pl_bitstream_name>.bit
<u-boot_name>.elf
}
bif文件可以用文本編輯器寫,也可以用Xilinx SDK的Create Boot Image工具生成。然後在命令行下用以下命令即可去掉bitstream文件的文件頭。
bootgen -image <bootimage>.bif -split bin -o i BOOT.BIN
"-split」參數可以生成以下文件:
<pl_bitstream_name>.bit.bin
2. 在U-BOOT下燒寫PL Image
命令」fpga load」和」fpga loadb」都可以。區別是前一個命令接受去掉了文件頭的bitstream文件,後一個命令接受含有文件頭的bitstream文件。
在OSL 2014.2上,預設編譯就可以完整支持寫入PL Image的功能。但是在Petalinux 2013.10下,盡管可以在U-BOOT下看到命令」fpga」,還需要在文件
<PROJ>/subsystems/linux/configs/u-boot/platform-top.h 中增加以下內容後重新編譯才可以支持具體的功能。
/* Enable the PL to be downloaded */
#define CONFIG_FPGA
#define CONFIG_FPGA_XILINX
#define CONFIG_FPGA_ZYNQPL
#define CONFIG_CMD_FPGA
#define CONFIG_FPGA_LOADFS
在OSL 2014.2 U-BOOT中,具體的功能是在zynqpl.c的zynq_load()中實現的。
3. 在Linux下燒寫PL Image
OSL Linux 2014.2.01中已經含有xdevcfg驅動了(之前就有,不過本文是在這個版本上驗證的),直接用以下命令就可以完成PL Image寫入。
cat <path_to_storage_media>/<pl_bitstream_name>.bit.bin > /dev/xdevcfg
Linux驅動的源代碼在xilinx_devcfg.c中。因為驅動的編號是通過alloc_chrdev_region()動態分配的,所以不需要手工用mknod命令手動建立設備節點。
在Linux驅動中,每次往DevCfg中寫入4096位元組,直到全部寫完。
4. 在用戶程序中燒寫PL Image
目前沒有現成的源碼來完成這個功能,不過可以用mmap()把DevCfg的寄存器映射到用戶程序的虛地址中,然後參考一些現成的軟體代碼來完成這個功能:
* FSBL中的pcap.c
* U-BOOT中的zynqpl.c
* Linux中的xilinx_devcfg.c
* Xilinx SDK中的例子。例子位於以下位置,隨SDK的版本會有變化。
C:\Xilinx\SDK\2014.1\data\embeddedsw\XilinxProcessorIPLib\drivers\devcfg_v3_0\examples\index.html
小結:
DevCfg外設內部有自己的DMA,只需要簡單的配置PL Image的基地址和長度到DevCfg寄存器,就可以完成Zynq-7000 PL Image的載入。Xilinx已經提供了靈活的解決方案,如果開發者要把這個功能集成在自己的應用程序中,也有很多的代碼可以參考,並不是很困難的任務。
㈡ zynq 33.333mhz 晶振怎麼配
補充樓上的,cpu執行的一條指令是指匯編指令(包括內存定址和寄存器定址),而不是c語言的一條語句;
㈢ 如何學習zynq乙太網控制器及協議棧
第 9 章 ZedBoard 入門
前面大家已經對 ZYNQ 架構以及相應的開發工具有一定的認識,接下來我們將帶領大家來一起 體驗 ZYNQ,體驗軟硬體協同設計的魅力。由於時間的關系,下面的一些實驗(本章及後續章節的實驗) 可能有不完善的地方,歡迎讀者向我們反饋。 9.1 跑馬燈 本實驗將指導大家使用 Vivado 集成設計環境創建本書的第一個 Zynq 設計。這里,我們使用跑馬燈 這個入門實驗來向大家介紹 Vivado IDE 的 IP Integrator 環境,並在 Zedboard 上實現這個簡單的 Zynq 嵌 入式系統。之後,我們將會使用 SDK 創建一個簡單的軟體應用程序,並下載到 Zynq 的 ARM 處理器中, 對在 PL 端實現的硬體進行控制。本實驗分為三個小節來向大家進行介紹: ? 第一節我們將使用 Vivado IDE 創建一個工程。 ? 在第一節的基礎上,第二節我們將繼續構建一個 Zynq 嵌入式處理系統,並將完成後的硬體導入 到 SDK 中進行軟體設計。 ? 最後一節我們將使用 SDK 編寫 ARM 測試應用程序, 並下載到 ZedBoard 上進行調試。 實驗環境:Windows 7 x64 操作系統, Vivado2013.4,SDK 2013.4
9.1.1 Vivado 工程創建
1) 雙擊桌面 Vivado 快捷方式 ,或者瀏覽 Start > All Programes > Xilinx Design Tools > Vivado
2013.4 > Vivado 2013.4 來啟動 Vivado. 2) 當 Vivado 啟動後,可以看到圖 9-1 的 Getting Started 頁面。
圖 9- 1 Vivado 開始界面
3) 選擇 Create New Project 選項,圖 9-2 所示的 New Project 向導將會打開,點擊 Next。
圖 9- 2 New Project 對話框 4) 在 Project Name 對話框中,輸入 first_zynq_design 作為 Project name, 選擇 C:/XUP/Zed 作為 Project location,確保 Create project subdirectory 被勾選上,如圖 9-3,點擊 Next。
圖 9- 3 Project Name 對話框 5) 在 Project Type 對話框中,選擇 RTL Project,確保 Do not specify sources at this time 選項沒有 被勾選,如圖 9-4,點擊 Next。
圖 9- 4 Project Type 對話框 6) 在 Add Source 對話框中, 選擇 Verilog 作為目標語言,如果你對 VHDL 熟悉的話, 你也可以 選擇 VHDL,如果這里你忘記了選擇,在工程創建完成後,也可以在工程設置中選擇你熟悉的 HDL 語言。如果你已經有了源文件,在這里就可以選擇 Add file 或者 Add directory 進行添加, 由於我們沒有任何的源文件, 所以這里我們直接點擊 Next 即可,如圖 9-5。
圖 9- 5 添加源文件 7) 在 Add Existing IP 對話框中,點擊 Next。 8) 在 Add Constraints 對話框中,點擊 Next。 9) 在 Default Part 對話框中,在 Specify 框中選擇 Boards 選項,在下面的 Board 列表中選擇 ZedBoard Zynq Evaluation and Development Kit,點擊 Next,如圖 9-6。
圖 9- 6 晶元選擇 10) 在 New Project Summary 對話框中,點解 Finish 完成工程創建,至此,我們已經使用 Vivado 創建了一個 Zynq 設計的工程框架,圖 9-7 為 Vivado 的工程界面,在第四章我們已經對該界面 進行過介紹,如果還不熟悉的讀者再回到前面復習一下。下面我將使用 Flow Navigator 的 IP Integrator 功能完成第二節的嵌入式系統設計。
圖 9- 7 Vivado 工程界面
9.1.2 在 Vivado 中創建 Zynq 嵌入式系統 這一節我們將創建一個簡單的 Zynq 嵌入式系統,該系統使用 Zynq PL 部分實現一個通用 I/O 控制 器 (GPIO),控制器同 ZedBoard 上的 8 個 LED 相連接,並且通過 AXI 匯流排連接到 PS 端,這樣我們就可 以通過將要在第三小節中實現的 ARM 應用程序來對 LED 進行控制。系統結構圖如圖 9-8 所示。
㈣ ZYNQ 內核i2c驅動支持16位地址寄存器寫操作嗎
ynq7000的I2C控制器是cadence公司的IP,做一個驅動如果從閱讀數據手冊開始,效率會很低,因此首先找到了其Linux的I2C驅動文件i2c_cadence.c,話一部分時間閱讀兩遍後,會了解Zynq7000的I2C控制器工作流程和操作方法。
開始是基於Linux的驅動進行移植的,進展不是很順利,主要是Linux驅動中的數據收發均是在中斷中完成,並加入了Linux自身的驅動框架。為了方便的調試驅動,先調試無中斷情況下的功能,然後在將中斷、FIFO等加入以提高效率是一個比較不錯的方法。為了快速的調試通過I2C驅動,這里考慮了其Uboot中的驅動文件。
Zynq7000的I2C控制器Uboot下的驅動文件是zynq_i2c.c,此文件設計非常容易理解,文件中一共有7個函數,其中有用的是如下5個函數,通過閱讀以下五個函數,可以很容易了解I2C的操作過程,而且可以直接在驅動中使用**read、**write函數進行測試。
㈤ zynq 如何寫driver
步驟:
1. 首先在vivado SDK中分別建立兩個工程
注意:如上圖所示,Core0 工程建立時選擇ps7_cortexa9_0, Core1 工程建立時選擇ps7_cortexa9_1
完成後如下圖所示:
2.配置Core1即從核中的BSP文件
在下圖中畫圈處,配置:-DUSE_AMP=1
3 配置Core0和Core1的DDR空間分配
通過修改lscript.ld文件中的內容,可以改變在存儲器中的執行位置,
因為ELF文件是載入到DDR中執行的,所以兩個DDR地址不能重合
Core0的配置 :畫圈處 棧空間也要分配,防止溢出
Core1配置
4 建立FSBL文件,並配置mian()文件
配置main() 跟第三步中的DDR空間配置有關
在FSBL的src中找到main.c文件打開,在裡面添加下面一段代碼,用於啟動CPU1:
#define sev() __asm__("sev")
#define CPU1STARTADR 0xFFFFFFF0 //Core1 DDR配置中的SIZE大小
#define CPU1STARTMEM 0x10000000 //Core1 DDR配置中的起始地址
void StartCpu1(void)
{
#if 1
Xil_Out32(CPU1STARTADR, CPU1STARTMEM);
dmb(); //waits until write has finished
sev();
#endif
}
將上面的代碼在main()中添加到:
Load boot image的位置,將CPU1的啟動函數,放置於此位置,改動後的代碼段如下:
5 生成mcs文件和燒寫mcs文件到QSPI Flash
單擊『Core1』,選擇Xilinx Tools –> Create zynq boot image,選擇Add,選擇文件…/ Core1/Debug/ Core1.elf,點擊打開。然後選擇Core1.elf, Core0.elf在Core1.elf上面。然後在Output pach後面把boot.bin修改為Boot.mcs。然後點擊 Create Image
選擇Core0
選擇文件生成存儲地址
選擇MCS
畫圈處是添加的文件
順序為:FSBL.elf .bit文件 Core0.elf Core1.elf
點擊Create Image 生成.mcs文件
6 完成操作 將 .MCS 文件燒寫進板子里
bin文件用來燒寫到SD卡,mcs文件用來燒寫到QSPI flash中 ,
選擇Xilinx Tools –> Program Flash,在Image File後面選擇剛才生成的Boot.mcs文件,Offset為0x0,Flash Type為qsip_single。勾選Blank check after erase和Verify after flash。檢查開發板上電和連線狀況,然後點擊Program
㈥ zynq 驅動程序的makefile怎麼寫
就把這個記錄一下,便後面查看:
wilcard字面解釋是通配符
按照這個意思以及看這幾個語句:C_SRCS
:=
$(wildcard
.;*不會寫makefile,但是,需要看看,理解一下怎麼建立的整個工程,所以理解makefile的規范還是有必要的,makefile讀起來也很容易理解,今天看到wilcard這個東西,不理解,然後就google了一下.cpp)C_HEADERS
:=
$(wildcard
../share/src/*.c)CPP_SRCS
:=
$(wildcard
./,Xilinx已經寫好了makefile文件
㈦ Xilinx Zynq Z-7020這款FPGA是完全使用C語言開發的嗎
硬體的最底層都是機器碼,匯編指令,但是開發者可以使用任何語言開發,最後都會被編譯器轉換成機器碼。你這個硬體的一般都是用c開發的。
㈧ 用 c/c++ 也能開發 zynq 系統sdsoc 有那麼神嗎
Zynq系列是賽靈思公司(Xilinx)推出的行業第一個可擴展處理平台,旨在為視頻監視、汽車駕駛員輔助以及工廠自動化等高端嵌入式應用提供所需的處理與計算性能水平。該系列四款新型器件得到了工具和IP 提供商生態系統的支持
㈨ 如何在Zynq-7000上燒寫PL Image
在Zynq-7000上編程PL大致有3種方法:
1. 用FSBL,將bitstream集成到boot.bin中
2. 用U-BOOT命令
3. 在Linux下用xdevcfg驅動。
步驟:
1. 去掉bitstream的文件頭
用FSBL燒寫PL Images沒有什麼好說的,用Xilinx SDK的Create Boot Image工具即可完成,不再贅述。用後兩種方法需要把bitstream文件的文件頭用bootgen工具去掉。
一個典型的bif文件如下所示:
the_ROM_image:
{
[bootloader]<fsbl_name>.elf
<pl_bitstream_name>.bit
<u-boot_name>.elf
}
bif文件可以用文本編輯器寫,也可以用Xilinx SDK的Create Boot Image工具生成。然後在命令行下用以下命令即可去掉bitstream文件的文件頭。
bootgen -image <bootimage>.bif -split bin -o i BOOT.BIN
"-split」參數可以生成以下文件:
<pl_bitstream_name>.bit.bin
2. 在U-BOOT下燒寫PL Image
命令」fpga load」和」fpga loadb」都可以。區別是前一個命令接受去掉了文件頭的bitstream文件,後一個命令接受含有文件頭的bitstream文件。
在OSL 2014.2上,預設編譯就可以完整支持寫入PL Image的功能。但是在Petalinux 2013.10下,盡管可以在U-BOOT下看到命令」fpga」,還需要在文件
<PROJ>/subsystems/linux/configs/u-boot/platform-top.h 中增加以下內容後重新編譯才可以支持具體的功能。
/* Enable the PL to be downloaded */
#define CONFIG_FPGA
#define CONFIG_FPGA_XILINX
#define CONFIG_FPGA_ZYNQPL
#define CONFIG_CMD_FPGA
#define CONFIG_FPGA_LOADFS
在OSL 2014.2 U-BOOT中,具體的功能是在zynqpl.c的zynq_load()中實現的。
3. 在Linux下燒寫PL Image
OSL Linux 2014.2.01中已經含有xdevcfg驅動了(之前就有,不過本文是在這個版本上驗證的),直接用以下命令就可以完成PL Image寫入。
㈩ 如何在Zynq 7000平台上使用Linux spidev.c驅動
一、在前一篇博客中,我們採用xilinx針對Zynq 7000處理器提供的spi-cadence.c驅動實現了晶元上SPI匯流排驅動的注冊,接下來需要修改設備樹文件以時我們的外設掛接在SPI匯流排下。
在petalinux工程的../subsystems/linux/configs/device-tree目錄下找到zynq相關的設備樹文件,目錄所包含的文件如下圖所示。
打開其中的zynq-7000.dtsi文件,找到其中的spi0節點(具體使用spi0還是spi1根據硬體工程的配置情況),並在該節點下添加如下內容: