作者LINAN322 (新热血阳光男孩NN)
看板Electronics
标题Re: [请益] 请教有关nonblocking,求助中...
时间Sat May 2 14:04:35 2009
嗯,那我这样子问好了,
其实我知道一种写法,
只是觉得这样写很麻烦,感觉不是很有效率。
想要找一个更好的方法,
所以才会想到nonblocking的方式...
有更好得方法吗???
求助神大???
使用case的写法,如下:
case (i)
1: begin
a = 2 * 3;
i=i+1;
end
2: begin
b = a * 2 + 3 ;
i=i+1;
end
3: begin
c = a + 2 * b ;
i=i+1;
end
4: begin
d = a + b + c ;
i=i+1;
end
default: begin
i=i+1;
end
这样写感觉没有效率,
那如果要用nonblockign、pipeline的写法或更好的写法,
来执行演算法的电路执行效率的话,
要怎麽改写呢?
另外,如果硬要这将a、b、c、d的演算法
在一个clock之内作完,
那我要怎麽写成combinational circuit。
是要用assign的指令吗???
因为我的code主要是跟clk有关,使用clk控制电路行为,
即为sequential circuit,
这样跟combinational circuit一起合用,
是不是会怪怪的???
小弟不才,烦请指教!!!
神大拜托了...^^
※ 引述《LINAN322 (新热血阳光男孩NN)》之铭言:
: 恩,小弟已经有先爬过文了,
: 只是还是无法厘清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:你的i会爆炸...完全没人这样写的啦 05/02 14:12
2F:→ LINAN322:喔喔,我举个例子而已啦,我会在跳到另一个Case 05/02 14:20
3F:→ LINAN322:不过i真的会爆炸....XD...谢谢你︿︿ 05/02 14:20