1樓:俱懷逸興壯思飛欲上青天攬明月
用vhdl表示八位暫存器的程式如下所示:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity a is
port(clk:in std_logic;
data_in:in std_logic;
data_out:out std_logic_vector(7 downto 0));//定義輸出為8位向量;
end a;
architcture art of a is //程式主體;
signal temp:std_logic_vector(7 downto 0);
begin
process(clk) //程序主體;
begin
if rising_edge(clk) then //等待脈衝上公升沿到來;
temp<=temp(7 downto 1)&datain; //進行移位賦值;
end if;
end process;
end art;
vhdl語言是一種用於電路設計的高階語言。它在80年代的後期出現。最初是由美國國防部開發出來供美軍用來提高設計的可靠性和縮減開發周期的一種使用範圍較小的設計語言 。
vhdl翻譯成中文就是超高速積體電路硬體描述語言,主要是應用在數位電路的設計中。它在中國的應用多數是用在fpga/cpld/epld的設計中。當然在一些實力較為雄厚的單位,它也被用來設計asic。
2樓:匿名使用者
首先,乙個8位的移位暫存器不應該這麼寫。其次裡面有好些錯誤,我先給你個正確的暫存器的思路:
entity shift8 is
port(d,clk:in std_logic;
b: out std_logic_vector(7 downto 0)
);end entity shift8;
architecture rtl of shift8 is
signal b_s : std_logic_vector(7 downto 0);
begin
process (clk)
begin
if rising_edge(clk) then
b_s <= b_s(6 downto 0) & d; --左移
--或者 b_s <= d & b_s(7 downto 1); --右移
end if;
b <= b_s;
end process;
end rtl;
上面才是正確的以為暫存器的vhdl寫法。 我建議你把我的**綜合以後用軟體看看rtl圖,你就會理解vhdl描述的東西都可以轉化為邏輯電路,不能用寫c的思維來寫vhdl。
另外附加一句建議,shared variable,variable等最好不要在你的邏輯電路設計中使用,用也只在testbench中使用,因為在片上,variable什麼都不是,是無法被綜合成電路的一部分的。
希望能幫到你
如何用8位的二進位制數表示,如何用8位的二進位制數表示 2
2 的補碼為1111 1110 步驟如下 首先,2 的二進位制數表示為0000 0010則 2 的原碼錶示為1000 0010,即最高位 符號位 變成1但是我們一般用補碼錶示負數,所以,對 2絕對值原碼取反加1,得到1111 1101 1 1111 1110 用正數的補碼錶示負數的二進位制 2 的8...
為什麼8位補碼定點整數所能表示的絕對值最大的負數的值為
額手機壞了 4位二進位制原碼中沒有 8的表示,就不能用平時口訣的方法把 8進行原碼補碼的轉換了。要理解4位二進位制補碼中的 8是1000這結論,只能回到補碼的起點。介紹預備知識 先理解 補碼利用模和同餘概念在運算時可使減法轉換成減法。例如 在12小時制中,以1點鐘為起點,向後逆時針轉2點到11點,但...
字長8位的無符號的二進位制整數能表示的十進位制數值範圍是多少
蹦迪小王子啊 8位無符號的二進位制數可以表示十進位制數0 255,共256個數。8位無符號的二進位制數可以表示00000000 11111111。11111111 1 2 7 1 2 6 1 2 5 1 2 0 128 64 32 16 8 4 2 1 255。所以8位無符號的二進位制數表示十進位制...