• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > VHDL語言中信號的不同形式設置

    VHDL語言中信號的不同形式設置

    作者: 時間:2011-10-10 來源:網絡 收藏

    摘要:通過一個偶同位產生器邏輯功能的實現過程,介紹了方 式及注意事項,并給出了完整的程序代碼。

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

    關鍵詞:;程序

    1概述

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

    VHDL中有兩種基本的語句命令:并行同 時語句命令以及順序語句命令。兩者之間最大的點是,并行同時語句命令就像是電路板的動作方 式,不論幾個命令,是一次且同時執行,產生結果;順序語句命令類似一般的程序,如BASIC等的執行方式,是一次一個命令,且依書寫方式由上而下地執行。

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

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

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

    在數據通信過程中,同位器與同位檢查器常用 于數據糾錯。本文就以一個簡單偶同位產生器(Even Parity Bit Generator)真值表功能的實現方法來探討上述表達方式選擇問題,以及編程 過程中的注意事項。

    2編程舉例

    例:試設計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

    分析:由真值表可以看出,所要實現的是一個由三個數據位、一個同位位組成的偶同位產生器功 能。不難得出各位之間的簡單邏輯關系:P=S0S1S2 。但是本文的主要目的在于通過此例闡述如何靈活運用的基本表達式設置信號,因此 某些可能更加簡單的方法以及比較高級一點語句本文不予詳細討論。

    解:(注:VHDL語言中使用“--”作為注釋符號)

    library ieee; ①

    use ieee.std_logic_1164.all;

    use ieee.std_logic_arith.all;

    use ieee.std_logic_unsigned.

    all;

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

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

    end hf; --應該保證電路單元名稱與存盤的文件名一致,否則編譯時 出錯;

    ARCHITECTURE a OF hf IS

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

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

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

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

    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表達方式:

    With s Select

    z=‘0’ when 000, --注意:除了最后一句的語句結束標志是分號外,其余各句均是逗號;

    ‘0’ when 011,

    ‘0’ when 110,

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

    --解法3:使用“If-Else”表達方式:

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

    Begin --Process中此句必不可少,否則編譯時出錯;

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

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

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

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

    Begin

    case s is

    when 000|011|110|111 =>

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

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

    z=‘1’;
    end case;


    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 磐安县| 西青区| 中阳县| 永嘉县| 临沭县| 曲周县| 开封县| 砀山县| 光山县| 阿坝县| 岳阳市| 象州县| 巴林左旗| 阳曲县| 萨迦县| 东至县| 淳安县| 洪泽县| 平江县| 阜阳市| 姚安县| 宜宾市| 钟山县| 沂水县| 温宿县| 潢川县| 唐河县| 太和县| 交口县| 泽库县| 天津市| 福州市| 重庆市| 临沧市| 上栗县| 伊宁县| 宜春市| 望谟县| 陇南市| 托克托县| 濮阳县|