設計一個4位移位寄存器

2020-11-26 電子發燒友

  4位移位寄存器的設計與實現

  使用ISE軟體設計並仿真,使用ISE軟體進行4位移位寄存器的設計與實現。

  步驟

  1. 編寫文本文件並編譯

  2. 軟體仿真

  3. 進行硬體配置

  原理

  1. ISE軟體是一個支持數字系統設計的開發平臺。

  2. 用ISE軟體進行設計開發時基於相應器件型號的。

  注意:軟體設計時選擇 的器件型號是與實際下載板上的器件型號相同。  

        3. 圖6-1所示為4位

  (1) 新建工程

  雙擊桌面上「ISE Design Suite 14.7」圖標,啟動ISE軟體(也可從開始菜單啟動)。每次打開ISE都會默認恢復到最近使用過的工程界面。當第一次使用時,由於還沒有歷史工程記錄,所以工程管理區顯示空白。選擇File New--Project選項,在彈出的對話框中輸入工程名稱並指定工程路徑。

  點擊Next按鈕進入下一頁,選擇所使用的晶片及綜合、仿真工具。計算機上安裝的所有用於仿真和綜合的第三方EDA工具都可以在下拉菜單中找到。在圖中我們選用了Spartan6 XC6SLX16晶片,採用CSG324封裝,這是NEXYS3開發板所用的晶片。另外,我們選擇Verilog作為默認的硬體描述語言。

  再點擊Next按鈕進入下一頁,這裡顯示了新建工程的信息,確認無誤後,點擊Finish就可以建立一個完整的工程了。

  (2) 設計輸入和代碼仿真

  在工程管理區任意位置單擊滑鼠右鍵,在彈出的菜單中選擇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所示。

 

  (3) 綜合與實現

  在工程管理區的view中選擇Implementation,然後在過程管理區雙擊Synthesize-XST,就可以開始綜合過程。

  另外,要實現設計,還需要為模塊中的輸入輸出信號添加管腳約束,這就需要在工程中添加UCF文件。在工程管理區單擊滑鼠右鍵,點擊New Source,選擇Implementation- Constraints File,出現一個空白的約束文件,我們就可以為設計添加各種約束。如果綜合步驟沒有語法錯誤,XST能夠給出初步的資源消耗情況,點擊Design Summary,即可查看。

  在過程管理區雙擊Implementation Design選項,就可以自動完成實現步驟。如果設計沒有經過綜合,就會啟動XST完成綜合,在綜合後完成實現過程。經過實現後能夠得到精確的資源佔用情況。在Design Summary即可看到具體的資源佔用情況。

  (4) 器件配置

  硬體配置是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先使能復位信號,一段時間後取消復位信號(避免系統一直處於復位狀態)

  仿真結果:

 

  在這裡可能需要仿真的時間比較長,可以通過調節仿真器的屬性更改仿真時間,操作如下

  

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 移位寄存器的特點_移位寄存器工作原理
    移位寄存器概要   在數字電路中,移位寄存器(英語:shiftregister)是一種在若干相同時間脈衝下工作的以觸發器為基礎的器件,數據以並行或串行的方式輸入到該器件中,然後每個時間脈衝依次向左或右移動一個比特,在輸出端進行輸出。
  • 移位寄存器的原理
    現在小編大家知道移位寄存器嗎? 移位寄存器的原理 移位寄存器不僅能寄存數據,而且在時鐘信號的最用下使它其中的數據依次左移或者右移。 四位移位寄存器的原理:F0、F1、F2、F3是四個邊沿觸發的觸發器D,每一個觸發器的輸出端Q接到右邊一個觸發器的輸入端D。
  • 移位寄存器的作用及應用
    這種移位寄存器是一維的,事實上還有多維的移位寄存器,即輸入、輸出的數據本身就是一些列位。實現這種多維移位寄存器的方法可以是將幾個具有相同位數的移位寄存器並聯起來。   移位寄存器原理   移位寄存器不僅能寄存數據,而且能在時鐘信號的作用下使其中的數據依次左移或右移。   四位移位寄存器的原理圖如圖所示。
  • 移位寄存器74ls194應用電路圖大全(雙向移位寄存器/74HC93/環形...
    移位寄存器74ls194應用電路圖(一) 用兩片4位雙向移位寄存器74LS194接成一個8位雙向移位寄存器。 所要涉及的8位雙向移位寄存器需要完成8位二制數據的寄存,因此需要由兩片4位雙向移位寄存器74LS194組成。同時,8位雙向移位寄存器應具備4位雙向移位寄存器所有的邏輯功能,即能實現並行輸入、左移寄存、右移寄存、數據保持和異步清零等功能。 如圖所示,通過分析,將兩片4位雙向移位寄存器的輸入和輸出同時作為8位雙向移位寄存器的輸入和輸出。
  • 移位寄存器的工作原理是什麼?
    把若干個觸發器串接起來,就可以構成一個移位寄存器。由4個邊沿D 觸發器構成的4位移位寄存器邏輯電路如圖8.8.1所示。數據從串行輸入端D1輸入。左邊觸發器的輸出作為右鄰觸發器的數據輸入。假設移位寄存器的初始狀態為0000,現將數碼D3D2D1D0(1101)從高位(D3)至低位依次送到D1端,經過第一個時鐘脈衝後,Q0=D3。
  • 基於FPGA的移位寄存器流水線結構FFT處理器設計與實現
    從上面的算法結構分析中知道,由於後級的DFT運算點數是前一級的一半,所以後一級的開關轉換周期也是前一級的一半,基於這種關係,可以使用一個8位計數器的每一位狀態來對各級開關進行控制。最高位控制第一級,同時由於上一級數據進入下一級需要一個時鐘,所以下一級的開關轉換時刻要比上一級延遲一個時鐘周期。
  • 分子移位寄存器,可由外部電荷控制
    勞倫斯伯克利國家實驗室和加州大學伯克利分校(UC Berkeley)的研究人員最近提出了一個設計策略,以調整石墨烯場效應電晶體中分子陣列的電荷模式。在《自然電子》雜誌上發表的一篇論文中,他們提出了一個基於這一策略的分子移位寄存器,該寄存器是通過將有機分子定位在石墨烯基器件上而製造的,具有很高的精度。
  • LabVIEW編程實例:計算階乘,學習for循環+移位寄存器+遞歸調用
    階乘求解方法1:使用for循環+移位寄存器實現這種方法實現相對來說比較簡單,程序框圖如下圖所示:在上圖中,直接根據階乘定義使用for循環與移位寄存器的思路實現n!的計算,for循環的次數為n次,移位寄存器的初始值為1,作n次乘法運算即可計算出n的階乘。注意,上圖中,當n為0時,for循環執行次數為0次,n!
  • 一種二進位序列信號檢測器的3種設計方法
    圖4 序列碼檢測器邏輯電路圖  2 將觸發器接成移位寄存器進行設計  以上設計方法主要依靠電路的狀態轉換實現序列碼檢測,雖然所得電路簡單為此,將觸發器接成移位寄存器的方式,可簡化電路設計,同時也便於擴展成位數更多的序列碼檢測器。用4個D觸發器接成的向右移位寄存器。電路如圖5所示。
  • labview循環-移位寄存器妙用
    每個While循環都有一個條件端子和一個重複端子。如圖:本文引用地址:http://www.eepw.com.cn/article/201701/337086.htm重複端子用於記錄和輸出已執行的循環的次數,條件端子輸入的是一個布爾變量:真或假,While循環將一直執行到連接條件端子上的布爾值變成真或假為止,取決於條件端子設置為「真(T)時停止」還是「真(T)時繼續」。
  • 應用於CNN中卷積運算的LUT乘法器設計
    CLB(configuratble logic block)是主要的資源模塊,其包含了8個LUT,16個寄存器,carry邏輯,以及多路選通器等。其中LUT可以用作6輸入1輸出,或者兩個5輸入LUT,但是這兩個LUT公用輸入,具有不同輸出。每個LUT輸出可以連接到寄存器或者鎖存器,或者從CLB輸出。LUT可以用於64x1和32X2的分布式RAM,一個CLB內最大可以支持512X1大小的RAM。
  • GPIO相關寄存器配置詳解
    一、寄存器介紹(詳見中文參考手冊7.4):每組GPIO下面包含10個寄存器。也就是10個寄存器,一共可以控制一組GPIO的16個IO口。最多7組IO,也就是70個寄存器。寄存器分別如下:一個埠模式寄存器(GPIOx_MODER)一個埠輸出類型寄存器(GPIOx_OTYPER)一個埠輸出速度寄存器(GPIOx_OSPEEDR)一個埠上拉下拉寄存器(GPIOx_PUPDR)
  • 三基色LED驅動原理及IC線路設計
    提供了3 個恆定電流驅動輸出,驅動電流最大為50mA.WS2703 晶片包括串行移位寄存器和輸出寄存器.經串行移位寄存器,串移輸入轉為3bit 並行輸出,並把該輸出作為輸出寄存器的輸入.串移寄存器和輸出寄存器由不同的時鐘信號控制,並且都是在時鐘信號的上升沿有效.WS2703 將控制信號驅動後輸出,該輸出可作為後級電路的輸入信號.
  • ARM指令集和常用寄存器
    4,MCR 將ARM處理器的寄存器中的數據傳送到協處理器的寄存器中。ADRL偽指令 中等範圍的地址讀取偽指令,用於將PC相對偏移的地址值或基於寄存器相對偏移的地址值讀取到寄存器中。LDR偽指令 大範圍的地址讀取偽指令,用於加載32位的立即數或一個地址到指定寄存器中。
  • pic單片機學習教材(一):接口設計
    QST108特有的相鄰按鍵抑制算法使得一個按鍵在按下未鬆開時,其他按鍵處於無 效狀態;自校準和自動漂移補償功能使其無須人工校準,從而進一步降低了QST108的應用難度。引腳配置如圖1所示,各引腳功能如表1所列。
  • STM32單片機GPIO寄存器
    -7號的話,則寫CRL寄存器,如果IO口是8-15號的話,則寫CRH寄存器,兩個32位數據寄存器(GPIOx_IDR,GPIOx_ODR)一個是只讀作輸入數據寄存器,一個是只寫作輸出寄存器,一個32位置位/復位寄存器(GPIOx_BSRR),一個16位復位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx_LCKR)。
  • STM32 GPIO 相關寄存器(二)
    首先介紹一下基本的GPIO相關的寄存器:1,GPIOX_CRL 低8位埠配置寄存器這個寄存器主要是對配置管腳是輸入還是輸出:其中1)MODEy[1:0]主要是配置是輸入埠還是輸出埠的。配置為輸出得時候還可以配置輸出的管腳速度等級。