作者zxvc (执着)
看板Electronics
标题Re: [问题] 一些verilog的问题...
时间Wed Dec 30 12:44:15 2009
※ 引述《karyuuissen ()》之铭言:
: 我想先问关於blocking和nonblocking assignment的问题
: 1. 像以下这种2个if的是同时做吗?
: always@(posedge clk) begin
: if(condition1)
: A <= B;
: if(condition2)
: C <= D;
: end
如果你问的是simulator会先做谁。
答案是第一个if先做。因为begin...end是sequential block。
但真实的电路是同时运作的。
: 2. 两个一样的always分开写是谁先谁後?举例如下:
: always@(posedge clk) begin
: A <= B;
: end
: always@(posedge clk) begin
: C <= D;
: end
如果是在同一个module,那IEEE 1364无定义。谁先谁後都有可能,
跟你用的simulatior有关。
: 3. 同上一个问题,若分别在不同的.v档下,但clk是连起来的,如:
: //test1.v
: always@(posedge clk1) begin
: A <= B;
: end
: ---------------------------
: //test2.v
: always@(posedge clk2) begin
: C <= D;
: end
: 这样的话又是谁快?
如果是在不同的module...,我不清楚。
: 如果always里面同时有blocking又有nonblocking的情况我就更搞不清楚了...
: 4. wire的assign和always@(*)分别是等号右边和判断式变了就变的
: 那谁会比较先做?
: 像是:
: assign A= (B==C)? D:E;
: 和
: always@(*)begin
: B = F;
: end
同2.。
: 最後想问有关FPGA合成电路critical path warning的问题...
: 要怎样才能减少这些warning?
: 明明一个posedge触发间if..else和case的层数以及运算都很少了
: 它还是会产生critical path或setup和hold time不够的情形
我不清楚FPGA的这些问题,
但像SoC Encounter、IC Compiler这些physical IC design的tools
可以作timing optimization降低setup/hold time slack。
但如果setup time slack optimize一直都不过,
可能你的电路就是跑不到这麽快,就只好改架构。
有时候timing violations也可能是testbench写得不合理。
: 难道只能一直去改code的写法直到没有warning为止吗?
: 抱歉问了这麽多问题XD
: 因为project的架构太大,时序搞混会让bug很难找出来....
: Thx
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.71.32
※ 编辑: zxvc 来自: 140.115.71.32 (12/30 12:45)
1F:推 karyuuissen:感谢!! 看来很多都要用模拟才能判断先後了.... 12/30 13:06
2F:→ zxvc:楼上,这不是一个好做法。 12/30 13:20
3F:→ zxvc:如果你今天专为某个simulator写一个design,那很可能把你的 12/30 13:22
4F:→ zxvc:code拿到另一个simulator就挂了。 12/30 13:22
5F:→ zxvc:你应该是避开Verilog那些未定义的部分,去写一个design 12/30 13:24
6F:→ zxvc:在所有simulator都有一致的结果。 12/30 13:24
7F:→ zxvc:不只是Verilog有未定义的行为,C/C++也有所谓的未定义的行为 12/30 13:26
8F:→ zxvc:。sequential block通常就是用来解决这谁先谁後的问题,因为 12/30 13:33
9F:→ zxvc:它的计算是有顺序的。虽然实际的电路是同时运行的,但只要你 12/30 13:36
10F:→ zxvc:仔细的设计,你可以让sequential block在每个clock edge所求 12/30 13:39
11F:→ zxvc:出的值与真实电路一样。 12/30 13:39
12F:→ zxvc:所以HDL只是对真实硬体的一种modeling,它不等价真实硬体, 12/30 13:42
13F:→ zxvc:的所有行为,你可以说它很"像",但就是有不一样的地方。 12/30 13:43
14F:→ karyuuissen:可是我现在这个大架构中有很多module和很多不同倍数的 12/30 13:45
15F:→ karyuuissen:clock,这样用sequential在真实电路下还会同时运作吗 12/30 13:46
16F:→ karyuuissen:就像我问的第2点和第3点那样@@ 12/30 13:47
17F:→ zxvc:而Synthesis & Physcial IC Design就是把这些拟真的电路转成 12/30 13:47
18F:→ zxvc:真实的电路。 12/30 13:47
19F:→ zxvc:k大,我想我上面两句已回答你的问题。 12/30 14:04
20F:→ zxvc:讲坦白的,连simulator本身都是用software去写的,它本身就是 12/30 14:09
21F:→ zxvc:sequential去执行的(不谈multi-thread)。 12/30 14:10
22F:→ zxvc:但sequential的simulator却可以去simulate"同时运行的硬体", 12/30 14:14
23F:→ zxvc:你说神不神奇?其实也不神奇,simulate中文就是"模拟"的意思 12/30 14:16
24F:→ zxvc:,不是"完全等价"的意思。 12/30 14:16
25F:推 karyuuissen:喔喔 了解^^ 12/30 14:37