?? bujindianjidingweikongzi.txt
字號:
VHDL語言設如下所示:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity step_motor is
port(reset:in std_logic;
dir:in std_logic;
clk:in std_logic;
ini:in std_logic;
manner:in std_logic_vector (1 downto 0);
angle:in integer range 255 downto 0;
baba:out std_logic_vector (3 downto 0));
end step_motor;
architecture stepmotor_arch of step_motor is
signal count:integer range 0 to 7;
signal cntinc:integer range -2 to 2;
signal cc:integer range 0 to 3;
signal cntini:integer range -1 to 0;
signal angledncount:integer range 255 downto 0;
signal angledncntdec:integer range 2 downto 1;
begin
process(dir,manner,angle)--,ini)
begin
--if ini='1'then
cc<=conv_integer(manner);
if dir='0'then
case cc is
when 1=>--1-
--count<=0;
cntini<=0;
cntinc<=2;
angledncntdec<=2;--"10";
when 2=>--2-
--count<=7;
cntini<=-1;
cntinc<=2;
angledncntdec<=2;--"10";
when 3=>--1-2
--count<=0;
cntini<=0;
cntinc<=1;
angledncntdec<=1;--"01";
when 0=>--manner="00"autodetect
if (angle rem 2)=1 then--2-
--count<=7;
cntini<=-1;
cntinc<=2;
angledncntdec<=2;--"10";
else --1
cntini<=0;
cntinc<=-2;
angledncntdec<=2;--"10";
end if;--angle
end case;--manner
else --if dir='1'
case cc is
when 1=>--1-
--count<=0;
cntini<=0;
cntinc<=-2;
angledncntdec<=2;--"10";
when 2=>--2-
--count<=7;
cntini<=-1;
cntinc<=-2;
angledncntdec<=1;--"01";
when 3=>--1-2
--count<=0;
cntini<=0;
cntinc<=-1;
angledncntdec<=1;--"01";
when 0=>--manner="00" autodetect
if (angle rem 2)=1 then --2-
cntini<=-1;
cntinc<=-2;
angledncntdec<=2;--"10";
else --1-
cntini<=0;
cntinc<=-2;
angledncntdec<=2;--"10";
end if;--angle
end case;--manner
end if;--else dir=0
--end if;--ini
end process;
counting_reset:process(reset,ini,angle,clk)
begin
if reset='1' then
count<=0;
angledncount<=0;
elsif clk'event and clk='1' then
if ini='0' then
count<=0+cntini;
angledncount<=angle;
else
count<=count+cntinc;
if angledncount>angledncntdec then
angledncount<=angledncount-angledncntdec;
else
angledncount<=0;
end if;
end if;
end if;
end process;
baba<="0000" when angledncount=0 else
"0001" when count=0 else
"0011" when count=1 else
"0010" when count=2 else
"0110" when count=3 else
"0100" when count=4 else
"1100" when count=5 else
"1000" when count=6 else
"1001";--when count>=7;
end stepmotor_arch;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -