4位移位寄存器的設(shè)計(jì)與實(shí)現(xiàn)
使用ISE軟件設(shè)計(jì)并仿真,使用ISE軟件進(jìn)行4位移位寄存器的設(shè)計(jì)與實(shí)現(xiàn)。
步驟
1. 編寫文本文件并編譯
2. 軟件仿真
3. 進(jìn)行硬件配置
原理
1. ISE軟件是一個(gè)支持?jǐn)?shù)字系統(tǒng)設(shè)計(jì)的開(kāi)發(fā)平臺(tái)。
2. 用ISE軟件進(jìn)行設(shè)計(jì)開(kāi)發(fā)時(shí)基于相應(yīng)器件型號(hào)的。
注意:軟件設(shè)計(jì)時(shí)選擇 的器件型號(hào)是與實(shí)際下載板上的器件型號(hào)相同?! ?br />
? ? ? ? 3. 圖6-1所示為4位

(1) 新建工程
雙擊桌面上“ISE Design Suite 14.7”圖標(biāo),啟動(dòng)ISE軟件(也可從開(kāi)始菜單啟動(dòng))。每次打開(kāi)ISE都會(huì)默認(rèn)恢復(fù)到最近使用過(guò)的工程界面。當(dāng)?shù)谝淮问褂脮r(shí),由于還沒(méi)有歷史工程記錄,所以工程管理區(qū)顯示空白。選擇File New--Project選項(xiàng),在彈出的對(duì)話框中輸入工程名稱并指定工程路徑。
點(diǎn)擊Next按鈕進(jìn)入下一頁(yè),選擇所使用的芯片及綜合、仿真工具。計(jì)算機(jī)上安裝的所有用于仿真和綜合的第三方EDA工具都可以在下拉菜單中找到。在圖中我們選用了Spartan6 XC6SLX16芯片,采用CSG324封裝,這是NEXYS3開(kāi)發(fā)板所用的芯片。另外,我們選擇Verilog作為默認(rèn)的硬件描述語(yǔ)言。
再點(diǎn)擊Next按鈕進(jìn)入下一頁(yè),這里顯示了新建工程的信息,確認(rèn)無(wú)誤后,點(diǎn)擊Finish就可以建立一個(gè)完整的工程了。
(2) 設(shè)計(jì)輸入和代碼仿真
在工程管理區(qū)任意位置單擊鼠標(biāo)右鍵,在彈出的菜單中選擇New Source命令,選擇Verilog Module輸入,并輸入Verilog文件名。
單擊Next按鈕進(jìn)入端口定義對(duì)話框。其中Module Name欄用于輸入模塊名,這里是shiftreg,下面的列表框用于端口的定義。Port Name表示端口名稱,Direction表示端口方向(可選擇為input、output或inout),MSB表示信號(hào)最高位,LSB表示信號(hào)最低位,對(duì)于單信號(hào)的MSB和LSB不用填寫。當(dāng)然,端口定義這一步
我們也可以略過(guò),在源程序中再行添加。
定義了模塊的端口后,單擊Next進(jìn)入下一步,點(diǎn)擊Finish完成創(chuàng)建。這樣,ISE就會(huì)自動(dòng)創(chuàng)建一個(gè)Verilog模塊的模板,并且在源代碼編輯區(qū)打開(kāi)。簡(jiǎn)單的注釋、模塊和端口定義已經(jīng)自動(dòng)生成,接下來(lái)的工作就是將代碼編寫完整。
輸入代碼后,我們還需要對(duì)模塊進(jìn)行測(cè)試。在工程管理區(qū)將view設(shè)置為Simulation,在任意位置單擊鼠標(biāo)右鍵,并在彈出的菜單中選擇New Source,在類型中選擇Verilog Test Fixture,輸入測(cè)試文件名,單擊下一步。這時(shí)所有工程中的模塊名都會(huì)顯示出來(lái),我們選擇要進(jìn)行測(cè)試的模塊。點(diǎn)擊Next ,再單擊Finish按鈕,ISE會(huì)在源代碼編輯區(qū)自動(dòng)生成測(cè)試模塊的代碼。我們看到,ISE已經(jīng)自動(dòng)生成了基本的信號(hào)并對(duì)被測(cè)模塊做了例化。我們的工作就是在initial?end塊中的“//Add stimulus here”后面添加測(cè)試向量。
完成測(cè)試文件編輯后,確認(rèn)工程管理區(qū)中view選項(xiàng)設(shè)置為Simulation,這時(shí)在過(guò)程管理區(qū)會(huì)顯示與仿真有關(guān)的進(jìn)程。右鍵單擊其中的Simulate Behavioral Model項(xiàng),選擇彈出菜單中的Process Properties項(xiàng),會(huì)彈出屬性設(shè)置對(duì)話框,其中Simulation Run Time就是仿真時(shí)間的設(shè)置,可將其修改為任意時(shí)長(zhǎng)。
仿真參數(shù)設(shè)置完后,就可以進(jìn)行仿真。首先在工程管理區(qū)選中測(cè)試代碼,然后在過(guò)程管理區(qū)雙擊Simulate Behavioral Model,ISE將啟動(dòng)ISE Simulator,可以得到仿真結(jié)果,如圖6-2所示。

?。?) 綜合與實(shí)現(xiàn)
在工程管理區(qū)的view中選擇Implementation,然后在過(guò)程管理區(qū)雙擊Synthesize-XST,就可以開(kāi)始綜合過(guò)程。
另外,要實(shí)現(xiàn)設(shè)計(jì),還需要為模塊中的輸入輸出信號(hào)添加管腳約束,這就需要在工程中添加UCF文件。在工程管理區(qū)單擊鼠標(biāo)右鍵,點(diǎn)擊New Source,選擇Implementation- Constraints File,出現(xiàn)一個(gè)空白的約束文件,我們就可以為設(shè)計(jì)添加各種約束。如果綜合步驟沒(méi)有語(yǔ)法錯(cuò)誤,XST能夠給出初步的資源消耗情況,點(diǎn)擊Design Summary,即可查看。
在過(guò)程管理區(qū)雙擊Implementation Design選項(xiàng),就可以自動(dòng)完成實(shí)現(xiàn)步驟。如果設(shè)計(jì)沒(méi)有經(jīng)過(guò)綜合,就會(huì)啟動(dòng)XST完成綜合,在綜合后完成實(shí)現(xiàn)過(guò)程。經(jīng)過(guò)實(shí)現(xiàn)后能夠得到精確的資源占用情況。在Design Summary即可看到具體的資源占用情況。
?。?) 器件配置
硬件配置是FPGA開(kāi)發(fā)最關(guān)鍵的一步,只有將HDL代碼下載到FPGA芯片中,才能進(jìn)行調(diào)試并最終實(shí)現(xiàn)相應(yīng)的功能。首先我們必須生成能下載到硬件中的二進(jìn)制比特文件。雙擊過(guò)程管理區(qū)的Generate Programming File,ISE就會(huì)為設(shè)計(jì)生成相應(yīng)的二進(jìn)制比特文件。
然后利用USB-MiniUSB纜線,來(lái)為開(kāi)發(fā)板提供電源和數(shù)據(jù)下載。我們只需上網(wǎng)下載免費(fèi)的Digilent Adept軟件,即可快速實(shí)現(xiàn)Nexys3開(kāi)發(fā)板上FPGA的配置。用USB-MiniUSB纜線連接開(kāi)發(fā)板和PC,打開(kāi)開(kāi)發(fā)板的電源開(kāi)關(guān),然后啟動(dòng)Digilent Adept軟件。系統(tǒng)開(kāi)始自動(dòng)連接FPGA設(shè)備,成功檢測(cè)到設(shè)備后,會(huì)顯示出JTAG鏈上所用芯片。
界面上將顯示檢測(cè)到NEXYS3開(kāi)發(fā)板上的器件FPGA(XC6SLX16)。這里我們對(duì)FPGA進(jìn)行配置。在Browse中找到之前生成的設(shè)計(jì)的二進(jìn)制比特文件,并點(diǎn)擊旁邊的Program按鈕,軟件就開(kāi)始對(duì)FPGA進(jìn)行配置。配置成功后,下面的狀態(tài)欄會(huì)顯示Programming Successful。至此,器件配置成功,我們就可以在器件上驗(yàn)證預(yù)期的設(shè)計(jì)有沒(méi)有很好的得以實(shí)現(xiàn)。
? ? ? ?移位寄存器代碼
移位寄存器,不但可以寄存數(shù)碼,還可以在脈沖信號(hào)的作用下,寄存數(shù)碼可以根據(jù)需求發(fā)生偏移。在本次設(shè)計(jì)中使用分頻信號(hào)來(lái)充當(dāng)脈沖信號(hào),控制在人眼可視范圍內(nèi)(始終頻率低于10Hz)寄存自動(dòng)發(fā)生發(fā)生偏移,代碼如下:
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
在本次設(shè)計(jì)中使用到了非阻塞賦值“《=”。它與阻塞賦值“=”是有區(qū)別的。
阻塞賦值:算式y(tǒng)=b,一旦執(zhí)行當(dāng)前的賦值語(yǔ)句,賦值目標(biāo)變量y幾顆獲得等號(hào)右邊表達(dá)式的計(jì)算值。在這里值得注意的是,如果一塊語(yǔ)句中含有多條阻塞賦值語(yǔ)句,那么當(dāng)執(zhí)行某一條語(yǔ)句時(shí)其他語(yǔ)句被阻塞,將禁止執(zhí)行。阻塞賦值的執(zhí)行有點(diǎn)像串行執(zhí)行。
非阻塞賦值:算式y(tǒng)《=b,必須在語(yǔ)句塊結(jié)束時(shí)完成整體賦值。在執(zhí)行某一條語(yǔ)句時(shí),對(duì)于語(yǔ)句塊的其他賦值算式不進(jìn)行限制,換句話說(shuō),語(yǔ)句塊中的非阻塞賦值算式是并行執(zhí)行的。
注意:由于assign不能引導(dǎo)語(yǔ)句塊,故只能使用阻塞賦值。
注意:阻塞賦值與非阻塞賦值不可以混合使用。
測(cè)試文件:
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
注意:在寫仿真部分時(shí)always與initial不能相互嵌套。使用復(fù)位信號(hào)(例如:clr)時(shí),x先使能復(fù)位信號(hào),一段時(shí)間后取消復(fù)位信號(hào)(避免系統(tǒng)一直處于復(fù)位狀態(tài))
仿真結(jié)果:

在這里可能需要仿真的時(shí)間比較長(zhǎng),可以通過(guò)調(diào)節(jié)仿真器的屬性更改仿真時(shí)間,操作如下

電子發(fā)燒友App




















評(píng)論