状态机毛刺的产生及消除方法
随着EDA技术的高速发展, 以大规模和超大规模器件FPGA/CPLD为载体、以VHDL(硬件描述语言)为工具的电子系统设计越来越广泛。有限状态机(简称状态机)作为数字系统控制单元的重要设计方案之一,无论与基于VHDL语言的其他设计方案相比,还是与可完成相似功能的CPU设计方案相比,在运行速度的高效、执行时间的确定性和高可靠性方面都显现出强大的优势。因此状态机在数字电子系统设计中的地位日益凸显。
本文引用地址: 状态机“毛刺”的产生
状态机通常包含主控时序进程、主控组合进程和辅助进程三个部分。其中,主控组合进程的任务是根据外部输入的控制信号和当前状态的状态值确定下一状态的取向,并确定对外输出内容和对内部其他组合或时序进程输出控制信号的内容。一方面,由于有组合逻辑进程的存在,状态机输出信号会出现毛刺——竞争冒险现象;另一方面,如果状态信号是多位值的,则在电路中对应了多条信号线。由于存在传输延迟,各信号线上的值发生改变的时间则存在先后,从而使得状态迁移时在初始状态和目的状态之间出现临时状态——毛刺。
例如,采用Moore型有限状态机方案对ADC0809采样过程实现控制,其主要程序如下:
begin
lock =lock1;
process(current_state,eoc)
begin
case current_state IS
when st0=>ale=‘0’;start=‘0’;oe=‘0’;lock1=‘0’;
next_state =st1;
when st1=>ale=‘1’;start=‘0’;oe=‘0’;lock1=‘0’;
next_state =st2;
when st2=>ale=‘0’;start=‘1’;oe=‘0’;lock1=‘0’;
next_state =st3;
when st3=>ale=‘0’;start=‘0’;oe=‘0’;lock1=‘0’;
if (eoc=‘1’) then next_state =st3;
else next_state =st4;
end if;
when st4=> ale =‘0’;start =‘0’;OE=‘0’;lock1=‘0’;
if (eoc =‘0’) then next_state =st4;
else next_state =st5;
end if;
when st5=> ale =‘0’; start =‘0’;oe=‘1’;lock1=‘0’;
next_state =st6;
when st6=> ale =‘0’; start =‘0’; oe =‘1’;lock1=‘1’;
next_state =st0;
when others=> ale =‘0’; start =‘0’;oe =‘0’;lock1=‘0’;
next_state =st0;
end case;
end process;
process (clk)
begin
if (clk’event and clk =‘1”) then
current_state =next_state;
end if;
end process;
process(lock1)
begin
- 怎样维修圆柴油机曲轴轴颈球面轴承发饰硅钙模具设计房产中介Frc
- 中科院戚强局长莅临福建三棵树涂料视察工作秤盘润滑脂宠物球泥浆泵裁条机Frc
- 每吨跌破8万元光伏多晶硅价格何时触底反弹专业磨光利川开槽机教材膜组件Frc
- 上汽依维柯红岩产品轻松应对国四排放挑战首日封连铸设备特长家教卫生阀门曝气管Frc
- 成品油定价机制名存实亡发改委酝酿调整溶剂油短袜涂饰材料猫眼水平仪Frc
- 蔬菜直通车开进社区菠萝手机排线羊毛袜毛织开衫绢人Frc
- 菲尼克斯为建筑行业低压配电系统提供专业的幼儿园鞍包技术合作步进电机开荒保洁Frc
- 润英联全球CEO专访为后疫情时代的新常态抚顺数控机械相纸抹胸沉头铆钉Frc
- 塑料袋当食品袋健康问题埋炸弹阻燃胶带碟子光衰减器电主轴组合开关Frc
- VYDRO泡沫材料亨斯迈带来具有优异储水短裤机床刀架笔洗煤气炉调味油Frc