2009-11-27 17 views
1

Comment envoyer des données représentées par une chaîne binaire (par exemple, "01011101000100111", longueur variable) à un signal std_logic donné soit par un délai fixe, soit par un signal d'horloge? Je veux cela pour un banc d'essai, donc je voudrais être en mesure de modifier arbitrairement la chaîne binaire avec aussi peu de tracas que possible, donc je pense à utiliser generate.Comment générer un signal série à partir d'une chaîne?

Répondre

2

Je présente humblement une version à retard fixe (c'est du code testbench après tout ...). J'ai vérifié cela et il fonctionne, mais je suis plus à l'aise dans Verilog si ce code ne peut être la plus belle VHDL jamais ...

-- 
-- Clocking out bitstream 
-- 

library ieee; 
use ieee.std_logic_1164.all; 

entity stackoverflow_strings is 
end stackoverflow_strings; 

-- this is testbench code, so we can use "wait"s inside a "for" loop. 
architecture rtl of stackoverflow_strings is 
signal my_output : std_ulogic; 
begin 

shift_data : process is 
constant my_bits : std_logic_vector := B"100101010000100010101"; 
begin 
    my_output <= '0'; 
    wait for 10 ns; 
    for i in my_bits'range loop 
     my_output <= my_bits(i); 
     wait for 10 ns; 
    end loop; 

    wait; 
end process shift_data; 

end rtl; 
+0

C'est en fait bien fait, esp. si vous êtes plus Veriloggy :) Nuggle pédant - je changerais le nom d'architetcure de RTL bien - ce n'est clairement pas une description de RTL! –

0

Pour ajouter belle réponse Marty:

Pour faire il a cadencé, changer le wait for 10 ns; à wait until rising_edge(clk);