📄 precalc_fsm.vhd
字号:
---------------------------------------------------------------------------- Crypto Chip-- Copyright (C) 1999, Projektgruppe WS98/99-- University of Stuttgart / Department of Computer Science / IFI-RA---------------------------------------------------------------------------- Designers : Arno Wacker-- Group : RSA---------------------------------------------------------------------- Design Unit Name : Precalc_FSM-- Purpose : Part of the RSA-module-core for the cryptochip "pg99"-- -- File Name : precalc_fsm.vhd---------------------------------------------------------------------- Simulator : SYNOPSYS VHDL System Simulator (VSS) Version 3.2.a---------------------------------------------------------------------- Date | Changes-- 17.12.98 | 17.12.98-- |--------------------------------------------------------------------------------------------------------------------------------------------------- Was implementiert wird-- Dieser Automat fuehrt die SRT Division durch--------------------------------------------------------------------------library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_misc.all;entity Precalc_FSM is port (CLK, RESET : in std_logic; PreCalc_Go, B768RDY : in std_logic; SRTREM, RESET_MONT, B768RESET, PreCalc_RDY, En_MONT : out std_logic);end Precalc_FSM;-- purpose: Synthetisierbarer Automat fuer das Exponentenbitarchitecture RTL of Precalc_FSM is type TState is (Precalc_Ready, Precalc_Reset1, Precalc_Quot1, Precalc_Add1, Precalc_Reset2, Precalc_Quot2, Precalc_Add2, Precalc_Quot3, Precalc_Add3, Precalc_Quot4, Precalc_Add4, Precalc_Final); signal state, nextState : TState; -- Zustandsvariable attribute state_vector: string; attribute state_vector of RTL : architecture is "state";begin -- RTL -- purpose: Zustandsregister Zustandsuebergang : process begin -- process Zustandsuebergang state <= nextState; wait until CLK'event and CLK = '1'; end process Zustandsuebergang; Uebergangsfunktion: process(state, RESET, PreCalc_Go, B768RDY) begin -- process Uebergangsfunktion nextState <= state; PreCalc_RDY <= '0'; B768RESET <= '0'; RESET_MONT <= '0'; SRTREM <= '0'; En_MONT <= '0'; if RESET='1' then nextState <= Precalc_Ready; PreCalc_RDY <= '0'; B768RESET <= '0'; RESET_MONT <= '0'; SRTREM <= '0'; En_MONT <= '0'; else case state is when Precalc_Ready => PreCalc_RDY <= '1'; if PreCalc_Go = '1' then nextState <= Precalc_Reset1; end if; when Precalc_Reset1 => SRTREM <= '1'; RESET_MONT <= '1'; B768RESET <= '1'; nextState <= Precalc_Quot1; when Precalc_Quot1 => SRTREM <= '1'; if B768RDY = '0' then nextState <= Precalc_Add1; elsif B768RDY = '1' then nextState <= Precalc_Reset2; end if; when Precalc_Add1 => SRTREM <= '1'; En_MONT <= '1'; nextState <= Precalc_Quot1; when Precalc_Reset2 => SRTREM <= '1'; B768RESET <= '1'; nextState <= Precalc_Add2; when Precalc_Quot2 => SRTREM <= '1'; nextState <= Precalc_Add2; when Precalc_Add2 => SRTREM <= '1'; En_MONT <= '1'; RESET_MONT <= '1'; if B768RDY = '0' then nextState <= Precalc_Quot2; elsif B768RDY = '1' then nextState <= Precalc_Quot3; end if; when Precalc_Quot3 => SRTREM <= '1'; nextState <= Precalc_Add3; when Precalc_Add3 => SRTREM <= '1'; En_MONT <= '1'; nextState <= Precalc_Quot4; when Precalc_Quot4 => SRTREM <= '1'; nextState <= Precalc_Add4; when Precalc_Add4 => SRTREM <= '1'; En_MONT <= '1'; RESET_MONT <= '1'; nextState <= Precalc_Final; when Precalc_Final => SRTREM <= '1'; En_MONT <= '1'; nextState <= Precalc_Ready; when others => NULL; end case; end if; end process Uebergangsfunktion; end RTL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -