Как работает мод intruction в программе vhdl? - PullRequest
0 голосов
/ 24 октября 2019

У меня только одно сомнение по поводу следующей программы:

process(clk)
        variable cuenta : integer range 0 to 255 := 0;
    begin
        if clk = '1' and clk'event then
            cuenta := (cuenta +1) mod 256;
            if cuenta < D then
                S <= '1';
            else
                S <= '0';
            end if;
        end if;
    end process;

В операторе cuenta:= (cuenta+1) mod 256 значение cuenta достигает значения 255? Я имею в виду cuenta это не просто 0 все время? D - это просто значение между 0 и 255. Спасибо, и я надеюсь, что кто-то может помочь мне с этим, возможно, простым вопросом.

1 Ответ

0 голосов
/ 25 октября 2019

Я заново создал ваш код с помощью testbench, если вы запустите это, вы сможете сказать, что cuenta просто добавляет 1, а затем модуль, разработанный 256. Я остановил приращение, теперь это просто сигнал, введенный.

Получение дополнительной информации может помочь решить вашу проблему. Надеюсь, что то, что я добавил, помогает.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;


entity cuenta is
port(
    clk       : in std_logic;
    reset     : in std_logic;
    D         : in std_logic_vector(7 downto 0);
    cuenta    : in std_logic_vector(8 downto 0);
    modulo_in : in std_logic_vector(8 downto 0);
    S         : out std_logic
);

end cuenta;

architecture behav of cuenta is

    signal cuenta_q : std_logic_vector(8 downto 0);

begin
 process(clk)
    begin
        if rising_edge(clk) then
           if reset = '1' then
              cuenta_q <= (others => '0');
              S <= '0';
           elsif reset = '0' then
              cuenta_q <= std_logic_vector(unsigned(cuenta + 1) mod unsigned(modulo_in));
              if cuenta_q < D then
                 S <= '1';
              else
                 S <= '0';
              end if;
           end if;
       end if;
    end process;

end behav;


library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;

entity tb_cuenta is
end tb_cuenta;



architecture tb of tb_cuenta is

   signal clk       : std_logic := '1';
   signal reset     : std_logic := '1';
   signal D         : std_logic_vector(7 downto 0);
   signal cuenta    : std_logic_vector(8 downto 0);
   signal modulo_in : std_logic_vector(8 downto 0);
   signal S         : std_logic;

begin

    D         <=  x"F0";
    cuenta    <= "000100000";
    modulo_in <= "100000000";

    clk   <= not clk after 50 fs;
    reset <= '0' after 200 fs;

ceunta_inst : entity work.cuenta 
   port map(
        clk => clk,
    reset => reset,
    D => D,
    cuenta => cuenta,
    modulo_in => modulo_in,
    S => S
   );

end tb;
...