📄 sh.vhd.bak
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SH IS
PORT(
CLK:IN STD_LOGIC;
RST:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
COMM1,COMM2:IN STD_LOGIC;
ERROR1,ERROR2:OUT STD_LOGIC;
COMMODITY1,COMMODITY2:OUT STD_LOGIC;
GIVE_CHANGE1,GIVE_CHANGE2:OUT STD_LOGIC
);
END;
ARCHITECTURE BHV OF SH IS
TYPE FSM_ST IS (S0,S1,S2,S3);
SIGNAL STATE:FSM_ST;
SIGNAL COMM_1,COMM_2:STD_LOGIC;
SIGNAL D_IN:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
PROCESS(CLK,RST)
BEGIN
IF COMM1='1' THEN
COMM_1<=COMM1;
ELSIF COMM2='1' THEN
COMM_2<=COMM2;
ELSIF RST='1' THEN STATE<=S0;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE STATE IS
WHEN S0=>
CASE D_IN IS
WHEN "00"=>STATE<=S0;COMMODITY1<='0';COMMODITY2<='0';
GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
ERROR1<='0';ERROR2<='0';
WHEN "01"=>STATE<=S1;COMMODITY1<='0';COMMODITY2<='0';
GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
ERROR1<='0';ERROR2<='0';
WHEN "10"=>STATE<=S2;COMMODITY1<='0';COMMODITY2<='0';
GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
ERROR1<='0';ERROR2<='0';
WHEN "11"=>IF COMM_1='1' THEN
COMMODITY1<='0';
GIVE_CHANGE1<='0';
ERROR1<='1';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
ELSIF COMM_2='1'THEN
COMMODITY2<='1';
GIVE_CHANGE2<='1';
ERROR2<='0';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
ELSIF COMM_1='1' AND COMM_2='1' THEN
COMMODITY1<='0';COMMODITY2<='0';
GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
ERROR1<='1';ERROR2<='1';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
END IF;
WHEN OTHERS=>ERROR1<='1';ERROR2<='1';STATE<=S0;COMM_1<='0';COMM_2<='0';
END CASE;
WHEN S1=>
CASE D_IN IS
WHEN "00"=>STATE<=S1;
WHEN "01"=>STATE<=S2;
WHEN "10"=>IF COMM_1='1' THEN
COMMODITY1<='1';
GIVE_CHANGE1<='0';
ERROR1<='0';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
ELSIF COMM_2='1'THEN
COMMODITY2<='0';
GIVE_CHANGE2<='0';
ERROR2<='0';
STATE<=S3;
ELSIF COMM_1='1' AND COMM_2='1' THEN
COMMODITY1<='0';COMMODITY2<='0';
GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
ERROR1<='1';ERROR2<='1';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
END IF;
WHEN OTHERS=>IF COMM_1='1' THEN
ERROR1<='1';
ELSIF COMM_2='1' THEN
ERROR2<='1';
ELSE ERROR1<='1';ERROR2<='1';
END IF;
STATE<=S0;
COMM_1<='0';COMM_2<='0';
END CASE;
WHEN S2=>
CASE D_IN IS
WHEN "00"=>STATE<=S2;
WHEN "01"=>IF COMM_1='1' THEN
COMMODITY1<='1';
GIVE_CHANGE1<='0';
ERROR1<='0';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
ELSIF COMM_2='1' THEN
COMMODITY2<='0';
GIVE_CHANGE2<='0';
ERROR2<='0';
STATE<=S3;
ELSIF COMM_1='1' AND COMM_2='1' THEN
COMMODITY1<='0';COMMODITY2<='0';
GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
ERROR1<='1';ERROR2<='1';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
END IF;
WHEN "10"=>IF COMM_1='1' THEN
COMMODITY1<='1';
GIVE_CHANGE1<='1';
ERROR1<='0';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
ELSIF COMM_2='1' THEN
COMMODITY2<='1';
GIVE_CHANGE2<='0';
ERROR2<='0';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
ELSIF COMM_1='1' AND COMM_2='1' THEN
COMMODITY1<='0';COMMODITY2<='0';
GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
ERROR1<='1';ERROR2<='1';
STATE<=S0;
COMM_1<='0';
COMM_2<='0';
END IF;
WHEN "11"=>IF COMM_1='1' THEN
ERROR1<='1';
ELSIF COMM_2='1' THEN
ERROR2<='1';
ELSE ERROR1<='1';ERROR2<='1';
END IF;
STATE<=S0;
COMM_1<='0';COMM_2<='0';
WHEN OTHERS=>ERROR1<='1';ERROR2<='1';STATE<=S0;COMM_1<='0';COMM_2<='0';
END CASE;
WHEN S3=>
CASE D_IN IS
WHEN "00"=>STATE<=S3;
WHEN "01"=>IF COMM_2='1' THEN
COMMODITY2<='1';
GIVE_CHANGE2<='0';
ERROR2<='0';
STATE<=S0;
COMM_2<='0';
ELSE
COMMODITY2<='0';
GIVE_CHANGE2<='0';
ERROR2<='1';
STATE<=S0;
COMM_2<='0';
END IF;
WHEN "10"=>IF COMM_2='1' THEN
COMMODITY2<='1';
GIVE_CHANGE2<='0';
ERROR2<='0';
STATE<=S0;
COMM_2<='0';
ELSE
COMMODITY2<='0';
GIVE_CHANGE2<='0';
ERROR2<='1';
STATE<=S0;
COMM_2<='0';
END IF;
WHEN "11"=>ERROR2<='1';STATE<=S0;COMM_2<='0';
WHEN OTHERS=>ERROR1<='1';ERROR2<='1';STATE<=S0;COMM_1<='0';COMM_2<='0';
END CASE;
WHEN OTHERS=>ERROR1<='1';ERROR2<='1';STATE<=S0;COMM_1<='0';COMM_2<='0';
END CASE;
END IF;
D_IN<=DIN;
END PROCESS;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -