VHDL语言编程一个注意点

本文通过一个VHDL状态机的例子,解释了在时钟边沿触发的进程中,信号值的变化会有一个周期的延迟。当时钟上升沿到来时,当前状态的更新会发生在下一个时钟周期,导致输出在第二个时钟周期后才会反映出状态变化。这与C语言的即时执行特性不同,强调了VHDL中信号的延迟特性和锁存行为。

有一点需要注意,下面以一个状态机为例进行说明。

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

use IEEE.std_logic_signed.all;

entity statem is   port (       

        clk   : in std_logic;    

        rst   : in std_logic;            

        selin : in std_logic;                    

        num   : out std_logic_vector (1 downto 0)                

     );  end statem;

architecture alg of statem is

  Type mystate is (st0,st1,st2,st3);

  signal current_state,next_state : mystate;

  begin  

  sync:process(clk,rst)   

      begin     

      if (rst = '1')then   

                current_state <= st0;     

      elsif (clk'event and clk = '1')then   

                current_state <= next_state;     

       end if;   

   end process sync;

   nex:process(clk,selin)  

          begin  

          if(clk'event and clk = '1') then    

                    case current_state is     when st0 => if(selin = '1') then         

             &nbs

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值