VHDL設(shè)計中信號與變量問題的研究
在VHDL程序設(shè)計中,可以充分利用信號或變量的系統(tǒng)默認(rèn)值,來靈活實現(xiàn)設(shè)計目標(biāo)。本文從應(yīng)用的角度舉例說明了VHDL設(shè)計中信號與變量的區(qū)別,以及正確的使用方法,并介紹了為信號或變量賦予初始值的技巧。
本文引用地址:http://2s4d.com/article/151920.htm概述
隨著集成電路技術(shù)的發(fā)展,用傳統(tǒng)的方法進(jìn)行芯片或系統(tǒng)設(shè)計已不能滿足要求,迫切需要提高設(shè)計效率,因此能大大降低設(shè)計難度的VHDL設(shè)計方法被越來越廣泛地采用。用VHDL語言設(shè)計系統(tǒng)的主要方法是:設(shè)計者根據(jù)VHDL的語法規(guī)則,對系統(tǒng)目標(biāo)的邏輯行為進(jìn)行描述,然后通過綜合工具進(jìn)行電路結(jié)構(gòu)的綜合、編譯、優(yōu)化,通過仿真工具進(jìn)行邏輯功能仿真和系統(tǒng)時延的仿真,最后把設(shè)計的程序下載到芯片中,成功地實現(xiàn)系統(tǒng)功能。
在VHDL設(shè)計中,最常用的數(shù)據(jù)對象主要有三種:信號(signal)、變量(variable)和常數(shù)(constant)。信號是電子電路內(nèi)部硬件連接的抽象。它除了沒有數(shù)據(jù)流動方向說明以外,其他性質(zhì)幾乎和“端口”一樣;信號是一個全局量,它可以用來進(jìn)行進(jìn)程之間的通信。變量只能在進(jìn)程語句、函數(shù)語句和過程語句結(jié)構(gòu)中使用,是一個局部量。
在VHDL語言中,對信號賦值是按仿真時間進(jìn)行的,到了規(guī)定的仿真時間才進(jìn)行賦值,而變量的賦值是立即發(fā)生的。下面的例子是從賦初值的角度說明信號與變量的這種區(qū)別的。
例如用VHDL語言實現(xiàn)初值為A的十六進(jìn)制的16個數(shù)的循環(huán)顯示。
對于如此的設(shè)計要求,如果用變量實現(xiàn),則VHDL程序如下。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity sevenauto is
port(clk:in std_logic;
y:out std_logic_vector(6 downto 0));
end sevenauto;
architecture behave of sevenauto is
begin
process(clk)
variable count:std_logic_vector(3 downto 0);
variable init:std_logic;
begin
if (clk''event) and (clk=''1'') then
if (init = ''0'') then
count:= 1001;
init:=''1'
end if;
count:=count+1;
case count is
when 0000=>y=1111110;
when 0001=>y=0110000;
when X2=>y=1101101;
when X3=>y=1111001;
when X4=>y=0110011;
when X5=>y=1011011;
when X6=>y=1011111;
when X7=>y=1110000;
when X8=>y=1111111;
when X9=>y=1111011;
when XA=>y=1110111;
when XB=>y=0011111;
when XC=>y=1001110;
when 1101=>y=0111101;
when 1110=>y=1001111;
when 1111=>y=1000111;
when thers=>y=XXXXXXX;
end case;
end if;
end process;
end behave;
評論