在VHDL中实现寄存器时,是否必须编写'else'语句

在VHDL中实现寄存器时,是否必须编写'else'语句,vhdl,Vhdl,为了在进程外实现寄存器,我以以下方式使用when语句: registered_sig <= (others => '0') when (RESET = '1') else data_sig when (read_data = '1') and (rising_edge(CLK)) else registered_sig; registered_sig“0”)何时(重置='1')其他 当(读取数据='1')和(上

为了在进程外实现寄存器,我以以下方式使用
when
语句:

registered_sig <= (others => '0') when (RESET = '1') else
                  data_sig when (read_data = '1') and (rising_edge(CLK)) else
                  registered_sig;
registered_sig“0”)何时(重置='1')其他
当(读取数据='1')和(上升沿(CLK))else时的数据信号
注册信号;
这句话和没有最后一部分的同一句话有什么区别吗

registered_sig <= (others => '0') when (RESET = '1') else
                  data_sig when (read_data = '1') and (rising_edge(CLK));
registered_sig“0”)何时(重置='1')其他
数据信号(读取数据='1')和(上升沿(CLK));

推荐的HDL编码样式应用于所用的合成 合成工具,如fru1tbat和Brian所述

对于Altera和Altera,可在和中找到 有关Xilinx的信息,请参见。 Altera和Xilinx都使用
process
结构显示触发器代码,但是 我无法使用条件并发信号找到任何描述 分配

如果仍然使用条件并发信号分配(当时使用),则 可能值得查看以下等效代码:

registered_sig <= (others => '0') when (RESET = '1') else
                  data_sig when (read_data = '1') and (rising_edge(CLK)) else
                  registered_sig;

小调:应该是
(其他=>'0')
,而不是
(其他人你发现大多数合成工具都能正确地解释这一点吗?我从来没有这样做过。
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;
registered_sig <= ... else registered_sig;