作者LINAN322 (新热血阳光男孩NN)
看板Electronics
标题[请益] 请教有关verilog的nonblocking的写法...
时间Sat May 2 13:54:58 2009
恩,小弟已经有先爬过文了,
只是还是无法厘清blocking与nonblocking的设计理念。
小弟目前写code都是用blocking的写法,
但是看书,很少人用blocking的写法,
都是用unblocking的。
很奇怪,因为我目前写的code都是可以合成的,
但是不清楚这样写是不是很伤硬体的资源。
因为小弟主要要将演算法设计至fpga中,
举一个简单的例子:
如四行数学式的运算:
1. a = 2 * 3
2. b = a * 2 + 3
3. c = a + 2 * b
4. d = a + b + c
因为我用blocking的写法,且a,b,c,d均有相关,所以如下:
a = 2 * 3;
b = a * 2 + 3 ;
c = a + 2 * b ;
d = a + b + c ;
==>照着写就好了,但我看书上,都没有人这样做...
所以我这样写,不过我非常的没有自信,因为没有书给我任何的佐证
所以我非常疑惑,虽然我可以合成。
但是我去烧入至fpga,正确的演算法结果可以跑出吗?还是一定会有问题?
其实我懂得unblocking,但是用unblocking写,我很不习惯。
只是不懂得unblocking的设计方式。
如果是这样写,
那我怎麽让他delay呢,因为其中有相关性。
a <= 2 * 3;
b <= a * 2 + 3 ;
c <= a + 2 * b ;
d <= a + b + c ;
如果第0个clk触发,a=6,
但是b与a有关,但在上一个blck(第-1个)a并没有定义数值,
因此b不是会没有定义吗?
所以我才会想到delay...
另外,毕竟演算法讲求的是即时(循序)的运算,
并交给下一个叙述进行运算,
但这样nonblocking执行演算法(必须吃上一个clk的状态),
在执行上不就会有很大的困难吗?
有神人可以帮我解答吗?
这两个差别到底再哪里?
对硬体资源影响会很大吗???
感谢~~~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.138.178.157
1F:推 sasako:去上CIC的design compile培养合成的概念 05/02 14:04
2F:→ sasako:就会知道合成什麽电路该怎麽写 而不是写完才知道他合出什麽 05/02 14:06
3F:→ LINAN322:嗯嗯,谢谢指教︿︿ 05/02 14:07
4F:推 sasako:不然就去向学长借CIC讲义 他写得都还容易懂的 05/02 14:09
5F:→ LINAN322:S大谢谢你喔,其实我正有这个打算... 05/02 14:10
6F:→ sasako:你这个问题 他还会附加图说明 还满好懂的.. 05/02 14:10
7F:推 ksmrt0123:要了解blobking/nonblocking的不同 可参考zxvc大的文章: 05/02 14:16
8F:→ ksmrt0123:#19u9dw8Z 搞清楚 c=3,c=4的不同... 05/02 14:16