verilog code,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状态!
