时钟同步

试着制造一台计算机

。_饼干妹妹 提交于 2020-02-11 14:25:11
来源:《计算机是怎样跑起来的》 2.1 制作微型计算机所需的元件 制作微型计算机所需的基础元件只有 3 个: CPU, 负责解释、执行程序,这里使用 Z80 CPU 内存, 负责存储程序和数据, TC5517 I/O, 负责将计算机和外部设备(周边设备)连接在一起, Z80 PIO Z80 是一款古老的CPU, TC5517 是可以存储 2K 的 8比特数据的内存。 PIO ( Parallel I/O) 可以在微型计算机和外部设备之间并行地(一排一排地)输入输入8 比特的数据。 辅助元件: 时钟发生器 : 为了驱动 CPU运转, 称为 “ 时钟信号” 的电信号必不可少, 这种电信号就好像自身带有一个时钟, 每隔一定时间就变换一次电压的高低, 输出时钟信号的元件叫做 “时钟发生器” 。 时钟发生器中带有晶振, 根据其自身的频率(振动的次数) 产生时钟信号, 时钟信号的频率可以衡量 CPU的运转速度, 这里使用的是 2.5MHZ 的时钟发生器 (每隔 1 s 发出 1 次时钟信号就是 1 Hz) 指拨开关 : 用于 输入程序 的装置也是必不可少的, 在这里我们通过拨动指拨开关来输入程序, 指拨开关是由 8 个 开关并排连在一起构成的元件, 输出程序 执行结果的装置是 8 个 LED(发光二极管)。 剩下一些细碎的元件, 电阻是用于阻碍电流流动、降低电压值的元件。 为了省去布线的麻烦,

什么是验证?

荒凉一梦 提交于 2020-02-10 17:21:50
一、什么是验证? 比如,我们设计了一件shirt,我么要确认它的袖子是否一样长、尺寸和颜色是否是客户所需、扣子是否有缺损等,若都满足,则判定合格,这个过程就是验证。 二、我们进行验证,除了有验证计划,还需要构建测试平台。(DUT:被测器件) 三、为了直观的看到芯片验证在整个项目中的地位和作用,下面直接给出 芯片完整开发流程 。 1、新的芯片项目都是首先从市场人员与目标客户沟通开始的。这中间,市场人员会收集客户对于芯片的要求(主要包括功能、尺寸、功耗、性能),这些指标会被记录在 设计结构和产品文档 中去。 2、客户关心的系统层面的功能要求会被系统设计人员按照功能进一步划分为各个独立的子系统模块,这些子系统如果本身过于庞大,也会被进一步划分为功能模块,直到被划分的尺寸可以被小的设计团队进行硬件设计,并交付设计 功能描述文档 。 3、硬件工作人员将模块初步完成RTL级(寄存器级别,Register Transfer Level)的 硬件描述语言文件 。硬件设计人员一般会按照芯片的功能模块划分来分成不同的功能小组,同时系统设计人员的数目也会随着系统复杂程度的升高而增加。在硬件设计过程中,硬件设计工程师会将具体的功能描述文本通过逻辑翻译成为硬件描述语言(HDL,Hardware Description Language),目前使用广泛的HDL语言VHDL和Verilog均被各个大的EDA

关于IIC总线

二次信任 提交于 2020-02-08 12:51:45
关于IIC总线 I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。 1 I2C总线特点 I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。 I2C总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。 2 I2C总线工作原理 2.1 总线的构成及信号类型 I2C总线是由 数据线SDA 和 时钟SCL 构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。 各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作

5 FPGA时序约束理论篇之两种时序例外

僤鯓⒐⒋嵵緔 提交于 2020-02-05 08:56:36
两种时序例外 多周期路径   上面我们讲的是时钟周期约束,默认按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿。如下图所示。   默认情况下,保持时间的检查是以建立时间的检查为前提,即总是在建立时间的前一个时钟周期确定保持时间检查。这个也不难理解,上面的图中,数据在时刻1的边沿被发起,建立时间的检查是在时刻2进行,而保持时间的检查是在时刻1(如果这里不能理解,再回头看我们讲保持时间章节的内容),因此保持时间的检查是在建立时间检查的前一个时钟沿。   但在实际的工程中,经常会碰到数据被发起后,由于路径过长或者逻辑延迟过长要经过多个时钟周期才能到达捕获寄存器;又或者在数据发起的几个周期后,后续逻辑才能使用。这时如果按照单周期路径进行时序检查,就会报出时序违规。因此就需要我们这一节所讲的多周期路径了。 多周期约束的语句是: set_multicycle_path <num_cycles> [-setup|-hold] [-start|-end][-from <startpoints>] [-to <endpoints>] [-through <pins|cells|nets>] 参数 含义 num_cycles [-setup -hold] 建立/保持时间的周期个数 [-start -end] 参数时钟选取 -from 发起点 -to 捕获点 -through

SPI总线的特点、工作方式及常见错误解答

寵の児 提交于 2020-01-31 09:36:36
1.SPI总线简介    SPI (serial peripheral interface,串行 外围设备 接口)总线技术是Motorola公司推出的一种同步 串行接口 。它用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、 低电平 有效从机选择线CS。当SPI工作时,在移位 寄存器 中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。即完成一个字节数据传输的实质是两个器件寄存器内容的交换。主SPI的时钟信号(SCK)使传输同步。其典型系统框图如下图所示。 图1 典型系统框图 2.SPI总线的主要特点   SPI 接口一般使用 4 条线通信:     MISO 主设备数据输入,从设备数据输出。     MOSI 主设备数据输出,从设备数据输入。     SCLK 时钟信号,由主设备产生。     CS 从设备片选信号,由主设备控制。   全双工;   可以当作主机或从机工作;   提供频率可编程时钟;   发送结束中断标志;   写冲突保护;   总线竞争保护等。 3.SPI总线 工作方式  

7 FPGA时序约束实战篇之梳理时钟树

不羁岁月 提交于 2020-01-30 03:24:33
行万里路–时序约束实战篇   我们以Vivado自带的 wave_gen 工程为例,该工程的各个模块功能较为明确,如下图所示。为了引入异步时钟域,我们在此程序上由增加了另一个时钟– clkin2 ,该时钟产生脉冲信号 pulse , samp_gen 中在 pulse 为高时才产生信号。 下面我们来一步一步进行时序约束。 1. 梳理时钟树   我们首先要做的就是梳理时钟树,就是工程中用到了哪些时钟,各个时钟之间的关系又是什么样的,如果自己都没有把时钟关系理清楚,不要指望综合工具会把所有问题暴露出来。   在我们这个工程中,有两个主时钟,四个衍生时钟,如下图所示。   确定了主时钟和衍生时钟后,再看各个时钟是否有交互,即clka产生的数据是否在clkb的时钟域中被使用。   这个工程比较简单,只有两组时钟之间有交互,即: clk_rx 与 clk_tx clk_samp 与 clk2 其中, clk_rx 和 clk_tx 都是从同一个MMCM输出的,两个频率虽然不同,但他们却是同步的时钟,因此他们都是从同一个时钟分频得到(可以在Clock Wizard的Port Renaming中看到VCO Freq的大小),因此它们之间需要用 set_false_path 来约束;而 clk_samp 和 clk2 是两个异步时钟,需要用 asynchronous 来约束。 完成以上两步

Quartus II LPM使用指南-FIFO篇

梦想与她 提交于 2020-01-28 10:20:17
Quartus II LPM使用指南 FIFO篇 BY WG http://www.cnblogs.com/wg2011/ 目录 说明 - 2 - 摘要 - 3 - 第一章 FIFO配置全攻略 - 4 - 1.1如何配置自己需要的FIFO - 4 - 1.2输入输出端口 - 5 - 1.3时序要求 - 8 - 1.4输出状态标记和潜伏期 - 8 - 1.5避免亚稳态 - 9 - 1.6同步复位及异步复位的影响 - 9 - 1.7不同的输入输出位宽 - 10 - 1.8约束设置 - 10 - 第二章 设计实例 - 11 - 2.1设计实例概要 - 11 - 2.2系统仿真分析 - 11 - 2.2.1写操作 - 11 - 2.2.2读操作 - 12 - 2.2.3当DCFIFO被写满时 - 13 - 2.2.4完成ROM至DCFIFO的数据传递 - 13 - 2.2.5完成DCFIFO至RAM的数据传递 - 14 - 附录 FIFO配置界面: - 15 - 1 - 15 - 2 - 16 - 3 - 17 - 4 - 18 - 5 - 19 - 6 - 19 - 参考文献 - 21 - 说明 本文档根据 ALTERA 《SCFIFO and DCFIFO Megafunctions》一问整理而来。 笔者使用Quartus II 的版本及PC机操作系统版本为11.1 sp2 WIN7

FIFO知识点小结

老子叫甜甜 提交于 2020-01-27 07:58:06
1. FIFO简介 FIFO是一种先进先出数据缓存器,它与普通存储器的区别是没有外部读写地址线,使用起来非常简单,缺点是只能顺序读写,而不能随机读写。 2. 使用场景 数据缓冲:也就是数据写入过快,并且间隔时间长,也就是突发写入。那么通过设置一定深度的FIFO,可以起到数据暂存的功能,且使得后续处理流程平滑。 时钟域的隔离:主要用异步FIFO。对于不同时钟域的数据传输,可以通过FIFO进行隔离,避免跨时钟域的数据传输带来的设计和约束上的复杂度。比如FIFO的一端是AD,另一端是PCI;AD的采集速率是16位100KSPS,每秒的数据量是1.6Mbps。而PCI总线的速度是33MHz,总线宽度是32位 用于不同宽度的数据接口。例如单片机是8位,DSP是16。 3. 分类 同步FIFO:指读时钟和写时钟是同一个时钟 异步FIFO:指读写时钟是不同的时钟。 4. FIFO的常见参数 FIFO的宽度:即FIFO一次读写操作的数据位; FIFO的深度:指的是FIFO可以存储多少个N位的数据(如果宽度为N)。 满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。 空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出

PCM data flow - 3 - ASoC codec driver

怎甘沉沦 提交于 2020-01-26 08:36:43
上一章提到codec_drv的几个组成部分,下面逐一介绍,基本是以内核文档Documentation/sound/alsa/soc/codec.txt中的内容为脉络来分析的。codec的作用,在概述中有说明,本章主要罗列下codec driver中重要的数据结构及注册流程。 Codec DAI and PCM configuration codec_dai和pcm配置信息通过结构体snd_soc_dai_driver描述,包括dai的能力描述和操作接口,snd_soc_dai_driver最终会被注册到asoc-core中。 /* * Digital Audio Interface Driver. * * Describes the Digital Audio Interface in terms of its ALSA, DAI and AC97 * operations and capabilities. Codec and platform drivers will register this * structure for every DAI they have. * This structure covers the clocking, formating and ALSA operations for each * interface. */ struct snd

CentOS7--配置时间和日期

我的未来我决定 提交于 2020-01-26 06:20:14
CentOS7提供三个命令行工具,可用于配置和显示有关系统日期和时间的信息。 timedatectl: Linux 7中的新增功能,也是systemd其中的一部分。 date:系统时钟,也成为软件时钟,一旦系统启动并且系统时钟被初始化,系统时钟就完全独立硬件时钟。 hwclock: real-time clock ( RTC ) 通常被称为 硬件时钟 ,(在系统集成电路板上),即使在机器关闭时也能正常工作。实时时钟可以使用UTC( Universal Time )或本地时间,建议使用UTC。 使用 timedatectl 命令 显示当前日期和时间: timedatectl [root@zydev ~]# timedatectl Local time: Mon 2017-11-06 01:22:46 CST #中部标准时间,UTC+8 Universal time: Sun 2017-11-05 17:22:46 UTC RTC time: Sun 2017-11-05 17:22:46 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a  改变ntpd和chrony状态不会立即生效,需要执行: systemctl