0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【教程分享】零基礎(chǔ)學(xué)習(xí):基于FPGA的多路選擇器設(shè)計(jì)(附代碼)

電子發(fā)燒友論壇 ? 來源:未知 ? 2023-06-07 12:25 ? 次閱讀

大俠好,歡迎來到FPGA技術(shù)江湖。本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場(chǎng)小白及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會(huì)。


系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對(duì)個(gè)人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對(duì)大家有所幫助。后續(xù)會(huì)陸續(xù)更新 Xilinx 的 Vivado、ISE 及相關(guān)操作軟件的開發(fā)的相關(guān)內(nèi)容,學(xué)習(xí)FPGA設(shè)計(jì)方法及設(shè)計(jì)思想的同時(shí),實(shí)操結(jié)合各類操作軟件,會(huì)讓你在技術(shù)學(xué)習(xí)道路上無比的順暢,告別技術(shù)學(xué)習(xí)小BUG卡破腦殼,告別目前忽悠性的培訓(xùn)誘導(dǎo),真正的去學(xué)習(xí)去實(shí)戰(zhàn)應(yīng)用,這種快樂試試你就會(huì)懂的。話不多說,上貨。



多路選擇器設(shè)計(jì)


多路選擇器是數(shù)據(jù)選擇器的別稱。在多路數(shù)據(jù)傳送過程中,能夠根據(jù)需要將其中任意一路選出來的電路,叫做數(shù)據(jù)選擇器,也稱多路選擇器或多路開關(guān)。


二選一多路選擇器


二選一多路選擇器的數(shù)據(jù)輸入有兩個(gè),分別為dataa和datab。為了能夠確定選擇那一路數(shù)據(jù)能夠通過,還需要一個(gè)選擇端(sel)。因?yàn)檩斎胫挥袃陕窋?shù)據(jù),選擇端只要能夠表現(xiàn)出兩種狀態(tài)即可,因而選擇端位寬為1即可。


假設(shè)dataa和datab都是位寬為1的數(shù)據(jù),當(dāng)sel為0時(shí),選擇dataa通過;當(dāng)sel為1時(shí),選擇datab通過;odata表示通過后的數(shù)據(jù)。



圖1 :二選一多路選擇器模型


根據(jù)上述功能,列出真值表。



圖2 :二選一多路選擇器真值表


根據(jù)真值表,化簡(jiǎn)得出布爾表達(dá)式:

odata = (dataa &(~sel)) | (datab & sel);


verilog中,算術(shù)運(yùn)算中,“&”表示算術(shù)(按位)與,“|”表示算術(shù)(按位)或,“~”表示算術(shù)(按位)取反。


在數(shù)字電路基礎(chǔ)中,根據(jù)表達(dá)式,就可以得到電路圖。


現(xiàn)在我們要在FPGA中實(shí)現(xiàn),二選一多路選擇命名為“mux2_1”,不要命名為mux21,mux21是quartus中默認(rèn)器件庫中的名字,命名相同會(huì)出現(xiàn)錯(cuò)誤。


建立工程后,輸入如下設(shè)計(jì)代碼:(mux2_1代碼)




圖4 :mux2_1的RTL視圖


設(shè)計(jì)完成后,輸入如下testbench代碼:(mux2_1_tb代碼)



在verilog中,“//”表示本行被注釋,綜合器綜合時(shí),自動(dòng)略過。


在testbench中,連接線的名字可以隨意定義,建議和端口相同。


設(shè)置好testbench后,運(yùn)行RTL 仿真



圖6 :RTL仿真波形


對(duì)比波形和真值表,設(shè)計(jì)正確。


四選一多路選擇器


四選一多路選擇器的數(shù)據(jù)輸入有四個(gè),分別為dataa、datab、datac和datad。為了能夠確定選擇那一路數(shù)據(jù)能夠通過,還需要一個(gè)選擇端(sel)。因?yàn)檩斎胨穆窋?shù)據(jù),選擇端要求能夠表現(xiàn)出四種狀態(tài),因而選擇端位寬為2。


假設(shè)dataa、 datab、datac和datad都是位寬為8的數(shù)據(jù),當(dāng)sel為00時(shí),選擇dataa通過;當(dāng)sel為01時(shí),選擇datab通過;當(dāng)sel為10時(shí),選擇datac通過;當(dāng)sel為11時(shí),選擇datad通過;odata表示通過后的數(shù)據(jù)。


圖7 :四選一多路選擇器模型


根據(jù)組合邏輯設(shè)計(jì)規(guī)則,我們將所有的情況全部列出,得出真值表,進(jìn)而得到布爾表達(dá)式。但是現(xiàn)在輸入的組合排列太多了(2的34次冪),不能夠直接得出真值表。


此時(shí)的設(shè)計(jì)有兩種方法。


第一種方法,根據(jù)功能拆分邏輯。將輸入為8的四選一多路選擇器,拆分為8個(gè)位寬為1的四選一多路選擇器,首先列出位寬為1真值表,得出位寬為1的四選一多路選擇器。然后并接八個(gè)即可。



圖8 :8個(gè)位寬1多路選擇器構(gòu)成位寬8的多路選擇器


這種設(shè)計(jì)方法,不在提供設(shè)計(jì)源碼,讀者可以自行討論設(shè)計(jì)。


第二種方法,根據(jù)verilog的設(shè)計(jì)規(guī)則,可以直接描述邏輯功能,而不用描述門電路。這種設(shè)計(jì)規(guī)則有利于將設(shè)計(jì)做的比較大。


位寬為8的四選一多路選擇器命名為“mux4_1”。


建立工程后,輸入設(shè)計(jì)代碼如下:(mux4_1代碼)



always 語句用來表示組合邏輯時(shí),即可以采用門電路的描述方法,也可以采用功能性的描述語句。


“always @()”中()是信號(hào)敏感列表。中間可以寫入本模塊的所有的敏感信號(hào),“*”可以表示所有的敏感信號(hào)。建議利用always語句描述組合邏輯時(shí),用“*”表示所有信號(hào)。用“*”時(shí),“()”可以省略。即:always@(*) 等效 always@*。



在case語句中,首先會(huì)判斷變量和那個(gè)分支相同,并且執(zhí)行對(duì)應(yīng)的表達(dá)式。當(dāng)和所有的分支都不相同時(shí),執(zhí)行default后的表達(dá)式。


verilog規(guī)定,在always語句中被賦值的變量,應(yīng)該定義為“reg”類型。



圖11 :mux4_1的RTL視圖


設(shè)計(jì)完成后,輸入testbench代碼。mux4_1_tb 代碼如下:



由于本次輸入的的組合太多,不能全覆蓋測(cè)試。故采用隨機(jī)數(shù)來進(jìn)行測(cè)試。


$random是一個(gè)系統(tǒng)函數(shù),調(diào)用時(shí),可以返回一個(gè)隨機(jī)值。注意:這個(gè)系統(tǒng)函數(shù)只能出現(xiàn)testbench中,在設(shè)計(jì)中出現(xiàn)是不可綜合的。


“$random函數(shù)調(diào)用時(shí)返回一個(gè)32位的隨機(jī)數(shù),它是一個(gè)帶符號(hào)的整形數(shù)...”。例:

reg[23:0] rand;

rand=$random % 60; //產(chǎn)生一個(gè)在 -59—59范圍的隨機(jī)數(shù)


產(chǎn)生0~59之間的隨機(jī)數(shù),例:

reg[23:0] rand;

rand={$random} % 60; //通過{}產(chǎn)生0—59范圍的隨機(jī)數(shù)


產(chǎn)生在min, max之間隨機(jī)數(shù),例:

reg[23:0] rand;

rand = min+{$random}%(max-min+1);


在testbench中,需要按照一定順序給輸入線賦值。在mux4_1_tb中,我們可以通過延遲賦值,然后再次延遲賦值,來完成賦值。因?yàn)橘x值時(shí)采用隨機(jī)數(shù),所以每次編寫的語句是相同的。verilog中提供了repeat語句,用來減少人工輸入。



圖13 :兩種等效的賦值方式


輸入testbench后,進(jìn)行綜合分析。


設(shè)置testbench,運(yùn)行RTL仿真。



圖14:RTL仿真圖


經(jīng)過分析,符合四選一多路選擇器的設(shè)計(jì)。





聲明本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請(qǐng)注明以上來源。如需社區(qū)合作及入群交流,請(qǐng)?zhí)砑游⑿臙EFans0806,或者發(fā)郵箱liuyong@huaqiu.com。


更多熱點(diǎn)文章閱讀

  • 基于Cortex-M3內(nèi)核的32位微控制器,STM32項(xiàng)目實(shí)戰(zhàn)分享!

  • 基于32位RISC-V設(shè)計(jì)的互聯(lián)型微控制器,沁恒微CH32V307開發(fā)樣例

  • RK3568!四核64位ARMv8.2A架構(gòu),匯聚編譯源碼及實(shí)戰(zhàn)樣例

  • 尺寸僅有21mm*51mm,板邊采用郵票孔設(shè)計(jì),合宙 Air105 核心板開發(fā)總結(jié)

  • 嵌入式Linux開發(fā)秘籍!工程師大佬親歷分享項(xiàng)目樣例


原文標(biāo)題:【教程分享】零基礎(chǔ)學(xué)習(xí):基于FPGA的多路選擇器設(shè)計(jì)(附代碼)

文章出處:【微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:【教程分享】零基礎(chǔ)學(xué)習(xí):基于FPGA的多路選擇器設(shè)計(jì)(附代碼)

文章出處:【微信號(hào):gh_9b9470648b3c,微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問模擬開關(guān)跟多路復(fù)用器有什么區(qū)別?

    我想請(qǐng)問,模擬開關(guān)跟多路復(fù)用器有什么區(qū)別。比如單刀雙擲開關(guān),是不是就是2選1的多路選擇器,只是模擬開關(guān)是1:2,AMUX是2:1?我理解的區(qū)別是模擬開關(guān)的狀態(tài)要么通道A導(dǎo)通,要么通道B導(dǎo)通,不能同時(shí)導(dǎo)通,然而
    發(fā)表于 08-12 08:16

    數(shù)據(jù)選擇器是時(shí)序邏輯電路嗎

    選擇器的基本概念 數(shù)據(jù)選擇器,也稱為多路選擇器(Multiplexer,簡(jiǎn)稱Mux),是一種常見的數(shù)字電路組件,其基本功能是從多個(gè)輸入信號(hào)中選擇
    的頭像 發(fā)表于 08-01 14:39 ?251次閱讀

    數(shù)據(jù)選擇器是組合邏輯電路嗎

    數(shù)據(jù)選擇器(Data Selector)是一種常見的組合邏輯電路,用于根據(jù)輸入的選擇信號(hào),從多個(gè)輸入信號(hào)中選擇一個(gè)輸出。在數(shù)字電路設(shè)計(jì)中,數(shù)據(jù)選擇器廣泛應(yīng)用于
    的頭像 發(fā)表于 08-01 14:28 ?206次閱讀

    DA1453x閃存選擇器指南應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《DA1453x閃存選擇器指南應(yīng)用說明.pdf》資料免費(fèi)下載
    發(fā)表于 02-21 09:40 ?0次下載
    DA1453x閃存<b class='flag-5'>選擇器</b>指南應(yīng)用說明

    從入門到放棄……為什么你會(huì)覺得FPGA難學(xué)?如何學(xué)習(xí)FPGA?

    問:本人零基礎(chǔ),想學(xué)FPGA,求有經(jīng)驗(yàn)的人說說,我應(yīng)該從哪入手,應(yīng)該看什么教程,應(yīng)該用什么學(xué)習(xí)板和開發(fā)板,看什么書等,希望有經(jīng)驗(yàn)的好心人能夠給我一些引導(dǎo)。 如果想速成,那就上網(wǎng)看視頻吧,這樣主要
    的頭像 發(fā)表于 02-02 17:04 ?650次閱讀
    從入門到放棄……為什么你會(huì)覺得<b class='flag-5'>FPGA</b>難學(xué)?如何<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>FPGA</b>?

    零基礎(chǔ)入門 Hyperlynx 仿真教程

    電子發(fā)燒友網(wǎng)站提供《零基礎(chǔ)入門 Hyperlynx 仿真教程.pdf》資料免費(fèi)下載
    發(fā)表于 12-22 10:49 ?22次下載

    鴻蒙原生應(yīng)用/元服務(wù)開發(fā)-利用picker選擇器來多選相冊(cè)圖片

    完成某些功能測(cè)試的時(shí)候就很不方便。后來官方文檔更新后,我發(fā)現(xiàn)一種比較方便的接口來完成這一功能。那就是利用 @ohos.file.picker (選擇器),直接完成對(duì)相冊(cè)里面圖片的選擇和多選。 正文
    發(fā)表于 12-01 17:04

    硬件電路設(shè)計(jì)之多路復(fù)用開關(guān)電路設(shè)計(jì)

    多路復(fù)用開關(guān)(MUX) 是個(gè)數(shù)字開關(guān)器件,也成為數(shù)據(jù)選擇器。它是一種通過一根控制線來選擇數(shù)據(jù)路由的組合邏輯電路。
    的頭像 發(fā)表于 11-20 17:23 ?2782次閱讀
    硬件電路設(shè)計(jì)之<b class='flag-5'>多路</b>復(fù)用開關(guān)電路設(shè)計(jì)

    如何設(shè)計(jì)一個(gè)參數(shù)化的數(shù)據(jù)選擇器

    FPGA設(shè)計(jì)中,大部分情況下我們都得使用到數(shù)據(jù)選擇器。并且為了設(shè)計(jì)參數(shù)化,可調(diào),通常情況下我們需要一個(gè)參數(shù)可調(diào)的數(shù)據(jù)選擇器,比如M選1,M是可調(diào)的參數(shù)。
    的頭像 發(fā)表于 11-20 10:27 ?980次閱讀
    如何設(shè)計(jì)一個(gè)參數(shù)化的數(shù)據(jù)<b class='flag-5'>選擇器</b>

    FPGA零基礎(chǔ)學(xué)習(xí)之Vivado-VGA驅(qū)動(dòng)設(shè)計(jì)

    大俠好,歡迎來到FPGA技術(shù)江湖。本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場(chǎng)小白
    發(fā)表于 11-02 19:54

    數(shù)據(jù)選擇器及其主要應(yīng)用

    數(shù)據(jù)選擇器(data selector) 根據(jù)給定的輸入地址代碼,從一組輸入信號(hào)中選出指定的一個(gè)送至輸出端的組合邏輯電路。
    的頭像 發(fā)表于 10-11 15:33 ?7613次閱讀
    數(shù)據(jù)<b class='flag-5'>選擇器</b>及其主要應(yīng)用

    MAX17614EVKIT:評(píng)估:在Ideal Diode/Power源選擇器應(yīng)用數(shù)據(jù)表中的MAX17614 MAX17614EVKIT:評(píng)估:在Ideal Diode/Power源選擇器應(yīng)用數(shù)據(jù)表中的MAX17614

    電子發(fā)燒友網(wǎng)為你提供ADI(ADI)MAX17614EVKIT:評(píng)估:在Ideal Diode/Power源選擇器應(yīng)用數(shù)據(jù)表中的MAX17614相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有MAX17614EVKIT
    發(fā)表于 10-07 17:52
    MAX17614EVKIT:評(píng)估:在Ideal Diode/Power源<b class='flag-5'>選擇器</b>應(yīng)用數(shù)據(jù)表中的MAX17614 MAX17614EVKIT:評(píng)估:在Ideal Diode/Power源<b class='flag-5'>選擇器</b>應(yīng)用數(shù)據(jù)表中的MAX17614

    教你學(xué)Vivado—以2選1多路選擇器為例

    在EGO1開發(fā)板上實(shí)現(xiàn)2選1多路選擇器。
    的頭像 發(fā)表于 10-02 15:58 ?2333次閱讀
    教你學(xué)Vivado—以2選1<b class='flag-5'>多路</b><b class='flag-5'>選擇器</b>為例

    Linux可用的事件選擇器編碼

    事件選擇器編碼表 20 描述了可用的事件選擇器編碼。根據(jù) mhpmeventX[7:0]中編碼的事件類字段,將事件分類為類??梢酝ㄟ^為給定事件類別設(shè)置相應(yīng)的事件掩碼位來對(duì)一個(gè)或多個(gè)事件進(jìn)行編程
    的頭像 發(fā)表于 09-27 16:32 ?543次閱讀
    Linux可用的事件<b class='flag-5'>選擇器</b>編碼

    事件選擇器寄存是什么

    事件選擇器寄存為了控制要計(jì)數(shù)的事件類型,事件選擇器 CSR mhpmevent3 和 mhpmevent4 用于對(duì)相應(yīng)的事件計(jì)數(shù)進(jìn)行編程。這些事件
    的頭像 發(fā)表于 09-27 16:24 ?678次閱讀
    事件<b class='flag-5'>選擇器</b>寄存<b class='flag-5'>器</b>是什么