⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic_app.vhd

📁 VHDL基础的编程源代码
💻 VHD
字号:
--/*****************************************************************************-- * 源文件:	iic_app.vhd-- * 模块:   	iic_controller驱动模块-- * 版权:-- *         	Copyright(C) 北京联华众科科技有限公司-- *						www.lianhua-zhongke.com.cn-- * 版本:  	Version 1.0-- * -- * 功能说明:-- *		   	产生IIC读写模块(iic_controller)的控制和数据信号,驱动IIC读写模块-- *			完成IIC设备的读写操作。-- *			-- * 参数说明:-- *	       	输出-- *			rd - 读操作指令有效-- *			wr - 写操作指令有效-- *			dev_addr - IIC设备地址-- *			mem_addr - 存储单元地址-- *			disp - 准备写入或已经读出的数据显示在七段数码管上-- *-- *			输入-- *			write_read - 读写有效信号,0表示写操作,1表示读操作,由开发板上-- *						 的拨码开关产生该信号-- *			wr_data - 写入操作时待写入数据,由开发板上的 4位拨码开关产生-- *			stop - 当前操作结束-- *			clock - 工作时钟,可以用复位按钮模拟-- *			reset - 复位信号,低电平有效-- *-- *			双向-- *			data - 读操作的数据输入,写操作的数据输出-- *-- *			参数-- *			device_addr - 设备地址-- *			memory_addr - 存储单元地址-- *-- * 变更记录: -- *         2006.01.28, 新建-- *-- *****************************************************************************/LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;ENTITY iic_app IS	GENERIC	(		device_addr : STD_LOGIC_VECTOR(7 downto 0):= "10100000";		memory_addr : STD_LOGIC_VECTOR(7 downto 0):= "00000000"	);	PORT	(		rd : BUFFER STD_LOGIC;		wr : BUFFER STD_LOGIC;				dev_addr : OUT STD_LOGIC_VECTOR(7 downto 0);		mem_addr : OUT STD_LOGIC_VECTOR(7 downto 0);				data : INOUT STD_LOGIC_VECTOR(7 downto 0);				disp : OUT STD_LOGIC_VECTOR(3 downto 0);		stop : IN STD_LOGIC;		write_read : IN STD_LOGIC;--0-write, 1-read		wr_data : IN STD_LOGIC_VECTOR(3 downto 0);--待写入器件的数据,范围为0~F				clock : IN STD_LOGIC;		reset : IN STD_LOGIC	);END iic_app;ARCHITECTURE iic_app_architecture OF iic_app IS		SIGNAL data_write : STD_LOGIC;	SIGNAL data_out : STD_LOGIC_VECTOR(7 downto 0);	SIGNAL data_out_tmp : STD_LOGIC_VECTOR(7 downto 0);BEGIN	data_out_tmp <= data_out WHEN (data_write) = '1' ELSE "ZZZZZZZZ";	data <= data_out_tmp;		PROCESS(clock, reset)--主状态机		VARIABLE currentState : INTEGER RANGE 0 TO 7 := 0;				VARIABLE data_buffer : STD_LOGIC_VECTOR(7 downto 0);	BEGIN	if (reset = '0') then		disp <= "0000";		currentState := 0;		wr <= '0';		rd <= '0';		data_write <= '1';		data_out <= "00000000";	elsif (clock='1' AND clock'EVENT) then		if (write_read = '0') then			disp <= wr_data;		else			disp <= data(3 downto 0);		end if;				if (currentState = 0) then--实现 init 的功能,对变量初始化			data_buffer(3 downto 0) := wr_data;			dev_addr <= device_addr;						if (write_read = '0') then				currentState := 1;--写入操作			else				currentState := 2;--读取操作			end if;		elsif (currentState = 1) then--写操作			wr <= '1';			mem_addr <= memory_addr;						data_write <= '1';			data_out <= data_buffer;			disp <= data_buffer(3 downto 0);						currentState := 3;--退出写状态		elsif (currentState = 2) then--读操作			rd <= '1';			data_write <= '0';--data端口设置为高阻,准备接收数据			mem_addr <= memory_addr;--准备读取的IIC设备内存地址			currentState := 3;--退出读状态		else			if (stop = '1') then--读操作 stop 到来时表示读取进行完毕,可以使用读得的数据				if (rd = '1') then					disp <= data(3 downto 0);				end if;								rd <= '0';				wr <= '0';			end if;		end if;	end if;END PROCESS;END iic_app_architecture;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -