漳州建设银行网站,造价师注册管理系统,建设网站毕业设计开题报告,ui培训中心5、同步和异步设计 前面已有铺垫#xff0c;同步就是与时钟同步。 同步就是走正步#xff0c;一二一#xff0c;该迈哪个脚就迈那个脚#xff0c;跑的快的要等着跑的慢的。 异步就是搞赛跑#xff0c;各显神通#xff0c;尽最大力量去跑#xff0c;谁跑得快#xff0c;…5、同步和异步设计 前面已有铺垫同步就是与时钟同步。 同步就是走正步一二一该迈哪个脚就迈那个脚跑的快的要等着跑的慢的。 异步就是搞赛跑各显神通尽最大力量去跑谁跑得快谁拿奖牌。 我们举个例子SPI接口,他是一个低成本的单端的高速串行数据传输协议。 四个信号nCS、SCK、MISO、MOSI 下面是一个Slave SPI的接口部分简化了 model mySPI(input nCS, input SCK, input MOSI, output MISO); reg[3:0] bitcnt; reg[7:0] shift_in; //写入 reg[7:0] shift_out; //读出 reg[7:0] data_wt; reg[7:0] data_rd; always (posdge SCK) if(nCS) bitcnt 0; else begin if(bit_cnt!4h7) begin bitcnt bitcnt4h1; shift_in {shift_in[6:0], MOSI}; shift_out {shift_out[6:0], 0}; end else begin bitcnt 4h0; ........... data_wt deshift_in; shift_out data_rd; end end endmodule 这段代码是同步的还是异步的? 其实他远看是同步的近看是异步的仔细一看还是同步的。 大致一看丫的还配时钟呢按钟点走步八成是同步的。 然后一想不对啊SPI的SCK是Master提供的跟自家的全局时钟没有必然关系啊异步的。 思索一阵假如俺系统全局时钟都靠SCK不就是同步的了吗 实际情况如何呢 举个例子SPI Flash比如25系列其实就是同步的SCK就是全局时钟。 比如某ARM core的MCU内置SPI模块为了简化问题我们只谈Slave的情况问题就来了。 ARM MCU肯定有其自家的时钟SPI的Master又送来一个时钟咋办呢 当你发愁的时候你该庆幸自己遇到了几乎所有入门的人都必须解决的问题----多时钟系统。 多时钟各自都是同步放在一起就是异步。 正如两队人马都在走正步共军走得快国军走的更快他们各自都是同步的扯蛋到一块就是异步。 咋办呢 丛林法则要起作用了单一时钟同步化处理势力小的听势力大的人安排。 model mySPI(input clk, input nCS, input SCK, input MOSI, output MISO); always (clk) ................................... endmodule clk是自家的全局CLK信号对方的SCK信号只在自家CLK触发才看一眼对方的各个信号包括SCK信号。 这就是强者的统战部你家的可汗(SCK)见到我家皇帝(clk)也是称臣子。 当然这个处理方法是有前提的就是clk的频率要远远高于SCK信号。 所谓远远高于就是即使我clk的上升沿瞄你一眼就不会漏掉你所有的表现。 根据XXXOOO定律要达到采样不丢信息尼玛的频率至少是人家的2倍实际应用中一般保证4倍或更高。 就好比有4个小弟的人叫只有一个小弟的人对自己称臣听话大家就河蟹不听就干你。 前面有朋友谈到了复位信号的同步化处理最简单的就是复位和释放都同步处理我前面几个帖子有用到。 复位是什么是杀头复位释放是什么是重新投胎。 你跟情敌斗志斗勇的时候想到了制胜的一招时候你觉得是立马去执行还是等下一次例行见面时再执行。 当然是立马执行了这不就是异步把情敌给复位了嘛。 你击败情敌之后要对全班同学宣布的你胜利是每天早会宣布呢还是里面召集同学宣布呢 此时大势已定当然是按CLK四平八稳来得妥当大家会认为你是一个做事不鲁莽有步骤的电工十佳青年。 所以我们称之为异步复位同步释放。 always (posedge clk or negedge nRST) if (!nRST) 击败情敌; else 把击败情敌的战果宣布; 再举个例子Memory的访问为了简化我们做个ROM这样只有读的一种情况适合理解记忆 model memory8(input[7:0] addr, output[7:0] dat) reg[7:0] rom[255:0]; assign dat rom[addr]; endmodule model memory8(input clk, input[7:0] addr, output[7:0] dat) reg[7:0] rom[255:0]; reg[7:0] outbuf; assign dat outbuf; always (posedge clk) outbuf rom[addr]; endmodule 简单的是异步的只要地址变化了输出立马就表现。 我们实际使用的27系列的EPROM61系列的异步SRAM都是这样的始终把OE信号置于有效即可。 复杂的就是同步的了我不管你地址变了没在CLK上升沿到来之前我懒的理你。 异步的SRAM刚查了下也有61系列的 看来不能以前缀来瞎子摸象了。 一般实际用的时候异步SRAM肯定比同步的好用同步的老要CLK你是IO口模拟呢还是怎么输出呢 但同步的Memory也不是吃素的吃的多必然长得壮同步可以提高更高的传输速度。 该往回说了为何同步电路可以提高更高的速度呢 异步就是赛跑速度以跑得慢的人为准团队精神嘛这不能平均只能搞木桶原理。 同步就是大家按一个节奏你慢的话就用2个节奏完成但必须按节奏。 这样负责协调的那个人就是喊一二一的那个人(clk)可以把握全局的节奏来达到速度最大化。 所以一般FPGA里面都有全局时钟强大的扇出能力最小的传输延迟因为他是老大好资源他先挑的。 他就好比系统的原子铯钟他很精确我们每天跟他对一下时间我们自家的表就不会产生误差积累。 异步2个队伍各自有自家的老大比如一个是地址线一个是数据先某个时刻主控一抓。 可能地址线跑得快数据线跑的慢就会出现数据错位的情况数字电路上叫竞争。 你作为运筹帷幄的总统不能断定2个队伍能同事到达你仍然用这个方法你就是在冒险。 作为设计而言应尽量避免竞争冒险。 如果系统简单工期紧速度要求低逻辑简单用异步的。 如果系统庞大速度要求越高越好逻辑交叉错节坚决用同步的。 同步设计就是个工具让智商90的人可以干智商120的人的工作。 Asynchronous 和 Synchronous 这两个单词我老是分不清 后来学软件学逻辑电路给记住了带A的要要冒尖的是异步的 明天要讲的有限状态机是以同步设计为基础的设计方式