clash-systemverilog-0.5.6: primitives/CLaSH.Sized.Vector.json
[ { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.eq#"
, "type" : "eq# :: Eq a => Vec n a -> Vec n a -> Bool"
, "templateE" : "~ARG[0] == ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.neq#"
, "type" : "neq# :: Eq a => Vec n a -> Vec n a -> Bool"
, "templateE" : "~ARG[0] != ~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.head"
, "type" : "head :: Vec (n + 1) a -> a"
, "templateD" :
"// head begin
~SIGD[~SYM[0]][0];
assign ~SYM[0] = ~ARG[0];
assign ~RESULT = ~SYM[0][0];
// head end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.tail"
, "type" : "tail :: Vec (n + 1) a -> Vec n a"
, "templateD" :
"// tail begin
~SIGD[~SYM[0]][0];
assign ~SYM[0] = ~ARG[0];
assign ~RESULT = ~SYM[0][1 : $high(~SYM[0])];
// tail end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.last"
, "type" : "Vec (n + 1) a -> a"
, "templateD" :
"// last begin
~SIGD[~SYM[0]][0];
assign ~SYM[0] = ~ARG[0];
assign ~RESULT = ~SYM[0][$high(~SYM[0])];
// last end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.init"
, "type" : "Vec (n + 1) a -> Vec n a"
, "templateD" :
"// init begin
~SIGD[~SYM[0]][0];
assign ~SYM[0] = ~ARG[0];
assign ~RESULT = ~SYM[0][0 : $high(~SYM[0]) - 1];
// init end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.select"
, "type" :
"select :: (CmpNat (i + s) (s * n) ~ GT) -- ARG[0]
=> SNat f -- ARG[1]
-> SNat s -- ARG[2]
-> SNat n -- ARG[3]
-> Vec i a -- ARG[4]
-> Vec n a"
, "templateD" :
"// select begin
~SIGD[~SYM[0]][4];
assign ~SYM[0] = ~ARG[4];
genvar ~SYM[1];
generate
for (~SYM[1]=0; ~SYM[1] < ~LIT[3]; ~SYM[1] = ~SYM[1] + 1) begin : select_~SYM[2]
assign ~RESULT[~SYM[1]] = ~SYM[0][~LIT[1] + (~LIT[2] * ~SYM[1])];
end
endgenerate
// select end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.++"
, "type" : "(++) :: Vec n a -> Vec m a -> Vec (n + m) a"
, "templateD" :
"// (++) begin
~SIGD[~SYM[0]][0];
~SIGD[~SYM[1]][1];
assign ~SYM[0] = ~ARG[0];
assign ~SYM[1] = ~ARG[1];
genvar ~SYM[2];
generate
for (~SYM[2]=0; ~SYM[2] < $size(~RESULT); ~SYM[2] = ~SYM[2] + 1) begin : append_~SYM[3]
if (~SYM[2] < $size(~SYM[0])) begin
assign ~RESULT[~SYM[2]] = ~SYM[0][~SYM[2]];
end else begin
assign ~RESULT[~SYM[2]] = ~SYM[1][~SYM[2]-$size(~SYM[0])];
end
end
endgenerate
// (++) end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.concat"
, "type" : "concat :: Vec n (Vec m a) -> Vec (n * m) a"
, "templateD" :
"// concat begin
~SIGD[~SYM[0]][0];
assign ~SYM[0] = ~ARG[0];
genvar ~SYM[1];
generate
for (~SYM[1]=0; ~SYM[1] < $size(~SYM[0]); ~SYM[1] = ~SYM[1] + 1) begin : concat_~SYM[2]
assign ~RESULT[(~SYM[5] * $size(~SYM[0][0])) : ((~SYM[5] * $size(~SYM[0][0])) + $high(~SYM[0][0]))] = ~SYM[0][~SYM[1]];
end
endgenerate
// concat end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.splitAt"
, "type" : "splitAt :: SNat m -> Vec (m + n) a -> (Vec m a, Vec n a)"
, "templateD" :
"// splitAt begin
~SIGD[~SYM[0]][1];
assign ~SYM[0] = ~ARG[1];
assign ~RESULT = '{~SYM[0][$left(~RESULT.~TYPMO_sel0) : $right(~RESULT.~TYPMO_sel0)]
,~SYM[0][($left(~RESULT.~TYPMO_sel1) + $size(~RESULT.~TYPMO_sel0)) : ($right(~RESULT.~TYPMO_sel1) + $size(~RESULT.~TYPMO_sel0))]
};
// splitAt end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.unconcat"
, "type" :
"unconcat :: KnownNat n -- ARG[0]
=> SNat m -- ARG[1]
-> Vec (n * m) a -- ARG[2]
-> Vec n (Vec m a)"
, "templateD" :
"// unconcat begin
~SIGD[~SYM[0]][2];
assign ~SYM[0] = ~ARG[2];
genvar ~SYM[1];
generate
for (~SYM[1] = 0; ~SYM[1] < $size(~RESULT); ~SYM[1] = ~SYM[1] + 1) begin : unconcat_~SYM[2]
assign ~RESULT[~SYM[1]] = ~SYM[0][(~SYM[1] * ~LIT[1]) : ((~SYM[1] * ~LIT[1]) + ~LIT[1] - 1)];
end
endgenerate
// unconcat end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.merge"
, "type" : "merge :: Vec n a -> Vec n a -> Vec (n + n) a"
, "templateD" :
"// merge begin
~SIGD[~SYM[0]][0];
~SIGD[~SYM[1]][1];
assign ~SYM[0] = ~ARG[0];
assign ~SYM[1] = ~ARG[1];
genvar ~SYM[2];
generate
for (~SYM[2] = 0; ~SYM[2] < $size(~SYM[0]); ~SYM[2] = ~SYM[2] + 1) begin : merge_~SYM[3]
assign ~RESULT[2*~SYM[2]] = ~SYM[0][~SYM[2]];
assign ~RESULT[2*~SYM[2]+1] = ~SYM[1][~SYM[2]];
end
endgenerate
// merge end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.map"
, "type" : "map :: (a -> b) -> Vec n a -> Vec n b"
, "templateD" :
"// map begin
~SIGD[~SYM[0]][1];
assign ~SYM[0] = ~ARG[1];
genvar ~SYM[1];
generate
for (~SYM[1]=0; ~SYM[1] < $size(~RESULT); ~SYM[1] = ~SYM[1] + 1) begin : map_~SYM[2]
~INST 0
~OUTPUT <= ~RESULT[~SYM[1]]~ ~TYPEL[~TYPO]~
~INPUT <= ~SYM[0][~SYM[1]]~ ~TYPEL[~TYP[1]]~
~INST
end
endgenerate
// map end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.zipWith"
, "type" : "zipWith :: (a -> b -> c) -> Vec n a -> Vec n b -> Vec n c"
, "templateD" :
"// zipWith begin
~SIGD[~SYM[0]][1];
~SIGD[~SYM[1]][2];
assign ~SYM[0] = ~ARG[1];
assign ~SYM[1] = ~ARG[2];
genvar ~SYM[2];
generate
for (~SYM[2] = 0; ~SYM[2] < $size(~RESULT); ~SYM[2] = ~SYM[2] + 1) begin : zipWith_~SYM[2]
~INST 0
~OUTPUT <= ~RESULT[~SYM[2]]~ ~TYPEL[~TYPO]~
~INPUT <= ~SYM[0][~SYM[2]]~ ~TYPEL[~TYP[1]]~
~INPUT <= ~SYM[1][~SYM[2]]~ ~TYPEL[~TYP[2]]~
~INST
end
endgenerate
// zipWith end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.index_int"
, "type" : "index_integer :: KnownNat n => Vec n a -> Int -> a"
, "templateD" :
"// indexVec begin
~SIGD[vec_~SYM[0]][1];
assign vec_SYM[0] = ~ARG[1];
assign ~RESULT = vec_~SYM[0][~ARG[2]];
// indexVec end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.replace_int"
, "type" : "replace_int :: KnownNat n => Vec n a -> Int -> a -> Vec n a"
, "templateD" :
"// replaceVec start
~SIGD[vec_~SYM[0]][1];
~SIGD[din_~SYM[1]][3];
assign din_~SYM[1] = ~ARG[3];
always_comb begin
vec_~SYM[0] = ~ARG[1];
vec_~SYM[0][~ARG[2]] = din_~SYM[1];
end
assign ~RESULT = vec_~SYM[0];
// replaceVec end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.maxIndex"
, "type" : "maxIndex :: KnownNat n => Vec n a -> Integer"
, "templateE" : "~LIT[0] - 1"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.length"
, "type" : "length :: KnownNat n => Vec n a -> Integer"
, "templateE" : "~LIT[0]"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.replicate"
, "type" : "replicate :: SNat n -> a -> Vec n a"
, "templateE" : "'{~LIT[0] {~ARG[1]}}"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.reverse"
, "type" : "reverse :: Vec n a -> Vec n a"
, "templateD" :
"// reverse begin
~SIGD[~SYM[0]][0];
assign ~SYM[0] = ~ARG[0];
genvar ~SYM[1];
generate
for (~SYM[1] = 0; ~SYM[1] < $size(~SYM[0]); ~SYM[1] = ~SYM[1] + 1) begin : reverse_~SYM[2]
assign ~RESULT[$high(~SYM[0]) - ~SYM[1]] = ~SYM[0][~SYM[1]];
end
endgenerate
// reverse end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.lazyV"
, "type" : "lazyV :: KnownNat n => Vec n a -> Vec n a"
, "templateE" : "~ARG[1]"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.concatBitVector#"
, "type" :
"concatBitVector# :: KnownNat m -- ARG[0]
=> Vec n (BitVector m) -- ARG[1]
-> BitVector (n * m)"
, "templateD" :
"// concatBitVector begin
~SIGD[~SYM[0]][1];
assign ~SYM[0] = ~ARG[1];
genvar ~SYM[1];
generate
for (~SYM[1] = 0; ~SYM[1] < $size(~SYM[0]); ~SYM[1] = ~SYM[1] + 1) begin : concatBitVector_~SYM[2]
assign ~RESULT[((~SYM[1] * ~LIT[0]) + ~LIT[0] - 1) : (~SYM[1] * ~LIT[0])] = ~SYM[0][$high(~SYM[0]) - ~SYM[1]];
end
endgenerate
// concatBitVector end"
}
}
, { "BlackBox" :
{ "name" : "CLaSH.Sized.Vector.unconcatBitVector#"
, "type" :
"unconcatBitVector# :: (KnownNat n, KnownNat m) -- (ARG[0],ARG[1])
=> BitVector (n * m) -- ARG[2]
-> Vec n (BitVector m)"
, "templateD" :
"// unconcatBitVector begin
~SIGD[~SYM[0]][2];
assign ~SYM[0] = ~ARG[2];
genvar ~SYM[1];
generate
for (~SYM[1] = 0; ~SYM[1] < $size(~RESULT); ~SYM[1] = ~SYM[1] + 1) begin : unconcatBitVector_~SYM[2]
assign ~RESULT[$high(~RESULT) - ~SYM[1]] = ~SYM[0][((~SYM[1] * ~LIT[1]) + ~LIT[1] - 1) : (~SYM[1] * ~LIT[1])];
end
endgenerate
// unconcatBitVector end"
}
}
]