现在的位置: 首页 > 综合 > 正文

敏感信号表(有改动)

2018年03月17日 ⁄ 综合 ⁄ 共 1169字 ⁄ 字号 评论关闭

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

进程有组合进程和时序进程两种类型,组合进程只产生组合电路,时序进程产生时序和相配合的组合电路。设计中,需要特别注意的是,组合进程中所有输入信号,包括赋值符号右边的所有信号和条件表达式中的所有信号,都必须包含在此进程的敏感信号表中!否则,当没有被包括在敏感信号表中的信号发生变化时,进程中的输出信号不能按照组合逻辑的要求得到即时的新的信号,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在敏感列表里,其他信号都不能放在敏感列表内。 设计之初首先要根据功能构思电路的拓扑图,然后再考虑用VHDL描述这样的电路结构。不能随心所欲的描述功能!

 

  理解敏感信号。敏感信号是并发语句的必要要素,指明了并发语句被执行的条件。

敏感信号有显式和隐式,

对于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语言为了让IF与PROCESS结合得到强大表达力的设计吧!

抱歉!评论已关闭.