Questions tagged «timing»

该标签与协议或标准的时序问题有关。这可能包含UART / IIC等时序以及驱动电动机的时序。


3
为什么在数据线上看到一个奇怪的“缺口”达几个逻辑1?
我正在尝试构建Z80家用计算机,以获得一些逆向计算的乐趣,并自学电子设计的基础。为了进行概念验证,我已经在前几周成功地在面包板上组装了一个基本系统。 当前的原型非常简单。我使用一个由74HCT04 Pierce振荡器驱动的4 MHz晶体作为系统时钟,两个处于透明模式(LE高电平)的74HCT573锁存器用作16位地址总线的缓冲器,另外两个处于相反方向的74HCT573由双向数据控制RD并NOT RD作为双向数据总线缓冲区。我附上了在系统总线上 100 ns的 AT28C256 EEPROM(仅解码16-KiB)和两个150 ns的 8-KiB SRAM芯片。我使用一个74HCT42生成CS信号OE,并将EEPROM的硬接线从低WE到高,仅留下一个CS信号来控制EEPROM。 面包板上的所有东西都很嘈杂,但是在我完成每个阶段后,系统似乎都可以正常运行。现在它可以从EEPROM获取指令,从SRAM读取数据或向SRAM写入数据,并且它具有由另一个锁存器74HCT573制成的串行端口,D0连接到D0,LE则(NOT (IOREQ NAND WR)),输出从出来Q1,换句话说,只有一个输出端口无需增加解码逻辑。我已经编写了一个占用大量CPU / RAM的基准程序,并且我的计算机可以输出预期的结果。Memdumps还显示Z80可以正确地从EEPROM读取所有字节,因此一切正常。 但是当我试图探究 D0数据总线的引脚时,我发现一些明显的逻辑1输出存在一些奇怪的“缺口”。 并且它们似乎总是CS在EEPROM信号变为活动状态后不久出现一些逻辑1 ,例如,这是叠加在蓝色EEPROM CS信号上的怪异陷波的捕获。 我试图找出问题所在,所以将SRAM的所有CS引脚硬接线到HIGH,从而有效地将它们从系统中删除,并且我编写了一个简单的测试程序,该程序无法访问内存。 .org 0x00 di xor a loop: out (0x00), a inc a jp loop 但是问题并没有改变,在某些情况下仍然总是出现怪异的“缺口”MEMRQ /” CS(蓝色)变低和/或(因为现在基本上是单芯片)之后逻辑1 。 SRAM的所有CS引脚都为HIGH,因此该系统几乎只有一个AT28C256 EEPROM芯片作为存储器,而一个锁存器作为输出端口。该系统还具有一个由Atmega328p制成的系统内编程器,可以在DMA请求过程中即时对EEPROM进行重新编程,但是我认为这不是罪魁祸首,因为我将编程器的所有数据和地址输出均设为三态,并且在添加程序员之前,我就已经看到了缺口。 因此,必须在操作码提取周期中创建“缺口”。这些是什么? 我有一些假设: 没错,这只是由于面包板的信号完整性差而引起的,并且它将在设计良好且去耦良好的PCB中自动消失。面包板存在各种信号完整性问题:阻抗不匹配,反射,寄生电容,串扰,EMI / RFI。跨电路板的长总线可能会在一定程度上加剧该问题。 如果是真的,您能否解释“缺口”的性质?这种现象在EE中有名字吗?我以前见过许多过冲和振铃,但从未见过“陷波”。为什么我只在某些逻辑级别看到它? 定时。EEPROM输出或其他逻辑电路的短“稳定时间”是否可能在总线上引起这种奇怪的影响? …


4
使用Arduino的MIDI音序器定时精度
我制作这些音序器。 只是它不完全是一个音序器,它是音序器的物理接口。音序器是一种在音序器连接到的便携式计算机上运行的应用程序,它使用户可以快速制作鼓循环。这很有趣,但是它需要一台笔记本电脑,因为音序器不是“板载”的。 我想要在设备上进行测序。 现在让我们假设我知道如何解决USB MIDI连接的类合规性,并且还假设我可以弄清楚如何连接arduino以从5针DIN端口发送MIDI音符。我最担心的是由于事件循环每次运行的分钟量计时不一致,导致速度随时间变化。 我知道一些事情: 您不应该依赖于delay()控制速度循环。延迟会停止固件的所有操作,并且无法运行,因为我需要在序列运行时轮询物理用户界面以查找更改。 基于的计算millis()会更好,因为固件可以在经过一定次数后继续运行并起作用。 即使我的物理控件都没有触发中断例程,但是某些操作可能会延迟主程序loop()的运行。如果我设计了一个等待用户输入的函数,那么很明显,如果millis()计数超出范围,可能会导致缺少“最后期限”来执行的问题。我知道这个问题是我自己设计的。 问题: A.基于AVR的arduino是否适合用于轮询用户界面并运行关键任务定时循环的微控制器?我知道现在有一个基于ARM的Arduino,速度要快得多。Teensy 3.0会是更好的选择吗?这两个都是3.3V电路板,所以这是另一个需要解决的问题...但是我暂时将其忽略。 B.我应该把任务分成两个微处理器吗?一种用于轮询和更新用户界面,另一种用于关键任务时序循环。 C。还有吗 我的主要目标是根本不必使用计算机。我也想计算挥杆,但在这种情况下,如果我没有锁定且计时准确的速度,挥杆就没有任何意义。谢谢你的建议!
11 arduino  timing  midi 


2
通过SDC的ASIC时序约束:如何正确指定多路复用时钟?
介绍 在互联网上以及关于如何正确创建SDC格式的时序约束的一些培训课程中找到了多个,有时是冲突的或不完整的信息之后,我想向EE社区寻求有关我遇到的一些通用时钟生成结构的帮助。 我知道在ASIC或FPGA上实现某种功能的方式有所不同(我已经使用过两者),但是我认为应该有一种通用的正确方法来限制给定结构的时序,而与基础技术-如果我在这方面做错了,请告诉我。 用于不同供应商的实现和时序分析的不同工具之间也存在一些差异(尽管Synopsys提供了SDC解析器源代码),但我希望它们主要是一个语法问题,可以在文档中查找。 题 这与以下时钟多路复用器结构有关,它是clkgen模块的一部分,而clkgen模块又是较大设计的一部分: 虽然ext_clk假定输入是在设计外部生成的(通过输入引脚输入),但clkgen模块也会生成和使用clk0和clk4信号(有关详细信息,请参阅我的相关纹波时钟问题),并且将相关的时钟约束命名为和,分别。baseclkdiv4clk 问题是如何指定约束,以便时序分析器 黄柏cpu_clk作为多路复用时钟,其可以是源时钟中的任一个(fast_clk或slow_clk或ext_clk),同时通过不同的延迟AND和OR门考虑 同时不要中断设计中其他地方使用的源时钟之间的路径。 虽然片上时钟多路复用器的简单的情况下似乎需要只是set_clock_groupsSDC声明: set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk} ...在给定的结构中,由于clk0(通过fast_clk输出)和clk4(通过slow_clk)仍在设计中使用,即使cpu_clk配置为ext_clk仅use_ext在断言时仍然如此,这使情况变得复杂。 如所描述的在这里,所述set_clock_groups命令如上述会导致以下: 此命令等效于从每个组中的每个时钟到每个其他组中的每个时钟调用set_false_path,反之亦然 ...这将是不正确的,因为其他时钟仍在其他地方使用。 附加信息 的use_clk0,use_clk4并且use_ext输入以这样的方式,只有它们中的一个是高在任何给定时间生成。如果所有use_*输入都为低电平,则可以使用它来停止所有时钟,但这个问题的重点是该结构的时钟多路复用特性。 原理图中的X2实例(一个简单的缓冲区)只是一个占位符,以突出显示自动放置和布线工具的问题,该工具通常可以自由地将缓冲区放置在任何地方(例如and_cpu_1/z和or_cpu1/in2引脚之间)。理想情况下,时序约束应不受此影响。

3
FPGA上的处理时序
我是fpgas的新手,我不确定我是否能理解一些计时上的微妙之处:如果所有同步过程都在同一沿触发,则意味着我的输入在一个上升沿被“捕获”,输出改变..相同的边缘?下一个上升边缘? 如果我有两个模块,其中一个的输出流入下一个的输入,则可能会出现这样的情况,即我的模块的输入(前一个模块的输出)在捕获时同时发生变化。 205ns处的标记显示了我在说什么,op和data_write是我的输入。在这个测试用例中,一切似乎都“正常”,但是在仿真中,尚不清楚何时捕获了什么。是在205ns或(205ns + 1个时钟周期)捕获到data_write =“ 0001 ...”吗?有没有办法在ISim中获得更详细的波形,以显示建立时间和保持时间? 谢谢。


4
总线同步器电路的时序约束
我有一个总线同步器电路,用于跨时钟域传递宽寄存器。 我将提供简化的描述,省略异步重置逻辑。 数据在一个时钟上生成。更新间隔了许多(至少一打)时钟沿: PROCESS (src_clk) BEGIN IF RISING_EDGE(clock) THEN IF computation_done THEN data <= computation; ready_spin <= NOT ready_spin; END IF; END IF; END PROCESS; 用于新鲜数据的控制信号,该信号经过NRZI编码(因此,总线上的有效字对应于控制信号上的转换)。控制信号通过充当同步器的DFF链。 PROCESS (dest_clk) BEGIN IF RISING_EDGE(dest_clk) THEN ready_spin_q3 <= ready_spin_q2; ready_spin_q2 <= ready_spin_q1; ready_spin_q1 <= ready_spin; END IF; END PROCESS; 同步器电路引入了短暂的延迟,这为数据总线稳定提供了足够的时间。数据总线直接采样,没有亚稳态风险: PROCESS (dest_clk) BEGIN IF …
10 fpga  clock  timing  sdc 

2
眼图差,从哪里开始看?
我正在尝试调试100Mbit以太网板,并且遇到了无法解决的问题。 这是发射对的眼图。接收对非常相似。它是一个LAN8700 PHY,并且我已有效禁用MII接口,因此PHY正在传输IDLE码序列。根据数据表,它被强制为100Mbit / FDX。100Mbit / HDX是相同的。 纠正:设计使用的是LAN8700的内部1.8V电源为其VDD_CORE网络供电。在前面的描述中,我一定已经把1.8V逻辑电源与VDD_CORE电源混淆了。在我看来,电源噪声的可能性不大,因为高电平,零电平和低电平实际上相当不错。也就是说,眼睛不会被“压扁”。违反行为看起来都非常好,只是及时“偏斜”,这一事实使我认为问题出在PHY的晶体或晶体驱动器/ PLL的电源上。 如果我让眼图运行(大约15分钟),则遮罩中的违规将“填充”,以使您在图片中看到的白色违规在蓝色遮罩的右侧变为白色V形(>)形状。这将告诉我,时序误差或多或少是随机分布的,而不是某种使时序偏离精确量的离散噪声。 PHY使用的晶体具有30ppm的规格,这完全在100ppm 802.3规格之内,甚至在PHY指定的50ppm推荐规格之内。我使用的负载电容器与晶体所需的电容器相匹配,并且非常接近LAN8700指定的标称电容。 在禁用MII接口之前,我会看到成帧错误(如我的Linux的ifconfig程序所报告)。如果我将链接强制为10Mbit,则没有错误。 我注意到的一件很奇怪的事情是,如果我将示波器设置为触发从PHY到MAC的RX_ER(接收错误)信号,即使帧错误累积在MAC报告中,它也永远不会发出错误信号。现在,通过阅读PHY的数据表,很明显,实际上只有极少数情况下RX_ER会断言,但是我发现很难相信像我所看到的那样的眼图实际上是PHY与MAC。 我确实了解眼图的基础知识,但是我希望找一些更有经验的海报,希望他们能够分享他们在将特定的眼图模板违规转化为可能的来源方面的经验。 (编辑:添加了原理图,更正了VDD_CORE电源)

3
如何实现非常简单的异步DRAM控制器?
我想知道如何构建一个简单的异步DRAM控制器。我有一些30针1MB SIMM 70ns DRAM(带奇偶校验的1Mx9)模块,我想在自制的复古计算机项目中使用。不幸的是,没有适用于他们的数据表,因此我一直在研究IBM 的Siemens HYM 91000S-70和“了解DRAM操作”。 我想要结束的基本界面是 / CS:输入,片选 读/写:读,不写 RDY:数据准备就绪时,输出为高 D:输入/输出,8位数据总线 答:在20位地址总线中 刷新似乎很简单,有几种方法可以解决问题。我应该能够使用任何旧计数器进行行地址跟踪,在CPU时钟低(在该特定芯片中不进行内存访问)的情况下,进行分布式(交织)纯RAS刷新(ROR)。我相信根据JEDEC的要求,至少每64ms刷新所有行(根据Seimens数据表每8ms刷新512,即标准的周期刷新为15.6us),所以这应该工作正常,如果遇到问题,我将发布另一个问题。我对获得简单,正确的阅读和确定以及确定我应该达到的速度更感兴趣。 首先,我将快速描述一下我认为它是如何工作的以及到目前为止我提出的潜在解决方案。 基本上,您将20位地址分成两半,其中一半用于列,另一半用于行。您先选通行地址,然后选列地址,如果/ CAS变为低电平时/ W为高电平,则为读操作,否则为写操作。如果是写操作,则此时数据必须已经在数据总线上。一段时间后,如果是读操作,则表明数据可用,或者如果是写操作,则表明数据已被写入。然后,需要在与直觉相反的“预充电”期间将/ RAS和/ CAS重新设置为高电平。这样就完成了循环。 因此,基本上,这是一个跨越多个状态的过渡,每个过渡之间存在特定的特定延迟。我将其列为“表”,该表按事务的每个阶段的持续时间进行索引: t(ASR)= 0 ns / RAS:H / CAS:H A0-9:RA / W:高 t(RAH)= 10 ns / RAS:L / CAS:H A0-9:RA / W:高 t(ASC)= 0纳秒 / RAS:L / CAS:H A0-9:CA / …
9 memory  timing  dram  7400 

2
PIC上的SPI时钟不稳定
我正在尝试将PIC18F25K22的MSSP模块配置为SPI主模式。我正在查看时序,并且整个传输过程中的时钟都不稳定。图片比文字更能说明问题。 发送一个比特后,时钟会缩短,并且每次不会缩短相同的时间。我以前没有使用过SPI,但是我在Wikipedia和其他资源上找到的图表从未显示过。我还连接了一个Arduino,但没有看到这种行为。我的代码是: #pragma config FOSC = INTIO67 // Oscillator Selection bits (Internal oscillator block) #pragma config PLLCFG = OFF // 4X PLL Enable (Oscillator used directly) #pragma config BOREN = OFF // Brown-out Reset Enable bits (Brown-out Reset disabled in hardware and software) #pragma config WDTEN = OFF // Watchdog …
8 pic  spi  timing 

2
商业微处理器如何以千兆赫兹时钟满足定时?
我在使相对简单的FPGA设计(对于Altera Cyclone IV)满足由250 MHz时钟驱动的逻辑时序方面遇到麻烦。这让我想知道商用微处理器(例如Intel Core i7)如何满足时钟频率超过高出一个数量级的时序要求。 当我为FPGA苦苦挣扎于250 MHz时,商用微处理器如何满足3.8 GHz的时序要求?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.