嵌入式软硬件协同设计概念篇

JTAG

JTAG 是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路 TAP ( Test Access Port ,测试访问口),通过专用的 JTAG 测试工具对内部节点进行测试。CPU可通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备,如FLASH,RAM,SOC。

标准的 JTAG 接口是 4 线: TMS 、 TCK 、 TDI 、 TDO ,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。如今 JTAG 接口的连接有两种标准,即 14 针接口和 20 针接口,其定义分别如下所示。

 

JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程后再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。JTAG接口可对DSP芯片内部的所有部件进行编程。

 

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)UART

计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem

UART芯片基本结构

⑴输出缓冲寄存器,它接收CPU从数据总线上送来的并行数据,并加以保存。

⑵ 输出移位寄存器,它接收从输出缓冲器送来的并行数据,以发送时钟的速率把数据逐位移出,即将并行数据转换为串行数据输出

⑶ 输入移位寄存器,它以接收时钟的速率把出现在串行数据输入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,即将串行数据转换成并行数据。

⑷ 输入缓冲寄存器,它从输入移位寄存器中接收并行数据,然后由CPU取走。

控制寄存器,它接收CPU送来的控制字,由控制字的内容,决定通信时的传输方式以及数据格式等。例如采用异步方式还是同步方式,数据字符的位数,有无奇偶校验,是奇校验还是偶校验,停止位的位数等参数。

状态寄存器。状态寄存器中存放着接口的各种状态信息,例如输出缓冲区是否空,输入字符是否准备好等。在通信过程中,当符合某种状态时,接口中的状态检测逻辑将状态寄存器的相应位置“1”,以便让CPU查询。

 

寄存器

寄存器Register),是中央处理器内的其中组成部分。寄存器通常由触发器组成,它们可用来暂存指令、数据地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器

寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。(这才是重点,有没有!!!)

寄存器通常都是以他们可以保存的比特数量来估量,举例来说,一个8位寄存器或32位寄存器。寄存器现在都以寄存器数组的方式来实现,但是他们也可能使用单独的触发器、高速的核心内存薄膜内存以及在数种机器上的其他方式来实现出来。

锁存器

锁存器英语:latch,是数字电路中异步时序逻辑电路系统中用来储存资讯的一种电子电路一个锁存器可以储存一比特的资讯,通常会有多个一起出现,有些会有特别的名称,像是 “4位锁存器”(可以储存四个比特)或“8位锁存器”(可以储存八个比特)等等。

 

锁存,就是把信号暂存以维持某种电平状态,在数字电路中则可以记录二进制数字信号“0”和“1”。

 

所谓锁存器,就是输出端的状态不会随输入端的状态变化而变化(说到了点子上,有没有啊!!!)仅在有锁存信号时输入的状态才被保存到输出,直到下一个锁存信号到来时才改变。

 

在某些应用中,单片机的I/O 口上需要外接锁存器。例如,当单片机连接片外存储器时,要接上锁存器,这是为了实现地址的复用。假设,MCU端口其中的 8 路的 I/O 管脚既要用于地址信号又要用于数据信号,这时就可以用锁存器先将地址锁存起来。

 

并不是一定要接锁存器,要看其地址线和数据线的安排,只有数据和地址线复用的情况下才会需要锁存器,其目的是防止在传数据时,地址线被数据所影响! 这是由单片机数据与地址总线复用造成的,接 RAM 时加锁存器是为了锁存地址信号

 

如果单片机总线接口只作一种用途,不需要接锁存器;如果单片机的总线接口要作两种用途,就要用两个锁存器。例如:一个口要控制两个 LED,对第一个 LED 送数据时,“打开”第一个锁存器而“锁住”第二个锁存器,使第二个 LED 上的数据不变。对第二个 LED 送数据时,“打开”第二个锁存器而“锁住”第一个锁存器,使第一个 LED 上的数据不变。如果单片机的一个口要做三种用途,则可用三个锁存器,操作过程相似。然而在实际应用中,我们并不这样做,只用一个锁存器就可以了(这不逗我吗?!),并用一根 I/O 口线作为对锁存器的控制之用(接 74373 的LE,而OE可恒接地)。所以,就这一种用法而言,可以把锁存器视为单片机的 I/O 口的扩展器。

 

锁存器工作原理(反正我能看懂)

CMOS反相器的功能是可以使输出获得跟输入相反的逻辑值,那如果把两个反相器的输入跟输出连接在一起会出现什么情况呢?我们来看下图,假设某个时刻反向器A的输入是1,那么其输出会是0;因为A的输出连接到B的输入端,即反相器B的输入为0,那么其输出会变为1;又因为B的输出连接到A的输入端,即B输出的1反馈回A的输入,对刚才假设的“A的输入为1”进行了确认和加强。此时A的输入确实为1,按A和B的输入输出连接关系,又走了一遍刚才的路程,如此循环,结果是反相器A的输出稳定为0,反相器B的输出稳定为1。这个结构的电路有两个稳定的状态,一般称之为双稳态电路。可见类似的双稳态电路可以稳定地保持其节点中的值(数据),具有记忆功能,这就是锁存器工作的原理。

 

 

从上面介绍可看出,首尾相接的两个反相器构成了互相反馈耦合的形态,这就是锁存器的基本电路结构。但是这里是基于一个假设,假设反相器A的输入为1,那么它的输出为0,两个反相器连在一起通过互相反馈加强,则能保持0和1两个值。如果没有这个假设,它能保存的值将是不确定的。这类似于“鸡生蛋还是蛋生鸡”的谜局(你瞅瞅,多形象啊),要将此电路当锁存器使用,就必须打破这个“是输入先有0,还是输出先反馈回1”的僵局。于是给它加了两个输入端,由于反相器只有1个输入,因此改用或非门来代替。电路结构如下图,根据或非门“只要有一个输入为1,其输出就为0”的特性(我想了一下,确实有道理),当R为1时,虽然有反馈存在,也可以强制输出Q=0;当S为1时,则强制输出Q=1。这就是R-S锁存器,R意为Reset,清零的意思;S意为Set,置1的意思。

 

 

什么,你说你还是不懂,那好,我们换个方式复习一遍,重新讲一下注意,现在换成了与非门

 

一般来说,在存储模式中,输入{\displaystyle {\bar {S}}}{\bar {S}}{\displaystyle {\bar {R}}}{\bar {R}}的电压都是高的,逻辑上的1,(换句话说,S及R的电压应该是低的,逻辑上的0,而输出{\displaystyle Q}Q{\displaystyle {\bar {Q}}}{\bar {Q}}则维持其原有的数值,其中{\displaystyle {\bar {Q}}}{\bar {Q}}{\displaystyle Q}Q的相反。但当{\displaystyle {\bar {S}}}{\bar {S}}(设定)被设定为逻辑0而{\displaystyle {\bar {R}}}{\bar {R}}是逻辑1的时候,输出{\displaystyle Q}Q就会变成逻辑1(因为0与任何逻辑都是0然后取反一定是1)。之后无论{\displaystyle {\bar {S}}}{\bar {S}}是否回复到逻辑1,{\displaystyle Q}Q亦会维持逻辑1的状态(因为Q的反相{\bar {Q}}作为一个输入,始终为0)。另一方面,如果{\displaystyle {\bar {R}}}{\bar {R}}(重设)被设定为逻辑0而{\displaystyle {\bar {S}}}{\bar {S}}是逻辑1的时候(R设定为0则{\bar {Q}}一定为1,又因为{\bar {S}}是1,所以经过与非门到达Q的时候为0),输出{\displaystyle Q}Q就会变成逻辑零。同样地,无论{\displaystyle {\bar {R}}}{\bar {R}}是否恢复到逻辑1(因为Q作为一个输入0导致{\bar {Q}}一定为1,又因为{\bar {S}}是1,所以Q维持逻辑0),{\displaystyle Q}Q亦会维持逻辑零的状态。要注意一点就是{\displaystyle {\bar {S}}}{\bar {S}}{\displaystyle {\bar {R}}}{\bar {R}}都不可以同一时间为逻辑上的0,故我们要在设计上避免这一个情况出现。

 

 

 

SR锁存器真值表

(注意:这里用的是S及R,而非文中的{\displaystyle {\bar {S}}}{\bar {S}}及{\displaystyle {\bar {R}}}{\bar {R}})

SRQQnext解释
0000维持
0011维持
0100重设
0110重设
1001设定
1011设定
110-不允许
111-不允许


触发器
触发器的线路图由逻辑门组合而成,其结构均由SR锁存器派生而来(广义的触发器包括锁存器)。触发器可以处理输入、输出信号和时钟频率之间的相互影响。

在实际的数字系统中往往包含大量的存储单元,而且经常要求他们在同一时刻同步动作,为达到这个目的,在每个存储单元电路上引入一个时钟脉冲(CLK)作为控制信号,只有当CLK到来时电路才被“触发”而动作,并根据输入信号改变输出状态。把这种在时钟信号触发时才能动作的存储单元电路称为触发器,以区别没有时钟信号控制的锁存器。

 

D触发器有一个输入、一个输出和一个时钟频率输入,当时钟频率由0转为1时,输出的值会和输入的值相等。此类触发器可用于防止因为噪声所带来的错误,以及通过管道增加处理数据的数量。

 

在R-S锁存器的前面加一个由两个与门和一个非门构成的附加电路,则构成D触发器。当时钟脉冲CP为1时,读入输入端D的数据并传至输出端;当CP为0时,根据与门“只要有一个输入端为0则输出为0”的特性,输入端D的数据被与门屏蔽了,无法到达输出端,不管输入D怎样变化,Q端输出值都保持不变,只有等到下一个CP高电平到来时,才会把当前的D值送出。这样就实现了延迟输出即暂时保存的功能。从电路的动作可以看出,时钟输入端起到控制的作用,CP为1时,能触发后面的锁存器把D的值暂时锁存起来,这也正是触发器名词中“触发”的含义,这正是触发器与锁存器的联系与区别:触发器利用了锁存器的保存原理,但是加上了触发功能,可以控制保存的时间。

 

 

存储器

存储元是存储器中最小存储单元,它的作用是用来存放一位二进制代码0或1。任何具有两个稳定状态(双稳态)的物理器件都可以来做存储元。例如,一个双稳态半导体电路或一个CMOS晶体管或磁性材料的存储元,均可以存储一个二进制代码。

CPU不能像访问内存那样,直接访问外存,外存要与CPU或I/O设备进行数据传输,必须通过内存进行。

由若干个存储元组成一个存储单元。一个存储器包含许多存储单元,每个存储单元可存放一个字节(按字节编址。每个存储单元的位置都有一个编号,即地址,一般用十六进制表示。一个存储器中所有存储单元可存放数据的总和称为它的存储容量。假设一个存储器的地址码由20位二进制数(即5位十六进制数)组成,则可表示2的20次方,即1M个存储单元地址。每个存储单元存放一个字节,则该存储器的存储容量为1MB。

CMOS(Complementary Metal Oxide Semiconductor),互补金属氧化物半导体,电压控制的一种放大器件,是组成CMOS数字集成电路的基本单元CMOS由PMOS管和NMOS管共同构成,它的特点是低功耗。由于CMOS中一对MOS组成的门电路在瞬间要么PMOS导通、要么NMOS导通、要么都截止,比线性的三极管(BJT)效率要高得多,因此功耗很低,因此,计算机里一个纽扣电池就可以给它长时间地提供电力。

 

ZYNQ的启动与配置

ZYNQ有两种启动模式:从BootROM主动启动,从JTAG被动启动。

与Xilinx7系列的器件不同的是,ZYNQ-7000 AP SOC并不支持从PL端直接进行启动配置。

ZYNQ-7000 AP SOC启动配置通常按照如下三个阶段进行:

1、BootROM,BootROM中的代码是固化的,处理器核在上电或者热启动时自动执行这部分代码。

2、第一阶段启动加载器FSBL,可由用户代码控制。(完成PS端的初始化,使用比特流文件对PL进行配置,跳转到SSBL执行)

3、由用户PS端设计代码控制,也可以是第二阶段启动加载器SSBL,这个阶段完全由用户控制,是可选的。(初始化CPU,并将操作系统加载到内存当中,对于运行在ZYNQ上的Linux系统而言,U-boot就是SSBL,是一个开源的引导程序,u_boot最后会把系统控制权交给Linux内核)

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《基于Xilinx Zynq嵌入式软硬件协同设计实战指南》是一本关于Zynq嵌入式系统设计的参考书籍,它是对Zynq SoC架构和应用的详细介绍。 首先,该书从硬件方面介绍了Zynq SoC的基本架构和组成部分,包括ARM Cortex-A9处理器和可编程逻辑的结合,以及其他外设资源。读者可以了解到Zynq SoC的硬件特性和功能,从而为软件开发做好准备。 其次,该书详细介绍了软件开发环境和工具链的设置,包括Vivado设计套件和SDK软件开发工具。读者可以学习到如何创建并配置一个Zynq项目,以及如何使用SDK工具进行嵌入式软件开发。 此外,该书还介绍了如何在Zynq SoC上进行裸机程序和Linux系统开发。读者可以学习到如何编写裸机程序并将其加载到可编程逻辑和处理器中,以实现硬件软件协同设计。另外,该书还介绍了如何在Zynq SoC上构建Linux系统,并开发基于Linux的应用程序。 最后,该书还包括一些实战案例,通过实际项目的展示,帮助读者更好地理解和应用Zynq SoC。这些案例涵盖了不同的应用领域,如图像处理、通信等,读者可以借鉴这些案例来设计和开发自己的项目。 总的来说,《基于Xilinx Zynq嵌入式软硬件协同设计实战指南》是一本全面介绍Zynq嵌入式系统设计的指南,对初学者和有一定经验的设计师都有很大的帮助。无论是对Zynq SoC的架构和特性感兴趣的读者,还是希望在Zynq平台上开发应用的读者,都可以从中获得对嵌入式软硬件协同设计的深入理解。 ### 回答2: 《基于Xilinx Zynq嵌入式软硬件协同设计实战指南》是一本关于使用Xilinx Zynq芯片进行嵌入式软硬件协同设计的实践指南。本书内容全面且实用,适合初学者和有一定经验的工程师阅读。 首先,本书介绍了Zynq芯片的基本架构和特点,详细解释了其CPU与FPGA之间的协同设计优势。作者通过实例演示了如何利用Zynq芯片进行软硬件协同设计,包括环境搭建、工具使用和开发流程。 其次,本书深入介绍了基于Xilinx Vivado开发套件的FPGA设计流程。作者通过实例展示了如何使用Vivado进行RTL设计、综合、布局布线和生成比特流等步骤。同时,本书还介绍了如何使用Vivado进行IP核的创建和定制,以及如何将IP核集成到FPGA设计中。 此外,本书还介绍了如何使用Xilinx SDK进行软件开发。作者详细介绍了如何创建和配置软件工程、编写驱动程序以及与硬件进行通信的方法。同时,本书还介绍了如何使用Linux作为嵌入式操作系统,并编写应用程序进行与硬件的交互。 最后,本书还探讨了一些高级主题,如系统性能优化、电源管理和调试技巧等。作者提供了大量实践经验和技巧,帮助读者在实际应用中充分发挥Zynq芯片的优势。 总的来说,该书详细介绍了基于Xilinx Zynq芯片的嵌入式软硬件协同设计实践,内容全面且实用,适合想要深入学习和应用Zynq芯片的读者阅读。无论是在学术研究还是工程开发中,本书都是一本宝贵的参考资料。 ### 回答3: 《基于Xilinx Zynq嵌入式软硬件协同设计实战指南》是一本介绍如何使用Xilinx Zynq系列FPGA进行嵌入式软硬件协同设计的实用指南。该书以实战为导向,详细讲解了Zynq系列FPGA的硬件架构、开发环境、软件编程、硬件编程等内容。 在该书中,首先介绍了Zynq系列FPGA的硬件架构,包括ARM Cortex-A9处理器与硬件逻辑的集成,可编程逻辑与外设接口等。接着,根据Zynq开发环境,引导读者配置开发工具,包括Vivado集成开发环境和SDK(Software Development Kit)。 然后,书中重点介绍了Zynq上的软件编程。通过使用C语言和Linux操作系统,读者可以学习如何在ARM Cortex-A9处理器上开发应用程序,并与硬件逻辑进行通信。此外,还介绍了如何使用Peripherals来控制外设,如GPIO(通用输入输出)、UART(通用异步收发器)等。 最后,书中讲解了Zynq上的硬件编程。读者可以学习如何使用Vivado进行硬件设计,通过连接外设和逻辑关系,实现自定义的功能。此外,还介绍了FPGA的时钟与复位管理、外设接口协议等相关知识。 通过该实战指南,读者可以全面了解Zynq系列FPGA的软硬件协同设计流程,并具备进行Zynq嵌入式系统开发的实践能力。无论是对于有一定嵌入式开发基础的工程师,还是对于初学者,这本指南都是一本很好的参考书籍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值