作者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
1F:推 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吗?
2F:→ horsehead:因为你没有硬体电路的概念 写起来当然 warring 一堆 12/30 11:34
※ 编辑: karyuuissen 来自: 140.112.20.84 (12/30 12:01)
3F:推 Aragom:先搞清楚coding sytle以及先把电路架构画出来再写verilog吧 12/30 12:32
4F:推 windboy0620:123应该都是同时 然後最好不要用你最後的那种写法 12/30 12:40
5F:→ windboy0620:我说你写在推文里的 可以想想实际电路会长怎样 12/30 12:41
6F:→ karyuuissen:我知道这是很烂的写法啦 只是举例XD 12/30 13:06
7F:推 tkhan:学一下nLint吧,用这个tool check你的code.. 12/30 20:39
8F:→ ballstick:到底什麽公司让不懂硬体的人写RTL code啊.... 12/31 22:59
9F:推 CompileUltra:楼上这位大大 原po是学生吧 140.112.20是电二吗? 01/01 21:27
10F:嘘 akuma2008:楼楼上 不懂硬体的写RTL的公司多的是 很多EE毕业後也不 01/09 01:34
14F:→ sneak: //daxiv.com 01/04 22:06