zgbkdlm 发表于 2014-10-24 21:29:21

求助,,解决多个always对同一个赋值的问题..

新手刚学VERILOG.

对于在多个always中对同一变量赋值无法综合,有木有什么解决的办法?我智商不够,,想一晚上没想出来..

比如:

always @ (posedge Input)
        begin
                EnableN <= 1'b0;
                EnableP <= 1'b1;
                ...略
        end

always @ (negedge Input)
        begin
                EnableN <= 1'b1;
                EnableP <= 1'b0;
                ...略
        end


always @ (posedge clk)        //clk频率远高于Input
        begin
                if (EnableN == 1'b1)
                        ...
                else
                        ...
                if (EnableP == 1'b1)
                        ...
                else
                        ...
        end


咋解决..

zkf0100007 发表于 2014-10-24 21:34:44

合并在同一个进程不就可以了

zgbkdlm 发表于 2014-10-24 21:42:52

zkf0100007 发表于 2014-10-24 21:34
合并在同一个进程不就可以了

那合并在clk进程里面怎么判断Input的上升沿下降沿呢...

bright2307 发表于 2014-10-24 21:48:01

我只是来看看学习学习一下~~

skyxjh 发表于 2014-10-24 21:58:34

reg inputbuf;
always @ (posedge clk)      //clk频率远高于Input
         begin
               inputbuf <= input;
               if(inputbuf &~ input) //negedge input
                     ...
               else if(~inputbuf & input) //posedge input
                      ...
               else
                     ...
         end

xlht 发表于 2014-10-24 22:00:50

找到答案了{:lol:}

zkf0100007 发表于 2014-10-24 22:04:02

zgbkdlm 发表于 2014-10-24 21:42
那合并在clk进程里面怎么判断Input的上升沿下降沿呢...

干嘛非要用INPUT当时钟

wuqt 发表于 2014-10-24 22:07:37

楼上正解,verilog HDL 始终对应着特定的数字电路,说白了就是描述一个数字电路,两个进程都对一个寄存器赋值如果不是互斥就短路了。

alcohol 发表于 2014-10-25 20:17:47

不就是INPUT对Enable翻转么?

组合逻辑多简单,always搞那么复杂。
assign EnableP = INPUT;
assign EnableN = ~INPUT;
搞定。

cxhy 发表于 2014-10-25 20:50:51

方法一:选择EnableN_1,和EnableN_2,两个信号,在这两个信号分别在两个不同的模块里面赋值,然后在用一个组合逻辑把这两个型号进行“与”或者“或”运算即可。这是一种稳妥的方法,但是比较消耗资源。

方法二:见九楼
页: [1]
查看完整版本: 求助,,解决多个always对同一个赋值的问题..