blob: 6dee83067ef81f559de58a64941339bbbb84e3a9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package Top where
mkTop :: Module Empty
mkTop =
module
deepThought :: DeepThought_IFC <- mkDeepThought
rules
"rl_ask": when True ==> do
$display "Asking the Ultimate Question of Life, The Universe and Everything"
deepThought.whatIsTheAnswer
"rl_print_answer": when True ==> do
x <- deepThought.getAnswer
$display "Deep Thought says: Hello, World! The answer is %0d." x
$finish
interface DeepThought_IFC =
whatIsTheAnswer :: Action
getAnswer :: ActionValue (Int 32)
data State_DT = IDLE | THINKING | ANSWER_READY
deriving (Eq, Bits, FShow)
mkDeepThought :: Module DeepThought_IFC
mkDeepThought =
module
rg_state_dt :: Reg State_DT <- mkReg IDLE
rg_half_millenia :: Reg (Bit 4) <- mkReg 0
let millenia = rg_half_millenia [3:1]
let half_millenium = rg_half_millenia [0:0]
rules
"rl_think": when (rg_state_dt == THINKING) ==> do
$write " DeepThought: ... thinking ... (%0d" millenia
if (half_millenium == 1) then $write ".5" else noAction
$display " million years)"
if (rg_half_millenia == 15) then
rg_state_dt := ANSWER_READY
else
rg_half_millenia := rg_half_millenia + 1
interface
whatIsTheAnswer = rg_state_dt := THINKING
when (rg_state_dt == IDLE)
getAnswer = do
rg_state_dt := IDLE
rg_half_millenia := 0
return 42
when (rg_state_dt == ANSWER_READY)
|