單片機多機冗余設計及控制模塊的VHDL語言描述
1.3.1 電源控制
三個單片機的供電電源由控制模塊控制。主控遠件需要保證足夠電流容量,可采用功率三極管或場效應管實現。不能采用繼電器在,以避免觸點電源跳變。
1.3.2 時鐘產生
晶體振蕩器輸出脈沖作為單片機時鐘,中間增加可控的緩沖級。緩沖級可以增加時鐘信號的輸出負載能力,并可被控制模塊控制。
1.3.3 復位電路
三個單片機的復位端并聯接至同一個復位端。復位信號在信號極性和脈沖寬度上滿足單片機復位要求,驅動能力滿足多單片機需要。復位電路同樣是受控于控制模塊,用以實現單片機同步。
1.4 報警與控制
不同狀態下核心控制模塊有不同的信號輸出,異常狀態同時也是報警信號。正常狀態輸出綠燈,出錯狀態輸出黃燈,失敗狀態輸出紅燈。黃燈輸出時系統可以暫時繼續工作,等到系統空閑或許可時進行糾錯。紅燈輸出時系統立即進入保護狀態,輸出端呈現高阻狀態,需要時可以馬上糾錯,恢復系統。
系統恢復需要對控制模塊進行復位,復位脈沖可以是自身的失敗狀態輸出,也可以是出錯脈沖輸出和其他信號的組合邏輯。控制模塊的復位,實際是對各單片機重新進行時序對齊和復位單片機程序。此處設計需結合具體使用場合考慮。
library ieee;
use ieee.std_1164.all;
use ieee.std_logic_unsigned.all;
Entity redu_control is
Port (a_bus,b_bus,c_bus:in std_logic_vector(7-三輸入總線,--本設計定為8位)
o_bus: out std_logic_vector(7 downto 0);--8位輸出總線
error_out,fail_out:out std_logic;--出錯、失敗輸出
reset_in,clock_in: in std_logic;--復位、時鐘輸入
power,clock,reset:out std_logic;--電源、時鐘、復位輸出
)
end;
architecture control_pro of redu_control_is
signal int: std_logic;
begin
bus_pro:process(a_bus,b_bus,c_bus) -總線控制過程
begin
if a_bus=b_bus then
o+bus=a_bus;
if a_bus=c_bus then - 正常輸出
error_out='0';
fail_out='0';
else
error_out='1'; --給出出錯信號
fail_out='0';
end if
elsif a_bus=c_bus then
o_bus=a_bus;
error_out='1'; --給出出錯信號
fail_out='0';
elsif b_bus=c_bus then -不同的出錯情況
o_bus=b_bus;
error_out='1';
fail_out='0';
else --失敗輸出
o_bus=(others=>'z');
fail_out='1';
end if
end process bus_pro; --總線過程結束
start_pro process -啟動過程
begin
wait until reset_in='1'; --等待外部復位啟動
power='0';
clock='0';
reset='0'; --停止電源、時鐘、復位輸出
power='1' after 3 s; --3s后輸出電源信號
clock=clock_in after 6 s; --6s后輸出時鐘信號
reset='1' after 9 s;--9s后輸出復位信號
reset='0'after 10 s;--復位信號回到高電平
end process start_pro;--啟動過程結束
end;
本文所述的時鐘對齊方法實現比較簡單但并不唯一。復雜一點的方法可以采用不同時鐘輸出到不同單片機,比較反饋后,調整時鐘輸出個數達到調節目標。
單片機相關文章:單片機教程
單片機相關文章:單片機視頻教程
單片機相關文章:單片機工作原理
熱敏打印機相關文章:熱敏打印機原理
評論