verilog中异步复位模块中时钟信号的判断

挂在天边的鱼   2011-9-20 22:03 楼主

verilog编程中,异步复位程序中,复位信号和时钟信号都是以沿作为敏感信号.

always @(posedge clk,posedge rst_p)

begin

     if rst_p='1' then

        count <= 4'd0;

     else

        count <= count+'1';

end

在这个程序中,综合工具是如何判断哪一个是复位信号,哪一个是时钟信号的?是通过判断在哪个信号下给定固定值吗?

如果程序改成:

always @(posedge clk,posedge rst_p)

begin

   if rst_p='1' then

       count <= count+'1';

   else

       count <= 4'd0;

end

这样哪个是时钟信号呢?生成的电路又会是怎样的呢?

回复评论 (10)

你这个问题提得很好!

我是这样理解你这个问题。

正常情况,复位信号边沿只来一次,时钟边沿周期来的。所以第一种写法是标准写法。编译器默认根据前面的标准认为,复位信号RST_P,Clk是时钟信号。

如果第二种情况,任然是复位信号RST_P,时钟信号CLK。

   这与D触发器的电路结构相关,D触发器复位或置位信号优先级最高,时钟触发是数据从输入到输出。

 

前面两种写法都是符合D触发器这个标准,所以编译器默认RST_P 复位信号,CLK时钟信号。编译器不会因为输出决定电路结构。

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-9-21 21:47
第二种写法 是在rst_p的上升沿 计数器加1,所以rst_p会综合成时钟信号 。
学习的乐趣在于分享。
点赞  2011-9-21 21:53

TX_XY兄,你用QUARTUS验证过吗?

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-9-22 15:44
我不同意TX_XY的看法!
一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-9-22 15:44
引用: 原帖由 eeleader 于 2011-9-22 15:44 发表 TX_XY兄,你用QUARTUS验证过吗?


家里面电脑没有任何综合工具 也没验证 。
学习的乐趣在于分享。
点赞  2011-9-22 20:53

验证结构如下:

第一种写法:

编写的VERILOG程序

module  test2(clk,rst_p,count);
input clk ;
input rst_p;
output count;
reg[3:0] count;

always @(posedge clk or posedge rst_p)
begin
     if (rst_p==1)
        count<=4'd0;
     else
        count <=count+1;
end
endmodule

通过RTL VIEWER查看结果如图:

6.JPG

修改上面的第一种写法变为第二种写法:
module  test2(clk,rst_p,count);
input clk ;
input rst_p;
output count;
reg[3:0] count;

always @(posedge clk or posedge rst_p)
begin
     if (rst_p==1)
         count <=count+1;
     else
         count<=4'd0;
        
end
endmodule

 

第二种写法综合后结果:

7.JPG

 

从上面的图中可以看到,结果!谁对谁错一目了然了。

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-9-22 22:01
eeleader 的说法有点意思,我自己综合了一下,工具还会把clk当时钟,然后用一个比较复杂的组合逻辑电路,通过置位的方式来实现count <= count+1'b1
点赞  2011-9-22 22:13
版主的解释很到位啊...小弟谢过了...
点赞  2011-9-22 22:19
恩 eeworld 说的对 呵呵
没有仔细去推敲 。。。
学习的乐趣在于分享。
点赞  2011-9-22 22:38

其实,从上面也可以得到一点启示。在复位过程中,不要执行运算操作,最好执行赋值操作,否则浪费大量的资源!

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-9-23 08:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复