???????
- 實驗目的
實現(xiàn)一個多路選擇器,進行“2選1”。也就是對2個信號進行1個特定條件的篩選,滿足這個特定條件的話,其中一個的數(shù)值或信息就成為輸出信號的數(shù)值或信息。不滿足此條件的,就輸出另一個信號的數(shù)值和信息。
- 實驗原理
- 理論原理
2個輸入信號,選擇其中一個作為輸出。本項目當中,有輸入信號in_1和in_2。當選通信號sel為高電平的時候,輸出in_1;當選通信號sel為低電平時,輸出in_2。
- 硬件原理
硬件使用: 按鍵3個,led燈1個。
原理設想: 通過硬件設施來具體表現(xiàn)。Key1的按下,代表in_1輸入高電平,反之意味著輸入低電平。Key2按下,代表in_2輸入高電平,反之意味著輸入低電平。同理,key3就代表了選通信號sel。按下是高電平,不按是低電平。輸出信號就拿LED燈表示,通過亮滅來代表輸出信號的情況。
按鍵:按下導通。
?LED:高電平導通,輸入高電平,LED燈亮。
- 系統(tǒng)架構(gòu)設計
思路:抓住要實現(xiàn)的的功能,就是“判斷、篩選”。那就只要一個“篩選模塊”。對誰篩選呢?對輸入信號當中的兩個信號(in_1和in_2)進行篩選。那么要進行怎么樣(什么條件的篩選呢?),條件就是所謂的選通信號sel。完整的篩選條件,就是“sel為高電平時候,輸出in_1的數(shù)值或信號;sel為低電平時,輸出in_2的數(shù)值或信號”。
類比推理:舉個例子,選擇今天中午做啥飯。Sel這個選通信號,就如同我們的大腦,大腦(sel)告訴我,想吃米了。面前既有米袋子(in_1),又有面袋子(in_2)。那么得出結(jié)論(out):今天做米飯(in_1的數(shù)值或信號)。反之亦然。
?????? 所以系統(tǒng)架構(gòu)設計就很簡單,三個輸入,進入判斷模塊,一個輸出。輸入分兩大類:兩個具體輸入信號in_1和in_2,一個選通信號sel。
- 模塊說明
- 模塊端口信號列表
In_1:輸入信號,用按鍵key1控制,按下為高電平
In_2:輸入信號,用按鍵key2控制,按下為高電平
Sel:選通信號,用按鍵key3控制,按下為高電平。當然也是輸入的信號。
out:輸出信號,用LED燈控制,高電平點亮,滅了就是低電平。
- 狀態(tài)轉(zhuǎn)移圖
?文章來源地址http://www.zghlxwxcb.cn/news/detail-726493.html
- 時序圖(箭頭是為了對齊,便于觀察)
三個輸入其實都是隨機的,也就是說,想啥時候拉高拉低(想啥時候輸入,想啥時候輸出都無所謂)。但是有個小漏洞:并沒有明確限定和說明,一次性同時到底能按幾個按鍵。默認設定是一次最多就按下2個按鍵(按KEY3選通信號和KEY1;按KEY3和KEY2;單獨按KEY1;單獨按KEY2)甚至沒規(guī)定按鍵一個都不按下的情況時,LED燈的亮滅情形。
對于三個輸入信號(in_1/in_2/sel)按鍵的按下,信號電平拉高。按鍵松開,電平拉低。明確一點,按下和松開,都是隨意的。選擇的條件是什么?是sel要是高電電平的大前提下:①輸入in_1是高,輸出out則高,LED亮;②輸入in_2是高,此時輸出沒做安排,這也是個漏洞。輸出無法判斷。
Sel要是在低電平的大前提下:輸入in_2是高,輸出out高,LED亮。
?????? 但是漏洞仍舊存在。
- 仿真波形圖
其實波形圖目前感覺就是和當初畫的時序圖對比一下,一樣說明咱對了。但是我發(fā)現(xiàn)個小技巧,當你看不懂波形圖或者波形圖太復雜,看看算式,咱們數(shù)形結(jié)合。方便理解加深印象。
注意這個欄目,它可以把波形圖和仿真的結(jié)果按照算式的方式表達(目前本項目是這樣的)然后結(jié)合我們當時的設計思路和時序圖對比一下,估計就出來了。
- 代碼編寫及其思路
?
?文章來源:http://www.zghlxwxcb.cn/news/detail-726493.html
仿真:
代碼敲完以后,就用Q進行工程操作。新建——C4,256-8—添加代碼—點編譯。到了這個情況后,準備仿真
仿真:
??????????????? 仿真必須寫仿真代碼。點到tb 文件夾里。建立仿真代碼的.v文件
對于仿真代碼:(仿真文件就是要對我們被仿真的信號進行一個模擬)
???????????????????? `timescale? 它是關鍵詞時間尺度(英文time是時間,scale是大小、規(guī)模、尺度的意思)
??????????????? 在仿真文件當中,begin-end當中的語句都是順序執(zhí)行的。在沒有延時的情況下,幾乎是沒有差別的。在RTL代碼當中,begin-end相當于一對{ }的作用。在同一個always塊當中,如果給多個變量賦值,要使用begin-end。
此處使用initial語句,是為了給in_1,in_2,sel進行一次初值的賦值操作。
對于要使用的initial語句,他的結(jié)構(gòu)上是:
然后這里,對于#就是延時的意思,10就是10納秒
綁定管腳:輸入信號in_1,就認為是KEY1,E15
??????????????? In_2是KEY2,E16
輸出out就是LED1,F16
選通信號sel,應該是KEY3,M16
仿真代碼:
?
?
?
?
到了這里,關于FPGA的verilog關于多路選擇器(2選1)的設計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!