📄 dac.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DAC IS
PORT ( CLK : IN STD_LOGIC;--256Hz
RD : OUT STD_LOGIC;
WR : OUT STD_LOGIC;
CS : OUT STD_LOGIC;
ledcs :OUT STD_LOGIC;
P13 :OUT STD_LOGIC;
RAMCS :OUT STD_LOGIC;
nRESET :IN STD_LOGIC;
DBUS :INOUT STD_LOGIC_VECTOR(7 downto 0));
END;
ARCHITECTURE DAC OF DAC IS
SIGNAL AD_VALUE : STD_LOGIC_VECTOR(7 downto 0);
SIGNAL STATUS : INTEGER RANGE 0 TO 32;
SIGNAL CS1 : STD_LOGIC;
SIGNAL RD1 : STD_LOGIC;
SIGNAL WR1 : STD_LOGIC;
SIGNAL P131 : STD_LOGIC;
BEGIN
RAMCS <= '1';
PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK = '1')THEN
IF( STATUS >=31) THEN STATUS <= 0;
ELSE STATUS <= STATUS + 1;
END IF;
END IF;
END PROCESS;
PROCESS(STATUS)
BEGIN
IF(nRESET = '0') THEN
DBUS <= "ZZZZZZZZ";
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
ELSIF(STATUS = 0) THEN
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 1) THEN
RD1 <= '1';
CS1 <= '0';
WR1 <= '1';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 2) THEN
RD1 <= '1';
CS1 <= '0';
WR1 <= '0';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 3) THEN
RD1 <= '1';
CS1 <= '0';
WR1 <= '1';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 4) THEN
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 5) THEN
CS1 <= '0';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 6) THEN
CS1 <= '0';
RD1 <= '0';
WR1 <= '1';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 7) THEN
CS1 <= '0';
RD1 <= '0';
WR1 <= '1';
P131 <= '1';
AD_VALUE <= DBUS;
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 8) THEN
CS1 <= '0';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
ELSIF(STATUS = 9) THEN
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
ELSIF(STATUS = 10) THEN
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
IF( (AD_VALUE(7) = '0')AND(AD_VALUE(6) = '0')AND(AD_VALUE(5) = '0')AND(AD_VALUE(4) = '0')) THEN
DBUS <= "00000000";
ELSIF( (AD_VALUE(7) = '0')AND(AD_VALUE(6) = '0')AND(AD_VALUE(5) = '0')AND(AD_VALUE(4) = '1'))THEN
DBUS <= "00000001";
ELSIF( (AD_VALUE(7) = '0')AND(AD_VALUE(6) = '0')AND(AD_VALUE(5) = '1'))THEN
DBUS <= "00000011";
ELSIF( (AD_VALUE(7) = '0')AND(AD_VALUE(6) = '1')AND(AD_VALUE(5) = '0'))THEN
DBUS <= "00000111";
ELSIF( (AD_VALUE(7) = '0')AND(AD_VALUE(6) = '1')AND(AD_VALUE(5) = '1'))THEN
DBUS <= "00001111";
ELSIF( (AD_VALUE(7) = '1')AND(AD_VALUE(6) = '0')AND(AD_VALUE(5) = '0'))THEN
DBUS <= "00011111";
ELSIF( (AD_VALUE(7) = '1')AND(AD_VALUE(6) = '0')AND(AD_VALUE(5) = '1'))THEN
DBUS <= "00111111";
ELSIF( (AD_VALUE(7) = '1')AND(AD_VALUE(6) = '1')AND(AD_VALUE(5) = '0'))THEN
DBUS <= "01111111";
ELSIF( (AD_VALUE(7) = '1')AND(AD_VALUE(6) = '1')AND(AD_VALUE(5) = '1'))THEN
DBUS <= "11111111";
ELSE
DBUS <= "00000000";
END IF;
ELSIF(STATUS = 11) THEN
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
ledcs <= '1';
P131 <= '0';
ELSIF(STATUS = 12) THEN
CS1 <= '1';
RD1 <= '1';
WR1 <= '0';
ledcs <= '0';
P131 <= '0';
ELSIF(STATUS = 12) THEN
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
P131 <= '0';
ELSIF(STATUS = 13) THEN
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
ELSE
CS1 <= '1';
RD1 <= '1';
WR1 <= '1';
P131 <= '1';
DBUS <= "ZZZZZZZZ";
END IF;
CS <= CS1;
RD <= RD1;
WR <= WR1;
P13 <= P131;
END PROCESS;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -