本篇博文簡要介紹下通過ISE操作spartan-3e starter kit board上的4個滑動開關和8個led燈。
一、設計思路
1、板子上的led燈一端已經接低電平了,所以,要點亮的話就要向另一端輸出高電平即可。
2、板子上內建的50MHZ晶振以及reset鍵都是設計模組的輸入。以便能夠及時響應3中的輸入。
3、4個滑動開關中SW2、SW1、SW0作為另一組輸入。
4、SW2、SW1、SW0的編碼即是要被點亮的led燈。即其=000,則led0點亮、=001,led1點亮。
二、從ISE建立project到最終將.bit下載到板子
1、fire->new project
2、晶片的型號以及封裝必須選擇好
3、
4、按右鍵工程管理區,選擇new source,選擇verilog module,填入fire name
5、設定模組的輸入輸出口,就是verilog源碼中的input與output
6、
7、在客戶區輸入所要構建的模組的verilog源碼
8、源碼編輯好後,左鍵雙擊過程管理區的check syntax確認有沒有語法錯誤
9、左鍵雙擊synthesize-xst完成綜合
10、view選擇simulation,按右鍵工程管理區,選擇new source,選擇verilog test fixture,輸入file name
11、
12、
13、輸入測試代碼,本例就是在客戶區的紅線地區。其他例子不一定!
14、按右鍵simulate behavioral model,選擇properties設定模擬的一些參數。
15、
16、按右鍵工程管理區,選擇new source,選擇implementation constraints file
17、
18、輸入約束代碼
19、雙擊implement design,完成實現步驟
20、實現完成之後,通過design summary,查看pinout report。如果,引腳約束與你定義的一致,則正確;
否則,右鍵依次雙擊synthesize-xst與implement design,直到引腳約束正確方可進行下一步。
21、雙擊generate programming file,產生.bit檔案
22、雙擊configure target device,點擊ok,代開iMPACT準備下載.bit檔案到板子
23、雙擊boundary scan
24、
25、左鍵點擊initialize chain,檢測板子的存在
26、選擇要現下載的.bit檔案
27、
28、
29、
30、滑鼠放在表徵圖上(顏色會變深),點擊右鍵,選擇program,如果提示program successed,則說明
已成功下載。
31、操作板子,觀察實驗結果是否符合設計。
三、總結
1、博主的ISE版本是13.3。不同的版本操作可能會有所差異。
2、實驗代碼:
led代碼:
module led(CLK,RST,LED,MODE); input CLK; input RST; input [2:0] MODE; output [7:0] LED; reg [7:0] LED = 8'b10101010; reg [24:0] cnt_clk; reg div_clk; always @ (posedge CLK or posedge RST)beginif(RST)begincnt_clk <= 25'd0;div_clk <= 1'b0;endelse beginif(cnt_clk == 25'd9999999)begincnt_clk <=25'd0;div_clk <= ~div_clk;endelse begincnt_clk <= cnt_clk + 1'b1;div_clk <= div_clk;endendendalways @ (posedge div_clk or posedge RST)beginif(RST)beginLED <= 8'b10101010;endelse begincase (MODE)3'b000 :LED <= 8'b1;3'b001 :LED <= 8'b10;3'b010 :LED <= 8'b100;3'b011 : LED <= 8'b1000;3'b100 : LED <= 8'b10000;3'b101 :LED <= 8'b100000;3'b110 : LED <= 8'b1000000;3'b111 : LED <= 8'b10000000;endcaseendendendmodule
ucf約束檔案:
NET "CLK" LOC = "C9" | IOSTANDARD = LVCMOS33;NET "CLK" PERIOD = 20ns HIGH 40%;NET "RST" LOC = "K17" | IOSTANDARD = LVTTL | PULLDOWN;NET "MODE<0>" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP;NET "MODE<1>" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP;NET "MODE<2>" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP;NET "LED<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;NET "LED<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;NET "LED<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;NET "LED<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;NET "LED<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;NET "LED<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;NET "LED<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;NET "LED<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 4;
模擬代碼:
module led_test;// Inputsreg CLK;reg RST;reg [2:0] MODE;// Outputswire [7:0] LED;// Instantiate the Unit Under Test (UUT)led uut (.CLK(CLK), .RST(RST), .LED(LED), .MODE(MODE));always #5 CLK = ~CLK;initial begin// Initialize InputsCLK = 0;RST = 0;MODE = 0;// Wait 100 ns for global reset to finish#100; // Add stimulus hereRST = 0;MODE = 3'b001;#10000;MODE = 3'b010;#10000;MODE = 3'b100;#1000 $stop;end endmodule
3、以前學過cc2430的板子,現在開始學FPGA,純菜鳥一枚呀。不過總體感覺來說,硬體的東西,
那些晶片的資料是很重要的。一塊電路板上一般都是一個處理器外加若干外設,外設也和處理器有
串連了,但這都是坐在電路板上了。需要晶片資料來獲得一定的資訊,便於我們使用。
4、也期待大神們不吝賜教!