微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 单片机多机冗余设计及控制模块的VHDL语言描述

单片机多机冗余设计及控制模块的VHDL语言描述

时间:11-07 来源:电子技术应用 点击:

块有不同的信号输出,异常状态同时也是报警信号。正常状态输出绿灯,出错状态输出黄灯,失败状态输出红灯。黄灯输出时系统可以暂时继续工作,等到系统空闲或许可时进行纠错。红灯输出时系统立即进入保护状态,输出端呈现高阻状态,需要时可以马上纠错,恢复系统。

系统恢复需要对控制模块进行复位,复位脉冲可以是自身的失败状态输出,也可以是出错脉冲输出和其他信号的组合逻辑。控制模块的复位,实际是对各单片机重新进行时序对齐和复位单片机程序。此处设计需结合具体使用场合考虑。

2 控制模块的VHDL语言描述

本控制模块主要采用VHDL语言进行描述。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

Entity redu_control is

Port( a_bus,b_bus,c_bus: in std_logic_vector(7

downto 0); --三输入总线,本设计定为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;

本文所述的时钟对齐方法实现比较简单但并不唯一。复杂一点的方法可以采用不同时钟输出到不同单片机,比较反馈后,调整时钟输出个数达到调节目标。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top