[問題] Verilog寫不寫else差異
想請教一下有涉獵Verilog的朋友們,用always block來描述
Sequential circuit時,若只想在某種情形下存入新的input值並且輸出
你們會用哪一種寫法?
原則上寫法1,不加else:
always@(posedge clk)
case(out_sel)
4'd1:if(V==4'd2)begin det0<=din; end
4'd2:if(V==4'd3)begin det0<=din; end
4'd3:if(V==4'd4)begin det0<=din; end
4'd4:if(V==4'd5)begin det0<=din; end
4'd5:if(V==4'd6)begin det0<=din; end
4'd6:if(V==4'd7)begin det0<=din; end
4'd7:if(V==4'd8)begin det0<=din; end
endcase
寫法2,加了else,但為了保留記憶,將output拉回指向自己:
always@(posedge clk)
case(out_sel)
4'd1:if(V==4'd2)begin det0<=din; end else det0<=det0;
4'd2:if(V==4'd3)begin det0<=din; end else det0<=det0;
4'd3:if(V==4'd4)begin det0<=din; end else det0<=det0;
4'd4:if(V==4'd5)begin det0<=din; end else det0<=det0;
4'd5:if(V==4'd6)begin det0<=din; end else det0<=det0;
4'd6:if(V==4'd7)begin det0<=din; end else det0<=det0;
4'd7:if(V==4'd8)begin det0<=din; end else det0<=det0;
endcase
合成結果:
用design compiler合出來的D-FF不太一樣,
寫法1是合出帶有CK,E,Q,QN的另一種DFF,比較不像是平常呼叫D-FF module
的那種標準元件
寫法2是合出帶有CK,D,Q及一個多工器的標準記憶D-FF
奇怪的是寫法2,也就是有加else的電路gate count卻比沒加的多了一些,
我知道有些人說不管怎樣都一定要寫,比較保險,也比較嚴謹,但是這樣gate count
就增加了,划得來嗎? 模擬起來結果也都是一樣的
但奇怪的是,平常寫單獨寫D-FF module時,為了能夠有記憶的特性
也不會在enable後面再加else阿?
而一般推崇也都是這樣的寫法:
module dff8(Q, D, enable, reset, clk); //8bit D-filp-flop
output [7:0] Q;
input [7:0] D;
input clk, reset,enable;
reg [7:0] Q;
always @(posedge clk or negedge reset)
begin
if (reset==0) Q<=0;
else if (enable)Q<=D;
end
endmodule
...讓我有點搞糊塗了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 120.101.8.201
※ 編輯: asd1436 來自: 120.101.8.201 (12/13 22:11)
→
12/13 23:00, , 1F
12/13 23:00, 1F
→
12/13 23:01, , 2F
12/13 23:01, 2F
→
12/13 23:29, , 3F
12/13 23:29, 3F
→
12/14 00:24, , 4F
12/14 00:24, 4F
推
12/14 00:37, , 5F
12/14 00:37, 5F
→
12/14 00:38, , 6F
12/14 00:38, 6F
→
12/14 00:38, , 7F
12/14 00:38, 7F
推
12/14 01:13, , 8F
12/14 01:13, 8F
→
12/14 01:14, , 9F
12/14 01:14, 9F
→
12/14 01:15, , 10F
12/14 01:15, 10F
推
12/14 01:18, , 11F
12/14 01:18, 11F
→
12/14 11:11, , 12F
12/14 11:11, 12F
→
12/14 11:11, , 13F
12/14 11:11, 13F
→
12/14 11:43, , 14F
12/14 11:43, 14F
→
08/13 19:34, , 15F
08/13 19:34, 15F
→
09/17 23:27, , 16F
09/17 23:27, 16F