《一步一步學ZedBoard & Zynq》系列第二篇,目的是為了學習不使用ARM PS情況下,只對Zynq PL的編程方法,同時學習Xilinx PlanAhead工具的使用方法
更多更新請關注我的博客:@超群天晴 http://www.cnblogs.com/surpassal/
硬件平台:Digilent ZedBoard
開發環境:Windows XP 32 bit
軟件: XPS 14.2 +PlanAhead 14.2
新建工程LAB2
項目設置中,需要將芯片選為Zynq
選擇文件類型為verilog,名稱就ledwater
之后會提示引腳信息,默認空就可以,隨后可以通過verilog代碼來實現。
進入ISE后,添加源文件,內容如下
1 /* 2 《一步一步學ZedBoard & Zynq》些列第二篇:使用Zynq的PL做流水燈 3 2012年9月11日10:31:13 4 超群天晴 5 */ 6 7 module ledwater( 8 input BTNU, 9 input GCLK, 10 output [7:0] LD 11 ); 12 wire clk,rst; 13 reg [7:0] LD_reg; 14 reg [31:0] cnt; 15 16 assign clk = GCLK; 17 assign rst = ~BTNU; 18 assign LD = LD_reg; 19 20 always@(posedge clk or negedge rst) 21 begin 22 if(rst==1'b0)begin 23 LD_reg <= 8'b1000_0000; 24 cnt <= 32'b0; 25 end 26 else begin 27 if (cnt == 32'd25000000)begin 28 cnt <= 32'b0; 29 LD_reg <=(LD_reg>>1)|(LD_reg<<7); 30 end 31 else begin 32 cnt <= cnt + 32'b1; 33 end 34 end 35 end 36 37 endmodule
這里設定BTNU為復位,GCLK是時鍾
查看ZedBoard的原理圖,可以知道BTNU默認是低電平。
為了實現rst下降沿復位,第38句使用了一次取反
1 assign rst = ~BTNU;
小燈的移位采用“左移1位+右移N-1”模式,第29行可以看出來
1 LD_reg <=(LD_reg>>1)|(LD_reg<<7);
設定引腳約束,ucf內容如下。LOC表示引腳鎖定,IOSTANDARD表明引腳電平。完整的ucf文件可以從Diligent官方網站上下載
1 NET LD[0] LOC = T22 | IOSTANDARD=LVCMOS33; # "LD0" 2 NET LD[1] LOC = T21 | IOSTANDARD=LVCMOS33; # "LD1" 3 NET LD[2] LOC = U22 | IOSTANDARD=LVCMOS33; # "LD2" 4 NET LD[3] LOC = U21 | IOSTANDARD=LVCMOS33; # "LD3" 5 NET LD[4] LOC = V22 | IOSTANDARD=LVCMOS33; # "LD4" 6 NET LD[5] LOC = W22 | IOSTANDARD=LVCMOS33; # "LD5" 7 NET LD[6] LOC = U19 | IOSTANDARD=LVCMOS33; # "LD6" 8 NET LD[7] LOC = U14 | IOSTANDARD=LVCMOS33; # "LD7" 9 10 NET GCLK LOC = Y9 | IOSTANDARD=LVCMOS33; # "GCLK" 11 NET BTNU LOC = T18 | IOSTANDARD=LVCMOS18; # "BTNU"
使用PlanAhead I/O pin planing(post synthesis)可以看到引腳約束的結果
下載之后能看到板子上LD0~LD7流水效果
完整工程下載:LAB2.rar