看板 Electronics 關於我們 聯絡資訊
※ 引述《WizardRush (插很大)》之銘言: : 我知道<=都代表同步更新 : 但如果像這樣呢: : always@(posedge clk) begin : A = B; : C <= D; : end : always@(posedge clk) begin : E <= F; : G = H; : end : 這四條的先後順序還是A先再來C、E一起然後G嗎? : ----------------------------------------------- : 一個always裡面,不能同時存在=和<=,跑一下simulation, : tool應該會告訴你有error吧! 這兩句話不太正確,HDL simulator可以允許一個sequential block 同時使用nonblocking與blocking assignments。 會出問題的地方是在,大多數(可能全部)的synthesizer無法合成出 同時使用nonblocking與blocking assignments的always的電路。 我想是因為這樣描述的logic太複雜、難懂,所以synthesizer乾脆不支援。 我覺得不要把nonblocking看作"同步更新", nonblocking指的是"assign值到左手邊的動作(update)"先暫停, 然後繼續計算後面的HDL code,直到遇到blocking assignement或end, 才作assign到左手邊的動作(update)。 所以nonblocking與blocking assignments最大的差別是, nonblocking assignment不會阻擋(block) HDL code執行控制權的運作, 然後執行它的update動作。 但blocking assignment會,會block直到它update完畢。 補充一點: 一個assignment可以細分成兩個動作:evaluate、update。 一個是等號右手邊的evaluate動作,另一個是assign到等號左手邊的update動作。 : 再來一個電路裡面本來就會有critical path,他會決定你一 : 個週期至少需要多少,不是你做了某些改良,critical path : 就會消失.. : 另外你又問了很多誰跑得比較快的問題,那我想請問一下你是 : 怎麼定義快或是慢呢?是指誰的gate delay比較大的意思嗎? : 你要不要先思考一下你的問題到底是...? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.139.204.14 ※ 編輯: zxvc 來自: 220.139.204.14 (01/01 12:25)
ksmrt0123:剛用quartus試, 合成兩種assignment都有的always電路 01/01 21:12
ksmrt0123:沒什麼問題 01/01 21:12
ksmrt0123:其實應該不會合不出來 只是合出來的電路常與預期的不同 01/01 21:15
ksmrt0123:只要保持良好的coding style, 就不需去煩惱這些問題了 01/01 21:16