我正在做一个学校项目,并有以下触发器实体:
-- define the width-bit flip flop entity
entity flopr is
generic (width: integer);
port (clk, reset: in STD_LOGIC;
d: in STD_LOGIC_VECTOR(width-1 downto 0);
q: out STD_LOGIC_VECTOR(width-1 downto 0));
end flopr;
-- define the width-bit flip flop architecture
architecture asynchronous of flopr is
begin
process(clk, reset)
begin
if reset ='1' then
q <= (others => '0');
elsif rising_edge(clk) then
q <= d;
end if;
end process;
end;
我需要将STD_LOGIC
信号(位)传递给d
而q
不是STD_LOGIC_VECTOR
(向量)。
但是,如果我只是简单地传递它们而不进行任何类型的转换,则会出现编译错误,因为传递的类型 ( ) 与实体 ( )STD_LOGIC
中的类型不同,即使 的大小为 1。flopr
STD_LOGIC_VECTOR
STD_LOGIC_VECTOR
通过一些谷歌搜索和实验,我想出了这个:
zeroMFlopr: entity work.flopr generic map(1) port map(clk => clk, reset => reset, d => (0=>zeroE), q(0) => zeroM);
wherezeroE
和zeroM
are 的类型STD_LOGIC
。
它可以编译,但这是正确的方法吗?
编辑:我尝试在 quartus 中编译,正如我所说的,它工作正常,但是当我尝试在 modelsim 中编译时,我收到错误:
形式“d”的实际表达(聚合)不是全局静态的。
该错误引用了我在上面发布的行。