直流電機VHDL源代碼
出處:電子發(fā)燒友網(wǎng) 發(fā)布于:2018-05-24 16:05:25
LIBRARY IEEE;
USE IEEE.Std_LOGIC_1164.ALL;
USE IEEE.Std_logic_unsigned.All;
USE IEEE.Std_logic_arith.All;
ENTITY Dccount IS
Port (
Clk : IN STD_LOGIC;
AI : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
CO : Out STD_LOGIC_VECTOR(3 DOWNTO 0);
Pulse: IN STD_LOGIC;
DriverA,DriverB: OUT STD_LOGIC;
S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
P : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
Sp : Out STD_LOGIC);
END Dccount;
ARCHITECTURE A OF Dccount IS
SIGNAL F: STD_LOGIC_VECTOR(5 Downto 0);
SIGNAL F_hz: STD_LOGIC;
SIGNAL OSC: STD_LOGIC;
SIGNAL OSC1: STD_LOGIC;
SIGNAL C: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL A: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL CODE: STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL Bcd:STD_LOGIC_VECTOR(23 Downto 0);
SIGNAL COUNT:STD_LOGIC_VECTOR(23 Downto 0);
SIGNAL SUM: STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL D: STD_LOGIC_VECTOR(3 DOWNTO 0):=“0000”;
SIGNAL Ind_coil: STD_LOGIC_VECTOR(3 Downto 0) := “0001”;
SIGNAL Hz:STD_LOGIC;
SIGNAL Spo: STD_LOGIC;
SIGNAL SW:STD_LOGIC;
SIGNAL KEY:STD_LOGIC;
SIGNAL DRA,DRB:STD_LOGIC;
BEGIN
DRIVERA《=DRA;
DRIVERB《=DRB;
P(5 Downto 0) 《= F(5 Downto 0);
CO(3 DOWNTO 0) 《=C(3 DOWNTO 0);
A (3 DOWNTO 0)《=AI(3 DOWNTO 0);
SP《=SPO;
-----------------Div------------------------
PROCESS(OSC)
VARIABLE D_ff: STD_LOGIC_VECTOR(20 Downto 0);
VARIABLE DELAY: STD_LOGIC_VECTOR(23 DOWNTO 0);
BEGIN
WAIT UNTIL Clk = ‘’1‘’;
IF D_ff(20 Downto 0) 》= 2E6 THEN
D_ff(20 Downto 0) := “000000000000000000000”;
ELSE
D_ff(20 Downto 0) := D_ff + 1;
END IF;
F_hz 《= Not D_ff(6);
OSC 《= Not D_ff(10);
OSC1 《= Not D_ff(17);
IF DELAY》=500000 THEN
DELAY:=“000000000000000000000000”;HZ《=NOT Hz;
ELSE DELAY:=DELAY+1;
END IF;
END PROCESS ;
----------------------------------------------
PROCESS (F_HZ,OSC,OSC1,HZ,PULSE)
VARIABLE B: STD_LOGIC;
VARIABLE INT: STD_LOGIC;
VARIABLE Data: STD_LOGIC_VECTOR(3 DOWNTO 0);
VARIABLE UP: STD_LOGIC_VECTOR(2 DOWNTO 0);
VARIABLE ST:STD_LOGIC_VECTOR(2 DOWNTO 0);
VARIABLE Seq: STD_LOGIC_VECTOR(1 DOWNTO 0);
VARIABLE Sound: STD_LOGIC_VECTOR(1 DOWNTO 0);
VARIABLE STOP: STD_LOGIC;
VARIABLE DIRecTION: STD_LOGIC;
BEGIN
---------------7seg Scan-------------------------------
IF (F_HZ=‘’1‘’ AND F_HZ‘’EVENT) THEN
IF ST(2 DOWNTO 0)= “101” THEN
ST(2 DOWNTO 0):=“000” ;
ELSE ST(2 DOWNTO 0):=ST(2 DOWNTO 0)+1;
END IF;
END IF;
-----------------------------------------------
IF (OSC = ‘’1‘’ And OSC‘’EVENT) THEN
If A=“1111” Then
IF Seq=“11” Then Seq:=“00” ;
Else Seq:=Seq+1;
End If;
Else Seq:=Seq;
End If;
IF Seq=“00” Then C(3 DOWNTO 0)《=“1110” ;
ELSIf Seq=“01” Then C(3 DOWNTO 0)《=“1101” ;
Elsif Seq=“10” Then C(3 DOWNTO 0)《=“1011” ;
Elsif Seq=“11” Then C(3 DOWNTO 0)《=“0111” ;
End If;
End If;
IF A=“1111” THEN INT:=‘’0‘’;
ELSE INT:=‘’1‘’;
END IF;
IF (HZ‘’EVENT AND HZ=‘’1‘’) THEN
IF STOP=‘’1‘’ THEN UP:=UP+1;
ELSE UP:=“000”;
END IF;
END IF;
IF KEY=‘’1‘’ AND COUNT/=0 THEN
IF DIRECTION=‘’0‘’ THEN DRA《=‘’1‘’;DRB《=‘’0‘’;STOP:=‘’0‘’;
ELSE DRA《=‘’0‘’;DRB《=‘’1‘’;STOP:=‘’0‘’;
END IF;
ELSIF KEY=‘’1‘’ AND COUNT=0 THEN STOP:=‘’1‘’;
ELSIF STOP=‘’1‘’ AND UP《“110” THEN DRA《=NOT DRA ;DRB《=NOT DRB;
ELSE DRA《=‘’0‘’;DRB《=‘’0‘’;STOP:=‘’0‘’;
END IF;
IF (OSC1‘’EVENT AND OSC1=‘’1‘’) THEN B:=(INT And (B And INT) );
----------------Direction Choice-----------------------
IF SW=‘’0‘’ AND B=‘’1‘’ AND Data(3 DOWNTO 0)=“1010” THEN
BCD(23 DOWNTO 0)《=BCD(23 DOWNTO 0);B:=‘’0‘’;Direction:=‘’1‘’;
ELSIF SW=‘’0‘’ AND B=‘’1‘’ AND Data(3 DOWNTO 0)=“1011” THEN
BCD(23 DOWNTO 0)《=BCD(23 DOWNTO 0);B:=‘’0‘’;Direction:=‘’0‘’;
------------------KEY LOCK ON/OFF------------------------------------
ELSIF B=‘’1‘’ AND Data(3 DOWNTO 0)=“1100” THEN
BCD《=BCD;B:=‘’0‘’;SW《=NOT SW;
-------------------BACK-------------------------------
ELSIF SW=‘’0‘’ AND B=‘’1‘’ AND Data(3 DOWNTO 0)=“1101” THEN
BCD(23 DOWNTO 0)《=(“0000” & Bcd(23 Downto 4) );B:=‘’0‘’;
-------------------CLEAR---------------------------------
ELSIF B=‘’1‘’ AND Data(3 DOWNTO 0)=“1110” THEN
BCD《=“000000000000000000000000” ;B:=‘’0‘’;SW《=‘’0‘’;
------------------DOWNCOUNT 0 ------------------------------------
ELSIF BCD=0 AND KEY=‘’1‘’ THEN SW《=‘’0‘’;KEY《=‘’0‘’;BCD《=BCD;
------------------------------------------------------------------
ELSIF SW=‘’1‘’ AND KEY=‘’1‘’ AND DATA(3 DOWNTO 0)/=“1110” THEN BCD《=COUNT;
ELSIF SW=‘’1‘’ AND DATA(3 DOWNTO 0)=“1110” THEN SW《=‘’0‘’;
BCD《=“000000000000000000000000”;KEY《=‘’0‘’;
-------------------ENTER------------------------------
ELSIF SW=‘’0‘’ AND B=‘’1‘’ AND Data(3 DOWNTO 0)=“1111” AND BCD/=0 THEN
B:=‘’0‘’;SW《=‘’1‘’;KEY《=‘’1‘’;
ELSIF SW=‘’0‘’ AND B=‘’1‘’ AND Data(3 DOWNTO 0)=“1111” AND BCD=0 THEN
BCD《=BCD;B:=‘’0‘’;SW《=‘’0‘’;KEY《=‘’0‘’;
----------------------NUMBER SHIFT---------------------------
ELSIF SW=‘’0‘’ AND B=‘’1‘’ THEN Bcd(23 Downto 0)《= Bcd(19 Downto 0) & DATA(3 DOWNTO 0);B:=‘’0‘’;
Elsif INT=‘’0‘’ Then Bcd《=Bcd;
B:=‘’1‘’;
END IF;
END IF;
------------------------------------------------------
SUM(1 DOWNTO 0)《= Seq;
Sum(4 Downto 2)《=Code;
---------------------SOUND-----------------------------
If (Osc‘’Event And Osc=‘’1‘’) Then
If INT=‘’1‘’ AND SW=‘’0‘’ Then Sound:=Sound+1;Spo《=Sound(1) ;
Else Spo《=‘’0‘’;
End If;
End If;
-------------------------------------------------------
---------------------------DOWNCOUNT--------------------
IF SW=‘’0‘’ THEN COUNT《=BCD;
ELSE
If (PULSE = ‘’1‘’ And PULSE‘’EVENT) THEN
IF KEY=‘’1‘’ AND COUNT/=0 THEN
----------------------------1---------------------------------------------------
IF COUNT(3 DOWNTO 0)= 0 AND COUNT(23 DOWNTO 4)》=1 THEN
COUNT(3 DOWNTO 0) 《=“1001” ;
ELSE COUNT(3 DOWNTO 0) 《= COUNT(3 DOWNTO 0)-1;
END IF;
----------------------------2---------------------------------------------------------
IF COUNT(7 DOWNTO 4)= 0 AND COUNT(23 DOWNTO 8)》=1 AND COUNT(3 DOWNTO 0)=0 THEN
COUNT(7 DOWNTO 4) 《= “1001” ;
ELSIF COUNT(3 DOWNTO 0)=0 AND COUNT(23 DOWNTO 4)》=1 THEN
COUNT(7 DOWNTO 4) 《=COUNT(7 DOWNTO 4 )-1;
END IF;
----------------------------3-------------------------------------------------------
IF COUNT(11 DOWNTO 8)= 0 AND COUNT(23 DOWNTO 12)》=1 AND COUNT(7 DOWNTO 0)=0 THEN
COUNT(11 DOWNTO 8) 《=“1001”;
ELSIF COUNT(7 DOWNTO 0)=0 AND COUNT(23 DOWNTO 8)》=1 THEN
COUNT(11 DOWNTO 8) 《=COUNT(11 DOWNTO 8 )-1;
END IF;
---------------------------4--------------------------------------------------------------
IF COUNT(15 DOWNTO 12)= 0 AND COUNT(23 DOWNTO 16)》=1 AND COUNT(11 DOWNTO 0)=0 THEN
COUNT(15 DOWNTO 12) 《=“1001”;
ELSIF COUNT(11 DOWNTO 8)=0 AND COUNT(23 DOWNTO 12)》=1 AND COUNT(7 DOWNTO 0)=0 THEN
COUNT(15 DOWNTO 12) 《=COUNT(15 DOWNTO 12 )-1;
END IF;
-------------------------5------------------------------------------------------------
IF COUNT(19 DOWNTO 16)= 0 AND COUNT(23 DOWNTO 20)》=1 AND COUNT(15 DOWNTO 0)=0 THEN
COUNT(19 DOWNTO 16) 《=“1001”;
ELSIF COUNT(15 DOWNTO 12)=0 AND COUNT(23 DOWNTO 16)》=1 AND COUNT(11 DOWNTO 0)=0 THEN
COUNT(19 DOWNTO 16) 《=COUNT(19 DOWNTO 16 )-1;
END IF;
-------------------------6-------------------------------------------------
IF COUNT(23 DOWNTO 20)= 0 THEN
COUNT(23 DOWNTO 20) 《=“0000”;
ELSIF COUNT(19 DOWNTO 16)=0 AND COUNT(23 DOWNTO 20 )》=1 AND COUNT(15 DOWNTO 0)=0 THEN
COUNT(23 DOWNTO 20) 《=COUNT(23 DOWNTO 20 )-1;
END IF;
END IF;
END IF;
END IF;
------------------7seg Scan---------------------------
CASE ST IS --?@潮
WHEN “000”=》 D(3 DOWNTO 0) 《= Bcd(3 DOWNTO 0) ; F(5 Downto 0)《=“111110”;
WHEN “001”=》 D(3 DOWNTO 0) 《= Bcd(7 DOWNTO 4) ; F(5 Downto 0)《=“111101”;
WHEN “010”=》 D(3 DOWNTO 0) 《= Bcd(11 DOWNTO 8) ; F(5 Downto 0)《=“111011”;
WHEN “011”=》 D(3 DOWNTO 0) 《= Bcd(15 DOWNTO 12) ; F(5 Downto 0)《=“110111”;
WHEN “100”=》 D(3 DOWNTO 0) 《= Bcd(19 DOWNTO 16) ; F(5 Downto 0)《=“101111”;
WHEN “101”=》 D(3 DOWNTO 0) 《= Bcd(23 DOWNTO 20) ; F(5 Downto 0)《=“011111”;
WHEN OTHERS =》 D(3 DOWNTO 0) 《= “1100” ; F(5 Downto 0)《=“111111”;
END CASE;
------------------Key Scan-------------------------
CASE A(3 DOWNTO 0) IS
WHEN“1110” =》 CODE《=“100”;
WHEN“1101” =》 CODE《=“101”;
WHEN“1011” =》 CODE《=“110”;
WHEN“0111” =》 CODE《=“111”;
WHEN OTHERS =》 CODE《=“000”;
End Case;
---------------------Key Table------------------------
CASE SUM(4 DOWNTO 0) IS
WHEN“10000”=》 Data:=“0001”;--0
WHEN“10001”=》 Data:=“0101”;--1
WHEN“10010”=》 Data:=“1001”;--2
WHEN“10011”=》 Data:=“1100”;--3
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 電表互感器匝數(shù)倍率怎么看?2025/9/5 17:05:11
- 顏色傳感器原理及實際應(yīng)用案例2025/9/5 16:09:23
- 調(diào)諧器和調(diào)制器的區(qū)別2025/9/4 17:25:45
- 有載變壓器和無載變壓器的區(qū)別有哪些2025/9/4 17:13:35
- 什么是晶體諧振器?晶體諧振器的作用2025/9/4 16:57:42
- 高速PCB信號完整性(SI)設(shè)計核心實操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護設(shè)計
- 連接器耐腐蝕性能測試方法
- PCB電磁兼容(EMC)設(shè)計與干擾抑制核心實操規(guī)范
- 用于相位噪聲測量的低通濾波器設(shè)計與本振凈化技術(shù)
- MOSFET在高頻開關(guān)中的EMI問題
- 電源IC在便攜式設(shè)備中的設(shè)計要點
- 連接器結(jié)構(gòu)設(shè)計常見問題分析









