Ihr Shifter ist OK. Eigentlich ist es ein Rotator.
Aber Ihr Counter ist zu groß (65 Bits) und es wird nicht zu einem geeigneten Zeitpunkt umgerollt oder auf Null zurückgesetzt. Ihr derzeitiges Design wartet auf 25M Zyklen und wechselt dann in jedem Zyklus von 25M auf 2 ** 64.
Darüber hinaus verwenden Sie ein nicht standardmäßiges IEEE-Paket, um arithmetische Operationen (Addition) unter std_logic_vector
durchzuführen. Bitte verwenden Sie den Typ unsigned
aus dem Paket numeric_std
.
function log2ceil(arg : positive) return natural is
variable tmp : positive;
variable log : natural;
begin
if arg = 1 then return 0; end if;
tmp := 1;
log := 0;
while arg > tmp loop
tmp := tmp * 2;
log := log + 1;
end loop;
return log;
end function;
Quelle: https://github.com/VLSI-EDA/PoC/blob/master/src/common/utils.vhdl
Voll Code Rewrite:
use IEEE.numeric_std.all;
architecture led_main of testing is
constant CNT_MAX : positive := 25000000;
signal clk_cnt : unsigned(log2ceil(CNT_MAX) - 1 downto 0) := (others => '0');
signal led_buf : std_logic_vector(3 downto 0) := "0001";
begin
process(clk)
begin
if rising_edge(clk) then
clk_cnt <= clk_cnt + 1;
if clk_cnt = (CNT_MAX - 1) then
clk_cnt <= (others => '0');
led_buf <= led_buf(0) & led_buf(3 downto 1);
end if;
end if;
end process;
end led_main;
`
Die benötigte Anzahl von Bits, die für Ihre Zähler kann durch eine log2
Funktion wie folgt erhalten werden "
diese co de led_buf <= led_buf (0) & led_buf (3 abwärts 1); ändern led_buf <= led_buf srl 1; (Fehler) –
Möchten Sie verschieben oder drehen? Ihre Frage fragt nach Verschiebung, aber Ihr Code zeigt rotieren. Willst du eine Operation nach rechts oder links, weil dein Code auf der rechten Seite ist, während deine Texte ein Beispiel auf der linken Seite zeigt! – Paebbels
@ YannVernier Nein, ein Barrel Shifter ist eine Implementierungsform eines Shifters, der sehr schnell, aber auch ressourcenintensiv ist. Sie können eine Barrel Shift auch auf Rotationen erweitern, aber der Barrel Shifter beschreibt die Struktur, wie man einen guten Shifter baut, nicht dass er rotiert. Finden Sie diese Antwort [n Bit Barrel Shifter] (https://stackoverflow.com/questions/26551049/vhdl-n-bit-barrel-shifter) für die Barrel Shifter-Struktur. – Paebbels