Vivado的功能真是太強大了,學習Xilinx准沒錯,把一個工程的完整流程整理出來,為自己以后看。
雙擊桌面的vivado圖標,(可能有點慢)
彈出主菜單界面,點擊create new project
這是介紹界面,next~
添加好工程名,和工程位置,next~
選擇rtl Project,next~
選擇板卡型號,我這里使用的是A-7系列的basys3,用戶根據自己的板卡型號自定義,next~
這一面是總結,finish~
左邊這一欄,我們用到哪里解釋哪里,首先,點擊add source 添加verilog HDL文件
選擇新建一個設計文件,next~
左邊是添加已有的文件,右邊是新建一個verilog HDL文件,我們前面沒有文件,所以選擇新建一個新的文件
上面是文件類型,我用的是verilog,添加文件名,我這里用的是流水燈,文件名為led_water
添加成功,點擊finish
點擊OK
Yes
雙擊這個文件,打開編寫

1 `timescale 1ns / 1ps 2 ////////////////////////////////////////////////////////////////////////////////// 3 // Company: 4 // Engineer: NingHeChuan 5 // 6 // Create Date: 2017/05/19 17:06:50 7 // Design Name: 8 // Module Name: led_water 9 // Project Name: 10 // Target Devices: 11 // Tool Versions: 12 // Description: 13 // 14 // Dependencies: 15 // 16 // Revision: 17 // Revision 0.01 - File Created 18 // Additional Comments: 19 // 20 ////////////////////////////////////////////////////////////////////////////////// 21 module led_water( 22 input clk, 23 input rst_n, 24 output reg [7:0] led 25 ); 26 27 reg[25:0] cnt;//設定一個26位的計數器 28 parameter TIME = 26'd50000000; 29 //parameter TIME = 26'd500;//just test 30 31 always@(posedge clk or negedge rst_n) 32 begin 33 if(!rst_n) 34 cnt <= 1'b0; 35 else if(cnt == TIME-1'b1) 36 cnt <= 1'b0;//當cnt計數達到50mhz時,計數器清零 37 else 38 cnt <= cnt + 1'b1;//否則計數器+1 39 end 40 41 always@(posedge clk or negedge rst_n) 42 begin 43 if(!rst_n) 44 led <= 8'b0000_1111; 45 else if(cnt == TIME - 1'b1)//當計數器達到1s時鍾執行此條件 46 led <= {led[0], led[7:1]}; 47 else 48 led <= led; 49 end 50 51 endmodule
這是一個流水燈工程
編寫完成后,點擊如圖所示可以,編譯文件,也可查看工程的RTL圖
這是生成的RTL圖,雙擊如圖所示部分可以將窗口放大。
原理圖出來后,說明該工程沒有語法錯誤,然后再次add source,選擇add or create simulation source添加測試文件,
同樣選擇新建一個文件
Yes
找到到tb_led_water文件雙擊打開

1 `timescale 1ns / 1ps 2 ////////////////////////////////////////////////////////////////////////////////// 3 // Company: 4 // Engineer: NingHeChuan 5 // 6 // Create Date: 2017/05/19 17:19:00 7 // Design Name: 8 // Module Name: tb_led_water 9 // Project Name: 10 // Target Devices: 11 // Tool Versions: 12 // Description: 13 // 14 // Dependencies: 15 // 16 // Revision: 17 // Revision 0.01 - File Created 18 // Additional Comments: 19 // 20 ////////////////////////////////////////////////////////////////////////////////// 21 22 23 module tb_led_water( 24 ); 25 26 reg clk; 27 reg rst_n; 28 wire [7:0] led; 29 30 led_water uut_led_water( 31 .clk (clk), 32 .rst_n (rst_n), 33 .led (led) 34 ); 35 36 always #10 clk = ~clk; 37 38 initial begin 39 clk = 0; 40 rst_n = 0; 41 #100; 42 rst_n = 1; 43 44 end 45 46 endmodule
編寫測試文件
點擊run simulation 點擊 run behavioral simulation 進行仿真
1 2 reg[25:0] cnt;//設定一個26位的計數器 3 parameter TIME = 26'd50000000; 4 //parameter TIME = 26'd500;//just test
注意,仿真前把測試文件改小一點,不然跑的太慢,
點擊run-all讓流水燈跑起來,
可以看到流水燈的數值在變化,說明設置正確。然后要做的是下板子仿真
點擊add source 添加約束文件,add constraints
新建一個引腳約束文件,OK
點擊新建好的文件,

set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}] set_property PACKAGE_PIN V14 [get_ports {led[7]}] set_property PACKAGE_PIN U14 [get_ports {led[6]}] set_property PACKAGE_PIN U15 [get_ports {led[5]}] set_property PACKAGE_PIN W18 [get_ports {led[4]}] set_property PACKAGE_PIN V19 [get_ports {led[3]}] set_property PACKAGE_PIN U19 [get_ports {led[2]}] set_property PACKAGE_PIN E19 [get_ports {led[1]}] set_property PACKAGE_PIN V16 [get_ports {led[0]}] set_property IOSTANDARD LVCMOS33 [get_ports clk] set_property IOSTANDARD LVCMOS33 [get_ports rst_n] set_property PACKAGE_PIN W5 [get_ports clk] set_property PACKAGE_PIN V17 [get_ports rst_n]
將約束文件內容復制進去,
最后點擊大綜合,對工程進行綜合,綜合完成后就可以下板子了。(下板子的時候要把測試時候改的代碼改回來)
點擊open target——>auto connect,會自動連接設備,或者直接連接recent target,直接選擇你的設備
點擊program device
點擊program。即可下載成功。
轉載請注明出處:NingHeChuan(寧河川)
個人微信訂閱號:NingHeChuan
如果你想及時收到個人撰寫的博文推送,可以掃描左邊二維碼(或者長按識別二維碼)關注個人微信訂閱號
知乎ID:NingHeChuan
微博ID:NingHeChuan