1. 建立工程
新建工程。
工程名和工程路徑。
根據芯片型號選擇。
其他一路Next直至Finish。
2. 源文件
新建源文件:
Add Sources→Add or create design sources
Verilog代碼:(這里先以流水燈為例)
module led_stream( output reg [3:0] led, // LED4 to LED1, 1 on, 0 off input clk, // FPGA PL clock, 50 MHz input rst_n // FPGA reset pin ); reg [31:0] cnt; reg [1:0] led_on_number; //clock input 50000000 parameter CLOCK_FREQ =50000000; parameter COUNTER_MAX_CNT=CLOCK_FREQ/2-1;//change time 0.5s always @(posedge clk, negedge rst_n) begin if(!rst_n) begin cnt <= 31'd0; led_on_number <= 2'd0; end else begin cnt <= cnt + 1'b1; if(cnt == COUNTER_MAX_CNT) begin//count time 0.5s cnt <= 31'd0; led_on_number <= led_on_number + 1'b1; end end end always @(led_on_number) begin case(led_on_number) 0: led <= 4'b0001; 1: led <= 4'b0010; 2: led <= 4'b0100; 3: led <= 4'b1000; endcase end endmodule
時鍾頻率CLOCK_FREQ為50000000Hz。通過cnt累加計數,達到0.5s后改變一次輸出狀態。
3. 仿真文件
Add Sources→Add or create simulation sources
`define clk_cycle 10 module led_sim(); reg clk, rst_n; wire [3:0] led; always #`clk_cycle clk = ~clk; initial begin clk = 0; rst_n = 1; #10 rst_n = 0; #10 rst_n = 1; end led_stream led_stream(.rst_n(rst_n), .clk(clk), .led(led)); endmodule
時鍾周期20ns,故設置clk每隔10ns翻轉一次。效果如下圖所示。
仿真至2s出頭,得到結果如下圖所示,可知程序正確。
led按照0001→0010→0100→1000的順序變化。
4. 綜合
點擊Run Synthesis
Number of jobs代表綜合消耗的進線程。
點擊OK開始綜合,同時窗口右上角顯示綜合正在運行的提示。
綜合完成后顯示
5. 管腳綁定
Open Elaborated Design
觀察原理圖。
LED引腳and復位按鍵引腳:
時鍾引腳:
根據原理圖綁定管腳:
保存管腳約束文件(Ctrl+S):
6. 實現
Run Implementation
Generate Bitstream
打開硬件管理器 Open Hardware Mnager:
連接ZYNQ開發板,選擇Auto Connect
點擊Program進行燒寫操作
效果: