diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/synth/netlists-disp_vhdl.adb | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/synth/netlists-disp_vhdl.adb b/src/synth/netlists-disp_vhdl.adb index edda84605..a1126a852 100644 --- a/src/synth/netlists-disp_vhdl.adb +++ b/src/synth/netlists-disp_vhdl.adb @@ -418,7 +418,7 @@ package body Netlists.Disp_Vhdl is return False; end Need_Signal; - type Conv_Type is (Conv_None, Conv_Unsigned, Conv_Signed); + type Conv_Type is (Conv_None, Conv_Slv, Conv_Unsigned, Conv_Signed); procedure Disp_Net_Expr (N : Net; Inst : Instance; Conv : Conv_Type) is @@ -437,6 +437,14 @@ package body Netlists.Disp_Vhdl is case Conv is when Conv_None => Disp_Constant_Inline (Net_Inst); + when Conv_Slv => + if Get_Width (N) = 1 then + Put ("std_logic'("); + else + Put ("std_logic_vector'("); + end if; + Disp_Constant_Inline (Net_Inst); + Put (")"); when Conv_Unsigned => Put ("unsigned'("); Disp_Constant_Inline (Net_Inst); @@ -448,7 +456,8 @@ package body Netlists.Disp_Vhdl is end case; else case Conv is - when Conv_None => + when Conv_None + | Conv_Slv => Disp_Net_Name (N); when Conv_Unsigned => Put ("unsigned ("); @@ -467,6 +476,11 @@ package body Netlists.Disp_Vhdl is type Uns32_Array is array (Natural range <>) of Uns32; No_Uns32_Arr : constant Uns32_Array := (1 .. 0 => 0); + -- Template: + -- \[C]AN + -- C: conversion u: unsigned, s: signed, f: force logic + -- A: argument o: output, i: input, n: value, p: parameter, l: label + -- N: argument number (0-9) procedure Disp_Template (S : String; Inst : Instance; Val : Uns32_Array := No_Uns32_Arr) is @@ -490,6 +504,9 @@ package body Netlists.Disp_Vhdl is elsif S (I) = 's' then Conv := Conv_Signed; I := I + 1; + elsif S (I) = 'f' then + Conv := Conv_Slv; + I := I + 1; else Conv := Conv_None; end if; @@ -509,7 +526,8 @@ package body Netlists.Disp_Vhdl is V := Get_Param_Uns32 (Inst, Param_Idx (Idx)); case Conv is when Conv_None - | Conv_Unsigned => + | Conv_Unsigned + | Conv_Slv => Put_Uns32 (V); when Conv_Signed => Put_Int32 (To_Int32 (V)); @@ -771,9 +789,10 @@ package body Netlists.Disp_Vhdl is Disp_Template (" \o0 <= '1' when \si0 >= \si1 else '0';" & NL, Inst); when Id_Eq => - Disp_Template (" \o0 <= '1' when \i0 = \i1 else '0';" & NL, Inst); + Disp_Template (" \o0 <= '1' when \fi0 = \i1 else '0';" & NL, + Inst); when Id_Ne => - Disp_Template (" \o0 <= '1' when \i0 /= \i1 else '0';" & NL, + Disp_Template (" \o0 <= '1' when \fi0 /= \i1 else '0';" & NL, Inst); when Id_Or => Disp_Template (" \o0 <= \i0 or \i1;" & NL, Inst); |