Wie verwenden von generischen Parameter, die abhängig von anderen generischen Parameter für Entitäten?

Ich versuche zu konvertieren einige Verilog-code erzeugt eine langsamere Uhr von einem schnelleren Takt für die UART-Modul. Die original-verilog-code basiert auf dem Modul über an fpga4fun.com und dies ist mein Versuch zu übersetzen, es für meine VHDL-basierten Entwurf.

entity baud_generator is
generic(
    f_clk : integer := 50000000;  -- default: 50 MHz
    baud  : integer := 115200;    -- default: 115,200 baud
    accum_width : integer := 16;
    accum_inc : integer := (baud sll accum_width) / f_clk
);
port(
    clock : in std_logic;
    reset_n : in std_logic;
    enable : in std_logic;
    baud_clock : out std_logic
);  
end entity baud_generator;

Aber mein compiler, Aldec-HDL, nicht eine Zeile wie die folgende:

 accum_inc : natural := (baud sll accum_width) / f_clk

Hier ist die genaue Fehlermeldung:

 # Error: COMP96_0300: baud_generator.vhd : (20, 52): Cannot reference "f_clk" until the interface list is complete.
 # Error: COMP96_0300: baud_generator.vhd : (20, 28): Cannot reference "baud" until the interface list is complete.
 # Error: COMP96_0071: baud_generator.vhd : (20, 28): Operator "sll" is not defined for such operands.
 # Error: COMP96_0104: baud_generator.vhd : (20, 27): Undefined type of expression.
 # Error: COMP96_0077: baud_generator.vhd : (20, 27): Assignment target incompatible with right side. Expected type 'INTEGER'.

In verilog, ich habe so etwas wie dieses:

module baud_generator(
  input clock,
  input reset_n,
  input enable,
  output baud_clock
);
parameter f_clock = 50000000;
parameter baud    = 115200;
parameter accum_width = 16;
parameter accum_inc = (baud << accum_width) / f_clock;
//...
endmodule

Was ist es, was ich brauche, um zu ändern in die Zeile, um den compiler glücklich? Ist es möglich, dass Generika verwendet werden verkettet, wie das?

InformationsquelleAutor Dr. Watson | 2011-05-24
Schreibe einen Kommentar