【文章內(nèi)容簡(jiǎn)介】
直流電機(jī) 測(cè)控 儀 第 18 頁(yè) 共 51 頁(yè) 參考文獻(xiàn) [1] 《 SOPCIIEDA實(shí)驗(yàn)指導(dǎo)書(shū) 》 (第二版) [2] 《 SOPCII使用手冊(cè) 》 (第二版) [3] 《 EDA技術(shù) 與應(yīng)用 》 (第 4版) . 江國(guó)強(qiáng) 編著 . 電子工業(yè) 出版社, 2021 [4] 《 EDA技術(shù)實(shí)用教程(第二版),潘松、黃繼業(yè)編著 ,科學(xué)出版社 ,2021 直流電機(jī) 測(cè)控 儀 第 19 頁(yè) 共 51 頁(yè) 附錄 A:設(shè)計(jì)程序 時(shí)鐘控制信號(hào)模塊程序 library ieee。 use 。 use 。 use 。 entity teltcl is port( Clk : in std_logic。 時(shí)鐘輸入 1Mhz ena : out std_logic。 允許計(jì)數(shù) clr : out std_logic。 計(jì)數(shù)器清零信號(hào)產(chǎn)生 load : out std_logic 鎖存、顯示輸出允許 )。 end teltcl。 architecture behave of teltcl is signal clk1hz :std_logic。1HZ 時(shí)鐘信號(hào) signal count : std_logic_vector(2 downto 0)。6 秒計(jì)數(shù) signal clr1 :std_logic。清零信號(hào) signal ena1 :std_logic。允許計(jì)數(shù)信號(hào) signal load1 :std_logic。允許計(jì)數(shù)信號(hào) signal cq1,cq2,cq3,cq4 : INTEGER RANGE 0 TO 15。計(jì)數(shù)數(shù)據(jù) begin process(clk) 1HZ 信號(hào)產(chǎn)生 variable ttemp : INTEGER RANGE 0 TO 999999。 begin IF clk=39。139。 AND clk39。event THEN IF ttemp=999999 THEN ttemp:=0。 ELSE IF ttemp500000 THEN clk1hz=39。139。 ELSE clk1hz=39。039。 END IF。 ttemp:=ttemp+1。 END IF。 end if。 end process。 process(Clk1hz)6 秒計(jì)數(shù) begin if(Clk1hz39。event and Clk1hz=39。139。) then count=count+1。 if count6 then 直流電機(jī) 測(cè)控 儀 第 20 頁(yè) 共 51 頁(yè) ena1=39。139。load1=39。039。clr1=39。039。 elsif count=6 then load1=39。139。ena1=39。039。clr1=39。039。 elsif count=7 then ena1=39。039。load1=39。039。clr1=39。139。 end if。 end if。 ena=ena1。 load=load1。clr=clr1。 end process。 end behave。 十進(jìn)制計(jì)數(shù)器模塊程序 LIBRARY IEEE。 USE 。 ENTITY CNT10 IS PORT (CLK:IN STD_LOGIC。 計(jì)數(shù)時(shí)鐘信號(hào) CLR:IN STD_LOGIC。 清零信號(hào) ENA:IN STD_LOGIC。 計(jì)數(shù)使能信號(hào) CQ :OUT INTEGER RANGE 0 TO 15。 4 位計(jì)數(shù)結(jié)果輸出 CARRY_OUT:OUT STD_LOGIC)。 計(jì)數(shù)進(jìn)位 END CNT10。 ARCHITECTURE ART OF CNT10 IS SIGNAL CQI :INTEGER RANGE 0 TO 15。 BEGIN PROCESS(CLK,ENA) IS BEGIN IF CLR= 39。139。 THEN CQI= 0。 計(jì)數(shù)器異步清零 elsIF CLK39。EVENT AND CLK= 39。139。 THEN IF ENA= 39。139。 THEN iF CQI=10 THEN cqi=1。 ELSE CQI=cqi+1。 END IF。 等于 9,則計(jì)數(shù)器清零 END IF。 END IF。 END PROCESS。 PROCESS (CQI) IS BEGIN IF CQI=10 THEN CARRY_OUT= 39。139。 進(jìn)位輸 出 ELSE CARRY_OUT= 39。039。 END IF。 END PROCESS。 CQ=CQI。 END ART。 直流電機(jī) 測(cè)控 儀 第 21 頁(yè) 共 51 頁(yè) 鍵盤(pán)掃描程序 library IEEE。 use 。 use 。 use 。 PORT ( clk : IN std_logic。 rst : IN std_logic。 row : OUT std_logic_vector(3 DOWNTO 0)。 行線 column : IN std_logic_vector(3 DOWNTO 0)。 列線 pwm : out integer range 0 to 15 )。 電機(jī)控制信號(hào) END ck。 ARCHITECTURE arch OF ck IS SIGNAL div_t : std_logic_vector(24 downto 0)。 SIGNAL scan_key : std_logic_vector(3 DOWNTO 0)。 掃描碼寄存器 SIGNAL key_code : integer range 0 to 15。 signal keynum : integer range 0 to 15。 BEGIN row = scan_key。 pwm = key_code。 PROCESS(clk,rst) BEGIN IF (NOT rst = 39。139。) THEN div_t = 0000000000000000000000000。 ELSIF(clk39。EVENT AND clk = 39。139。)THEN div_t = div_t + 1。 END IF。 END PROCESS。 PROCESS(div_t(20 downto 19)) BEGIN CASE div_t(20 downto 19) IS WHEN 00= scan_key=1110。 WHEN 01= scan_key=1101。 直流電機(jī) 測(cè)控 儀 第 22 頁(yè) 共 51 頁(yè) WHEN 10= scan_key=1011。 WHEN 11= scan_key=0111。 END CASE。 END PROCESS。 PROCESS(clk,rst) BEGIN IF (NOT rst = 39。139。) THEN key_code = 0。 ELSIF(clk39。EVENT AND clk=39。139。)THEN CASE scan_key IS 檢測(cè)何處有鍵按下 WHEN 1110 = CASE column IS WHEN 1110 = key_code = 13。 WHEN 1101 = key_code = 12。 WHEN 1011 = key_code = 11。 WHEN 0111 = key_code = 10。 WHEN OTHERS = NULL。 END CASE。 WHEN 1101 = CASE column IS WHEN 1110 = key_code = 15。 WHEN 1101 = key_code = 9。 WHEN 1011 = key_code = 6。 WHEN 0111 = key_code = 3。 WHEN OTHERS = NULL。 END CASE。 WHEN 1011 =