使用ISE軟體設計並仿真,使用ISE軟體進行4位移位寄存器的設計與實現。
步驟
1. 編寫文本文件並編譯
2. 軟體仿真
3. 進行硬體配置
原理
1. ISE軟體是一個支持數字系統設計的開發平臺。
2. 用ISE軟體進行設計開發時基於相應器件型號的。
注意:軟體設計時選擇 的器件型號是與實際下載板上的器件型號相同。
3. 圖6-1所示為4位
雙擊桌面上「ISE Design Suite 14.7」圖標,啟動ISE軟體(也可從開始菜單啟動)。每次打開ISE都會默認恢復到最近使用過的工程界面。當第一次使用時,由於還沒有歷史工程記錄,所以工程管理區顯示空白。選擇File New--Project選項,在彈出的對話框中輸入工程名稱並指定工程路徑。
點擊Next按鈕進入下一頁,選擇所使用的晶片及綜合、仿真工具。計算機上安裝的所有用於仿真和綜合的第三方EDA工具都可以在下拉菜單中找到。在圖中我們選用了Spartan6 XC6SLX16晶片,採用CSG324封裝,這是NEXYS3開發板所用的晶片。另外,我們選擇Verilog作為默認的硬體描述語言。
再點擊Next按鈕進入下一頁,這裡顯示了新建工程的信息,確認無誤後,點擊Finish就可以建立一個完整的工程了。
在工程管理區任意位置單擊滑鼠右鍵,在彈出的菜單中選擇New Source命令,選擇Verilog Module輸入,並輸入Verilog文件名。
單擊Next按鈕進入埠定義對話框。其中Module Name欄用於輸入模塊名,這裡是shiftreg,下面的列表框用於埠的定義。Port Name表示埠名稱,Direction表示埠方向(可選擇為input、output或inout),MSB表示信號最高位,LSB表示信號最低位,對於單信號的MSB和LSB不用填寫。當然,埠定義這一步
我們也可以略過,在源程序中再行添加。
定義了模塊的埠後,單擊Next進入下一步,點擊Finish完成創建。這樣,ISE就會自動創建一個Verilog模塊的模板,並且在原始碼編輯區打開。簡單的注釋、模塊和埠定義已經自動生成,接下來的工作就是將代碼編寫完整。
輸入代碼後,我們還需要對模塊進行測試。在工程管理區將view設置為Simulation,在任意位置單擊滑鼠右鍵,並在彈出的菜單中選擇New Source,在類型中選擇Verilog Test Fixture,輸入測試文件名,單擊下一步。這時所有工程中的模塊名都會顯示出來,我們選擇要進行測試的模塊。點擊Next ,再單擊Finish按鈕,ISE會在原始碼編輯區自動生成測試模塊的代碼。我們看到,ISE已經自動生成了基本的信號並對被測模塊做了例化。我們的工作就是在initial„end塊中的「//Add stimulus here」後面添加測試向量。
完成測試文件編輯後,確認工程管理區中view選項設置為Simulation,這時在過程管理區會顯示與仿真有關的進程。右鍵單擊其中的Simulate Behavioral Model項,選擇彈出菜單中的Process Properties項,會彈出屬性設置對話框,其中Simulation Run Time就是仿真時間的設置,可將其修改為任意時長。
仿真參數設置完後,就可以進行仿真。首先在工程管理區選中測試代碼,然後在過程管理區雙擊Simulate Behavioral Model,ISE將啟動ISE Simulator,可以得到仿真結果,如圖6-2所示。
在工程管理區的view中選擇Implementation,然後在過程管理區雙擊Synthesize-XST,就可以開始綜合過程。
另外,要實現設計,還需要為模塊中的輸入輸出信號添加管腳約束,這就需要在工程中添加UCF文件。在工程管理區單擊滑鼠右鍵,點擊New Source,選擇Implementation- Constraints File,出現一個空白的約束文件,我們就可以為設計添加各種約束。如果綜合步驟沒有語法錯誤,XST能夠給出初步的資源消耗情況,點擊Design Summary,即可查看。
在過程管理區雙擊Implementation Design選項,就可以自動完成實現步驟。如果設計沒有經過綜合,就會啟動XST完成綜合,在綜合後完成實現過程。經過實現後能夠得到精確的資源佔用情況。在Design Summary即可看到具體的資源佔用情況。
硬體配置是FPGA開發最關鍵的一步,只有將HDL代碼下載到FPGA晶片中,才能進行調試並最終實現相應的功能。首先我們必須生成能下載到硬體中的二進位比特文件。雙擊過程管理區的Generate Programming File,ISE就會為設計生成相應的二進位比特文件。
然後利用USB-MiniUSB纜線,來為開發板提供電源和數據下載。我們只需上網下載免費的Digilent Adept軟體,即可快速實現Nexys3開發板上FPGA的配置。用USB-MiniUSB纜線連接開發板和PC,打開開發板的電源開關,然後啟動Digilent Adept軟體。系統開始自動連接FPGA設備,成功檢測到設備後,會顯示出JTAG鏈上所用晶片。
界面上將顯示檢測到NEXYS3開發板上的器件FPGA(XC6SLX16)。這裡我們對FPGA進行配置。在Browse中找到之前生成的設計的二進位比特文件,並點擊旁邊的Program按鈕,軟體就開始對FPGA進行配置。配置成功後,下面的狀態欄會顯示Programming Successful。至此,器件配置成功,我們就可以在器件上驗證預期的設計有沒有很好的得以實現。
移位寄存器,不但可以寄存數碼,還可以在脈衝信號的作用下,寄存數碼可以根據需求發生偏移。在本次設計中使用分頻信號來充當脈衝信號,控制在人眼可視範圍內(始終頻率低於10Hz)寄存自動發生發生偏移,代碼如下:
module Design_Code(
《span style=「white-space:pre」》 《/span》input clk,《span style=「white-space:pre」》 《/span》//input by 「V10」
《span style=「white-space:pre」》 《/span》input clr,
《span style=「white-space:pre」》 《/span》input data,
《span style=「white-space:pre」》 《/span》output reg [3:0] out
);
《span style=「white-space:pre」》 《/span》
reg [26:0] c;
assign mclk = c[5];《span style=「white-space:pre」》 《/span》// The Data of Simulation《span style=「white-space:pre」》 《/span》
//assign mclk = c[26];《span style=「white-space:pre」》 《/span》//Easy for person to distinguish
always @ (posedge clk)
《span style=「white-space:pre」》 《/span》begin
《span style=「white-space:pre」》 《/span》//c《= c + 1;
《span style=「white-space:pre」》 《/span》if(clr)
《span style=「white-space:pre」》 《/span》c《=0;
《span style=「white-space:pre」》 《/span》else
《span style=「white-space:pre」》 《/span》c 《= c+1『b1;
《span style=「white-space:pre」》 《/span》end
always @ (posedge mclk or posedge clr)
《span style=「white-space:pre」》 《/span》begin
《span style=「white-space:pre」》 《/span》if(clr)
《span style=「white-space:pre」》 《/span》out 《= 4』b0;
《span style=「white-space:pre」》 《/span》else
《span style=「white-space:pre」》 《/span》out 《= {data, out[3:1]};
《span style=「white-space:pre」》 《/span》end
endmodule
在本次設計中使用到了非阻塞賦值「《=」。它與阻塞賦值「=」是有區別的。
阻塞賦值:算式y=b,一旦執行當前的賦值語句,賦值目標變量y幾顆獲得等號右邊表達式的計算值。在這裡值得注意的是,如果一塊語句中含有多條阻塞賦值語句,那麼當執行某一條語句時其他語句被阻塞,將禁止執行。阻塞賦值的執行有點像串行執行。
非阻塞賦值:算式y《=b,必須在語句塊結束時完成整體賦值。在執行某一條語句時,對於語句塊的其他賦值算式不進行限制,換句話說,語句塊中的非阻塞賦值算式是並行執行的。
注意:由於assign不能引導語句塊,故只能使用阻塞賦值。
注意:阻塞賦值與非阻塞賦值不可以混合使用。
initial begin
// Initialize Inputs
data = 1;
clr = 1;
clk = 0;
end
always
begin
#1
clk = ~clk;
end
always
begin
#100000
clr = ~clr;
end
always
begin
#500
data = ~data;
end
注意:在寫仿真部分時always與initial不能相互嵌套。使用復位信號(例如:clr)時,x先使能復位信號,一段時間後取消復位信號(避免系統一直處於復位狀態)
在這裡可能需要仿真的時間比較長,可以通過調節仿真器的屬性更改仿真時間,操作如下
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴