欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

乌拉喵教程]LocalBus 和 FPGA 总线编程简介

最编程 2024-05-02 11:34:17
...

网络异常,图片无法展示
|

最近将多年来收集到的教学视频、国内外图书、源码等整理整合拿出来,涉及arm、Linux、python、信号完整性、FPFA、DSP、算法、stm32、单片机、制图、电子模块、kali、出版社图书等。资料目前约1.5TB+。详情:


1.5TB+电子工程师资料详细介绍

https://b23.tv/7Kq7GMc


视频讲解地址:

B站讲解视频https://www.bilibili.com/video/BV1DL4y1p7Hu/

https://www.bilibili.com/video/BV1DL4y1p7Hu/


  • 1.SRAM及工作原理介绍
  • 2.DSP6713的LocalBus
  • 3.FPGA对EMIF的时序译码
  • 4.DSP6713的操作外设1
  • 5.DSP6713的操作外设2
  • 6.FPGA在LocalBus总线上扩片选应用
  • 7.实现对FPGA内部逻辑块的控制


  • 1.SRAM及工作原理介绍

sram是英文static ram的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。

网络异常,图片无法展示
|


对于处理器。它通过地址总线发出一个具有22位二进制数字的地址编码--当中11位是行地址,另外11位是列地址,这是通过RAM地址接口进行分离的。行地址解码器(row decoder)将会首先确定行地址,然后列地址解码器(column decoder)将会确定列地址,这样就能确定唯一的存储数据的位置,然后该数据就会通过RAM数据接口将数据传到数据总线。


另外,须要注意的是,RAM内部存储信息的矩阵并非一个正方形的,也就是行和列的数目不是同样的。


引用网址:FPGA第一篇:SRAM工作原理 - yjbjingcha - 博客园


以cypress公司的静态存储器CY7C1041B为例:

网络异常,图片无法展示
|

内部的逻辑框图:

其中I/O0~15是通常意义上的数据总线DATA0~15。

网络异常,图片无法展示
|


真值表

网络异常,图片无法展示
|

写时序:

网络异常,图片无法展示
|

读时序:

网络异常,图片无法展示
|


  • 2.DSP6713的LocalBus

TMS320C6713 DSP是美国TI推出的C6000系列DSP芯片的一款,它是32位高速浮点型DSP,时钟最高频率为200MHz。


外设资源为:

网络异常,图片无法展示
|


由于外设资源较少,且McxSP的接口有些时序并不标准,故多采用DSP6713+FPGA的方式扩展外设接口。


通过DSP6713的EMIF访问外部的SRAM的接线框图:

DSP6713通过EMIF发出的写时序:

DSP6713通过EMIF发出读时序:


DSP是怎么通过EMIF总线来读写外部的数据呢?

其实非常简单,对于应用层来说,只需要调用read、write函数,就可以通过EMIF总线发出上面的波形,外设设备比如FPGA,通过译时序,就可以实现让DSP读写自己的寄存器。


  • 3.FPGA对EMIF的时序译码

直接看程序,其实就是按DSP的时序来译码的。


那么DSP是怎么来往S_reg1、S_reg2里写数据的呢?又怎么从指定地址中把数据读上来呢?

首先我们要明确一件事情,DSP是如何控制片选的,因为DSP往地址线上输出地址我们好理解,那片选又不是地址线,DSP怎么去控制不同的片选呢?


那么DSP程序如果要往S_reg1、S_reg2里写数据,那么DSP就执行如下命令就行:


write8(0xa000 4000,0x55); //往S_reg1写数据0x55


write8(0xa000 4001, 0xaa); //往S_reg2写数据0xaa


从FPGA里读取数据,就执行如下命令:


data=read8(0xb00c c000); //从寄存器读数据数据存入data中


注:这里write8 read8只是示例,正常write8 read8是读写8位数据的意思,read8是无法读16位数据的,要用read16,这里只是为了和操作SRAM的程序保持一致,便于理解,表示下dsp应用上的读写操作。


4.DSP6713的操作外设1

DSP6713有4个片选,CS0~3,其中CS0是主要用于连接SDRAM,CS1用于连外部Flash,只剩下CS2、CS3两个片选了。


那么现在就有个问题,如果DSP6713对外不接FPGA,要接两个外设设备的话,最直接的方法就是一个片选带一个外设,比如接两个串口控制器82C52,那么就片选2接一个82c52,片选3接一个82c52。


82c52的内部逻辑框图:

DSP的接线方法:


那么新的问题来了,如果要再加两个82C52,共4个82C52的话,线要怎么接呢?片选不够了呀,尴尬。

这个时候数电中讲的一款芯片可以帮助我们,就是3-8译码器74HC138。


74HC138译码器可接受3位二进制加权地址输入(A0,A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。啥功能,直接看真值表就得了。


说白了,这个芯片就是16进制转10进制的一个转换芯片。


比如,16进制数是0x3,它的10进制值是3,那么就是Y3选中。


那么我们就靠这个芯片可以实现接4个82C52的功能了,怎么接呢?把DSP用不到的地址线接到3-8译码器的二进制输入端上(我们默认控制端E3、E2、E1是使能的)。

 


DSP的A6-A4接到了74HC138的A2-A0上,那么DSP要选中不同的82C52,那怎么操作呢?


靠地址来区分。


4片82C52分别接到了Y0、Y1、Y3、Y5上,那么对应的74HC138的A2-A0选通分别为000、001、011、101。


则对应DSP的地址为 0 00xx、0 01xx、0 11xx、1 01xx。(这里要注意,DSP的最低位为A2,不是A0,这个原因先不要去管,也就是把管脚A2当作软件上的A0)。


所以我们以选通“2”号82C52为例,看往里写数据软件怎么操作。


很简单,因为我们没有用到片选,所以write(0xa000 000c) 或者write(0xb000 000c)都可以操作到“2”号82C52的第0个寄存器。


write(0xa000 000d) 或者write(0xb000 000d)都可以操作到“2”号82C52的第1个寄存器。


以此类推。


  • 5.DSP6713的操作外设2

在上面的基础上,我们上面使用的是4个82C52实现了4串口功能,现在有一个XR16C854可以一个芯片实现4串口功能。

   


可以发现这个芯片的地址线有3根,是A2-A0,延续4路82C52的图的话我们发现一个问题。

我们看原解法

image.png

要还用这种接法

上一篇: Linux|三个或两个巨型页面(HugePage)

下一篇: Elasticsearch 索引优化指南:分片、副本、映射和分析器