关于VHDL中流程语句的基础知识

时间:2015-02-18 21:21:19

标签: vhdl

在xilinx的测试平台上,我认识到像

这样的声明
 clk_process :process
   begin
        clk <= '0';
        wait for clk_period/2;
        clk <= '1';
        wait for clk_period/2;
   end process;

根据我的知识,当参数改变时实现了过程。但是,在这里,我们不会声明任何参数。为什么这段代码有效?在什么条件下?而且,为什么我们必须使用像&#34; clk_process这样的标签:&#34;或者在端口映射中。对不起,这是一个非常基本的问题:(即使是简短的解释也足够了

2 个答案:

答案 0 :(得分:1)

IEEE Std 1076-2008,10.2等待陈述:

  

wait语句导致暂停进程语句或过程。

11.3流程声明:

  

流程语句定义了一个独立的顺序流程,表示设计某些部分的行为。

第12段:

  

进程语句的执行包括重复执行其语句序列。在执行了流程语句的语句序列中的最后一个语句之后,执行将立即继续执行语句序列中的第一个语句。

回到10.2,第8段:

  

执行wait语句会导致计算时间表达式以确定超时间隔。它还会导致相应的进程语句的执行被挂起,其中相应的进程语句是包含wait语句的语句,或者是包含wait语句的过程的父语句(参见4.3)。暂停的进程最迟将在超时间隔到期后立即恢复。

回到11.3,第4段:

  

如果在保留字进程之后出现过程敏感性列表,则假定过程语句包含隐式等待语句作为过程语句部分的最后一个语句;这个隐式的等待语句的格式为

     在sensitivity_list上

等待;

(其中包括过程敏感性列表的情况)。

您所称的标签是标签。标签是可选的(特别是在这里,尽管有些地方可能需要标签)。

10.1的最后一段(10.顺序陈述):

  

可以标记所有顺序语句。这些标签在最内层封闭过程语句或子程序体的声明部分的开头隐式声明。

11.1的最后一段(11.同声明):

  

可以标记所有并发语句。此类标签在最内层封闭实体声明,体系结构体,块语句或生成语句的声明部分的开头隐式声明。

(并且流程陈述是并发陈述,见11.1第2段)。

11.3,第2段:

process_statement ::= 
    [ process_label : ]
        [ postponed ] process [ ( process_sensitivity_list ) ] [ is ] 
              process_declarative_part
        begin
            process_statement_part
        end [ postponed ] process [ process_label ] ;

方括号括起一个可选项。 (见1.3.2句法描述)。

答案 1 :(得分:1)

这样的过程经常在测试平台中使用。该过程用于生成应在测试设计中使用的时钟。 你只需要像1us一样定义一个“clk_period”,并获得一个名为“clk”的1MHz时钟。

非常重要这段代码不可合成,只适用于模拟!

“Tag”“clk_process”只是进程名称,您可以随意调用它。