Vhdl HDL中的默认分配可靠吗?

Vhdl HDL中的默认分配可靠吗?,vhdl,fpga,Vhdl,Fpga,我总是用默认的赋值来构建我的设计,因为它使我的代码行更少,而且我认为更可读。然而,我了解到,默认的作业有时会很麻烦。如果没有足够的空间进行设计,可以移除该零件的工具(Vivado、ISE)。我的意思是,默认赋值填充了未写的else语句。下面的代码是一个示例 我已经检查过很多次了,我在原理图中看到了这些语句的多路复用器,但我从未尝试过完全消耗资源的设计 t_next <= t_reg; if(start_i = '1') then t_next <= (others =>

我总是用默认的赋值来构建我的设计,因为它使我的代码行更少,而且我认为更可读。然而,我了解到,默认的作业有时会很麻烦。如果没有足够的空间进行设计,可以移除该零件的工具(Vivado、ISE)。我的意思是,默认赋值填充了未写的else语句。下面的代码是一个示例

我已经检查过很多次了,我在原理图中看到了这些语句的多路复用器,但我从未尝试过完全消耗资源的设计

t_next <= t_reg;
if(start_i = '1') then
    t_next <= (others => '0');
end if;

t_next据我所知,它非常可靠,18年来从未听说过相反的消息。这也是我大部分时间都在使用的东西,包括占80%或90%以上的FPGA。
如果一个工具要删除默认的赋值,那将是该工具的一个bug,因为它正在更改合成逻辑!VHDL是标准化的,Xilinx似乎没有选择……
你有关于那句话的任何来源/参考资料吗

我要补充的唯一一件事是,如果您有一个很长的过程,那么代码可能会更难阅读,默认值在前面几行。但这种情况不应该经常发生。

对于初始化信号(在定义上,对于启动值),这是另一个故事(我从来没有在合成逻辑中使用过它)

我从我的老师那里学到了。她说:“当验证工程师重述代码时,由于上面的陈述,他们似乎认为这种情况是错误的。”正如我所说的,如果FPGA中缺少空间,IDE可以删除这些状态。但是,我从未遇到过这种情况。如果空间不足,FPGA构建将失败。编译器应该创建与您的代码行为相匹配的逻辑-如果它不匹配,那么它就是一个工具错误。它永远不会删除逻辑以节省空间,否则它将无法按照代码运行。如果您的代码无法正常工作,我怀疑这是代码错误,而不是IDE问题。我使用的惯例是在赋值之前添加注释“//Default”或“-Default”。这向读取器指示信号将进一步改变。(如果它们没有被更改,则注释为“绑定”)@B.Go我认为,如果操作正确,如Oldfart所建议的那样,使用默认值比在任何地方指定所有值都更具可读性。当然,OP的代码片段太小,不值得使用默认值,但这意味着它在状态机中的使用是值得的。@JimLewis我同意,特别是对于1clk长脉冲。我的意思是,如果默认值是在顶端,那么长时间的可怕过程以及大量的信号和更多的任务可能会变得更难阅读,而不是“特殊情况”。但无论如何都应该避免这些漫长的过程。。。