[問題] 一些verilog的問題...
我想先問關於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
推
12/30 09:17, , 1F
12/30 09:17, 1F
我知道<=都代表同步更新
但如果像這樣呢:
always@(posedge clk) begin
A = B;
C <= D;
end
always@(posedge clk) begin
E <= F;
G = H;
end
這四條的先後順序還是A先再來C、E一起然後G嗎?
→
12/30 11:34, , 2F
12/30 11:34, 2F
※ 編輯: karyuuissen 來自: 140.112.20.84 (12/30 12:01)
推
12/30 12:32, , 3F
12/30 12:32, 3F
推
12/30 12:40, , 4F
12/30 12:40, 4F
→
12/30 12:41, , 5F
12/30 12:41, 5F
→
12/30 13:06, , 6F
12/30 13:06, 6F
推
12/30 20:39, , 7F
12/30 20:39, 7F
→
12/31 22:59, , 8F
12/31 22:59, 8F
推
01/01 21:27, , 9F
01/01 21:27, 9F
噓
01/09 01:34, , 10F
01/09 01:34, 10F
→
08/13 18:53, , 11F
08/13 18:53, 11F
→
09/17 22:49, , 12F
09/17 22:49, 12F
→
11/11 15:37, , 13F
11/11 15:37, 13F
→
01/04 22:06,
5年前
, 14F
01/04 22:06, 14F
→
01/04 22:06,
5年前
, 15F
01/04 22:06, 15F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 9 篇):