微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog code,2种方式,哪种好?

verilog code,2种方式,哪种好?

时间:10-02 整理:3721RD 点击:
下面2种方式,哪中好呢?或是大家一般习惯用哪种?
是从面积,功耗,稳定性考虑?
第一种:
always @(posedge CLK or negedge rst_n or posedge enpul)
begin
    if(!rst_n)
        begin
        state <= 1'b0;
        cnt_en <= 1'b0;
        end
     else if(enpul)
         begin
         state <= 1'b1;
         cnt_en <= 1'b1;
         end
     else
         begin
         if(state & end_delay)
             begin
             state <= 1'b0;
             cnt_en <= 1'b0;
             end
          end
end
第二种:
always @(posedge CLK or negedge rst_n or posedge enpul)
begin
    if(!rst_n)
        begin
        state <= 1'b0;
         end
     else if(enpul)
         begin
         state <= 1'b1;
         end
     else
         begin
         if(state & end_delay)
             begin
             state <= 1'b0;
             end
          end
end
assign cnt_en = state;

沙发。
第二种简洁。
初学者,关注中!

assign d_in = 1'b0 | enpul;
always @(posedge CLK or negedge rst_n )
begin
    if(!rst_n)
        begin
        state <= 1'b0;
         end
     else
         begin
         if(state & end_delay)
             begin
             state <= d_in;
             end
         end
end
assign cnt_en = state;



    你的意思跟我想的不一样,
我的enpul也跟一个reset似的,如果为高,就要置位.
我现在的意思,是说cnt_en这个信号,是用触发器实现,还是有普通的门实现,
对不同的实现方式,在面积,功耗,稳定性方面各有什么优缺点.
当然对于我这个简单的例子,触发器更占面积和功耗.

你的要求跟JK触发器是一样的吧?
JK触发器用D触发器实现就必须让D的输入端等于Jk触发器的表达式,所以需要通过外加门电路。
从你的设计来说,第二个好,这种同样输出同样输出的东西,综合器会自动干掉只保留一个的.
哦,不对。你要球那个信号是上升沿时候变化的。我的不行

都是带异步复位和异步置位的DFF,一样。
3L的跟lz的不匹配,把异步置位加到DFF的D端了。

想用JK触发器的话,最好直接调用库里的原件。
用always @(posedge CLK or negedge rst_n or posedge enpul)来实现JK触发器是会有问题的。
试想这样的情况:rst_n从1变0,然后enpul从0变1,然后rst_n从0变1。
这时,根据你的code,直到下一个clk来之前,你的寄存器将还是处在rst_n为0时的状态!
而真正带异步set/reset的JK触发器,由于enpul为1,肯定是处在set状态!

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

网站地图

Top