推 kyo547896321: 照你這寫法,還是得等clk才能換state吧? 01/03 01:51
這個寫法連 ncVerilog 都不過 (更不用說合成了)
→ kyo547896321: 如果是要和這block本身的clk不同步的話,那把你的a 01/03 01:53
→ kyo547896321: 當作另一個DFF的clk來寫,a的edge一來就能換state 01/03 01:54
確實覺得可能需要灌進去 clock,但 Verilog 有辦法合成出這樣的電路嗎?
→ kyo547896321: 不知道有沒有誤會你想問的問題就是了 01/03 01:54
推 kyo547896321: 畢竟你的code和你描述的作法不是同一件事情 01/03 02:02
→ kyo547896321: 1.用posedge a改next_state 2.用posedge a改state 01/03 02:07
→ kyo547896321: 你的code是1但你的描述看起來像2 01/03 02:09
1的功能應該是 synchronous (在state_1時,如果a==1,posedge clock時會到state_2)
→ kyo547896321: 要不要先說一下你的"進到下一個state" 01/03 03:56
→ kyo547896321: 是改變state還是next_state 01/03 03:57
→ kyo547896321: 如果是改state,那將a當作另一個DFF的clk是可行的 01/03 04:02
→ kyo547896321: 畢竟不同block本來就可能用到不同的clk 01/03 04:03
→ kyo547896321: 只是你得考慮multiple clk domain面臨的麻煩就是 01/03 04:04
當然是改變 state,只是先在 conbinational part 輸出到DFF的D,在sequentail part
posedge clock 時存進去(D → Q)
→ Baneling: 建議你先有能力把基本能合成的code直接變成電路的能力 01/03 14:30
→ Baneling: 再來想這些... 不過通常你弄懂電路的概念之後, 大概就知 01/03 14:31
→ Baneling: 到你現在亂寫code的"點"在哪了 01/03 14:31
我想把 Verilog code 畫成電路這我作的到
想了一段時間,不知道 sequentail part 這樣寫是不是一個方法?
//sequentail part
always@(posedge clock or posedge a) begin
if (rst) begin //synchronous reset
state <= state_1;
...
end
else if (a && state==state_1) begin
state <= state_2;
end
else begin
state <= next_state;
...
end
end
※ 編輯: FTICR (219.70.169.149), 01/03/2016 16:07:20
推 ptta: 就是把一個 之 comb signal當成 clock,可以合成,十年前就看 01/03 17:11
→ ptta: 過了 01/03 17:11
推 Leadgen: Comb signal當clock,不怕有glitch嗎? 01/04 00:04
推 obov: 理論上可以 實務上非常不建議 01/04 02:32
推 Battie: a要glitch free,然後再delay,造出個pulse,才能sample自己 02/15 00:52
→ Battie: state要gray code過,而且會常常sample到不是當下的state 02/15 00:55
→ Battie: 不如全部改成同步設計 02/15 00:55