微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 如何实现两个输入信号触发同一逻辑。

如何实现两个输入信号触发同一逻辑。

时间:10-02 整理:3721RD 点击:
本来有个周期1s的外部输入信号signal1触发了一个同步操作,现在需要增加另外一个周期也为1s的外部输入信号signal2也要触发同一操作。
怎样实现呢,FPGA不能在不同的process对同一信号赋值。但是两者要实现同一逻辑的话,就都要对很多相同的信号赋值。有高手知道如何操作么?
例如:process(signal1)
          if(reset) then
            a<= '0';
            b<='1';
            c<= ''0x00000'';
          elsif ((signal1'event and signal1 = '1')and (enable = '1'))then
              c <= c +100;
              .....
现在需要另一个输入信号signal2也触发同样的操作,该如何实现呢。注:触发逻辑很难整理成模块调用。



   直接在process内添加一条else if,触发信号为signal2,不可以吗?



    不可以的,signal1与signal2都是时钟信号。一个process不可以有两个时钟触发。综合时会报错。

两个触发信号取或以后,再触发这个进程不就行了嘛?如果同时来到,就当做一个触发;如果不同,就形成两次触发。不知道你要的是不是这个结果。

反正你只是判断触发信号的上升沿,他们合并为一个信号也是照样可以这么做的。



    你的方法在外部的两个时钟信号不是同时到来时即只有一个输入时应该是可以的。但是如果两个信号同时从外部输入时就会出现问题。如果两个信号严格的同时输入,并且相位想同,应该没问题。如果两个信号在不同时刻从外部输入,并且相位不同的话,就会出问题了。

有没有更高速率的时钟?
我对你题目的理解就是,根据2个频率相同、相位关系不固定的时钟,对同一个寄存器赋值。如果没有更高速率的时钟,我想不出对应的硬件。

首先来说,如果电路中出现了必须这样才能正常工作的情况,应该是哪一部分设计出错了。
但一定要这样做,需要确定signal1与signal2的频率是多少,他们之间是否有固定的相位关系,电路部分除了功能正常,还需要考虑实际综合之后的timing能不能满足要求
这里假设singal1是50MHz,而singal2是10MHz,他们异步的clock。
可以用signal1做为DFF时钟,用singal2生成一个信号,输出值是判断singal2的上升沿。
reg signal2_test;
always @(posedge signal2 or sig2_domain_reset_n)begin
    xxxx
    else
       signal2_test <= #`delay  ~signal_test;
end
reg signal2_test_ff1;
reg signal2_test_ff2;
reg signal2_test_ff3;
always @(posedge signal1 or sig1_domain_reset_n)begin
    xxx
    else begin
      signal2_test_ff1 <= #`delay signal2_test;
      signal2_test_ff2 <= #`delay signal2_test_ff1;
      signal2_test_ff3 <= #`delay signal2_test_ff2;
    end
end
wire signal2_test_pos =  signal2_test_ff2 ^ signal2_test_ff3;
所以可以:
process(signal1)
          if(reset) then
            a<= '0';
            b<='1';
            c<= ''0x00000'';
          elsif ((signal1'event and signal1 = '1')))then
            if( (enable = '1' or signal2_test_pos='1')
              c <= c +100;
              .....
当然了,具体做法一定是跟你的时钟,相位关系,输入信号的时序有关的,如果你这个enable一直有效我说的这个方法就不适用,如果两个clcok的频率相差较小,也不能做这做,你需要把前面那些条件说清楚才行。

简单的就是把这两个输入触发信号转化为使能,用一个高倍钟操作

    首先很感谢小编,你回答的很详细。其实两个输入信号在外部硬件上看来自不同的引脚。对FPGA来说都是频率为1Hz的外部输入时钟信号。z。这两个信号的作用是触发内部的一个帧同步的操作。两者基本不会同时到来,一般情况下只用其中一个信号作为触发条件。
但是为了功能的完善性,需要把两者同时触发的情况也考虑进去。

    此外,FPGA的工作主时钟是20.48MHz.由于输入的触发信号时钟频率较低(1Hz),就直接用这个信号作为触发条件的。直接     

                          process(signal1)
                              if(signal1'event and signal1 = '1')and ( others conditions) then
                                        执行帧同步的操作.....

此外,我在外部对两个时钟做了or操作,然后赋值给另一个信号 signal3 ,把signal3作为触发信号。在signal2无输入,signal1有输入时。
帧同步操作没有被正常触发!不晓得问题出在哪里。初步怀疑signal2无输入时默认电平太高,与signal1 取or后 电平变高了,影响了signal3.
待验证。



    用高速时钟,对两个信号先取沿,转换到同一个时钟域,再对取到的两个沿或在一起做触发信号。



  这样是可以的。输入信号频率为1Hz,如何直接在process外对输入的两个1Hz的时钟信号取或不晓得行不。我在process外对两个时钟信号直接取或的,没有用到本地时钟。当输入信号只有一个时,发现没有完成触发操作。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top