clash-systemverilog 0.5.6 → 0.5.7
raw patch · 6 files changed
+47/−30 lines, 6 filesdep ~clash-libPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: clash-lib
API changes (from Hackage documentation)
Files
- CHANGELOG.md +6/−0
- clash-systemverilog.cabal +2/−2
- primitives/CLaSH.Prelude.Testbench.json +2/−2
- primitives/CLaSH.Sized.Internal.Signed.json +2/−2
- primitives/CLaSH.Sized.Vector.json +21/−21
- src/CLaSH/Backend/SystemVerilog.hs +14/−3
CHANGELOG.md view
@@ -1,5 +1,11 @@ # Changelog for the [`clash-systemverilog`](http://hackage.haskell.org/package/clash-systemverilog) package +## 0.5.7 *June 26th 2015*+* Fixes bug:+ * Incorrect primitive for `CLaSH.Prelude.Testbench.assert'`+ * Incorrect primitive for `CLaSH.Sized.Vec.index_int`+ * Sometimes created incorrect nested `generate` statements+ ## 0.5.6 *June 25th 2015* * New features: * Support `clash-prelude-0.9`
clash-systemverilog.cabal view
@@ -1,5 +1,5 @@ Name: clash-systemverilog-Version: 0.5.6+Version: 0.5.7 Synopsis: CAES Language for Synchronous Hardware - SystemVerilog backend Description: CλaSH (pronounced ‘clash’) is a functional hardware description language that@@ -70,7 +70,7 @@ CPP-Options: -DCABAL Build-depends: base >= 4.6.0.1 && < 5,- clash-lib >= 0.5.7,+ clash-lib >= 0.5.8, clash-prelude >= 0.9, fgl >= 5.4.2.4, lens >= 3.9.2,
primitives/CLaSH.Prelude.Testbench.json view
@@ -1,5 +1,5 @@ [ { "BlackBox" :- { "name" : "CLaSH.Prelude.Testbench.assert"+ { "name" : "CLaSH.Prelude.Testbench.assert'" , "type" : "assert :: (Eq a,Show a) -- (ARG[0],ARG[1]) => SClock t -- ^ ARG[2]@@ -13,7 +13,7 @@ // pragma translate_off always @(posedge ~CLK[2] or posedge ~RST[2]) begin if (~ARG[4] != ~ARG[5]) begin- $display(\"%s, expected: %b, actual: %b\", ~LIT[3], ~TYPM[3]_to_lv(~ARG[5]), ~TYPM[2]_to_lv(~ARG[4]));+ $display(\"%s, expected: %b, actual: %b\", ~LIT[3], ~TYPM[5]_to_lv(~ARG[5]), ~TYPM[4]_to_lv(~ARG[4])); $stop; end end
primitives/CLaSH.Sized.Internal.Signed.json view
@@ -242,7 +242,7 @@ , "comment" : "Back-end should only use this code when the result is smaller than the argument" , "templateD" : "// resize begin-generate+~GENERATE if (~LIT[1] < ~LIT[0]) begin // truncate, sign preserving ~SIGD[~SYM[0]][2];@@ -252,7 +252,7 @@ // sign-extend assign ~RESULT = $signed(~ARG[2]); end-endgenerate+~ENDGENERATE // resize end" } }
primitives/CLaSH.Sized.Vector.json view
@@ -73,11 +73,11 @@ assign ~SYM[0] = ~ARG[4]; genvar ~SYM[1];-generate+~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+~ENDGENERATE // select end" } }@@ -93,7 +93,7 @@ assign ~SYM[1] = ~ARG[1]; genvar ~SYM[2];-generate+~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]];@@ -101,7 +101,7 @@ assign ~RESULT[~SYM[2]] = ~SYM[1][~SYM[2]-$size(~SYM[0])]; end end-endgenerate+~ENDGENERATE // (++) end" } }@@ -114,11 +114,11 @@ assign ~SYM[0] = ~ARG[0]; genvar ~SYM[1];-generate+~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+~ENDGENERATE // concat end" } }@@ -149,11 +149,11 @@ assign ~SYM[0] = ~ARG[2]; genvar ~SYM[1];-generate+~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+~ENDGENERATE // unconcat end" } }@@ -168,12 +168,12 @@ assign ~SYM[1] = ~ARG[1]; genvar ~SYM[2];-generate+~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+~ENDGENERATE // merge end" } }@@ -186,14 +186,14 @@ assign ~SYM[0] = ~ARG[1]; genvar ~SYM[1];-generate+~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+~ENDGENERATE // map end" } }@@ -208,7 +208,7 @@ assign ~SYM[1] = ~ARG[2]; genvar ~SYM[2];-generate+~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]~@@ -216,7 +216,7 @@ ~INPUT <= ~SYM[1][~SYM[2]]~ ~TYPEL[~TYP[2]]~ ~INST end-endgenerate+~ENDGENERATE // zipWith end" } }@@ -226,7 +226,7 @@ , "templateD" : "// indexVec begin ~SIGD[vec_~SYM[0]][1];-assign vec_SYM[0] = ~ARG[1];+assign vec_~SYM[0] = ~ARG[1]; assign ~RESULT = vec_~SYM[0][~ARG[2]]; // indexVec end"@@ -277,11 +277,11 @@ assign ~SYM[0] = ~ARG[0]; genvar ~SYM[1];-generate+~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+~ENDGENERATE // reverse end" } }@@ -303,11 +303,11 @@ assign ~SYM[0] = ~ARG[1]; genvar ~SYM[1];-generate+~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+~ENDGENERATE // concatBitVector end" } }@@ -323,11 +323,11 @@ assign ~SYM[0] = ~ARG[2]; genvar ~SYM[1];-generate+~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+~ENDGENERATE // unconcatBitVector end" } }
src/CLaSH/Backend/SystemVerilog.hs view
@@ -41,12 +41,13 @@ { _tyCache :: HashSet HWType -- ^ Previously encountered HWTypes , _tyCount :: Int -- ^ Product type counter , _nameCache :: HashMap HWType Doc -- ^ Cache for previously generated product type names+ , _genDepth :: Int -- ^ Depth of current generative block } makeLenses ''SystemVerilogState instance Backend SystemVerilogState where- initBackend = SystemVerilogState HashSet.empty 0 HashMap.empty+ initBackend = SystemVerilogState HashSet.empty 0 HashMap.empty 0 #ifdef CABAL primDir = const (Paths_clash_systemverilog.getDataFileName "primitives") #else@@ -62,6 +63,16 @@ hdlTypeErrValue = verilogTypeErrValue hdlTypeMark = verilogTypeMark hdlSig t ty = sigDecl (text t) ty+ genStmt True = do cnt <- use genDepth+ genDepth += 1+ if cnt > 0+ then empty+ else "generate"+ genStmt False = do genDepth -= 1+ cnt <- use genDepth+ if cnt > 0+ then empty+ else "endgenerate" inst = inst_ expr = expr_ @@ -72,7 +83,7 @@ genVerilog modName c = (unpack cName,) A.<$> verilog where cName = componentName c- verilog = "// Automatically generated SystemVerilog" <$$>+ verilog = "// Automatically generated SystemVerilog-2005" <$$> tyImports modName <$$> module_ c @@ -309,7 +320,7 @@ end = start - argSize + 1 expr_ _ (Identifier id_ (Just (Indexed (ty@(Product _ _),_,fI)))) = text id_ <> dot <> verilogTypeMark ty <> "_sel" <> int fI-expr_ _ (Identifier id_ (Just (Indexed ((Vector _ _),_,fI)))) = text id_ <> parens (int fI)+expr_ _ (Identifier id_ (Just (Indexed ((Vector _ _),_,fI)))) = text id_ <> brackets (int fI) expr_ _ (Identifier id_ (Just (DC (ty@(SP _ _),_)))) = text id_ <> brackets (int start <> colon <> int end) where start = typeSize ty - 1