精华内容
下载资源
问答
  • 异步输入同步开关防颤电路的设计,设计一个4位二进制计数器,在开发实验板上实现按键控制技术
  • Q:什么是同步逻辑和异步逻辑? A:同步逻辑是时钟之间有固定的因果关系;异步逻辑是各时钟之间没有固定的因果关系。 Q:什么是同步电路和异步电路? A:同步电路:存储电路中所有触发器的时钟输入端都接同一...

    Q:什么是同步逻辑和异步逻辑?

    A:同步逻辑是时钟之间有固定的因果关系;异步逻辑是各时钟之间没有固定的因果关系。

     

    Q:什么是同步电路和异步电路?

    A:同步电路:存储电路中所有触发器的时钟输入端都接同一时钟脉冲源,因而所有触发器的状态变化都与所加的时钟脉冲信号同步;

          异步电路:电路中没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这些触发器的状态变化与时钟脉冲同步,而其它触发器的状态变化不与时钟脉冲同步。

     

    同步就是双方有一个共同的时钟,当发送时,接收方同时准备接收;

    异步双方不需要共同的时钟,也就是接收方不知道对方什么时候发送,所以在发送信息中就要有提示接收方开始接收的信息,如开始位,结束时有停止位。

     

    展开全文
  • 脉冲异步时序电路和同步时序电路有两个共同的特点:  ● 电路状态的转换是在脉冲作用下实现的。  在同步时序电路中尽管输入信号可以是电平信号或者脉冲信号,但电路的状态转换受统一的时钟脉冲控制;脉冲异步...
  • 首先问问自己当面试官问到js中的同步和异步,这个问题该怎么回答?理解一个问题无非是what-why-how js同步和异步问题是什么–>为什么会产生异步问题–>如何解决。 一、JavaScript起源 技术的出现,应用场景密切...
  • 同步和异步串口

    2014-07-09 13:19:22
    异步传输是一种典型的基于字节的输入输出,指数据按每次一个字节进行传输,其传输速度低。 同步传输是把数据字节组合起来一起发送,这种组合称之为帧,其传输速度比异步传输快
  • 同步FIFO和异步FIFO总结

    千次阅读 多人点赞 2020-09-17 17:06:09
    关于异步FIFO最小深度的计算9.1 写时钟快于读时钟,写读的过程中没有空闲周期9.2 写时钟频率大于读时钟频率,但在读写的过程中存在空闲周期9.3 写时钟慢于读时钟,且读写过程中没有空闲周期9.4 写时钟频率小于读...

    1. FIFO简介

    FIFO是一种先进先出数据缓存器,它与普通存储器的区别是没有外部读写地址线,使用起来非常简单,缺点是只能顺序读写,而不能随机读写。

    2. 使用场景

    1. 数据缓冲:也就是数据写入过快,并且间隔时间长,也就是突发写入。那么通过设置一定深度的FIFO,可以起到数据暂存的功能,且使得后续处理流程平滑。
    2. 时钟域的隔离:主要用异步FIFO。对于不同时钟域的数据传输,可以通过FIFO进行隔离,避免跨时钟域的数据传输带来的设计和约束上的复杂度。比如FIFO的一端是AD,另一端是PCI;AD的采集速率是16位100KSPS,每秒的数据量是1.6Mbps。而PCI总线的速度是33MHz,总线宽度是32位
    3. 用于不同宽度的数据接口。例如单片机是8位,DSP是16。

    3. 分类

    同步FIFO:指读时钟和写时钟是同一个时钟
    异步FIFO:指读写时钟是不同的时钟。

    4. FIFO的常见参数

    • FIFO的宽度:即FIFO一次读写操作的数据位;
    • FIFO的深度:指的是FIFO可以存储多少个N位的数据(如果宽度为N)。
    • 满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。
    • 空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读出(underflow)。
    • 读时钟:读操作所遵循的时钟,在每个时钟沿来临时读数据。
    • 写时钟:写操作所遵循的时钟,在每个时钟沿来临时写数据。

    5. FIFO设计

    5.1 空满标志生成

    1. FIFO设计的关键是产生可靠的FIFO读写指针和生成FIFO空/满状态标志。
      当读写指针相等时,表明FIFO为空,这种情况发生在复位操作时;或者当读指针读出FIFO中最后一个字后,追赶上了写指针时,这时FIFO处于满的状态。
      为了区分到底是满状态还是空状态,可以采用以下方法:
      方法1:在指针中添加一个额外的位(extra bit),当写指针增加并越过最后一个FIFO地址时,就将写指针这个未用的MSB加1,其它位回零。对读指针也进行同样的操作。此时,对于深度为2^n的FIFO,需要的读/写指针位宽为(n+1)位,如对于深度为8的FIFO,需要采用4bit的计数器,0000~1000、1001~1111,MSB作为折回标志位,而低3位作为地址指针。
    • 如果两个指针的MSB不同,说明写指针比读指针多折回了一次;如r_addr=0000,而w_addr = 1000,为满。
    • 如果两个指针的MSB相同,则说明两个指针折回的次数相等。其余位相等,说明FIFO为空;

    5.2 异步FIFO的设计还要注意跨时钟域问题

    将一个二进制的计数值从一个时钟域同步到另一个时钟域的时候很容易出现问题,因为采用二进制计数器时所有位都可能同时变化,在同一个时钟沿同步多个信号的变化会产生亚稳态问题。而使用格雷码只有一位变化,因此在两个时钟域间同步多个位不会产生问题。所以需要一个二进制到gray码的转换电路,将地址值转换为相应的gray码,然后将该gray码同步到另一个时钟域进行对比,作为空满状态的检测

    5.3 gray码如何判断空满

    对于“空”的判断:依然依据二者完全相等(包括MSB);
    对于“满”的判断:如下图,由于gray码除了MSB外,具有镜像对称的特点,当读指针指向7,写指针指向8时,除了MSB,其余位皆相同,不能说它为满。因此不能单纯的只检测最高位了,在gray码上判断为满必须同时满足以下3条:

    • wptr和同步过来的rptr的MSB不相等,因为wptr必须比rptr多折回一次。
    • wptr与rptr的次高位不相等,如上图位置7和位置15,转化为二进制对应的是0111和1111,MSB不同说明多折回一次,111相同代表同一位置。
    • 剩下的其余位完全相等

    6. 同步FIFO实现

    image.png
    参考链接:https://blog.csdn.net/HengZo/article/details/49683707

    代码的核心部分主要是data_count,并且full 信号是当data_count == DATA_DEPTH时拉高,除了data_count之外,还可以同过判断r_ptr和w_ptr两个指针是否相等来判断空,满信号
    ssign empty = (w_ptr == r_ptr) ? 1 : 0;
    assign full = (w_ptr[2:0] == r_ptr[2:0] && (w_ptr[3] == ~r_ptr[3])) ? 1 : 0;

    • 这里还有一个注意的点,也就是w_ptr++会越界,同步FIFO就算用data_cnt来判断空满条件,在存数据和写数据时还是应该用w_ptr来表示,如果直接用data_cnt来表示,那么设计的就是一个栈而不是FIFO了。
    module syn_fifo(
    	clk,
    	rst_n,
    	data_in,
    	w_en,
    	full,
    	data_out,
    	r_en,
    	empty);
    
    parameter DATA_WIDTH = 8;
    parameter DATA_DEPTH = 16;
    parameter ADDR_WIDTH = 4;
    
    input wire clk, rst_n;
    input wire [DATA_WIDTH-1:0] data_in;
    input wire w_en, r_en;
    
    output wire empty, full;
    output reg [DATA_WIDTH-1:0] data_out;
    
    reg [ADDR_WIDTH   : 0] data_count;
    reg [ADDR_WIDTH-1 : 0] w_ptr, r_ptr;
    reg [DATA_WIDTH-1 : 0] mem[0 : DATA_DEPTH-1];
    
    assign empty = (data_count == 'd0) ? 1 : 0;
    assign full = (data_count == DATA_DEPTH) ? 1 : 0; //data_count == DATA_DEPTH
    
    always @ (posedge clk or negedge rst_n) begin
    	if (!rst_n)
    		data_count <= 'd0;
    	else if (w_en && r_en)
    		data_count <= data_count;
    	else if (!full && w_en)
    		data_count <= data_count + 1'b1;
    	else if (!empty && r_en)
    		data_count <= data_count - 1'b1;
    	else
    		data_count <= data_count;
    end
    
    always @ (posedge clk  or negedge rst_n) begin
    	if (!rst_n)
    		mem[w_ptr] <= 'd0;
    	else if (!full && w_en)
    		mem[w_ptr] <= data_in;
    end
    
    always @ (posedge clk or negedge rst_n) begin
    	if (!rst_n)
    		w_ptr <= 'd0;
    	else if (w_en && !full)
    		w_ptr <= w_ptr + 1'b1;
    	else
    		w_ptr <= w_ptr;
    end
    
    always @ (posedge clk or negedge rst_n) begin
    	if (!rst_n)
    		r_ptr <= 'd0;
    	else if (r_en && !empty)
    		r_ptr <= r_ptr + 1'b1;
    	else
    		r_ptr <= r_ptr;
    end
    
    always @ (posedge clk  or negedge rst_n) begin
    	if (!rst_n)
    		data_out <= 'd0;
    	else if (!empty && r_en)
    		data_out <= mem[r_ptr];
    end
    
    endmodule
    

    7. 异步FIFO实现

    设计难点:

    1. 跨时钟域数据比较,需要用到同步器,减少亚稳态的传递
    2. 用到gray码,进一步减少亚稳态的产生
    3. gray码相等信号的比较 空:两个gray码相等 满:高两位相反,其余位相同。
    4. 指针计数需要比ADDR的位宽多一位,这一点和同步FIFO的设计是一样的。
      image.png

    https://www.cnblogs.com/BitArt/archive/2013/04/10/3010073.html

    module asyn_fifo(
    	clk_w,
    	clk_r,
    	rst_n,
    	r_en,
    	w_en,
    	data_in,
    	data_out,
    	full,
    	empty
    	);
    
    input wire clk_r, clk_w, rst_n;
    
    input wire r_en, w_en;
    
    input wire [7:0] data_in;
    
    output wire full, empty;
    output reg [7:0] data_out;
    
    parameter DATA_DEPTH = 8;
    parameter DATA_WIDTH = 8;
    
    parameter ADDR_WIDTH = 3;
    
    reg [3:0] w_ptr, r_ptr;
    
    reg [7:0] mem[DATA_DEPTH-1 : 0];
    
    
    always @ (posedge clk_w or negedge rst_n) begin
    	if (~rst_n)
    		w_ptr <= 'd0;
    	else if (w_en && !full)
    		w_ptr <= w_ptr + 1'b1;
    	else
    		w_ptr <= w_ptr;
    end
    wire [3:0] w_ptr_gray, r_ptr_gray;
    
    assign w_ptr_gray = w_ptr ^ (w_ptr >> 1);
    assign r_ptr_gray = r_ptr ^ (r_ptr >> 1);
    
    //
    reg [ADDR_WIDTH:0] rd1_wp, rd2_wp;
    always @ (posedge clk_r or negedge rst_n) begin
    	if (!rst_n) begin
    		rd1_wp <= 'd0;
    		rd2_wp <= 'd0;
    	end else begin
    		rd1_wp <= w_ptr_gray;
    		rd2_wp <= rd1_wp;
    	end
    end
    
    assign empty = (rd2_wp == r_ptr_gray) ? 1 : 0;
    
    
    always @ (posedge clk_r or negedge rst_n) begin
    	if (~rst_n)
    		r_ptr <= 'd0;
    	else if (r_en && !empty)
    		r_ptr <= r_ptr + 1'b1;
    	else
    		r_ptr <= r_ptr;
    end
    //wire [ADDR_WIDTH:0] r_ptr_gray;
    
    assign r_ptr_gray = r_ptr ^ (r_ptr >> 1);
    
    reg [ADDR_WIDTH:0] wd1_rp, wd2_rp;
    always @ (posedge clk_w or negedge rst_n) begin
    	if (~rst_n) begin
    		wd1_rp <= 'd0;
    		wd2_rp <= 'd0;
    	end
    	else begin
    		wd1_rp <= r_ptr_gray;
    		wd2_rp <= wd1_rp;
    	end
    end
    
    assign full = ({(~wd2_rp[ADDR_WIDTH:ADDR_WIDTH-1]),wd2_rp[ADDR_WIDTH-2:0]} == w_ptr_gray) ? 1:0;
    
    always @ (posedge clk_w or negedge rst_n) begin
    	if (~rst_n)
    		mem[w_ptr] <= 'd0;
    	else if (!empty && rd_en)
    		mem[w_ptr] <= data_in;
    end
    
    always @ (posedge clk_r or negedge rst_n) begin
    	if (~rst_n)
    		data_out <= 'd0;
    	else if (!full && w_en)
    		data_out <= mem[r_ptr];
    end
    endmodule
    

    8. 对FIFO进行约束

    set_false_path
    在设计中,不需要满足setup/hold时序的数据路径需要设置成false path
    set_disable_timing:可以使库单元的时间弧(timing arc)无效
    总的来说,set_false_path 只对data path起作用, EDA 工具还会分析计算这条时序路径, 只是不报出来是否有时序违例。
    set_disable_timing 对timing arc起作用,完全不去分析这条timing arc

    9. 关于异步FIFO最小深度的计算

    FIFO仅在数据突发时才有效,不使用与连续的数据输出和输入。如果存在连续的数据流,那么所需要的FIFO大小因该是无限的。因此需要知道突发速率,突发大小,频率等,才能确定FIFO的深度。
    最小深度的计算流程

    1. 确定读时钟fr和写时钟的频率fw, 一般情况fw>fr的
    2. 根据fr和fw计算读写一次数据的周期Tr 和Tw,根据T= 1/f
    3. 根据突发写长度的大小,计算这么多数据需要写多少时间 tw = Tw*len
    4. 根据写的时间tw计算读了多少数据 n = tw/Tr
    5. FIFO的最小深度等于 len-n

    9.1 写时钟快于读时钟,写和读的过程中没有空闲周期

    image.png
    分析过程:
    写时钟周期Tw = 1000/80 ns = 12.5ns;同理读时钟周期为20ns;
    突发写长度为120个数据,写120个数据耗时120 * 12.5 = 1500ns;
    1500ns时间内读出数据1500/20ns = 75个;
    故最小FIFO深度为120 - 75 = 45;

    9.2 写时钟频率大于读时钟频率,但在读写的过程中存在空闲周期

    image.png
    分析:
    写时钟周期T_A = 12.5ns,读时钟周期为T_B = 20ns;
    两个写时钟写一个数据,也就是写一个数据需要时间2*T_A = 25ns,那么由于突发写数据个数为120个,写这么多数据需要时间120 * 25ns = 3000ns;
    4个读时钟周期读一个数据,因此读一个数据需要时间80ns,3000ns读了3000/80 = 37.5个数据(0.5不算一个数据,没读完整),约等于37个数据。
    所以,FIFO的最小深度为120 - 37 = 83;

    9.3 写时钟慢于读时钟,且读写过程中没有空闲周期

    image.png
    分析:
    这种情况下永远也不会发生数据丢失的情况;
    fifo的深度为1

    9.4 写时钟频率小于读时钟频率,但读写过程中存在空闲周期

    image.png
    分析:
    写时钟周期1000/30 ns = 100/3 ns;读时钟周期 20ns;
    写一个数据需要2个时钟,也就是200/3 ns;读一个数据需要4个时钟,也就是80 ns;
    写120个数据需要时间8000ns,这段时间内读出数据8000/80 = 100个;
    因此,FIFO的最小深度为120 - 100 = 20;

    9.5 读写时钟速率相同,且无空闲时钟

    image.png
    分析:
    如果读写时钟之间没有相位差,则不需要FIFO就可以进行读写;
    如果二者存在相位差,只需要FIFO的深度为1即可。

    9.6 读写时钟频率一致,但在读写过程中存在空闲周期

    image.png
    分析:
    两个时钟写一个数据,需要时间40ns;
    4个时钟读一个数据,需要80ns;
    由于突发长度为120,需要120*40 = 4800ns写完;这段时间读出数据个数:4800/80 = 60;
    所以,FIFO最小深度为120 - 60 = 60;

    9.7 特定条件下,最坏情况分析FIFO最小深度

    image.png
    首先,从条件可知,写频率等于读频率;
    其次,读写可以在如下限制下的任意时刻发生:
    image.png
    image.png
    为了获得更安全的FIFO深度,我们需要考虑最坏的情况,以防数据丢失;
    对于最坏的情况,写入和读取之间的数据速率之间的差异应该是最大的。 因此,对于写操作,应考虑最大数据速率,对于读操作,应考虑最小数据速率。从上表可以看出,最快的写数据速率应该为第4种情况,写操作在最小的时间内完成;
    由于突发写长度为160,所以160个时钟写160个数据;
    由于读速度为10个时钟读8个数据,因此一个数据需要10/8个时钟;
    所以160个时钟读了160*8/10 = 128个数据;
    所以FIFO的最小深度为160-128=32.

    9.8 条件拐弯抹角的给出,需要自己提取关键信息

    image.png
    假如clkA = 25MHz,则CLKB = 100MHz;

    TA= 40ns, TB = 10ns;
    en_B = 100*40 = 4000ns;占空比为1/4;
    我们认为B为写时钟,写使能时间为4000/4 = 1000ns,则突发写长度为1000/10 = 100个数据;
    在1000ns内读出数据为1000/40 = 25个数据,所以FIFO最小深度为100 - 25 = 75

    9.9 其它情况

    输入时钟频率炜250MHz,输入数据率8Gbps,输出的时钟频率200MHz,输出的数据率为5Gbps,单位时间内输入的数据总量为4Gb,在保证数据不丢失的情况下,最少需要多大的缓冲空间,并给出分析步骤。
    解析:解答1,不考虑两个包之间的背靠背的情况
    4Gb/8Gbps * 5Gbps = 2.5Gb,因此缓冲空间=4Gb-2.5Gb = 1.5Gb;
    解答2:考虑背靠背的情况
    突发长度=8G, 写应该是0440的情况,读用最慢的情况,2.5, 2.5,0.5, 2.5,因此FIFO= 8-3 = 5G

    9. Vivado FIFO IP核使用

    1. 在IP Catalog中搜索FIFO,会出现各种各样的FIFO,一般选择FIFO generator。
      image.png
    2. 点击IP之后,会出现FIFO配置的一些选项,包括Basic Native ports, flag等
      image.png
    3. 在Basic中我们可以控制FIFO的接口形式和FIFO的类型
    • FIFO 的接口分为两类,一类是 Native 接口,这类接口使用比较简单,另一类是 AXI 协议接口,这类协议口线比较多,操作相对复杂。
    • FIFO 的类型主要区别:1.读写是否使用一个时钟 2.使用何种硬件资源
      其中区别1主要是通过common clk和 independent clk来确定,也就是同步FIFO和异步FIFO
      区别2硬件资源:分为3种。BRAM:即块RAM资源,这是FPGA内嵌的一种重要的专用RAM资源,可以在读写两端使用不同的数据宽度,可以使用 ECC (一种数据校验特性),支持 First-World Fall Through ,以及支持动态错误注入。;分布式RAM:Distributed RAM,即将FPGA中的LUT用作RAM,仅支持 First-World Fall Through 功能;专用FIFO,专用FIFO会提供很小的延迟。BRAM 是一种比较重要的资源,如果设计的 FIFO 对延时不敏感,可以使用分布式的 RAM 以节约 BRAM 资源。
    1. Stand FIFO 和 First Word Fall Through的区别
    • standard FIFO 读取数据时会延迟一个周期,也即会在使能信号拉高后延迟一个周期才有数据输出,而First word fall through会和使能信号同时输出。造成这种区别的原因在于FWFT模式下,第一个写入的数据将从RAM中提前读出到数据线。
    • FIFO 的复位使用的高电平复位,如果设计中系统复位信号是低电平有效的,那么不要忘记要将系统复位电平取反后再接入 FIFO 复位电平。一般我们在同步系统设计中使用异步复位。
      image.png
    1. status flag
    • 包括 almost Full/Empty 信号,这两个信号,顾名思义,就是在 FIFO 几乎要满或者几乎要空的情况下置起,所谓的“几乎“就是指还差一个数据满或者空
    • 这个页面上还提供握手选项,但一般我们在初级设计中不会需要 FIFO 具有这种“交互”特性,实质上 AXI 协议接口也会提供握手特性。
    • 第四个页面 Data Count,顾名思义就是提供一个信号来表示当前 FIFO 中的数据总数
      image.png
    1. 在顶层文件实例化IP
    • 在IP Source中打开Instation Template目录下的veo文件,里面就有实例化的例子
      image.png
    1. 异步FIFO IP的使用
      image.png
      注意同步化synchronization stages
      image.png
      这个值用于表示FIFOempty拉低的时间长度,同时要注意FIFO的读一定要有empty控制,并且发现empty并不是一写入数据就拉低的。

    10. FIFO IP使用注意事项

    1. 如果读写位宽不一样的情况,比如写位宽8, 读位宽32,那么当写入三次是, empty信号仍然为高电平,也就意味着是读不出数据的。
    2. FIFO的复位信号是高电平有效
    3. standard FIFO 和FWFT的区别就是读的时候需要延时一个周期和不需要延时
    4. output register:嵌入式输出寄存器可用于增加性能并向宏添加流水线寄存器,主要用于改善时序情况,但是只对Standard FIFO模式有用,添加output register, 读延时会增加1个周期
    5. Valid: This signal indicates that valid data is available on the output bus (dout).因此在FWFT模式下,只要FIFO有数据,valid信号就会拉高;而在Standard FIFO模式下,只有在读信号使能之后,valid信号才会拉高
      FWTF

    Standard FIFO

    参考链接:
    https://blog.csdn.net/Reborn_Lee/article/details/100127937
    [https://hardwaregeeksblog.files.wordpress.com/2016/12/fifodepthcalculationmadeeasy2.pdf]
    https://zhuanlan.zhihu.com/p/47847664

    展开全文
  • 异步信号和同步信号

    千次阅读 2020-11-20 10:55:06
    同步输入信号可以过滤掉不正确状态跳变对逻辑的影响,但是需要保证有效输入信号在时钟信号跳变前完成跳变,否则输入信号就是无效的。异步信号则同步信号的效果正好相反。使用时请根据实际情况考虑。 异步清零:...

    区别同步信号与异步信号,要弄清楚信号变为有效状态时,它是否受CLK的限制.

    “异步”输入信号和时钟信号无关,输入信号变为有效状态时,器件的状态就会立即改变;而“同步”输入信号和时钟信号有关,实际上输入信号和时钟信号进行了与运算或与非运算,输入信号和时钟信号的运算结果为有效状态时,器件的状态才会改变。
    同步输入信号可以过滤掉不正确状态跳变对逻辑的影响,但是需要保证有效输入信号在时钟信号跳变前完成跳变,否则输入信号就是无效的。异步信号则和同步信号的效果正好相反。使用时请根据实际情况考虑。

    异步清零:只要Reset=1即可清零,不管CLK是什么;
    同步清零: Reset=1,并且CLK为上升沿或下降沿时才能清零.

    异步置位:只要SET=1即可置1,不管CKL是什么;
    同步置位:SET=1,并且CLK为上升沿或下降沿时才置1.

    同步计数:当计数器达到计数条件时,只有当时钟信号的下降沿(或上升沿)来临时,计数器才会开始处理,其他时间无论高低电平,计数器都会无视;
    异步计数:当计数器达到计数条件时,它立刻就跳转,并不等待时钟信号的下降沿(或上升沿)的来临

    同步时钟和异步时钟link

    同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。

    异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。

    用verilog描述一个异步的D触发器,即就是当有时钟clk、reset、set、信号时该处发起都会随时发出响应。然后描述一个同步的D触发器,当有时钟脉冲时才会做出响应,而reset和set发生时只会等时钟发生变化才会做出响应。

    同步电路的优点:
    1 可以有效的避免毛刺的影响,提高设计可靠性,同步设计是避免毛刺最简单的方法。
    2 简化时序分析过程

    缺点:
    最大可能时钟频率是由电路中最慢的逻辑路径决定的,也就是关键路径,意思就是说每一个逻辑的运算,从简单到复杂都要在一个时钟周期内完成,同步电路往往会出现逻辑延迟过大,使得系统频率降低。

    解决方式:采用流水线的设计思想,将复杂的运算分为数个简单的运算,可以帮助提高系统频率。

    关于同步时钟异步时钟的讨论link
    问题:1.两个不同的晶振产生都产生100M的时钟,并且两个相位差固定,这两个时钟是同步还是异步?
    2.一个参考时钟为100M的PLL分频出来一个clk1=50M,又倍频出来一个clk2=500M,请问clk1和clk2是同步时钟吗?参考时钟与倍频或者分频出来的时钟是同步还是异步?
    回复: 时钟同步和异步是根据相位差是否变化确定的,如果连个时钟的相位差固定则为同步时钟,否则为异步时钟。
    你举的例子里:
    1.两个晶振产生的时钟。两个晶振在上电是时相位差是随机的,而且不同晶振时钟漂移抖动也不一样,所以是异步时钟。
    2.时钟分频。虽然clk1和clk2是同一个时钟源分频出来的,但是一个PLL只能输出一个时钟,所以clk1和clk2只能由两个PLL产生,与两个晶振产生的时钟情况类似。故也是异步时钟
    在FPGA内部PLL的参数是固定已知的工具可以分析,所以在FPGA内认为2是同步时钟

    只要不是同一个晶振出来的时钟,就是异步的。晶振之间是相互独立的

    问题:一个PLL一次只能产生一个时钟比如产生clk1,要想同时再产生一个clk2就得需要另一个PLL,但是这两个PLL可以共用一个晶振产生参考时钟吗?
    回复:当然可以共用。
    且不说这个场景是不是需要使用两个独立的PLL,即使是独立的PLL,只要是同源时钟,输出频率是整数倍关系,他们的相位关系就是确定的,不需要做异步时钟处理,只需要做好跨时钟域的约束。

    并不一定要set_multipaths_cycle命令来做跨时钟与的约束,具体情况具体分析,跟你的逻辑设计有关系,有时候只需要建立generated clock关系不需要进一步添加约束,有时候需要set_multicycle,有时候可能set_max_delay合适,也可能clock group合适。约束是跟具体功能紧密相关的

    展开全文
  • 同步是要接收方按照发送方发送的每个位的起止时刻速率来接收数据,否则会产生误差。 通常可以采用同步异步的传输方式对位进行同步处理。 1. 异步传输(Asynchronous Transmission):异步传输...

    在网络通信过程中,通信双方要交换数据,需要高度的协同工作。为了正确的解释信号,接收方必须确切地知道信号应当何时接收和处理,因此定时是至关重要的。
    在计算机网络中,定时的因素称为位同步。同步是要接收方按照发送方发送的每个位的起止时刻和速率来接收数据,否则会产生误差。


    通常可以采用同步或异步的传输方式对位进行同步处理。

    1. 异步传输(Asynchronous Transmission):异步传输模式(Asynchronous Transfer Mode,缩略语为ATM)
    异步传输一般以字符为单位,
    起始位:先发出一个逻辑”0”信号,表示传输字符的开始。
    空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

     异步传输将比特分成小组进行传送,小组可以是8位的1个字符或更长。发送方可以在任何时刻发送这些比特组,
    而接收方从不知道它们会在什么时候到达。一个常见的例子是计算机键盘与主机的通信。按下一个字母键、数字键或特殊字符键,就发送一个8比特位的ASCII代码。
    键盘可以在任何时刻发送代码,这取决于用户的输入速度,内部的硬件必须能够在任何时刻接收一个键入的字符。

    异步传输存在一个潜在的问题,即接收方并不知道数据会在什么时候到达。在它检测到数据并做出响应之前,第一个比特已经过去了。
    这就像有人出乎意料地从后面走上来跟你说话,而你没来得及反应过来,漏掉了最前面的几个词。因此,每次异步传输的信息都以一个起始位开头,
    它通知接收方数据已经到达了,这就给了接收方响应、接收和缓存数据比特的时间;在传输结束时,一个停止位表示该次传输信息的终止。
    按照惯例,空闲(没有传送数据)的线路实际携带着一个代表二进制1的信号,异步传输的开始位使信号变成0,其他的比特位使信号随传输的数据信息而变化。
    最后,停止位使信号重新变回1,该信号一直保持到下一个开始位到达。例如在键盘上数字“1”,按照8比特位的扩展ASCII编码,将发送“00110001”,
    同时需要在8比特位的前面加一个起始位,后面一个停止位。

    异步传输的实现比较容易,由于每个信息都加上了“同步”信息,因此计时的漂移不会产生大的积累,但却产生了较多的开销。
    在上面的例子,每8个比特要多传送两个比特,总的传输负载就增加25%。对于数据传输量很小的低速设备来说问题不大,
    但对于那些数据传输量很大的高速设备来说,25%的负载增值就相当严重了。因此,异步传输常用于低速设备。

    2. 同步传输(Synchronous Transmission):同步传输的比特分组要大得多。它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,
    而是把它们组合起来一起发送。我们将这些组合称为数据帧,或简称为帧。

    数据帧的第一部分包含一组同步字符,它是一个独特的比特组合,类似于前面提到的起始位,用于通知接收方一个帧已经到达,
    但它同时还能确保接收方的采样速度和比特的到达速度保持一致,使收发双方进入同步。

    帧的最后一部分是一个帧结束标记。与同步字符一样,它也是一个独特的比特串,类似于前面提到的停止位,用于表示在下一帧开始之前没有别的即将到达的数据了。

    同步传输通常要比异步传输快速得多。接收方不必对每个字符进行开始和停止的操作。一旦检测到帧同步字符,它就在接下来的数据到达时接收它们。
    另外,同步传输的开销也比较少。例如,一个典型的帧可能有500字节(即4000比特)的数据,其中可能只包含100比特的开销。
    这时,增加的比特位使传输的比特总数增加2.5%,这与异步传输中25 %的增值要小得多。
    随着数据帧中实际数据比特位的增加,开销比特所占的百分比将相应地减少。但是,数据比特位越长,缓存数据所需要的缓冲区也越大,这就限制了一个帧的大小。

    另外,帧越大,它占据传输媒体的连续时间也越长。在极端的情况下,这将导致其他用户等得太久。

    同步传输方式中发送方和接收方的时钟是统一的、字符与字符间的传输是同步无间隔的。

    异步传输方式并不要求发送方和接收方的时钟完全一样,字符与字符间的传输是异步的。

     同步与异步传输的区别
    
    1,异步传输是面向字符的传输,而同步传输是面向比特的传输。
    
    2,异步传输的单位是字符而同步传输的单位是桢。
    
    3,异步传输通过字符起止的开始和停止码抓住再同步的机会,而同步传输则是以数据中抽取同步信息。
    
    4,异步传输对时序的要求较低,同步传输往往通过特定的时钟线路协调时序。
    
    5,异步传输相对于同步传输效率较低。

    简单说
      同步传输就是,数据没有被对方确认收到则调用传输的函数就不返回。

       接收时,如果对方没有发送数据,则你的线程就一直等待,直到有数据了才返回,可以继续执行其他指令

       异步传输就是,你调用一个函数发送数据,马上返回,你可以继续处理其他事,  接收时,对方的有数据来,你会接收到一个消息,或者你的相关接收函数会被调用。
    形象点说

      异步传输: 你传输吧,我去做我的事了,传输完了告诉我一声

      同步传输: 你现在传输,我要亲眼看你传输完成,才去做别的事 用于异步通信的连接在OSI(开放系统互连)参考模型的物理层中被定义。

    “异步通信”是一种很常用的通信方式。

    异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。

    异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)

    异步通信也可以是以帧作为发送的单位。接收端必须随时做好接收帧的准备。这时,帧的首部必须设有一些特殊的比特组合,使得接收端能够找出一帧的开始。这也称为帧定界。帧定界还包含确定帧的结束位置。这有两种方法。一种是在帧的尾部设有某种特殊的比特组合来标志帧的结束。或者在帧首部中设有帧长度的字段。需要注意的是,在异步发送帧时,并不是说发送端对帧中的每一个字符都必须加上开始位和停止位后再发送出去,而是说,发送端可以在任意时间发送一个帧,而帧与帧之间的时间间隔也可以是任意的。在一帧中的所有比特是连续发送的。发送端不需要在发送一帧之前和接收端进行协调(不需要先进行比特同步)。

    位同步:

    要求接收端根据发送端发送数据的起止时间和时钟频率,来校正自己的时间基准和时钟频率,这个过程叫位同步。可见,位同步的目的是使接收端接收的每一位信息都与发送端保持同步。
    --------------------- 
    作者:THISISPAN
    来源:CSDN 
    原文:https://blog.csdn.net/THISISPAN/article/details/7481127
    版权声明:本文为博主原创文章,转载请附上博文链接!

    同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。   
    
        异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
    
        更加形象一点的解释:
    
       同步:比如我叫你去上课,如果你没有听到,我就在这一只叫你,知道你听到为止
    
       异步:我叫你去上课,然后我就直接去上课了,你或者没听到或者过一会再去上课或者立刻去上课
    
       至于官方的解释就不在多说了,到处都能找到,上边是自己的一点理解,希望会对大家有帮助!
    --------------------- 
    作者:u014180504 
    来源:CSDN 
    原文:https://blog.csdn.net/u014180504/article/details/47102643 
    版权声明:本文为博主原创文章,转载请附上博文链接!

     

     PS1: 两者之间区别重要是异步不需要等待回应,传递完数据即完成。(2年前#3楼)

    PS2: 阻塞是指客户端向服务器端发起请求,每次只能有一个连接被占用,其余连接在当前线程没有处理完之前都要等待。反之亦然。 非阻塞也容易理解,一个线程可以负载多个连接,新来的客户端可以不用等待。 同步传输属于前者,同步传输的过程简单说就是发出一个请求,然后就是无限等待反馈,没有得到反馈就一直等待下去,这样就可能会遇到这种情况,“假死”现象,其实大部分时候并没有真正死机,而是线程一直在等待,我们可以将同步传输想成一个比较固执的人,非要等到一个结果才肯罢休! 而异步传输就不同了,他是一个随遇而安的人,没有结果就算了!异步传输就不会出现假死现象,因为异步传输是发送完请求之后就直接发送另一个请求了去了,不会等待,所以是非阻塞的 个人理解,希望会对你有帮助(3年前#2楼)

     


    解析:

    1、不管是同步还是异步,字符的发送时间和接受时间要一样。如一个字符发送为1秒,接受也需要为1秒(小于一秒的话,利用软件延时)

    2、同步异步最大的不同是:异步传输时,间隙可以不同步。比如,帧1传输完后 隔5秒传输帧2.间隙为5秒。再接受方,接受完帧1后,可以隔10秒再开始接受帧2. 而同步传输,间隙也必须一致。
    --------------------- 
    作者:云上笛暮 
    来源:CSDN 
    原文:https://blog.csdn.net/pengpengjy/article/details/74726349 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • FPGA同步和异步电路

    千次阅读 2018-07-21 09:33:06
    异步电路和同步时序电路的区别。 异步电路: 电路核心逻辑有用组合电路实现; 异步时序电路的最大缺点是容易产生毛刺; 不利于器件移植; 不利于静态时序分析(STA)、验证设计时序性能。 同步时序电路...
  • js中的同步和异步的个人理解

    万次阅读 多人点赞 2017-06-09 15:09:05
    你应该知道,javascript语言是一门“单线程”的语言,不像java语言,...那么这里说的同步和异步到底是什么呢?其实个人觉得js官方的文档在使用两个词的时候并不准确,包括很多其他词汇,都只是听起来高深,但实际应用好
  • 同步电路和异步电路的区别

    千次阅读 2020-05-19 15:12:04
    同步电路是由时序电路(寄存器各种触发器)组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制 下完成的。这些时序电路共享同一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或下降沿
  • 1、同步就是顺序执行,假如当进程a是进程b的输入,那么进程a没有输入,进程b要等待;输入可以是信号量;同步就像硬件时钟信号,来一个时钟就cpu执行一次,顺序执行 2、异步就是进程b不需要等待进程a,可以在等待过程...
  • 因此伺服电机指的是随时跟随命令进行动作的一种电机,是以其工作性质命名的,概念上“直流电机”“异步电机”“同步电机”这些常见以电机驱动方式来分类的方式不一样,注意不要混肴。  伺服电机可使控制速度,...
  • JS同步和异步问题

    千次阅读 多人点赞 2019-02-26 10:53:52
    为了解决这个问题,后面我们会介绍同步和异步的概念   (2)为什么是单线程  其实,JavaScript的单线程,与它的用途是有很大关系,我们都知道,JavaScript作为浏览器的脚本语言,主要用来实现与用户的...
  • 考虑以下电路,当触发器的D端数据输入相对于clk来说是异步的,再这种情况下,因为不知道什么时候会有异步输入的信号、输入信号什么时候撤销,这将导致在clk上升沿来临时建立保持时间不满足,从而导致输出端Q的数据...
  • 同步中断和异步中断区别

    千次阅读 2019-02-27 17:02:21
    断”的发生完全是异步的,因为不知道什么时候会发生。CPU对其的响应也完全是被动的, 可以通过“关中断”指令关闭对其的响应。 由软件产生的中断一般是由专设的指令,如X86中的“INT n”在程序中有意产生的, 是主动...
  • 对于一个架构师来说,在大型系统设计中,会经常需要面对同步和异步等架构问题,搞明白这些问题,能更好地实现程序并行执行,减少等待或无效操作,以及充分利用计算机的性能! 本文将详细讲解: 1.同步架构和异步...
  • 同步逻辑 只被一个时钟信号驱动的设计称为同步逻辑,因为所有的记忆元素(比如寄存器、RAM。锁存器等)都被同一个时钟信号驱动,他们的输出都是同时变化的,因此对数字电路的影响也是同步的。典型的同步逻辑电路如下...
  • 支持同步和异步阶段的无障碍管道模式实现 介绍 管道 JS 允许您在 Javascript 应用程序中创建可重用管道的同时实现管道模式。 您可以一次创建由一个或多个阶段组成的管道,然后使用不同的有效负载处理它们。 管道...
  • 同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下: always @ (posedge clk) begin if (!Rst_n) ... end 异步复位:它是指...
  • 同步复位:当时钟上升沿检测到复位信号,执行复位操作(有效的时钟沿是前提)。always @ ( posedge clk ); 优点: a、有利于仿真器的仿真; b、可以使所设计的系统成为 100% 的同步时序电路,有利于时序分析,而且可...
  • javascript中的同步和异步

    千次阅读 2018-12-17 16:40:23
    javascript语言是一门“单线程”的语言,不像java语言,...其实同步和异步,无论如何,做事情的时候都是只有一条流水线(单线程),同步和异步的差别就在于这条流水线上各个流程的执行顺序不同。 最基础的异步是set...
  • 异步复位 是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。 优缺点: 同步复位 process begin wait until clk’event and clk=’1’; if rst=’1’ then count<=...
  • 串口 同步和异步 理解

    万次阅读 多人点赞 2015-09-14 14:29:02
    本文主要三大块:一,串口同步和异步在地产通行上的区别(这部分点到为止,不是主要探讨内容,有个基本理解即可)。  二,串口同步和异步编程实例及详解(主要部分)。  三,串口同步和异步的作用(着眼当下,理解...
  • 同步和异步的区别

    万次阅读 多人点赞 2018-10-25 19:10:42
    原文地址:同步和异步,区别 同步同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的...
  • 两种异步时钟同步化区别分析

    千次阅读 2021-03-04 08:49:50
    今天面试被问到异步复位同步释放和异步复位打两拍有什么区别,没回答上来,主要忘记了异步复位同步释放的实现方式,回来查了一下资料,觉得复位还是值得写一写的。 在FPGA或者数字IC设计中肯定会涉及到同步和异步...
  • 同步和异步,区别

    千次阅读 2018-10-04 21:56:59
    同步同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不...
  • 最近工作涉及到同步电路的时序设计,这里追根溯源的总结下同步电路和异步电路时序设计及流水线思想 1:什么是同步逻辑和异步逻辑? 同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。...
  • 计算机网络 同步传输和异步传输

    千次阅读 2017-09-25 22:10:53
    在网络通信过程中,通信双方要交换数据,需要高度的协同工作。为了正确的解释信号,接收方必须确切地...通常可以采用同步异步的传输方式对位进行同步处理。 异步传输(Asynchronous Transmission):异步传输模式(A
  • 什么是同步查询?...在这个过程中,因为用户向后台发送了请求,后台需要经过一定的时间处理才能返回结果,在这个等待的过程中,同步查询是没有显示对应的进度条,而异步查询会显示对应的进度条,这就让异步

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,747
精华内容 60,298
关键字:

同步输入和异步输入