日志档案

发表于 2007-10-15 22:51:31

1

标签: 无标签

时序Case和组合Case资源比较

同学问我一道O2的笔试题,

module   C_case1(clk,out1);
input  clk;
output out1;

reg  state1;
reg  out1;


always @(posedge clk)
  case(state1)
   0: state1<=1;
 1: state1<=0;
  endcase
always @(state1)
  case(state1)
   0: out1<=1;
 1: out1<=0;
 endcase
endmodule

 

 module   C_case2(clk,out2);
input  clk;
output out2;

reg  state2;
reg  out2;
 
 always @(posedge clk)

  case(state2)
   0:begin
 state2<=1;
   out2<=1;
   end
 1:begin
 state2<=0;
   out2<=0;
   end
   endcase
 
 
 endmodule

 

两者资源比较。

在Quartus综合结果如下:

第一种:

点击看大图

组合Case

第二种:

点击看大图

时序Case

 

明显第一种比第二种省个触发器

工程文件打包如下:

rar

系统分类: CPLD/FPGA   |   用户分类: Verilog   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(604)    回复(2)  

投一票您将和博主都有获奖机会!

最新评论

  • riple

    2007-10-16 9:07:25

    资源和性能从来就是一对矛盾,需要设计者权衡。第二种方式可以切断第一种方式潜在的关键路径,在资源允许的情况下,作为一种好的设计习惯,可以提高系统的整体运行频率。

    这里,第一种方式潜在的关键路径在于从state1寄存器,经过out1,经过可能的组合逻辑,到达下一个寄存器的路径。如果从out1到下一个寄存器之间的组合逻辑很复杂的话,再加上out1之前的decoder0的组合逻辑,该路径就会更长;在decoder0之后添加寄存器,就能切断该路径。

    增加寄存器的另一个好处是,在out1输出不会看到毛刺。这一点是综合工具按照out1寄存器的建立保持时间优化后决定的。

  • riple

    2007-10-16 9:10:14

    还有一点,增加寄存器,有利于时序约束的表达。否则,out1直接驱动引脚的话,很难控制out1节点到引脚的输出时序。