由于在本范例中,design_1_wrapper.v 也就是 toplevel 的模塊,因此在這邊將對(duì)外的 gpio_rtl_tri_o 接腳改為 led 讓它接出即可。
diff --git a/led_flash_zynq.srcs/sources_1/imports/hdl/design_1_wrapper.v b/led_flash_zynq.srcs/sources_1/imports/hdl/design_1_wrapper.v
index 7b1b0bd..c57caa0 100644
--- a/led_flash_zynq.srcs/sources_1/imports/hdl/design_1_wrapper.v
+++ b/led_flash_zynq.srcs/sources_1/imports/hdl/design_1_wrapper.v
@@ -31,7 +31,7 @@ module design_1_wrapper
FIXED_IO_ps_clk,
FIXED_IO_ps_porb,
FIXED_IO_ps_srstb,
- gpio_rtl_tri_o);
+ led);
inout [14:0]DDR_addr;
inout [2:0]DDR_ba;
inout DDR_cas_n;
@@ -53,7 +53,7 @@ module design_1_wrapper
inout FIXED_IO_ps_clk;
inout FIXED_IO_ps_porb;
inout FIXED_IO_ps_srstb;
- output [3:0]gpio_rtl_tri_o;
+ output [3:0]led;
wire [14:0]DDR_addr;
wire [2:0]DDR_ba;
@@ -76,7 +76,7 @@ module design_1_wrapper
wire FIXED_IO_ps_clk;
wire FIXED_IO_ps_porb;
wire FIXED_IO_ps_srstb;
- wire [3:0]gpio_rtl_tri_o;
+ wire [3:0]led;
design_1 design_1_i
(.DDR_addr(DDR_addr),
@@ -100,5 +100,5 @@ module design_1_wrapper
.FIXED_IO_ps_clk(FIXED_IO_ps_clk),
.FIXED_IO_ps_porb(FIXED_IO_ps_porb),
.FIXED_IO_ps_srstb(FIXED_IO_ps_srstb),
-
.gpio_rtl_tri_o(gpio_rtl_tri_o));
+
.gpio_rtl_tri_o(led));
endmodule
改好后,點(diǎn)選上方的 Run Implementation 來(lái)確認(rèn)我們這樣的修改是否能編譯/驗(yàn)證成功。
產(chǎn)生比特流 (bitstream)
前面的處理都好了后,接下來(lái)點(diǎn)選 Program and Debug -> Generate Bitstream 去讓 Vivado 將這個(gè)項(xiàng)目產(chǎn)生出比特流 (bitstream),ZYNQ 會(huì)根據(jù) bitstream 的信息對(duì) FPGA 進(jìn)行設(shè)定。
當(dāng) bitstream 產(chǎn)生完成后,由于我們這次的實(shí)作,是要透過(guò)寫(xiě) C 語(yǔ)言程序來(lái)控制 Zynq 進(jìn)行 LED 的亮暗,因此要先將剛剛產(chǎn)生的硬件信息輸出給 Xilinx SDK 去。
點(diǎn)選 File -> Export -> Export Hardware
確定你有勾選 Include bitstream ,點(diǎn)選 Ok
完成后,啟動(dòng) Xilinx SDK
Xilinx SDK
我們啟動(dòng) Xilinx SDK 后,可以先看到一些像是地址映像 (Address Map) 的信息
選擇 File -> New -> Application Project 去建立新的項(xiàng)目
這邊我命名這個(gè)項(xiàng)目叫做 LED,并且為獨(dú)立的程序
選擇 Empty Application ,我們要自己來(lái)寫(xiě)我們的程序。
當(dāng)項(xiàng)目建立完成后,會(huì)自動(dòng)打開(kāi) LED_bsp 里面的 system.mss ,里面會(huì)顯示我們所用的外圍范例程序代碼以及使用手冊(cè)的連結(jié),我們可以點(diǎn)選這些鏈接來(lái)了解這些外圍要怎樣使用。
如果你連結(jié)點(diǎn)選不開(kāi)的話,可以到你安裝 SDK 的路徑下去尋找,比如說(shuō)我裝的是 Vivado 2016.2,則手冊(cè)的路徑在
/opt/Xilinx/SDK/2016.2/data/embeddedsw/XilinxProcessorIPLib/drivers
這里給個(gè)結(jié)果的范例,比如我想要查詢(xún) xgpio 的資料,則可以看到如下的 HTML 檔案
建立 main.c
由于我們建立的是空白項(xiàng)目,必須自己添加自己的主程序,因此我們對(duì) LED 項(xiàng)目的 src 按下右鍵,選擇建立新的檔案
這邊將它命名為 main.c ,也就是我們唯一的主程序,點(diǎn)選 Finish 完成檔案建立。
在 main.c 加入以下程序代碼,具體功能待會(huì)在說(shuō)明。
#include "xparameters.h"
#include "xgpio.h"
#include
#include
void simple_delay (int simple_delay)
{
volatile int i = 0;
for (i = 0; i < simple_delay; i++);
}
int main(int argc, char *argv[])
{
XGpio led_gpio;
/* LED Instance */
/* Initialize LED GPIO settings */
XGpio_Initialize(&led_gpio, XPAR_AXI_GPIO_0_DEVICE_ID);
XGpio_SetDataDirection(&led_gpio, 1, 0);
/* Output something via UART1, 115200 baudrate */
printf("Start to blink led_gpio !!!\n\r");
int led_value = 0x03; /* default led_gpio value */
while(1) {
printf("led_gpio value set to 0x%X\n\r", led_value);
/* Set GPIO Channel 1 value. */
XGpio_DiscreteWrite(&led_gpio, 1 , led_value);
/* sleep and change led_gpio value */
simple_delay(10000000);
led_value = ~led_value;
}
return 0;
}
main.c
評(píng)論
查看更多