VHDL语言编程一个注意点

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

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

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:pro

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会根据您的要求回答问题。但是需要说明的是,我是一名计算机程序,没有硬件实现能力。我可以提供一些VHDL语言的示例代码供您参考,但具体的电路实现需要通过硬件工程师进行设计。 以下是一个简单的红外遥控接收电路的VHDL代码示例: ```vhdl library ieee; use ieee.std_logic_1164.all; entity ir_receiver is port ( clk: in std_logic; ir_input: in std_logic; ir_data: out std_logic_vector(7 downto 0) ); end entity ir_receiver; architecture rtl of ir_receiver is signal counter: integer range 0 to 23 := 0; signal bit_counter: integer range 0 to 7 := 0; signal data: std_logic_vector(7 downto 0) := (others => '0'); begin process(clk) begin if rising_edge(clk) then if ir_input = '0' then -- Start bit if counter = 0 then counter <= 1; bit_counter <= 0; data <= (others => '0'); -- Data bits elsif counter > 0 and counter < 17 then data(bit_counter) <= ir_input; bit_counter <= bit_counter + 1; -- Stop bit elsif counter = 17 then ir_data <= data; counter <= 18; end if; else counter <= 0; end if; end if; end process; end architecture rtl; ``` 这个代码实现了一个简单的红外遥控接收器。它包括一个时钟输入和一个红外输入。当检测到红外输入信号时,接收器开始记录数据位,并在接收到所有8个数据位后输出数据。在代码中使用了一个计数器来记录数据位和停止位的位置,以及一个数据寄存器来记录接收到的数据。 需要注意的是,这只是一个示例代码,具体的电路实现需要根据硬件设计进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值