📄 regandintmode.vhd
字号:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-- Entity Declaration
ENTITY RegAndIntMode IS
-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
PORT
(
nReset : IN STD_LOGIC;
FifoStsRegAddr : IN STD_LOGIC;
ISRegAddr : IN STD_LOGIC;
IERegAddr : IN STD_LOGIC;
IOCtrlRegAddr : IN STD_LOGIC;
EF : IN STD_LOGIC;
HF : IN STD_LOGIC;
FF : IN STD_LOGIC;
IOW : IN STD_LOGIC;
IOR : IN STD_LOGIC;
SelectBit : OUT STD_LOGIC;
InternalChl : OUT STD_LOGIC;
StartAD : OUT STD_LOGIC;
DataBus : INOUT STD_LOGIC_VECTOR(7 downto 0)
);
-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
END RegAndIntMode;
-- Architecture Body
ARCHITECTURE RegAndIntMode_architecture OF RegAndIntMode IS
SIGNAL FifoStatusReg:STD_LOGIC_VECTOR(7 downto 0); --FIFO状态寄存器
SIGNAL IntEnReg:STD_LOGIC_VECTOR(7 downto 0); --中断允许寄存器
SIGNAL IntStatusReg:STD_LOGIC_VECTOR(7 downto 0); --中断状态寄存器
SIGNAL IOCtrlReg:STD_LOGIC_VECTOR(7 downto 0); --IO方式控制寄存器
SIGNAL FifoIntFlag:STD_LOGIC; --FIFO中断产生标志位
BEGIN
--读寄存器模块:
--在读信号有效时,输出寄存器的值。
DataBus<= FifoStatusReg WHEN (FifoStsRegAddr='0' AND IOR='0') ELSE
IntEnReg WHEN (IERegAddr='0' AND IOR='0') ELSE
IntStatusReg WHEN (ISRegAddr='0' AND IOR='0') ELSE
IOCtrlReg WHEN (IOCtrlRegAddr='0' AND IOR='0') ELSE
"ZZZZZZZZ";
--写寄存器模块,在写信号的上升沿总线上的数据时稳定的
PROCESS(IOW,nReset)
BEGIN
IF nReset='0' THEN
IntEnReg<=(OTHERS=>'0');
IOCtrlReg<=(OTHERS=>'0');
ELSIF IOW'EVENT AND IOW='1' THEN
IF IERegAddr='0' THEN --中断允许寄存器
IntEnReg<=DataBus;
ELSIF IOCtrlRegAddr='0' THEN --IO方式控制寄存器
IOCtrlReg<=DataBus;
END IF;
END IF;
END PROCESS;
--输出IO方式控制寄存器
--Bit0:SelectBit触发模式选择位。0:软件触发;1:外触发
--Bit1:InternalChl内部触发寄存器。
--Bit2:StartAD开始采样寄存器。0:停止采样;1:开始采样
SelectBit<=IOCtrlReg(0);
InternalChl<=IOCtrlReg(1);
StartAD<=IOCtrlReg(2);
--FIFO状态寄存器
FifoStatusReg<='0' & '0' & '0' & '0' & '0' & FF & HF & EF;
--中断状态寄存器
IntStatusReg<='0' & '0' & '0' & '0' & '0' & '0' & '0' & FifoIntFlag;
END RegAndIntMode_architecture;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -