由于在本范例中,design_1_wrapper.v 也就是 toplevel 的模塊,因此在這邊將對外的 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
改好后,點選上方的 Run Implementation 來確認我們這樣的修改是否能編譯/驗證成功。
產(chǎn)生比特流 (bitstream)
前面的處理都好了后,接下來點選 Program and Debug -> Generate Bitstream 去讓 Vivado 將這個項目產(chǎn)生出比特流 (bitstream),ZYNQ 會根據(jù) bitstream 的信息對 FPGA 進行設(shè)定。
當 bitstream 產(chǎn)生完成后,由于我們這次的實作,是要透過寫 C 語言程序來控制 Zynq 進行 LED 的亮暗,因此要先將剛剛產(chǎn)生的硬件信息輸出給 Xilinx SDK 去。
點選 File -> Export -> Export Hardware
確定你有勾選 Include bitstream ,點選 Ok
完成后,啟動 Xilinx SDK
Xilinx SDK
我們啟動 Xilinx SDK 后,可以先看到一些像是地址映像 (Address Map) 的信息
選擇 File -> New -> Application Project 去建立新的項目
這邊我命名這個項目叫做 LED,并且為獨立的程序
選擇 Empty Application ,我們要自己來寫我們的程序。
當項目建立完成后,會自動打開 LED_bsp 里面的 system.mss ,里面會顯示我們所用的外圍范例程序代碼以及使用手冊的連結(jié),我們可以點選這些鏈接來了解這些外圍要怎樣使用。
如果你連結(jié)點選不開的話,可以到你安裝 SDK 的路徑下去尋找,比如說我裝的是 Vivado 2016.2,則手冊的路徑在
/opt/Xilinx/SDK/2016.2/data/embeddedsw/XilinxProcessorIPLib/drivers
這里給個結(jié)果的范例,比如我想要查詢 xgpio 的資料,則可以看到如下的 HTML 檔案
建立 main.c
由于我們建立的是空白項目,必須自己添加自己的主程序,因此我們對 LED 項目的 src 按下右鍵,選擇建立新的檔案
這邊將它命名為 main.c ,也就是我們唯一的主程序,點選 Finish 完成檔案建立。
在 main.c 加入以下程序代碼,具體功能待會在說明。
#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
評論