最經典的Verilog學習案例:簡單的移位寄存器的設計

小夥伴們好,小編今天要講的是基於硬件描述語言的移位寄存器電路設計。

那麼,按照老規矩,我們首先來介紹一下移位寄存器的基本概念:

在數字電路中,移位寄存器(Shift Register)是時鐘的脈衝(上升沿)觸發之下工作的一種以觸發器為基礎的電路器件,在每個時鐘上升沿的觸發之下,數據會依次向左或右移動一個比特(Bit),最後在輸出端進行輸出,這裡,數據可以以並行或者以串行的方式輸入到該移位寄存器的電路器件中。

最經典的Verilog學習案例:簡單的移位寄存器的設計

移位寄存器也是類似一種存儲器,可以存儲數據,而存在裡邊的數據可以從低位向高位移動或從高位向低位移動。例如一個4位的移位寄存器,存在其中的數據為“1100”,如果向左(即高位MSB)移動一次,就變成“100X”,原來的最高位的“1”移出,最低位的“X”可以是新移入的數據,也可以是0(我們本次設計用的是隨機數據,即隨機輸入“0”或者是“1”)。

就是因為移位寄存器中的數據可以在移位脈衝作用下依次逐位右移或者依次逐位左移,而數據既可以並行輸入、並行輸出、串行輸入以及串行輸出,也可以並行輸入、串行輸出、串行輸入以及並行輸出,因此,正是因為移位寄存器如此靈活,才使得它用途廣泛,可以應用於許許多多的數字電路設計模塊之中,從而實現多種多樣的功能。

那麼,現在先來我們的代碼,下面是主程序和測試程序(TestBench):

最經典的Verilog學習案例:簡單的移位寄存器的設計

最經典的Verilog學習案例:簡單的移位寄存器的設計

當時鍾信號上升沿到來的時候(前提是復位信號無效的時候),輸出的8位數據先移位後輸出,低位賦值一個隨機數,依次移位。

clk:時鐘信號

rst_n:復位信號,在這裡也稱為置零信號,它使得輸出數據為零,後綴“_n”表示低電平的時候有效;

data_out:數據輸出,這裡為8位數據輸出,然後先是數據進行移位,從低位讓高位移動,比如仿真中的“11110110”(f6),在下一個時鐘觸發信號到來之後,就進行左移,由原先的“11110110”往左移一位,變為“1110110X”,然後X隨機帶入,這裡代入的是“1”,所以下一個輸出為“11101101”(ed),依次類推。

最經典的Verilog學習案例:簡單的移位寄存器的設計

該程序實現的移位寄存器功能一目瞭然。

對於移位寄存器,這裡我們比較常見的芯片有74194芯片(考試也最常考的),它是一種四位雙向移位存器。我們根據移位方向,常把它分成左移寄存器、右移寄存器和雙向移位寄存器三種。根據移位數據的輸入和輸出方式,又可將它分為串行輸入-串行輸出、串行輸入-並行輸出、並行輸入-串行輸出和並行輸入-並行輸出四種電路結構。大家如果感興趣的話可以去百度搜索這款移位寄存器的芯片手冊閱讀一下,對於自己的學習還是非常有幫助的!

最經典的Verilog學習案例:簡單的移位寄存器的設計

大家可以自己試試,畢竟,理論只是一小部分,只有通過自己的實踐,才能正真有所收穫,才能掌握正真的技術,轉化為自己的一部分,畢竟,實踐出真知嘛!

小夥伴們如果在學習的時候遇到一些問題的話,歡迎留言討論,小編會一一回復~


分享到:


相關文章: