LocalBus总线介绍及FPGA总线编程

简介: LocalBus总线介绍及FPGA总线编程

科技背景_副本 公众号_副本.png

SRAM及工作原理介绍

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

       

对于处理器。它通过地址总线发出一个具有22位二进制数字的地址编码--当中11位是行地址,另外11位是列地址,这是通过RAM地址接口进行分离的。行地址解码器(row decoder)将会首先确定行地址,然后列地址解码器(column decoder)将会确定列地址,这样就能确定唯一的存储数据的位置,然后该数据就会通过RAM数据接口将数据传到数据总线。另外,须要注意的是,RAM内部存储信息的矩阵并非一个正方形的,也就是行和列的数目不是同样的。引用网址:https://www.cnblogs.com/yjbjingcha/p/7323909.html        以cypress公司的静态存储器CY7C1041B为例:

内部的逻辑框图:

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

真值表

写时序:

读时序:

       

       

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读写自己的寄存器。

       

               

       

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应用上的读写操作。

       

       

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个寄存器

以此类推。

       

       

       

DSP6713的操作外设2

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

   

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

我们看原解法

芯片

74HC138 A2-A0

82C52 A1-A0

占线

DSPA6-A4

DSPA3-A2

线数

3

2

       

要还用这种接法

芯片

74HC138 A2-A0

XR16C854 A2-A0

结论,A4冲突,不能用

占线

DSPA6-A4

DSPA4-A2

线数

3

3

即XR16C854得占3个线,也就是得占到DSP的A4、A3、A2了。多了一个A4

和原来分给74HC138的A4冲突了。

       

所以要改74HC138的线,往上提一根。

芯片

74HC138 A2-A0

XR16C854 A2-A0

结论:可以实现功能。

占线

DSPA7-A5

DSPA4-A2

线数

3

3

       

这就说明一个问题,我们用于分片选的地址线,不能是太低位的线,否则很有可能出现和外设芯片占用地址线冲突的情况。

因此,一般我们用于片选的地址线都从最高选。

即推荐的接线方式

芯片

74HC138 A2-A0

XR16C854 A2-A0

结论:推荐。

占线

DSPA21-A19

DSPA4-A2

线数

3

3

       

       

FPGA在LocalBus总线上扩片选应用

最终,我们落脚到了FPGA,谨记一句话,只要数字芯片能实现的,FPGA都是能实现的。

所以,上面我们使用74HC138做的通过DSP高位地址扩展片选的功能,我们可以使用FPGA实现。我们最简单的方式就是先计算我们需要扩展几个片选,比如16个片选,那么4位地址线就可以区分出来,那么使用FPGA做一个4-16译码器就行了。接线上也很简单。

下面犯懒了,还是以3-8的来表示吧。

那么FPGA上的程序咋写嘞?

这就实现了对片选的译码。是不是非常简单。

       

       

实现对FPGA内部逻辑块的控制

还是那句话,只要数字芯片能实现的,FPGA都是能实现的。

那么,我们是不是可以把82C52做到FPGA内,当然是可以的。

那么我们的图变成了什么呢?

那么我们就直接在门阵中做一个串口模块就好了,这个模块这里就不讲了,不是今天的主题,咱们就认为现在门阵已经有这么一个模块。

这里展示下模块的一些功能:

可以看出,和82C52的芯片接口其实一样的。有片选、读写、地址、数据。

我们下面就把门阵代码直接放上来看吧,这里以操作“0”号串口模块为例。

把这里的模块调用4次,把s_sys_addr(21 downto 20)分不同的地址,即00、0110、11,就行了。

       

相关文章
|
7月前
|
存储 算法 数据处理
FPGA:可编程逻辑设备的领军者及其在数字信号处理中的应用
FPGA:可编程逻辑设备的领军者及其在数字信号处理中的应用
108 2
|
7月前
|
存储 算法 测试技术
FPGA(现场可编程门阵列)技术概述及其应用实例
FPGA(现场可编程门阵列)技术概述及其应用实例
|
7月前
|
编解码 算法 网络协议
FPGA:引领数字时代的可编程逻辑器件
FPGA:引领数字时代的可编程逻辑器件
108 4
|
7月前
|
存储 算法 计算机视觉
FPGA:可编程逻辑器件的探索与实践
FPGA:可编程逻辑器件的探索与实践
151 1
|
7月前
|
人工智能 算法 自动驾驶
FPGA:可编程逻辑器件的新篇章
FPGA:可编程逻辑器件的新篇章
|
异构计算
【乌拉喵.教程】IIC总线介绍及FPGA编程(二)
【乌拉喵.教程】IIC总线介绍及FPGA编程(二)
127 0
【乌拉喵.教程】IIC总线介绍及FPGA编程(二)
|
4天前
|
算法 异构计算
基于FPGA的4ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的4-ASK调制解调系统的算法仿真效果、理论基础及Verilog核心程序。仿真在Vivado2019.2环境下进行,分别测试了SNR为20dB、15dB、10dB时的性能。理论部分概述了4-ASK的工作原理,包括调制、解调过程及其数学模型。Verilog代码实现了4-ASK调制器、加性高斯白噪声(AWGN)信道模拟、解调器及误码率计算模块。
21 8
|
20天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的1024QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的1024QAM调制解调系统的仿真与实现。通过Vivado 2019.2进行仿真,分别在SNR=40dB和35dB下验证了算法效果,并将数据导入Matlab生成星座图。1024QAM调制将10比特映射到复数平面上的1024个星座点之一,适用于高数据传输速率的应用。系统包含数据接口、串并转换、星座映射、调制器、解调器等模块。Verilog核心程序实现了调制、加噪声信道和解调过程,并统计误码率。
39 1
|
2月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的64QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的64QAM调制解调通信系统的设计与实现,包括信号生成、调制、解调和误码率测试。系统在Vivado 2019.2中进行了仿真,通过设置不同SNR值(15、20、25)验证了系统的性能,并展示了相应的星座图。核心程序使用Verilog语言编写,加入了信道噪声模块和误码率统计功能,提升了仿真效率。
50 4
|
2月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。

热门文章

最新文章