先下載最網頁最下方的code, code_lab4
4.1.做出D型正反器 ,並且做訊號模擬。
clk:時脈訊號。
clr:清除/重設訊號。
D:輸入訊號。
q:輸出訊號。
module Dff(
input wire clk,
input wire clr,
input wire D,
output reg q );
always @(posedge clk or posedge clr)
begin
if(clr == 1)
q <= 0;
else
q <= D;
end
endmodule
按鍵設計圖:
(圖)
4.1
建立放專案的資料夾: (以後所有的專案,都會放在裡面)
1. 滑鼠連點兩次桌面上我的電腦。
2. 點開<D://>,再點滑鼠右鍵,新增一個資料夾。
3. 點滑鼠右鍵重新命名,命名為FPGA。
建立新專案:
4. 打開<ISE Project Navigator 13.4>。
5. 點選File -> New Project 。
6. Location的位置,輸入 “D:\FPGA”。
7. Name的位置,輸入”Dff”。
8. 最後,滑鼠點擊Nxet。
(圖)
專案設定:
9. Family: 選擇Spartan 3E。
10.Device: 選擇XC3S500E 或是 XC3S1200E。
11.Speed: 選擇-4。
12.Package: 選擇FG320。
13.Preterred Language: 選擇Verilog。
14.最後,點擊Next。
(圖)
15.再次確認,專案設定是否有誤。
16.滑鼠點擊Finish。
加入程式檔:
17.於左側資訊欄中點擊滑鼠右鍵,在選擇”Add Copy of Source”。
18.選出”code_lab4/Dff”資料夾內,兩個檔案”Dff.v” 和 “Dff_tb.v”,再點ok。
(圖)
邏輯合成(Synthesize):
19.連點兩下<Synthesize – XST>做邏輯合成,若是成功<Synthesize – XST>前面會出現綠色勾勾。
20.點開<Synthesize – XST>前面”+”做展開後,滑鼠左鍵連點兩次,再按OK。
(圖)
訊號模擬:
21.點選<Simulation>,再點開<Dff_tb.v>。如下(圖)
22.先點選<Dff_tb.v>,再點開<ISim Simulator>,再點左鍵連點兩下<Simulate Behavioral Module>。
(圖)
23.連點兩下<Simulate Behavioral Module>完後,會跳出一個新視窗。
24.點擊 <Zoom to Full View>,
如圖
,就可以觀看完整的訊號圖。
(圖)
25.若要放大圖,在訊號圖上,按住Ctrl且滑鼠滾輪向前滾動,反之,要縮小圖,按住Ctrl且滑鼠滾輪向後滾動。
訊號模擬(圖)
4.2.練習做出暫存器 ,並且做訊號模擬。
clk:時脈訊號。
clr:清除/重置訊號。
inp0:輸入訊號。
load:載入訊號。
q0:輸出訊號。
按鍵設計圖:
(圖)
module reg1bitb(
input wire load,
input wire clk,
input wire clr,
input wire inp0,
output reg q0
);
//1-bit register with load
always @(posedge clk or posedge clr)
begin
if (clr == 1)
q0 <= 0;
else if (load == 1)
q0 <= inp0;
end
endmodule
4.2
建立新專案:
1. 打開<ISE Project Navigator 13.4>。
2. 點選File -> New Project 。
3. Location的位置,輸入 “D:\FPGA”。
4. Name的位置,輸入”reg1bitb”。
5. 最後,滑鼠點擊Nxet。
(圖)
專案設定:
6. Family: 選擇Spartan 3E。
7. Device: 選擇XC3S500E 或是 XC3S1200E。
8. Speed: 選擇-4。
9. Package: 選擇FG320。
10.Preterred Language: 選擇Verilog。
11.最後,點擊Next。
(圖)
12.再次確認,專案設定是否有誤。
13.滑鼠點擊Finish。
加入程式檔:
14.點擊滑鼠右鍵,在選擇”Add Copy of Source”。
15.選出” code_lab4/reg1bitb”資料夾內,兩個檔案” reg1bitb .v” 和 reg1bitb_tb.v”,再點ok。
(圖)
邏輯合成(Synthesize):
16.連點兩下<Synthesize – XST>做邏輯合成,若是成功<Synthesize – XST>前面會出現綠色勾勾。
17.點開<Synthesize – XST>前面”+”做展開後,滑鼠左鍵連點兩次,在按OK。
(圖)
訊號模擬:
18.點選<Simulation>,再點開<reg1bitb_tb.v>。如下(圖)
19.先點選< reg1bitb _tb.v>,再點開<ISim Simulator>,再點左鍵連點兩下<Simulate Behavioral Module>。(圖)
(圖)
20.連點兩下<Simulate Behavioral Module>完後,會跳出一個新視窗。
21.點擊 <Zoom to Full View>,如圖
,就可以觀看完整的訊號圖。
(圖)
訊號模擬(圖)
4.3設計一個上數計數器,並且做訊號模擬。
clk:時脈訊號。
clr:清除/重置訊號。
q:輸出訊號。(3 bit)
///
module count3b(
input wire clr,
input wire clk,
output reg [2:0] q
);
// 3-bit counter
always @(posedge clk or posedge clr)
begin
if (clr == 1)
q <= 0;
else
q <= q + 1;
end
endmodule
按鍵設計圖:
(圖)
4.3
建立新專案:
1. 打開<ISE Project Navigator 13.4>。
2. 點選File -> New Project 。
3. Location的位置,輸入 “D:\FPGA”。
4. Name的位置,輸入” count3b”。
5. 最後,滑鼠點擊Nxet。
(圖)
專案設定:
6. Family: 選擇Spartan 3E。
7. Device: 選擇XC3S500E 或是 XC3S1200E。
8. Speed: 選擇-4。
9. Package: 選擇FG320。
10.Preterred Language: 選擇Verilog。
11.最後,點擊Next。
(圖)
12.再次確認,專案設定是否有誤。
13.滑鼠點擊Finish。
加入程式檔:
14.點擊滑鼠右鍵,在選擇”Add Copy of Source”。
15.選出” code_lab4/count3b”資料夾內,兩個檔案”count3b.v”和 “count3b_tb.v”,再點ok。
(圖)
邏輯合成(Synthesize):
16.連點兩下<Synthesize – XST>做邏輯合成,若是成功<Synthesize – XST>前面會出現綠色勾勾。
點開<Synthesize – XST>前面”+”做展開後,滑鼠左鍵連點兩次,在按OK。
(圖)
訊號模擬:
18.點選<Simulation>,再點開<count3b_tb.v>。如下(圖)
19.先點選<count3b_tb.v>,再點開<ISim Simulator>,再點左鍵連點兩下<Simulate Behavioral Module>。(圖)
(圖)
20.連點兩下<Simulate Behavioral Module>完後,會跳出一個新視窗。
21.點擊 <Zoom to Full View>,如圖
,就可以觀看完整的訊號圖。
(圖)
訊號模擬(圖)
做出一個除頻器,將平率為50MHZ的頻率降至190HZ 及 47.7HZ,並做訊號分析。
clr: 清除。
mclk:輸入-時脈訊號。(週期:20ns = 頻率:50MHZ)
clk48:輸出。(190 HZ)
clk190: 輸出。(47.7 HZ)
按鍵設計:
//Clock divider
module clkdiv( mclk, clr, clk190, clk48);
input mclk;
input clr;
output clk190;
output clk48;
wire clk190, clk48;
reg [24:0] q;
always @(posedge mclk or posedge clr)
begin
if(clr == 1)
q <= 0;
else
q <= q + 1;
end
assign clk190 = q[17];
assign clk48 = q[19];
endmodule
建立新專案:
1. 打開<ISE Project Navigator 13.4>。
2. 點選File -> New Project 。
3. Location的位置,輸入 “D:\FPGA”。
4. Name的位置,輸入” clkdiv”。
5. 最後,滑鼠點擊Nxet。
(圖)
專案設定:
6. Family: 選擇Spartan 3E。
7. Device: 選擇XC3S500E 或是 XC3S1200E。
8. Speed: 選擇-4。
9. Package: 選擇FG320。
10.Preterred Language: 選擇Verilog。
11.最後,點擊Next。
(圖)
12.再次確認,專案設定是否有誤。
13.滑鼠點擊Finish。
加入程式檔:
14.點擊滑鼠右鍵,在選擇”Add Copy of Source”。
選出”code_lab5_num2”資料夾內,二個檔案”clkdiv” 和 “clkdiv _tb.v”,再點ok。
(圖)
邏輯合成(Synthesize):
15.連點兩下<Synthesize – XST>做邏輯合成,若是成功<Synthesize – XST>前面會出現綠色勾勾。
16.點開<Synthesize – XST>前面”+”做展開後,滑鼠左鍵連點兩次,在按OK。
(圖)
訊號模擬:
17.點選<Simulation>,再點開<hex7seg_tb.v>。
18.先點選<mux21b_tb.v>,再點開<ISim Simulator>,再點左鍵連點兩下<Simulate Behavioral Module>。
(圖)
19.連點兩下<Simulate Behavioral Module>完後,會跳出一個新視窗。
20.點擊 <Zoom to Full View>,如圖
,就可以觀看完整的訊號圖。
(圖)
21.由於除頻後,頻率相較mclk頻率小得多,所以,訊號不會顯示。因此,我們必須點擊
(Run All),
讓他跑後面的訊號,讓他跑一段時間後,在點擊
(Break)停止,讓訊號不再往後模擬。
(圖)
22.點擊<Default.wcfg>鍵。
(圖)
23. 再次點擊 <Zoom to Full View>,如圖
,就可以觀看完整的訊號圖。
(圖)
訊號模擬圖:
(1)In the up-counter example, what is the clock frequency of signal "q[2]"?
(2)Can you derive the formula describing the frequency of "q[n-1]" in a n-bit counter with regard to the frequency of the main clock?
(3)How many bits are needed to come up with a frequency of 1Hz out of a clock of 50Mhz in a clock divider module?
(4)Design Assignment :Please design a pre-load 8-bit up/down counter.