作者karyuuissen ()
看板Electronics
標題[問題] 一些verilog的問題...
時間Wed Dec 30 03:45:59 2009
我想先問關於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: //daxiv.com 01/04 22:06