推荐的HDL编码风格应该被用于使用合成 综合工具,如fru1tbat和布赖恩指出也。
对于Altera来说,这可以在"Quartus II Handbook - Recommended HDL Coding Styles"和 找到Xilinx的信息可以在"XST User Guide - Registers HDL Coding Techniques"找到。 Altera和Xilinx都使用process
构造显示触发器代码,但是 我无法使用条件并发信号 assign找到任何描述。
如果(使用when
)条件同时信号分配则还是使用,那么 它可能是值得考虑的等效代码:
registered_sig <= (others => '0') when (RESET = '1') else
data_sig when (read_data = '1') and (rising_edge(CLK)) else
registered_sig;
其写为过程是:
process (RESET, data_sig, read_data, CLK, registered_sig) is
begin
if RESET = '1' then
registered_sig <= (others => '0');
elsif (read_data = '1') and (rising_edge(CLK)) then
registered_sig <= data_sig;
else
registered_sig <= registered_sig;
end if;
end process;
但是这与用于推断Altera和Xilinx中的触发器 的过程的建议VHDL代码不匹配,因为数据的重新分配使用了 使用进程推断触发器 时,不包括。
因此,为了使条件同时信号分配使用process
时 匹配结构,如果用 条件同时信号分配为触发器的推断应该是在when
没有else
一部分。
此外,取出else
部分,因为码具有而不, 相同的功能和去除else
部分避免了在并行分配的表观环与
registered_sig <= ... else registered_sig;
次要:它应该是(others => '0')
,不(others <= '0')
。
您是否发现大多数综合工具都能正确解释此问题?我从来没有这样做过。 – fru1tbat