130831 fpgax3 yos4. 簡単な例
華氏->摂氏
摂氏=(5 / 9) * (華氏 - 32)
-
/
*
5
9
32
華氏華氏華氏華氏 摂氏摂氏摂氏摂氏
4
32
+1
m 自然数の列自然数の列自然数の列自然数の列1
自然数の列
“m” (merge) は来たトークンを順次出力するノード
無限に自然数の列が生成される
5. 簡単な例
華氏->摂氏
摂氏=(5 / 9) * (華氏 - 32)
-
/
*
5
9
32
華氏華氏華氏華氏 摂氏摂氏摂氏摂氏
5
32
+1
m 自然数の列自然数の列自然数の列自然数の列1
自然数の列
“m” (merge) は来たトークンを順次出力するノード
無限に自然数の列が生成される
1
6. 簡単な例
華氏->摂氏
摂氏=(5 / 9) * (華氏 - 32)
-
/
*
5
9
32
華氏華氏華氏華氏 摂氏摂氏摂氏摂氏
6
32
+1
m 自然数の列自然数の列自然数の列自然数の列1
自然数の列
“m” (merge) は来たトークンを順次出力するノード
無限に自然数の列が生成される
1
1
7. 簡単な例
華氏->摂氏
摂氏=(5 / 9) * (華氏 - 32)
-
/
*
5
9
32
華氏華氏華氏華氏 摂氏摂氏摂氏摂氏
7
32
+1
m 自然数の列自然数の列自然数の列自然数の列1
自然数の列
“m” (merge) は来たトークンを順次出力するノード
無限に自然数の列が生成される
1
2
8. 簡単な例
華氏->摂氏
摂氏=(5 / 9) * (華氏 - 32)
-
/
*
5
9
32
華氏華氏華氏華氏 摂氏摂氏摂氏摂氏
8
32
+1
m 自然数の列自然数の列自然数の列自然数の列1
自然数の列
“m” (merge) は来たトークンを順次出力するノード
無限に自然数の列が生成される
2 1
2
15. 実現コード
1入力 1出力の送るだけのノード
※ Verilog HDLで記述した試作段階のもの
module throughNode(
input clk, // クロック
input reset, // RESET信号
output inReceived, // READY信号
input [bitLen:0] inToken,
// トークンの入力信号
// MSBは制御信号(PROBE)
// receive token
always @(negedge clk or posedge reset) begin
if (reset)
inBuf <= 0;
else if (inToken[bitLen])
// if input is available, set inBuf
inBuf <= inToken;
15
// MSBは制御信号(PROBE)
input outReceived, // READY信号
output [bitLen:0] outToken
// トークンの出力信号
// MSBは制御信号(PROBE)
);
// parameter def
parameter bitLen = 16; // トークンのbit長
reg [bitLen:0] inBuf = 0; // 入力バッファ
assign inReceived = inBuf[bitLen];
reg [bitLen:0] outBuf = 0; // 出力バッファ
assign outToken = outBuf;
inBuf <= inToken;
else if (inBuf[bitLen] && outBuf[bitLen])
// inToken already copied to outBuf
inBuf[bitLen] <= 1'b0;
end
// send token
....
endmodule
17. みんな大好きフィボナッチ数列
フィボナッチ数列
n項目のfib(n) はお馴染みの定義
fib(1) = fib(2) = 1
fib(n+2) = fib(n) + fib(n+1)
数列なので、1,1,2,3,5,8,... と無限に続く
Haskellで書くとこんな感じHaskellで書くとこんな感じ
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
zipWith は2つのリストを貼りあわせて新しいリストを作る関数
fibs はフィボナッチ数列の無限リストを返す
遅延評価がうまく実装されていないと再帰呼び出しが爆
発する(データフローにとっては、よい例)
これを定義そのままの意味を使って、DFNにする
17
20. “エラトステネスの篩”のDFN
sieveに対応する
モジュール#1
2以上の整数列
2, 3, 4, 5, ...
素数列素数列素数列素数列
2, 3, 5, 7, ...
sieveに対応する
モジュール#2
sieveに対応する
モジュール#n
<ストリーム処理ノード>
20
car/cdr
cons
del
dup
head
tail
head
tail
head
car/cdr
tail
stream
cons
head tail
stream
del
element
stream
stream
<ストリーム処理ノード>
element
指定されたelementを
streamから削除する