CPLD被STM32读写VHDL程序

原创 2011年01月23日 19:00:00

 

--本程序用来测试STM32对CPLD的读写操作

--测试功能如下:

--向0x05地址写入0x01,LED灯停止闪烁,写入其他数据闪烁继续

--0x03,0x04寄存器为定值,可以通过STM32读取然后使用串口输出看看是否一致

 

--文件名:AD.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

 

entity AD is

port(

-- 系统信号线

    CLK:         in      std_logic;

LED:  out  std_logic;

-- ARM相连的信号线

    Adr_L:       in      std_logic_vector(7 downto 0); --A7...A0,只使用了低八位地址线

    D:           inout   std_logic_vector(7 downto 0); --只使用了低八位数据线

    FSMC_NE4:    in      std_logic;  

    FSMC_NOE:    in      std_logic;

    FSMC_NWE:    in      std_logic

);

end AD;

 

architecture art of AD is

--设置存储数据的寄存器

signal AD0_H_data,AD0_L_data,AD1_H_data,AD1_L_data,LED_ctrl:  std_logic_vector(7 downto 0); 

--数据缓冲寄存器

signal data_buf: std_logic_vector(7 downto 0);

--数据输出控制

signal data_outctl: std_logic;

signal datacnt:integer range 0 to 4000000;--分频计数

--LED闪烁使能

signal LED_flag: std_logic;

 

 

--统一编址,地址线数据线为八位,每个地址数据宽度8位

--"00000001" AD0_H_data 0x01

--"00000010" AD0_L_data 0x02

--"00000011" AD1_H_data 0x03

--"00000100" AD1_L_data 0x04

--"00000101" LED_ctrl 0x05

 

begin

 

AD1_H_data <="10100001";

AD1_L_data <="00010001";

--LED 闪烁,用作CPLD运行指示

 

process(LED_ctrl) is

begin

if(LED_ctrl="00000001") then

LED_flag <= '0';

else

LED_flag <= '1';

end if;

end process;

 

process(CLK)is

begin

 

 

if(CLK'event and CLK='1') then

if(LED_flag='1') then

datacnt<=datacnt+1;

if (datacnt>2000000) then

LED <= '1';

end if;

if (datacnt>=4000000) then

LED <='0';

datacnt <=0;

end if;

end if;

end if;

end process;

 

--当读取CPLD数据时用来判断何时向总线上输出数据

data_outctl <= (not  FSMC_NE4) and (not FSMC_NOE) and (FSMC_NWE);  

D <=  data_buf when (data_outctl='1') else "ZZZZZZZZ";--向数据线输出数据,否则保持为高阻态

 

-- 写操作,模式1,时序图在数据手册P331

process(FSMC_NE4,FSMC_NWE,Adr_L,FSMC_NOE) is  --,FSMC_NBL,D,RESET

begin

if(FSMC_NWE'event and FSMC_NWE='1') then

if((FSMC_NOE and (not FSMC_NE4))='1') then

case (Adr_L) is

when "00000001" =>   

AD0_H_data<= D; --0x01

when "00000010" =>  

AD0_L_data<= D; --0x02

when "00000101" =>  

LED_ctrl<= D; --0x05

when others =>

AD0_H_data<= AD0_H_data;

AD0_L_data<= AD0_L_data;

end case;

end if;

end if;

end process;

 

--读操作,模式1,P331

process(FSMC_NE4,FSMC_NWE,Adr_L,FSMC_NOE) is 

begin

if(FSMC_NOE='0' and FSMC_NOE'event) then --直接在NOE的下降沿更新数据

case (Adr_L) is

when "00000001" =>   

data_buf <= AD0_H_data; --0x01

when "00000010" =>  

data_buf <= AD0_L_data; --0x02

when "00000011" =>  

data_buf <= AD1_H_data; --0x03

when "00000100" => 

data_buf <= AD1_L_data; --0x04

when others =>  data_buf <= "ZZZZZZZZ";

end case; 

end if;

end process;

end;

 

 

 

FPGA/CPLD工作原理

FPGA和CPLD是可编程逻辑器件的典型代表。我们可以通过软件对其硬件结构进行重构(是不是很神奇?变形金刚?),而不必像传统方式那样,每次做电路、升级电路都要重新买器件、焊电路。FPGA:Field-...
  • Alexanderrr
  • Alexanderrr
  • 2016年06月08日 22:27
  • 1421

(二)基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解

接上面的文章!!!   第五步:我们要封装2个函数,一个用于读8位数据,一个用于写8位数据,程序如下: 第六步:我们要利用上面2个函数再封装2个函数,一个用于向EPPROM指定的地址写指定的一...
  • qq_22520215
  • qq_22520215
  • 2017年05月18日 09:46
  • 1311

(一)基于STM32f103的I2C通信接口的EPPROM模块(24C256)读写程序详解

想做到在24C256上读写数据,必须要掌握单片机的I2C通信知识,掌握这个对于其他外设也基于I2C通信的就可以引用了!      I2C 有四条连接线,SCL、SDA、VCC、GND。   I2C的通...
  • qq_22520215
  • qq_22520215
  • 2017年05月17日 10:02
  • 1719

STM32 的SPI读写函数解析

//SPIx 读写一个字节 //TxData:要写入的字节 //返回值:读取到的字节 u8 SPIx_ReadWriteByte(u8 TxData) {           ...
  • a827415225
  • a827415225
  • 2017年06月21日 09:25
  • 1206

STM32F10x_SPI(硬件接口 + 软件模拟)读写Flash(25Q16)

Ⅰ、写在前面 SPI(Serial Perripheral Interface)串行外设通信接口,主要实现设备(主从)之间的通信。硬件上由CS、SCK、MISO、MOSI四根通信线连接而成。关于SP...
  • ybhuangfugui
  • ybhuangfugui
  • 2016年07月29日 21:31
  • 7404

STM32学习笔记之硬件SPI读写与极性设置

大家介绍SPI,用的是战舰的教程,文中标红的是特别注意看的地方主要是熟悉flash芯片的指令集,以及存储芯片扇区和块的理解,最重要的是擦除都是以扇区擦除的方式。 本节将利用SPI来实现对外部FLAS...
  • sinat_23338865
  • sinat_23338865
  • 2016年08月31日 21:54
  • 6961

VHDL语言编写DS18B20温度传感器程序详解

简单粗暴的使用单从机模式下的DS18B20
  • Stack_mz
  • Stack_mz
  • 2016年11月05日 00:44
  • 3749

如何通过stm32驱动电源检测芯片cs5463

一、概述 CS5463 是一个包含两个ΔΣ模-数转换器( ADC)、 功率计算功能、电能到频率转换器和一个串行接口的完整的功率测量芯片。它可以精确测量瞬时电压,电流和计算IRMS、 VRMS、...
  • MENGHUANBEIKE
  • MENGHUANBEIKE
  • 2017年06月28日 14:15
  • 1390

STM32的简单的SD卡读写(不带文件系统,SPI方式)

待定。
  • u011006705
  • u011006705
  • 2014年04月09日 16:12
  • 4592

STM32 SPI 模拟实现 W25X16读写 代码

本文主要是为了针对 SPI 通讯的深入了解,加强基本工的练习。希望对大家有用!联系方式:QQ:279894340  想要原代码的可以到我的博客下载。谢谢 一、SPI总线协议及SPI时序图详解: ...
  • hualtium
  • hualtium
  • 2017年06月18日 17:10
  • 675
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CPLD被STM32读写VHDL程序
举报原因:
原因补充:

(最多只允许输入30个字)