敏感信号

来源:互联网 发布:仓库管理用的软件 编辑:程序博客网 时间:2024/05/16 18:59

进程语句中有一个敏感信号表,这是进程赖以启动的敏感表。对十表中列出的任何信号的改变,都将启动进程,执行进程内相应顺序语句。

进程有组合进程和时序进程两种类型,组合进程只产生组合电路,时序进程产生时序和相配合的组合电路,这两种类型的进程设计必须密切注息VHDL语句应用的特殊方ICI,这在多进程的状态机的设计中,各进程有明确分土。设计中,需要特别注息的是,组合进程中所有输入信号,包括赋值符号右边的所有信号和条件表达式中的所有信号,都必须包含十此进程的敏感信号表中!否则,当没有被包括在敏感信号表中的信号发生变化时,进程中的输出信号不能按照组合逻辑的要求得到即时的新的信号,VHDL综合器将会给出错误判断,将误判为设计者一有存储数据的息图,即判断为时序电路。这时综合器将会为对应的输出信号引入一个保存原值的锁存器,这样就打破了设计组合进程的初衷。

 

   下面的进程中,只有一个敏感信号reset,但当我保持reset的值不变,仅将sgn_in的值由1变到0,此时输出信号sgn_out也会由0变到1,表明该进程被信号sgn_in触发执行了,而sgn_in并非敏感信号!

  process(reset)
    begin
        if(sgn_in='0') then
            sgn_out<='1';
        else
            sgn_out<='0';
        end if;
    end process;

原因:

组合进程所有输入信号,包括赋值符号右边的所有信号条件表达式中的所有信号,都必须包含十此进程的敏感信号表中

 

如果是生成组合逻辑,所有等式右侧的信号都必须添加到敏感列表里。 如果是生成时序逻辑,只有posedge clock posedge reset_a 或者negedge reset_n_a在敏感列表里,其他信号都不能放在敏感列表内。 设计之初首先要根据功能构思电路的拓扑图,然后再考虑用HDL描述这样的电路结构。不能随心所欲的描述功能!

 

  理解敏感信号。敏感信号是并发语句的必要要素,指明了并发语句被执行的条件。敏感信号有显式和隐式,对于PROCESS,敏感信号显式说明;对于并发信号代入(a <= b),隐含指明了b 敏感信号;对于条件信号代入(q <= "00"  WHEN sel = "0" ELSE q <= "11"),WHEN后面判断的信号sel就是隐含的敏感信号;对于选择信号代入(WITH sel SELECT q <= "00" WHEN 0 ....),WITH后的sel就是隐含的敏感信号。要注意的是IF语句里条件判断的信号并不是敏感信号,而只是分支条件,所以IF语句只能用在进程内,不是并发语句。比较一下IF语句和WITH语句,可以看出IF条件中的信号只是单纯起一个分支条件的作用,而WITH后的信号则起到分枝条件和敏感信号双重作用。这应该是VHDL语言为了让IFPROCESS结合得到强大表达力的设计吧!

 

原创粉丝点击