[問題] Verilog寫不寫else差異

看板Electronics作者 (襲雲)時間11年前 (2012/12/13 22:10), 編輯推噓3(3013)
留言16則, 7人參與, 最新討論串1/1
想請教一下有涉獵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
最下面那個我都會寫else耶 一般推崇指的是??
12/13 23:01, 2F

12/13 23:29, , 3F
有寫if就要有else 合出來的電路會比較好
12/13 23:29, 3F

12/14 00:24, , 4F
if->else, case->default
12/14 00:24, 4F

12/14 00:37, , 5F
因為沒有初值的reg訊號,有些compiler會認為要維持原值
12/14 00:37, 5F

12/14 00:38, , 6F
會自動合出latch,而latch是combinational loop,在簡
12/14 00:38, 6F

12/14 00:38, , 7F
單的電路裡面是不希望看到的東西。
12/14 00:38, 7F

12/14 01:13, , 8F
雖然說Sequential電路一你這樣寫不會有Latch的問題
12/14 01:13, 8F

12/14 01:14, , 9F
一般來說你那兩種寫法Compile過都是一樣的東西
12/14 01:14, 9F

12/14 01:15, , 10F
合成結果會不同我看dc可能是有針對你第一種寫法做優化
12/14 01:15, 10F

12/14 01:18, , 11F
差別在Compile的結果有可能不同(EnableDFF or MuxDFF)
12/14 01:18, 11F

12/14 11:11, , 12F
一般推崇指的是我在網路上看到有關verilog的部落格,以及
12/14 11:11, 12F

12/14 11:11, , 13F
教授跟學長姊留下來的code都是這樣寫
12/14 11:11, 13F

12/14 11:43, , 14F
抱歉 我針對我程式碼會呼叫到的D-FF去增加else的修改 發現
12/14 11:43, 14F

08/13 19:34, , 15F
教授跟學長姊留下來的c https://noxiv.com
08/13 19:34, 15F

09/17 23:27, , 16F
一般來說你那兩種寫法C https://daxiv.com
09/17 23:27, 16F
文章代碼(AID): #1GoU7F0w (Electronics)