vhdl怎么在一个时钟周期内产生多个脉冲

2019-03-25 07:12发布

用vhdl写一个脉冲信号,来驱动步进电机,但是怎么也写不出怎么在一个周期内产生多个脉冲。
----------------------------------------------------------------------------------
-- Company:
-- Engineer:
--
-- Create Date: 2018/08/17 13:24:09
-- Design Name:
-- Module Name: motor10000 - Behavioral
-- Project Name:
-- Target Devices:
-- Tool Versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx leaf cells in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity motor10000 is
    Port
        (
           clk:             in std_logic;
           rst:             in std_logic;
           clk_in:          in std_logic;
           pulse:           out std_logic;
           encoder_b_b:     out std_logic;
           cnt:             out std_logic_vector(15 downto 0)
         --  encoderB_A_L:    out std_logic   
         );
end motor10000;
architecture Behavioral of motor10000 is
     signal cnt_temp:std_logic_vector(15 downto 0);
     
begin
     cnt<=cnt_temp;
--------clk----------
process(clk,rst)
begin
     if rst='0'then
       encoder_b_b<='0';
     elsif clk'event and clk='1'then
       encoder_b_b<='1';
     else
       encoder_b_b<='0';
    end if;   
end process;
--------phase----------
process(clk,rst)
begin
     if rst='0'then
        pulse<='0';
     elsif clk'event and clk='1'then
        pulse<='1';
     else
        pulse<='0';
     end if;
end process;
process(clk_in,rst)
begin
     if rst='0'then
        pulse<='0';
     elsif clk_in'event and clk_in='1'then
        pulse<='0';
--     else
--        pulse<='1';
     end if;
end process;
---------counter-------
process(clk,rst)
begin
     if rst='0'then
        cnt_temp<=x"0000";
     elsif clk'event and clk='1'then
        if cnt_temp=x"00ff"then
           cnt_temp<=x"0000";
        else
           cnt_temp<=cnt_temp+'1';
        end if;
     end if;
end process;
end Behavioral;



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
coyoo
1楼-- · 2019-03-26 07:25
本帖最后由 coyoo 于 2018-8-30 09:41 编辑

如果是5个脉冲,也就是72个时钟周期转一圈;72*25=1800ns=1.8us;1.8us一转,一秒转555555圈?
teleagle
2楼-- · 2019-03-26 12:30
一个时钟周期,  最多产生2个脉冲
teleagle
3楼-- · 2019-03-26 14:50
如果要产生更多的,  那也有办法,  但脉冲的相对位置不能保证满足需要.

一周热门 更多>