VHDL沒有模塊稱爲設計實體,由實體聲明(主要單元)和匹配的體系結構體(輔助單元)組成。
VHDL允許數組類型的端口對象很好,但是您不要在端口聲明的子類型指示中聲明類型。
類型是單獨聲明的,用於包中的端口或泛型子句中的接口類型聲明(後者在綜合中不被廣泛支持)。
該類型可以有一個無約束的範圍,稍後部分由端口聲明的子類型指示中的泛型常量提供。
您的語法不正確。
一種包裝聲明數組類型與無約束範圍:
package my_types_deferred_ranges is
type u8 is range 0 to 40;
type u8row is array (natural range <>) of u8;
type u9 is range 0 to 80;
type u9row is array (natural range <>) of u9;
end package;
甲計算值設計實體與端口聲明提供亞型適應症:
library ieee;
use ieee.std_logic_1164.all;
use work.my_types_deferred_ranges.all;
entity Calc is
generic (row_end : in integer);
port (
clk: in std_logic;
y1, y2, yc, y3, y4: in u8row (0 to row_end + 1);
lap_l, lap_r: out u9row (0 to row_end)
);
end entity Calc;
architecture foo of Calc is
begin
end architecture;
當實例化:
library ieee;
use ieee.std_logic_1164.all;
use work.my_types_deferred_ranges.all;
entity top is
end entity;
architecture foo of top is
constant row_end: natural := 25;
signal clk: std_logic;
signal y1, y2, yc, y3, y4: u8row (0 to row_end + 1);
signal lap_l, lap_r: u9row (0 to row_end);
begin
INST:
entity work.Calc -- an enity instantiation, no component declaration
generic map (row_end => row_end)
port map (
clk => clk,
y1 => y1,
y2 => y2,
yc => yc,
y3 => y3,
y4 => y4,
lap_l => lap_l,
lap_r => lap_r
);
end architecture;
當這些示例按順序進行分析,頂層可以詳細闡述和模擬,演示註冊端口映射子類型指示是有效的。
通用值如何在稍後在端口中定義其長度?
分析是設計單元的語法和語義分析,導致設計單元被存儲在庫中,類似於庫存檔中的對象文件。
詳細說明導致聲明生效。考慮鏈接和加載。
分析後不變的值(由表達式提供)是本地靜態的。精化時固定的值是全局靜態的。
通用常量是全局靜態的,在闡述過程中需要有效。當端口聲明的接口列表被闡述時,實例化的組件被詳細描述爲泛型值作爲約束的一部分,作爲端口子類型指示的一部分。
一種類型的對象的子類型指示(約束)可以通過在端口映射闡述之前詳細闡述的通用映射聲明的細化來提供。
VHDL沒有模塊稱爲設計實體,由實體聲明和匹配的體系結構體組成。 VHDL允許使用數組類型的端口對象,但是您不要在端口聲明的子類型指示中聲明類型。類型是單獨聲明的,用於包中的端口使用,或者作爲泛型子句中的接口類型聲明(後者在綜合中不被廣泛支持)中使用。該類型可以具有部分由端口聲明的子類型指示中的通用常量提供的延遲範圍。你的語法不正確。 – user1155120
你的意思是typer應該被定義爲:type u8row是u8的數組(integer rage <>) ?通用值如何在稍後在端口中定義其長度? – Ran