@@ -37,61 +37,62 @@ vhdlBinaryPrim
37
37
-> Name
38
38
-> String
39
39
-> Primitive
40
- vhdlBinaryPrim primName tclTFName funcName = InlineYamlPrimitive [VHDL ] [__i |
41
- BlackBox:
42
- name: #{primName}
43
- type: |-
44
- #{primName}
45
- :: ( KnownDomain dom -- ARG[0]
46
- , KnownNat d -- ARG[1]
47
- , HasCallStack -- ARG[2]
48
- )
49
- => Config -- ARG[3]
50
- -> Clock dom -- ARG[4]
51
- -> Enable dom -- ARG[5]
52
- -> DSignal dom n Float -- x , ARG[6]
53
- -> DSignal dom n Float -- y , ARG[7]
54
- -> DSignal dom (n + d) Float
55
- kind: Declaration
56
- template: |-
57
- -- #{funcName} begin
58
- ~DEVNULL[~LIT[3]]~GENSYM[#{funcName}][0] : block
59
- COMPONENT ~INCLUDENAME[0]
60
- PORT (
61
- aclk : IN STD_LOGIC;
62
- ~IF~ISACTIVEENABLE[5]~THEN aclken : IN STD_LOGIC;
63
- ~ELSE~FI s_axis_a_tvalid : IN STD_LOGIC;
64
- s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
65
- s_axis_b_tvalid : IN STD_LOGIC;
66
- s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
67
- m_axis_result_tvalid : OUT STD_LOGIC;
68
- m_axis_result_tdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
69
- );
70
- END COMPONENT;
71
- ~IF~ISACTIVEENABLE[5]~THEN signal ~GENSYM[clken_std][2]: std_logic;
72
- begin
73
- ~SYM[2] <= '1' when (~ARG[5]) else '0';
74
- ~ELSEbegin
75
- ~FI ~GENSYM[#{funcName}][1] : ~INCLUDENAME[0]
76
- PORT MAP (
77
- aclk => ~ARG[4],
78
- ~IF~ISACTIVEENABLE[5]~THEN aclken => ~SYM[2],
79
- ~ELSE~FI s_axis_a_tvalid => '1',
80
- s_axis_a_tdata => ~ARG[6],
81
- s_axis_b_tvalid => '1',
82
- s_axis_b_tdata => ~ARG[7],
83
- m_axis_result_tvalid => open,
84
- m_axis_result_tdata => ~RESULT
85
- );
40
+ vhdlBinaryPrim primName tclTFName funcName =
41
+ InlineYamlPrimitive [VHDL ] [__i |
42
+ BlackBox:
43
+ name: #{primName}
44
+ type: |-
45
+ #{primName}
46
+ :: ( KnownDomain dom -- ARG[0]
47
+ , KnownNat d -- ARG[1]
48
+ , HasCallStack -- ARG[2]
49
+ )
50
+ => Config -- ARG[3]
51
+ -> Clock dom -- ARG[4]
52
+ -> Enable dom -- ARG[5]
53
+ -> DSignal dom n Float -- x , ARG[6]
54
+ -> DSignal dom n Float -- y , ARG[7]
55
+ -> DSignal dom (n + d) Float
56
+ kind: Declaration
57
+ template: |-
58
+ -- #{funcName} begin
59
+ ~DEVNULL[~LIT[3]]~GENSYM[#{funcName}][0] : block
60
+ COMPONENT ~INCLUDENAME[0]
61
+ PORT (
62
+ aclk : IN STD_LOGIC;
63
+ ~IF~ISACTIVEENABLE[5]~THEN aclken : IN STD_LOGIC;
64
+ ~ELSE~FI s_axis_a_tvalid : IN STD_LOGIC;
65
+ s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
66
+ s_axis_b_tvalid : IN STD_LOGIC;
67
+ s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
68
+ m_axis_result_tvalid : OUT STD_LOGIC;
69
+ m_axis_result_tdata : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
70
+ );
71
+ END COMPONENT;
72
+ ~IF~ISACTIVEENABLE[5]~THEN signal ~GENSYM[clken_std][2]: std_logic;
73
+ begin
74
+ ~SYM[2] <= '1' when (~ARG[5]) else '0';
75
+ ~ELSEbegin
76
+ ~FI ~GENSYM[#{funcName}][1] : ~INCLUDENAME[0]
77
+ PORT MAP (
78
+ aclk => ~ARG[4],
79
+ ~IF~ISACTIVEENABLE[5]~THEN aclken => ~SYM[2],
80
+ ~ELSE~FI s_axis_a_tvalid => '1',
81
+ s_axis_a_tdata => ~ARG[6],
82
+ s_axis_b_tvalid => '1',
83
+ s_axis_b_tdata => ~ARG[7],
84
+ m_axis_result_tvalid => open,
85
+ m_axis_result_tdata => ~RESULT
86
+ );
86
87
87
- end block;
88
- -- #{funcName} end
89
- includes:
90
- - extension: clash.tcl
91
- name: floating_point
92
- format: Haskell
93
- templateFunction: #{tclTFName}
94
- |]
88
+ end block;
89
+ -- #{funcName} end
90
+ includes:
91
+ - extension: clash.tcl
92
+ name: floating_point
93
+ format: Haskell
94
+ templateFunction: #{tclTFName}
95
+ |]
95
96
96
97
-- | The InlinePrimitive annotation for a binary function in Verilog.
97
98
@@ -362,50 +363,51 @@ vhdlComparePrim
362
363
-> Name
363
364
-> String
364
365
-> Primitive
365
- vhdlComparePrim primName tclTFName funcName = InlineYamlPrimitive [VHDL ] [__i |
366
- BlackBox:
367
- name: #{primName}
368
- kind: Declaration
369
- template: |-
370
- -- #{funcName} begin
371
- ~GENSYM[#{funcName}][#{blockSym}] : block
372
- COMPONENT ~INCLUDENAME[0]
373
- PORT (
374
- aclk : IN STD_LOGIC;
375
- ~IF~ISACTIVEENABLE[#{enable}]~THEN aclken : IN STD_LOGIC;
376
- ~ELSE~FI s_axis_a_tvalid : IN STD_LOGIC;
377
- s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
378
- s_axis_b_tvalid : IN STD_LOGIC;
379
- s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
380
- m_axis_result_tvalid : OUT STD_LOGIC;
381
- m_axis_result_tdata : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
382
- );
383
- END COMPONENT;
384
- ~IF~ISACTIVEENABLE[#{enable}]~THEN signal ~GENSYM[clken_std][#{clkEnStdSym}]: std_logic;~ELSE~FI
385
- signal ~GENSYM[ip_result][#{ipResultSym}] : std_logic_vector(7 downto 0);
386
- begin
387
- ~IF~ISACTIVEENABLE[#{enable}]~THEN~SYM[#{clkEnStdSym}] <= '1' when (~ARG[#{enable}]) else '0';~ELSE~FI
388
- ~RESULT <= ~SYM[#{ipResultSym}](3 downto 0);
389
- ~GENSYM[#{funcName}][#{compSym}] : ~INCLUDENAME[0]
390
- PORT MAP (
391
- aclk => ~ARG[#{clock}],
392
- ~IF~ISACTIVEENABLE[#{enable}]~THEN aclken => ~SYM[#{clkEnStdSym}],
393
- ~ELSE~FI s_axis_a_tvalid => '1',
394
- s_axis_a_tdata => ~ARG[#{x}],
395
- s_axis_b_tvalid => '1',
396
- s_axis_b_tdata => ~ARG[#{y}],
397
- m_axis_result_tvalid => open,
398
- m_axis_result_tdata => ~SYM[#{ipResultSym}]
399
- );
366
+ vhdlComparePrim primName tclTFName funcName =
367
+ InlineYamlPrimitive [VHDL ] [__i |
368
+ BlackBox:
369
+ name: #{primName}
370
+ kind: Declaration
371
+ template: |-
372
+ -- #{funcName} begin
373
+ ~GENSYM[#{funcName}][#{blockSym}] : block
374
+ COMPONENT ~INCLUDENAME[0]
375
+ PORT (
376
+ aclk : IN STD_LOGIC;
377
+ ~IF~ISACTIVEENABLE[#{enable}]~THEN aclken : IN STD_LOGIC;
378
+ ~ELSE~FI s_axis_a_tvalid : IN STD_LOGIC;
379
+ s_axis_a_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
380
+ s_axis_b_tvalid : IN STD_LOGIC;
381
+ s_axis_b_tdata : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
382
+ m_axis_result_tvalid : OUT STD_LOGIC;
383
+ m_axis_result_tdata : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
384
+ );
385
+ END COMPONENT;
386
+ ~IF~ISACTIVEENABLE[#{enable}]~THEN signal ~GENSYM[clken_std][#{clkEnStdSym}]: std_logic;~ELSE~FI
387
+ signal ~GENSYM[ip_result][#{ipResultSym}] : std_logic_vector(7 downto 0);
388
+ begin
389
+ ~IF~ISACTIVEENABLE[#{enable}]~THEN~SYM[#{clkEnStdSym}] <= '1' when (~ARG[#{enable}]) else '0';~ELSE~FI
390
+ ~RESULT <= ~SYM[#{ipResultSym}](3 downto 0);
391
+ ~GENSYM[#{funcName}][#{compSym}] : ~INCLUDENAME[0]
392
+ PORT MAP (
393
+ aclk => ~ARG[#{clock}],
394
+ ~IF~ISACTIVEENABLE[#{enable}]~THEN aclken => ~SYM[#{clkEnStdSym}],
395
+ ~ELSE~FI s_axis_a_tvalid => '1',
396
+ s_axis_a_tdata => ~ARG[#{x}],
397
+ s_axis_b_tvalid => '1',
398
+ s_axis_b_tdata => ~ARG[#{y}],
399
+ m_axis_result_tvalid => open,
400
+ m_axis_result_tdata => ~SYM[#{ipResultSym}]
401
+ );
400
402
401
- end block;
402
- -- #{funcName} end
403
- includes:
404
- - extension: clash.tcl
405
- name: floating_point
406
- format: Haskell
407
- templateFunction: #{tclTFName}
408
- |]
403
+ end block;
404
+ -- #{funcName} end
405
+ includes:
406
+ - extension: clash.tcl
407
+ name: floating_point
408
+ format: Haskell
409
+ templateFunction: #{tclTFName}
410
+ |]
409
411
where
410
412
clock , enable , x , y :: Int
411
413
( _knownDomain :: Int
@@ -433,27 +435,27 @@ veriComparePrim
433
435
-> Primitive
434
436
veriComparePrim primName tclTFName funcName =
435
437
InlineYamlPrimitive [Verilog , SystemVerilog ] [__i |
436
- BlackBox:
437
- name: #{primName}
438
- kind: Declaration
439
- template: |-
440
- // #{funcName} begin
441
- ~INCLUDENAME[0] ~GENSYM[#{funcName}][#{compSym}] (
442
- .aclk(~ARG[#{clock}]),
443
- ~IF~ISACTIVEENABLE[#{enable}]~THEN .aclken(~ARG[#{enable}]),
444
- ~ELSE~FI .s_axis_a_tvalid(1'b1),
445
- .s_axis_a_tdata(~ARG[#{x}]),
446
- .s_axis_b_tvalid(1'b1),
447
- .s_axis_b_tdata(~ARG[#{y}]),
448
- .m_axis_result_tvalid(),
449
- .m_axis_result_tdata(~RESULT)
450
- );
451
- // #{funcName} end
452
- includes:
453
- - extension: clash.tcl
454
- name: floating_point
455
- format: Haskell
456
- templateFunction: #{tclTFName}
438
+ BlackBox:
439
+ name: #{primName}
440
+ kind: Declaration
441
+ template: |-
442
+ // #{funcName} begin
443
+ ~INCLUDENAME[0] ~GENSYM[#{funcName}][#{compSym}] (
444
+ .aclk(~ARG[#{clock}]),
445
+ ~IF~ISACTIVEENABLE[#{enable}]~THEN .aclken(~ARG[#{enable}]),
446
+ ~ELSE~FI .s_axis_a_tvalid(1'b1),
447
+ .s_axis_a_tdata(~ARG[#{x}]),
448
+ .s_axis_b_tvalid(1'b1),
449
+ .s_axis_b_tdata(~ARG[#{y}]),
450
+ .m_axis_result_tvalid(),
451
+ .m_axis_result_tdata(~RESULT)
452
+ );
453
+ // #{funcName} end
454
+ includes:
455
+ - extension: clash.tcl
456
+ name: floating_point
457
+ format: Haskell
458
+ templateFunction: #{tclTFName}
457
459
|]
458
460
where
459
461
clock , enable , x , y :: Int
0 commit comments