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

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

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

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

ZYNQ ? 來(lái)源:ZYNQ ? 2023-11-20 10:27 ? 次閱讀

需求:

FPGA設(shè)計(jì)中,大部分情況下我們都得使用到數(shù)據(jù)選擇器。并且為了設(shè)計(jì)參數(shù)化,可調(diào),通常情況下我們需要一個(gè)參數(shù)可調(diào)的數(shù)據(jù)選擇器,比如M選1,M是可調(diào)的參數(shù)。

如果,數(shù)據(jù)選擇器是不帶優(yōu)先級(jí)的,我們可以使用verilog VHDL中的二維數(shù)組進(jìn)行設(shè)計(jì) 例如,這樣綜合編譯器也是可以正確生成對(duì)應(yīng)的電路。

reg[7:0]din[1:0];
assign dout = din[sel];

當(dāng)我們,需要設(shè)計(jì)一個(gè)參數(shù)化的數(shù)據(jù)選擇器時(shí)呢?我們?cè)撊绾卧O(shè)計(jì)呢?以下羅列三種實(shí)現(xiàn)方式

方式一:嵌套if來(lái)實(shí)現(xiàn):

假設(shè)我們的多路選擇器,在某些情況下最多位M路,那么我們可以嵌套M個(gè)if,這樣,我們就設(shè)計(jì)出了參數(shù)可調(diào) 2~M的多路選擇器。

always@(*)begin
    if(sel[0])//1
        dout = din[0*DATA_SIZE+:DATA_SIZE];
    else if(sel[1])//2
        dout = din[1*DATA_SIZE+:DATA_SIZE];
    else if(sel[2])//3
        dout = din[2*DATA_SIZE+:DATA_SIZE];
    else if(sel[3])//4
        dout = din[3*DATA_SIZE+:DATA_SIZE];
    else if(sel[4])//5
        dout = din[4*DATA_SIZE+:DATA_SIZE];
    else if(sel[5])//6
        dout = din[5*DATA_SIZE+:DATA_SIZE];
    else if(sel[6])//7
        dout = din[6*DATA_SIZE+:DATA_SIZE];
    else if(sel[7])//8
        dout = din[7*DATA_SIZE+:DATA_SIZE];
    else//0
        dout = 0;
en

方式二:casez實(shí)現(xiàn):

always @(*)begin
casez(sel)
8'b0000_0001:dout=din[0*DATA_SIZE+:DATA_SIZE];
8'b0000_001?:dout=din[1*DATA_SIZE+:DATA_SIZE];
8'b0000_01??:dout=din[2*DATA_SIZE+:DATA_SIZE];
8'b0000_1???:dout=din[3*DATA_SIZE+:DATA_SIZE];
8'b0001_????:dout=din[4*DATA_SIZE+:DATA_SIZE];
8'b001?_????:dout=din[5*DATA_SIZE+:DATA_SIZE];
8'b01??_????:dout=din[6*DATA_SIZE+:DATA_SIZE];
8'b1???_????:dout=din[7*DATA_SIZE+:DATA_SIZE];
default:dout=0;
     endcase
end

方式三:采用與門或門搭建。

比如一個(gè)二選一的數(shù)據(jù)選擇器應(yīng)該,這樣一個(gè)結(jié)構(gòu):

7ab09c6c-8745-11ee-939d-92fbcf53809c.png

一個(gè)三選一,帶優(yōu)先級(jí)的電路結(jié)構(gòu):

7abdaef2-8745-11ee-939d-92fbcf53809c.png

也就是說(shuō),我們可以通過(guò)代碼,描述出這樣一個(gè)電路結(jié)構(gòu),通過(guò)邏輯復(fù)制的語(yǔ)句完成參數(shù)化的設(shè)計(jì)。

具體思路是這樣的,先把地址信號(hào)sel 變成只是優(yōu)先級(jí)高的那位為1,其他信號(hào)為0。例如,低位高優(yōu)先級(jí),sel=1100,變換后sel_prio=0100。然后,將sel_prio與上對(duì)應(yīng)的數(shù)據(jù),可以看出來(lái)只有1的那個(gè)數(shù)據(jù)才會(huì)被選通,其他為0

module mux
#(
    parameter DATA_SIZE = 8,
    parameter NUM  = 8
)
(
    input  [NUM*DATA_SIZE-1:0]  din,
input[NUM-1:0]sel,
output[DATA_SIZE-1:0]dout
);


assigndout=mux_prio(din,sel);
function[DATA_SIZE-1:0]mux_prio;
    input  [NUM*DATA_SIZE-1:0]  din;
    input  [NUM-1:0]        sel;
    
    reg [NUM-1:0] dat;
    integer i,j;
    begin
        for(i=0;i

方式四:基于行為級(jí)描述。

在前面的設(shè)計(jì)中我們是根據(jù)數(shù)據(jù)選擇器的電路結(jié)構(gòu),用硬件語(yǔ)言描述出了這樣的電路,那么我們能不能只描述其功能,然后讓編譯器幫我們理解呢?

module mux
#(
    parameter DATA_SIZE = 8,
    parameter NUM  = 8
)
(
    input  [NUM*DATA_SIZE-1:0]  din,
    input  [NUM-1:0]            sel,
    
    output  [DATA_SIZE-1:0]      dout
    
);
assign dout = mux_prio_a(din,sel);
//基于功能,行為級(jí)的描述
function  [DATA_SIZE-1:0]      mux_prio_a ;
    input  [NUM*DATA_SIZE-1:0]  din;
    input  [NUM-1:0]        sel;
    reg temp;
    integer i;
    begin
        temp = 1;
        mux_prio_a = 0;
        for(i=0;i

總結(jié):

1、首先,這里提供了了四種描述參數(shù)可配的帶優(yōu)先級(jí)的多路選擇器的描述方法。第一種和第二種是常規(guī)的描述方法推薦if-else結(jié)構(gòu),第三種是根據(jù)電路結(jié)構(gòu)使用HDL描述,第四種是使用代碼描述了其功能。

2、第三種方法從功能描述,看起來(lái)描述簡(jiǎn)單,好理解,不過(guò)這樣的描述方式是看綜合軟件的“智能化程度”的,因?yàn)镕PGA是基于查找表LUT結(jié)構(gòu)的,這樣的描述方式在描述比較簡(jiǎn)單的電路功能,綜合器是可以正確理解的。如果比較復(fù)雜的電路,不推薦用這樣的描述方式。

3、值得注意的是,F(xiàn)PGA設(shè)計(jì)最重要的是理解低層的電路結(jié)構(gòu),實(shí)現(xiàn)過(guò)程最好是 功能--》電路--》HDL描述該電路,這才是最好的設(shè)計(jì)。使用類似第三種描述方式最好還是掌握理解底層電路結(jié)構(gòu),然后看綜合出來(lái)的是不是你需要的電路

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • FPGA設(shè)計(jì)
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26465
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109924
  • 數(shù)據(jù)選擇器

    關(guān)注

    2

    文章

    116

    瀏覽量

    16419
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49015

原文標(biāo)題:Verilog實(shí)現(xiàn)可參數(shù)化的帶優(yōu)先級(jí)的數(shù)據(jù)選擇器

文章出處:【微信號(hào):ZYNQ,微信公眾號(hào):ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    8.5.2數(shù)據(jù)選擇器的應(yīng)用(1)#硬聲創(chuàng)作季

    數(shù)據(jù)選擇器
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年12月03日 16:30:13

    8.5.2數(shù)據(jù)選擇器的應(yīng)用(2)#硬聲創(chuàng)作季

    數(shù)據(jù)選擇器
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年12月03日 16:31:02

    數(shù)據(jù)選擇器(MUX,Multiplexer)

    數(shù)據(jù)選擇器(MUX,Multiplexer)1.  數(shù)據(jù)選擇器的構(gòu)成2.  數(shù)據(jù)選擇
    發(fā)表于 10-20 09:42

    數(shù)據(jù)選擇器

    浮塵的天氣,風(fēng)大到可以吹走人了??罩幸灿胁簧傩∩匙雍湍嗤粒荒軠p少外出了。今天咱們來(lái)看看數(shù)據(jù)選擇器,本來(lái)想分享模擬開關(guān)的,時(shí)找不全相關(guān)知識(shí)。還是來(lái)看看數(shù)據(jù)
    發(fā)表于 05-30 17:38

    個(gè)關(guān)于數(shù)據(jù)選擇器的問題。

    我給4選1數(shù)據(jù)選擇器的輸入端C3 C2 C1 C0分別輸入 4V 3V 2V 1V的電壓,選擇端給1V和0.1V的電壓,按理說(shuō)根據(jù)數(shù)據(jù)選擇器
    發(fā)表于 12-10 10:52

    譯碼、數(shù)據(jù)選擇器及應(yīng)用

      譯碼、數(shù)據(jù)選擇器及應(yīng)用  
    發(fā)表于 12-20 23:13 ?84次下載

    數(shù)據(jù)選擇器

    數(shù)據(jù)選擇器     、 實(shí)驗(yàn)?zāi)康?     1. 掌握MSI組合邏輯電路數(shù)據(jù)選擇器
    發(fā)表于 03-28 09:55 ?3950次閱讀

    數(shù)據(jù)選擇器

    數(shù)據(jù)選擇器 、數(shù)據(jù)選擇器的定義及功能   數(shù)據(jù)選擇
    發(fā)表于 04-07 10:27 ?2w次閱讀
    <b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>選擇器</b>

    數(shù)據(jù)選擇器的定義及功能

    數(shù)據(jù)選擇器的定義及功能   數(shù)據(jù)選擇是指經(jīng)過(guò)選擇,把多個(gè)通道的數(shù)據(jù)傳送到唯
    發(fā)表于 04-07 10:29 ?2.2w次閱讀
    <b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>選擇器</b>的定義及功能

    jquery選擇器的實(shí)現(xiàn)原理(jquery選擇器總結(jié))

    jquery原型里面有個(gè)init初始的方法,將傳入的值進(jìn)行解析,比如傳入的id還是class還是標(biāo)簽名。然后通過(guò)相應(yīng)的方法返回?cái)?shù)組型對(duì)象。既可以通過(guò)對(duì)象直接調(diào)用方法,也可以使用數(shù)組的length。jQuery 的
    發(fā)表于 12-03 10:10 ?2677次閱讀
    jquery<b class='flag-5'>選擇器</b>的實(shí)現(xiàn)原理(jquery<b class='flag-5'>選擇器</b>總結(jié))

    FPGA學(xué)習(xí)系列:二選一數(shù)據(jù)選擇器的設(shè)計(jì)

    常重要,在 FPGA內(nèi)部的邏輯實(shí)現(xiàn)中都是通過(guò)數(shù)據(jù)選擇器實(shí)現(xiàn)的, 數(shù)據(jù)選擇器的應(yīng)用使我們的代碼和設(shè)計(jì)更加人性,多元
    的頭像 發(fā)表于 05-31 11:40 ?3.1w次閱讀
    FPGA學(xué)習(xí)系列:二選<b class='flag-5'>一數(shù)據(jù)</b><b class='flag-5'>選擇器</b>的設(shè)計(jì)

    什么是選擇器 CSS選擇器有哪些

    什么是選擇器呢?每條css樣式定義由兩部分組成,形式如下: [code] 選擇器{樣式} [/code] 在{}之前的部分就是“選擇器”。 “選擇
    的頭像 發(fā)表于 07-31 15:31 ?7406次閱讀

    如何設(shè)計(jì)參數(shù)數(shù)據(jù)選擇器

    在FPGA設(shè)計(jì)中,大部分情況下我們都得使用到數(shù)據(jù)選擇器。并且為了設(shè)計(jì)參數(shù),可調(diào),通常情況下我們需要個(gè)
    的頭像 發(fā)表于 03-30 14:15 ?2698次閱讀

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

    數(shù)據(jù)選擇器(Data Selector)是種常見的組合邏輯電路,用于根據(jù)輸入的選擇信號(hào),從多個(gè)輸入信號(hào)中選擇
    的頭像 發(fā)表于 08-01 14:28 ?364次閱讀

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

    數(shù)據(jù)選擇器(Data Selector)是種數(shù)字電路,用于從多個(gè)輸入信號(hào)中選擇個(gè)或多個(gè)信號(hào),
    的頭像 發(fā)表于 08-01 14:39 ?451次閱讀