?? jishuqi.vhd
字號:
--VHDL提供了SIGNAL 和VARIABLE這兩種對象來處理非靜態數據,同時提供了CONSTANT和GENERIC這兩種對象來處理
--靜態數據,常量和信號是全局的,變量是局部的。
--常量用來確定默認值
--格式為:constant 常量名 :type :=值
--例如: constant set_bit : bit :='1';
-- constant datamemory : memory :=(('0' '0' '0' '0' ),
-- ('0' '0' '0' '1' ),
-- ('0' '0' '1' '1' ));
----------------------------------------------------------------------
--vhdl中的信號代表的是邏輯電路的連線
--格式:signal name: type{range} [:=initial_value];對信號進行賦初始值時的操作是不可綜合的只能通用于仿真
--當信號在順序描述語句中時,其值不是立即更新的,而是在相應的進程,函數或過程完成后才進行更新的
----------------------------------------------------------------------
--如下的是計算一個二進制矢量中1的個數的代碼:
-------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
-------------------------------------------------
entity jishuqi is
port (din: in std_logic_vector(7 downto 0);
ones: out integer range 0 to 8);
end jishuqi;
------------------------------------------------
architecture not_ok of jishuqi is
signal temp: integer range 0 to 8;--在全局中聲明使用
begin
process(din)
begin
temp <= 0;---25和28行都進行了賦值,由于不是立即生效的,當代碼執行到28行的時,temp的初值可能是
for i in 0 to 7 loop--temp所有可能取值的任何一個,導致錯誤,用變量來記錄中間值即可解決問題
if (din(i) = '1') then
temp <= temp+1;
end if;
end loop;
ones <= temp;
end process;
end not_ok;
-----------------------------------------------------
--本題中不使用temp也可以完成設計,因為ones本身就是一個端口,可以直接使用,但必須將ones的端口方向
-- 改為buffer,因為ones需要被賦值并且在內部被調用
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -