Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Electronic Equipment > VHDL > Richiesta aiuto...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 3 Topic 6135 of 6418
Post > Topic >>

Richiesta aiuto per analisi codice VHDL

by flatiron@[EMAIL PROTECTED] Jul 4, 2008 at 09:11 AM

Dear all,
I'm learning VHDL, after some simple example I've go to closely look
at the implementation of this "one shot delay generator", here below
the full code:

****CODE START****
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

-- entity definition

entity pulse_5clk is
   ****t(
      clk, reset: in std_logic;
      go, stop: in std_logic;
      pulse: out std_logic
   );
end pulse_5clk;

-- architecture definition

architecture fsmd_arch of pulse_5clk is
   constant P_WIDTH: natural := 5;
   type fsmd_state_type is (idle, delay);
   signal state_reg, state_next: fsmd_state_type;
   signal c_reg, c_next: unsigned(3 downto 0);
begin
   -- state and data registers
   process(clk, reset)
   begin
      if (reset = '1') then
         state_reg <= idle;
         c_reg <= (others => '0');
      elsif (clk'event and clk='1') then
         state_reg <= state_next;
         c_reg <= c_next;
      end if;
   end process;
   -- next state logic & data path functional units/routing
   process(state_reg,go,stop,c_reg)
   begin
      pulse <= '0';
      c_next <= c_reg;
      case state_reg is
         when idle =>
            if go='1' then
               state_next <= delay;
            else
               state_next <= idle;
            end if;
            c_next <= (others => '0');
         when delay =>
            if stop='1' then
               state_next <= idle;
            else
               if (c_reg = P_WIDTH - 1) then
                  state_next <= idle;
               else
                  state_next <= delay;
                  c_next <= c_reg + 1;
               end if;
            end if;
            pulse <= '1';
      end case;
   end process;
end fsmd_arch;
****CODE END****

I've take the simulation by using Modelsim and all is working
correctly but I've a question about the last process. Into the last
process (the state logic & data path) I've this statement (just after
the begin statement):

pulse <= '0';

then, if I'm not worong, the output signal with name pulse should be
set immediatly to 0, but into the simulation this never occour and the
behaviour of the output signal look right (pulse signal goes to 0 only
after the counter has elapsed).
Someone can gimme some explanation about this type of behaviour? Why
the statement pulse <= '0' is don't able to force immediatly to 0 the
pulse signal when the execution of the last process take to begin?.

Thanks in advance for every advice.
Powermos
 




 3 Posts in Topic:
Richiesta aiuto per analisi codice VHDL
flatiron@[EMAIL PROTECTED  2008-07-04 09:11:57 
Re: Richiesta aiuto per analisi codice VHDL
Mike Treseler <mtresel  2008-07-04 09:27:33 
Re: Richiesta aiuto per analisi codice VHDL
flatiron@[EMAIL PROTECTED  2008-07-04 09:49:24 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Mon Dec 1 23:38:21 CST 2008.