vivado2017.4開發vc707(virtex7)(一)上電除錯
開學之初老師扔給作者一塊開發板vc707 讓作者把上面的資源都用一用 準備開始下一步工作。原本想在網上找這塊板子的一些中文開發資料,實在是有點少,所以就決定記錄下自己的開發過程,與各位相互印證。
安裝和license在網上down一下就好了,這裡就不寫了。
先給vc707上個電,用資料線將板子連上電腦,一般來說是需要下載驅動的,弄一個驅動精靈,掃描一下,然後直接安裝就可以了。去網上找這個驅動也是可以的。vc707的手冊是UG885,去xilinx官網下一個就行。
然後開啟vivado。
該軟體以前沒有使用過。先跑一個流水燈看看再說。
1.建立工程
2.next
3.名字和目錄
4.
在這裡作者講一下這幾個選項的區別。
(1)RTL project
做FPGA的肯定都知道RTL級,簡單的就說verilog程式碼, 行為級就是不一定可以綜合的,什麼都可以寫。RTL級就是行為級裡面可以用綜合器綜合的,綜合之後就是門級。這裡的RTL project就是可以用來綜合的工程,咱們一般就用這個就可以了。
(2)Post-Synthesis Projects
翻譯過來是 綜合後的工程。這種工程,就是直接新增綜合後的網表,然後和前面的RTL工程沒什麼區別,也是實現佈局佈線。例如.ngc, .edif, .edn, .ncd, .dcp這樣的檔案。可能是本人電腦不夠強大,用vivado跑綜合實在是有點慢,之後可能會考慮用其他綜合工具。
(3)I/O Planning Projects
設定I/O口等等,感覺這個選項沒有太大的作用,就看一下I/O佈局之類的。
(4)Imported Project
匯入其他工具寫好的工程。
(5)Example Project
按照預定義的模板建立一個工程。
我們選擇第一個,VC707的型號如下
建立之後, add sourse
第一個是約束 第二個是普通的檔案 第三個是 模擬檔案 先選第二個。建立之後開始寫程式碼。
由於板子上只有差分時鐘,所以我們需要用上差分轉單端的原語。
對於差分時鐘訊號 ,我們使用IBUFGDS來替代IBUFDS。注意:vc707的reset按鈕 按下去的時候 電平是1 ;
這裡使用了一個clock ip 把200MHZ轉換為5MHZ了。
module top_led(
input sys_clk_p, // 開發板上差分輸入時鐘 200Mhz
input sys_clk_n,
input rst,
output reg [7:0] led
);
wire sys_clk_ibufg;
wire clk;
IBUFGDS #
(
.DIFF_TERM ("FALSE"),
.IBUF_LOW_PWR ("FALSE")
)
u_ibufg_sys_clk
(
.I (sys_clk_p), //差分時鐘正端輸入
.IB (sys_clk_n), // 差分時鐘負端輸入
.O (sys_clk_ibufg) //時鐘緩衝輸出
);
reg [26:0]count;
clk_wiz_0 instance_name
(
// Clock out ports
.clk_out1(clk), // output clk_out1 5MHZ
// Status and control signals
.reset(rst), // input reset
.locked(), // output locked
// Clock in ports
.clk_in1(sys_clk_ibufg));
[email protected](posedge clk or posedge rst)begin
if(rst)begin
count <= 0;
led <= 8'b10101010;
end
else begin
if(count ==26'd2499999)begin
count<= 0;
led<={led[6:0],led[7]};
end
else count <=count+1;
end
end
endmodule
再新增約束檔案
set_property PACKAGE_PIN E19 [get_ports sys_clk_p]
set_property IOSTANDARD LVDS [get_ports sys_clk_p]
set_property PACKAGE_PIN E18 [get_ports sys_clk_n]
set_property IOSTANDARD LVDS [get_ports sys_clk_n]
set_property PACKAGE_PIN AV40 [get_ports rst]
set_property IOSTANDARD LVCMOS18 [get_ports rst]
set_property PACKAGE_PIN AM39 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[0]}]
set_property PACKAGE_PIN AN39 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[1]}]
set_property PACKAGE_PIN AR37 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[2]}]
set_property PACKAGE_PIN AT37 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[3]}]
set_property PACKAGE_PIN AR35 [get_ports {led[4]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[4]}]
set_property PACKAGE_PIN AP41 [get_ports {led[5]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[5]}]
set_property PACKAGE_PIN AP42 [get_ports {led[6]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[6]}]
set_property PACKAGE_PIN AU39 [get_ports {led[7]}]
set_property IOSTANDARD LVCMOS18 [get_ports {led[7]}]
然後就跑一個bit檔案出來 。開啟hardware mannager,給板子上電,
這裡自動尋找一下。如果找不到,看看是不是沒上電 ,JTAG線是不是插錯位置了,驅動是不是下好了。
點 program Device,程式設計完成之後就可以看到現象了。