1. 程式人生 > >vivado2017.4開發vc707(virtex7)(一)上電除錯

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,程式設計完成之後就可以看到現象了。