Comment générer un signal série à partir d'une chaîne?
Question
Comment envoyer des données représentées par une chaîne binaire (par exemple, "01011101000100111", longueur est variable) à un signal std_logic avec un retard fixe ou un signal d'horloge? Je veux ceci pour un banc d'essai, donc je voudrais pouvoir changer arbitrairement la chaîne binaire avec le moins de tracas possible, alors je pense utiliser
generate
.
La solution
Je présente humblement une version à délai fixe (c’est du code testbench, après tout ...). J'ai vérifié cela et ça marche, mais je suis plus à l'aise dans Verilog, donc ce code n'est peut-être pas le plus beau VHDL de tous les temps ...
--
-- 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;
Autres conseils
Pour ajouter à la réponse de Marty:
Pour le rendre cadencé, modifiez attend 10 ns;
s sur attendez jusqu’au lever_edge (clk);