clash-lib-1.2.0: prims/vhdl/GHC_Integer_Type.json
[ { "BlackBox" :
{ "name" : "GHC.Integer.Type.smallInteger"
, "workInfo" : "Never"
, "kind" : "Expression"
, "type" : "smallInteger :: Int# -> Integer"
, "template" : "~ARG[0]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.integerToInt"
, "workInfo" : "Never"
, "kind" : "Expression"
, "type" : "integerToInt :: Integer -> Int#"
, "template" : "~ARG[0]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.timesInteger"
, "kind" : "Expression"
, "type" : "timesInteger :: Integer -> Integer -> Integer"
, "template" : "resize(~ARG[0] * ~ARG[1],~SIZE[~TYPO])"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.negateInteger"
, "kind" : "Expression"
, "type" : "negateInteger :: Integer -> Integer"
, "template" : "-~ARG[0]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.absInteger"
, "kind" : "Expression"
, "type" : "absInteger :: Integer -> Integer"
, "template" : "abs ~ARG[0]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.divInteger"
, "kind" : "Declaration"
, "type" : "divInteger :: Integer -> Integer -> Integer"
, "template" :
"-- divInteger begin
~GENSYM[divInteger][0] : block
signal ~GENSYM[resultPos][1] : boolean;
signal ~GENSYM[dividerNeg][2] : boolean;
signal ~GENSYM[dividend2][3] : signed(~SIZE[~TYPO] downto 0);
signal ~GENSYM[quot_res][4] : signed(~SIZE[~TYPO] downto 0);
begin
~SYM[1] <= ~VAR[dividend][0](~VAR[dividend][0]'high) = ~VAR[divider][1](~VAR[divider][1]'high);
~SYM[2] <= ~VAR[divider][1](~VAR[divider][1]'high) = '1';
~SYM[3] <= resize(~VAR[dividend][0],~SIZE[~TYPO]+1) when ~SYM[1] else
(resize(~VAR[dividend][0],~SIZE[~TYPO]+1) - resize(~VAR[divider][1],~SIZE[~TYPO]+1) - 1) when ~SYM[2] else
(resize(~VAR[dividend][0],~SIZE[~TYPO]+1) - resize(~VAR[divider][1],~SIZE[~TYPO]+1) + 1);
~SYM[4] <= ~SYM[3] / ~VAR[divider][1];
~RESULT <= signed(~SYM[4](~SIZE[~TYPO]-1 downto 0));
end block;
-- divInteger end"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.modInteger"
, "kind" : "Expression"
, "type" : "modInteger :: Integer -> Integer -> Integer"
, "template" : "~ARG[0] mod ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.divModInteger"
, "kind" : "Declaration"
, "type" : "divModInteger :: Integer -> Integer -> (# Integer, Integer #)"
, "template" :
"-- divModInteger begin
~GENSYM[divModInteger][0] : block
signal ~GENSYM[resultPos][1] : boolean;
signal ~GENSYM[dividerNeg][2] : boolean;
signal ~GENSYM[dividend2][3] : signed(~SIZE[~TYP[0]] downto 0);
signal ~GENSYM[quot_res][4] : signed(~SIZE[~TYP[0]] downto 0);
signal ~GENSYM[div_res][5] : signed(~SIZE[~TYP[0]]-1 downto 0);
begin
~SYM[1] <= ~VAR[dividend][0](~VAR[dividend][0]'high) = ~VAR[divider][1](~VAR[divider][1]'high);
~SYM[2] <= ~VAR[divider][1](~VAR[divider][1]'high) = '1';
~SYM[3] <= resize(~VAR[dividend][0],~SIZE[~TYP[0]]+1) when ~SYM[1] else
(resize(~VAR[dividend][0],~SIZE[~TYP[0]]+1) - resize(~VAR[divider][1],~SIZE[~TYP[0]]+1) - 1) when ~SYM[2] else
(resize(~VAR[dividend][0],~SIZE[~TYP[0]]+1) - resize(~VAR[divider][1],~SIZE[~TYP[0]]+1) + 1);
~SYM[4] <= ~SYM[3] / ~VAR[divider][1];
~SYM[5] <= signed(~SYM[4](~SIZE[~TYP[0]]-1 downto 0));
~RESULT <= (~SYM[5], ~VAR[dividend][0] mod ~VAR[divider][1]);
end block;
-- divModInteger end"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.quotRemInteger"
, "kind" : "Expression"
, "type" : "quotRemInteger :: Integer -> Integer -> (# Integer, Integer #)"
, "template" : "(~ARG[0] / ~ARG[1], ~ARG[0] rem ~ARG[1])"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.remInteger"
, "kind" : "Expression"
, "type" : "remInteger :: Integer -> Integer -> Integer"
, "template" : "~ARG[0] rem ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.eqInteger"
, "kind" : "Expression"
, "type" : "eqInteger :: Integer -> Integer -> Bool"
, "template" : "~ARG[0] = ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.neqInteger"
, "kind" : "Expression"
, "type" : "neqInteger :: Integer -> Integer -> Bool"
, "template" : "~ARG[0] /= ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.eqInteger#"
, "kind" : "Declaration"
, "type" : "eqInteger# :: Integer -> Integer -> Int#"
, "template" : "~RESULT <= to_signed(1,~SIZE[~TYPO]) when ~ARG[0] = ~ARG[1] else to_signed(0,~SIZE[~TYPO]);"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.neqInteger#"
, "kind" : "Declaration"
, "type" : "neqInteger# :: Integer -> Integer -> Int#"
, "template" : "~RESULT <= to_signed(1,~SIZE[~TYPO]) when ~ARG[0] /= ~ARG[1] else to_signed(0,~SIZE[~TYPO]);"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.leInteger#"
, "kind" : "Declaration"
, "type" : "leInteger# :: Integer -> Integer -> Int#"
, "template" : "~RESULT <= to_signed(1,~SIZE[~TYPO]) when ~ARG[0] <= ~ARG[1] else to_signed(0,~SIZE[~TYPO]);"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.gtInteger#"
, "kind" : "Declaration"
, "type" : "gtInteger# :: Integer -> Integer -> Int#"
, "template" : "~RESULT <= to_signed(1,~SIZE[~TYPO]) when ~ARG[0] > ~ARG[1] else to_signed(0,~SIZE[~TYPO]);"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.ltInteger#"
, "kind" : "Declaration"
, "type" : "ltInteger# :: Integer -> Integer -> Int#"
, "template" : "~RESULT <= to_signed(1,~SIZE[~TYPO]) when ~ARG[0] < ~ARG[1] else to_signed(0,~SIZE[~TYPO]);"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.geInteger#"
, "kind" : "Declaration"
, "type" : "geInteger# :: Integer -> Integer -> Int#"
, "template" : "~RESULT <= to_signed(1,~SIZE[~TYPO]) when ~ARG[0] >= ~ARG[1] else to_signed(0,~SIZE[~TYPO]);"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.shiftRInteger"
, "kind" : "Expression"
, "type" : "shiftRInteger :: Integer -> Int# -> Integer"
, "template" : "shift_right(~ARG[0],to_integer(~ARG[1]))"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.shiftLInteger"
, "kind" : "Expression"
, "type" : "shiftLInteger :: Integer -> Int# -> Integer"
, "template" : "shift_left(~ARG[0],to_integer(~ARG[1]))"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.testBitInteger"
, "kind" : "Expression"
, "type" : "testBitInteger :: Integer -> Int# -> Bool"
, "template" : "~VAR[input][0](to_integer(~ARG[1])) = '1'"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.wordToInteger"
, "workInfo" : "Never"
, "kind" : "Expression"
, "type" : "wordToInteger :: Word# -> Integer"
, "template" : "signed(std_logic_vector(~ARG[0]))"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.integerToWord"
, "workInfo" : "Never"
, "kind" : "Expression"
, "type" : "integerToWord :: Integer -> Word#"
, "template" : "unsigned(std_logic_vector(~ARG[0]))"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.integerToWord64"
, "workInfo" : "Never"
, "kind" : "Expression"
, "type" : "integerToWord :: Integer -> Word64#"
, "comment" : "only used by 32 bit GHC"
, "template" : "unsigned(std_logic_vector(~ARG[0]))"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.bitInteger"
, "kind" : "Expression"
, "type" : "bitInteger :: Int -> Integer"
, "template" : "shift_left(to_signed(1, ~SIZE[~TYPO]),to_integer(~ARG[0]))"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.complementInteger"
, "kind" : "Expression"
, "type" : "complementInteger :: Integer -> Integer"
, "template" : "not ~ARG[0]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.xorInteger"
, "kind" : "Expression"
, "type" : "xorInteger :: Integer -> Integer -> Integer"
, "template" : "~ARG[0] xor ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.orInteger"
, "kind" : "Expression"
, "type" : "orInteger :: Integer -> Integer -> Integer"
, "template" : "~ARG[0] or ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.andInteger"
, "kind" : "Expression"
, "type" : "andInteger :: Integer -> Integer -> Integer"
, "template" : "~ARG[0] and ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "GHC.Integer.Type.$wsignumInteger"
, "kind" : "Declaration"
, "type" : "$wsignumInteger :: Integer -> Integer"
, "template" : "
-- begin signumInteger
~RESULT <= to_signed(-1, ~SIZE[~TYPO]) when ~ARG[0] < 0
else to_signed(0, ~SIZE[~TYPO]) when ~ARG[0] = 0
else to_signed(1, ~SIZE[~TYPO]);
-- end signumInteger
"
}
}
]