Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vhdl 合成器关心一个或两个过程吗?_Vhdl_Synthesis - Fatal编程技术网

Vhdl 合成器关心一个或两个过程吗?

Vhdl 合成器关心一个或两个过程吗?,vhdl,synthesis,Vhdl,Synthesis,在VHDL中,有两种常用的状态机编码方法:一个进程或两个进程。有传言说(一些大学也有这样的说法),两个过程可能会产生更好的硬件。有人有确凿的证据证明这一点吗?我自己的初步测试表明没有任何区别 我正在寻找可重复的实验:两种编码风格的VHDL代码,以及如何合成它们的细节(哪个工具,哪个参数) 请帮我揭穿或证实两种过程可以产生更好的合成硬件的神话。对不起,没有可重复的实验,但如果合成器在意,我会感到震惊(至少现在-我没有确凿的证据)!当然,它只是将VHDL解析为一组逻辑,为一组触发器供电 我甚至不知道

在VHDL中,有两种常用的状态机编码方法:一个进程或两个进程。有传言说(一些大学也有这样的说法),两个过程可能会产生更好的硬件。有人有确凿的证据证明这一点吗?我自己的初步测试表明没有任何区别

我正在寻找可重复的实验:两种编码风格的VHDL代码,以及如何合成它们的细节(哪个工具,哪个参数)


请帮我揭穿或证实两种过程可以产生更好的合成硬件的神话。

对不起,没有可重复的实验,但如果合成器在意,我会感到震惊(至少现在-我没有确凿的证据)!当然,它只是将VHDL解析为一组逻辑,为一组触发器供电

我甚至不知道这是否曾经是老式合成器的问题,也不知道人们是否认为这是一个问题

很多此类“知识”都是基于20年前的工具。事情已经过去了

这并不是说在所有情况下一切都已修复,但通过实际执行试验,您正在做正确的事情

过去避免的其他事项包括:

  • 仿制药,因为它们显然是不可合成的。不是真的,而且比
    预处理代码,这通常是被保护的内容
  • 港口记录。这确实在很长一段时间内造成了DC外壳问题。这会造成连接错误 东西。我不知道这个问题是否解决了
  • 各种类型的同步过程,特别是那些使用
    等待
    而不是敏感度列表的同步过程。这一个特别疯狂,因为如果你读了VHDL规范,它说这两个是等价的,应该以相同的方式实现

    • 下面的代码应该为具有时钟门的库演示这一点。仿真结果将是相同的,形式验证将证明这两个结果是相同的。然而,第一个可能会使用更少的电力和更少的面积

      //Instances 1 clock gate
      reg [7:0] value;
      always @(posedge i_clk)
        if(enable)
          value <= new_value; 
      
      //Instances 8 muxes
      always @(posedge i_clk)
        if(enable)
          value <= new_value;
        else //Exhaustive so assignment always occurs
          value <= value;
      
      //实例1时钟门
      reg[7:0]值;
      始终@(posedge i_clk)
      如果(启用)
      
      我一直认为,双进程方法是为了更好地理解代码,提高模拟器性能。@Schedler有充分的理由认为,如果使用两个进程,模拟器性能实际上会更差。但可以肯定的是,您需要运行一个小测试!“我一直被教导”的论点正是我们在这里试图避免的。在中世纪,人们总是被教导地球是扁平的。我不知道它是否有什么不同,但是为了更好的可读性和“更少的代码大小”。我总是选择单进程状态机。@vpin:…出于完全相同的原因,我选择了双进程版本。@Philippe:很好-我的设计一直都很小,所以性能从来都不是问题。因此,我也没有关于这一点的测量数据。“基于20年前的工具”,这正是我的感觉。我已经测试了一些东西,结果证明对于1或2个过程是等效的。除非有人拿出证据,否则我认为我们将不得不正式谴责这一“知识”.................不管人们是否认为这是事实.......在我的第一次实验中,我得到了1个和2个过程之间的巨大差异。原来我的两个状态机是不等价的-我的错误-!当人们不小心时,这样的经历会助长不以现实为基础的“经验法则”。但我们是工程师,不是炼金术士,所以我试图揭穿硬件设计中的一些黑魔法。“可能会使用更少的电力…”不是我想要的。您是否确实通过合成工具运行了这些代码片段?(我想是Talus?你使用的是最新版本吗?)我刚刚在Altera Quartus上进行了测试,两个代码段的测试结果完全相同。问题是关于VHDL的。请注意,此代码段是Verilog。