看板 Electronics 關於我們 聯絡資訊
我想先問關於blocking和nonblocking assignment的問題 1. 像以下這種2個if的是同時做嗎? always@(posedge clk) begin if(condition1) A <= B; if(condition2) C <= D; end 2. 兩個一樣的always分開寫是誰先誰後?舉例如下: always@(posedge clk) begin A <= B; end always@(posedge clk) begin C <= D; end 3. 同上一個問題,若分別在不同的.v檔下,但clk是連起來的,如: //test1.v always@(posedge clk1) begin A <= B; end --------------------------- //test2.v always@(posedge clk2) begin C <= D; end 這樣的話又是誰快? 如果always裡面同時有blocking又有nonblocking的情況我就更搞不清楚了... 4. wire的assign和always@(*)分別是等號右邊和判斷式變了就變的 那誰會比較先做? 像是: assign A= (B==C)? D:E; 和 always@(*)begin B = F; end 最後想問有關FPGA合成電路critical path warning的問題... 要怎樣才能減少這些warning? 明明一個posedge觸發間if..else和case的層數以及運算都很少了 它還是會產生critical path或setup和hold time不夠的情形 難道只能一直去改code的寫法直到沒有warning為止嗎? 抱歉問了這麼多問題XD 因為project的架構太大,時序搞混會讓bug很難找出來.... Thx -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.20.84
tkhan:你在寫C嗎?Hardware都是同時做.. 12/30 09:17
我知道<=都代表同步更新 但如果像這樣呢: always@(posedge clk) begin A = B; C <= D; end always@(posedge clk) begin E <= F; G = H; end 這四條的先後順序還是A先再來C、E一起然後G嗎?
horsehead:因為你沒有硬體電路的概念 寫起來當然 warring 一堆 12/30 11:34
※ 編輯: karyuuissen 來自: 140.112.20.84 (12/30 12:01)
Aragom:先搞清楚coding sytle以及先把電路架構畫出來再寫verilog吧 12/30 12:32
windboy0620:123應該都是同時 然後最好不要用你最後的那種寫法 12/30 12:40
windboy0620:我說你寫在推文裡的 可以想想實際電路會長怎樣 12/30 12:41
karyuuissen:我知道這是很爛的寫法啦 只是舉例XD 12/30 13:06
tkhan:學一下nLint吧,用這個tool check你的code.. 12/30 20:39
ballstick:到底什麼公司讓不懂硬體的人寫RTL code啊.... 12/31 22:59
CompileUltra:樓上這位大大 原po是學生吧 140.112.20是電二嗎? 01/01 21:27
akuma2008:樓樓上 不懂硬體的寫RTL的公司多的是 很多EE畢業後也不 01/09 01:34
sneak: 學一下nLint吧,用 https://muxiv.com 08/13 18:53
sneak: 因為你沒有硬體電路的概 https://daxiv.com 09/17 22:49
sneak: 因為你沒有硬體電路的概 https://noxiv.com 11/11 15:37
sneak: //daxiv.com 01/04 22:06
sneak: https://daxiv.com 01/04 22:06