新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > VHDL語(yǔ)言中信號(hào)的不同形式設(shè)置

        VHDL語(yǔ)言中信號(hào)的不同形式設(shè)置

        作者: 時(shí)間:2011-10-10 來(lái)源:網(wǎng)絡(luò) 收藏

        摘要:通過(guò)一個(gè)偶同位產(chǎn)生器邏輯功能的實(shí)現(xiàn)過(guò)程,介紹了方 式及注意事項(xiàng),并給出了完整的程序代碼。

        本文引用地址:http://www.104case.com/article/150123.htm

        關(guān)鍵詞:;程序

        1概述

        是一種快速的電路設(shè)計(jì)工具,功能涵蓋 了電路描述、電路合成、電路仿真等三大電路設(shè)計(jì)工作。目前廣泛使用的軟件有Altera公司出品的MAX+PLUSII,Xinlinx公司的Foundation等。

        VHDL中有兩種基本的語(yǔ)句命令:并行同 時(shí)語(yǔ)句命令以及順序語(yǔ)句命令。兩者之間最大的點(diǎn)是,并行同時(shí)語(yǔ)句命令就像是電路板的動(dòng)作方 式,不論幾個(gè)命令,是一次且同時(shí)執(zhí)行,產(chǎn)生結(jié)果;順序語(yǔ)句命令類似一般的程序,如BASIC等的執(zhí)行方式,是一次一個(gè)命令,且依書寫方式由上而下地執(zhí)行。

        并行同時(shí)語(yǔ)句命令主要有以下幾種表達(dá)方式: 直接語(yǔ)句(使用=運(yùn)算符)、條件式語(yǔ)句(When-Else)與選擇式設(shè)置語(yǔ)句(With-Select-When)等;

        順序語(yǔ)句命令主要有以下幾種表達(dá)方式:Pro cess(過(guò)程)、If-Else(判斷比較)、Wait Until(等待)、Case-Is-When(描述選擇)等。

        熟練而靈活地使用上述兩類命令,可以節(jié)省大 量的工作量,使程序簡(jiǎn)單直觀、可讀性增強(qiáng)而且有利于提高程序的編譯執(zhí)行效率。

        在數(shù)據(jù)通信過(guò)程中,同位器與同位檢查器常用 于數(shù)據(jù)糾錯(cuò)。本文就以一個(gè)簡(jiǎn)單偶同位產(chǎn)生器(Even Parity Bit Generator)真值表功能的實(shí)現(xiàn)方法來(lái)探討上述表達(dá)方式選擇問(wèn)題,以及編程 過(guò)程中的注意事項(xiàng)。

        2編程舉例

        例:試設(shè)計(jì)VHDL程序完成如表1偶同位器的 真值表功能:

        輸入

        輸出

        S2

        S1

        S0

        Z

        0

        0

        0

        0

        0

        0

        1

        1

        0

        1

        0

        1

        0

        1

        1

        0

        1

        0

        1

        1

        1

        0

        1

        1

        1

        1

        0

        0

        1

        1

        1

        0

        分析:由真值表可以看出,所要實(shí)現(xiàn)的是一個(gè)由三個(gè)數(shù)據(jù)位、一個(gè)同位位組成的偶同位產(chǎn)生器功 能。不難得出各位之間的簡(jiǎn)單邏輯關(guān)系:P=S0S1S2 。但是本文的主要目的在于通過(guò)此例闡述如何靈活運(yùn)用的基本表達(dá)式設(shè)置信號(hào),因此 某些可能更加簡(jiǎn)單的方法以及比較高級(jí)一點(diǎn)語(yǔ)句本文不予詳細(xì)討論。

        解:(注:VHDL語(yǔ)言中使用“--”作為注釋符號(hào))

        library ieee; ①

        use ieee.std_logic_1164.all;

        use ieee.std_logic_arith.all;

        use ieee.std_logic_unsigned.

        all;

        ENTITY hf is --假設(shè)建立的芯片電路名稱以及保存后的文件名為“hf”;

        Port(
        s: in std_logic_vector(2 downto 0);
        z: out std_logic  --最后一個(gè)管腳定義命令后面,不可加分號(hào);
        );

        end hf; --應(yīng)該保證電路單元名稱與存盤的文件名一致,否則編譯時(shí) 出錯(cuò);

        ARCHITECTURE a OF hf IS

        Begin --以上是本例題解答過(guò)程中的公共部分,其后分別接各解法語(yǔ)句。

        --******************************

        --解法1:使用“hen -Else”表達(dá)方式②

        z=‘0’when (s=000) else --此語(yǔ)句只能將s的各個(gè)值分開寫,而不能寫成如下

        0’ when (s=011) else -- z=‘0’

        when (s=000 or s=011 or s=110 or s=111)

        0’ when (s=110) else -- else ‘1’;

        ‘0’ when (s=111) else

        ‘1’ when (s=001) else

        ‘1’ when (s=001) else

        ‘1’ when (s=001) else

        ‘1’;

        End a;

        --解法2:使用With -Select -When表達(dá)方式:

        With s Select

        z=‘0’ when 000, --注意:除了最后一句的語(yǔ)句結(jié)束標(biāo)志是分號(hào)外,其余各句均是逗號(hào);

        ‘0’ when 011,

        ‘0’ when 110,

        ‘0’ when 111, -- when后選擇信號(hào)的值也只能分別列出,不可寫成組合條件
        ‘1’ when others;
        End a;

        --解法3:使用“If-Else”表達(dá)方式:

        Process--If-Else語(yǔ)句必須要與process配合使用;

        Begin --Process中此句必不可少,否則編譯時(shí)出錯(cuò);

        if s=000 or s=011 or s=110 or s=111 then --If后若為組合條件可用括號(hào)也可不用;

        z=‘0’;
        else
        z=‘1’;
        end if;
        end process;
        End a;

        --解法4:使用“Case-Is-When”表達(dá)方式:

        Process --“Case-Is-When”也只能與“Process”配合使用;

        Begin

        case s is

        when 000|011|110|111 =>

        --此處不能將“|”改成“or”但可以像解法1或解法1或解法2那樣將不同信號(hào)值分開寫;

        when others=> --When句末尾是“=>”而不是逗號(hào)或者分號(hào)。

        z=‘1’;
        end case;


        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 石楼县| 营山县| 观塘区| 临武县| 台安县| 拜泉县| 盐津县| 临高县| 龙江县| 天峨县| 桃园市| 肇庆市| 巍山| 珠海市| 黔东| 吕梁市| 菏泽市| 柘城县| 平原县| 永州市| 青岛市| 福鼎市| 石狮市| 浙江省| 鄂尔多斯市| 邹城市| 铜陵市| 黄骅市| 策勒县| 蓝田县| 青浦区| 黄大仙区| 灵川县| 金湖县| 清原| 杭州市| 美姑县| 满洲里市| 衡阳市| 高雄县| 额尔古纳市|