Verilog如何检测一个时钟周期肿的翻转?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog如何检测一个时钟周期肿的翻转?相关的知识,希望对你有一定的参考价值。

在做差分双相编码调制,发送端发送数据信号,确保发送的每一个数据位起始时刻都与内部时钟的上升沿对应,在一个周期内有翻转编码为1,无翻转编码为0,这个解调代码不太会写

参考技术A 看你的问题你并不是在写测试代码,只是在写设计代码,设计中输出高低电平变化要由输入来控制。延时有关的语句在设计中是不可综合的,在编译综合后,编译器会自动忽略。所以你还要一个输入来控制
当然你这个done 本身就可以定义为一个input 然后对应的 IO 外接控制高低电平的按键来控制done 的高低 简要思路如下:
module XX (done,XX,……);
input done;
output XX;
…… ;
reg XX;
always @ (done)
begin
if (done) //done 由输入IO口控制
XX = 0;
else
XX = ……;
end
........
..........
..........
endmodule
当然如果是些测试代码的话就是上面那位仁兄所写的。希望能帮到你,共同进步,加油!!

数字IC设计verilog编写——6脉冲同步器

数字IC设计verilog编写——6脉冲同步器

  1. 脉冲同步器
    首先在源时钟域进行信号翻转,在跨时钟域到des_clk,并进行边沿检测,即为dec_clk时钟域的脉冲,实现脉冲同步;
    在这里插入图片描述
    脉冲同步器的使用中,快时钟的有效信号需要是单脉冲信号,并且两个有效信号的时间间隔需要大于等于两个同步器的时钟周期,否则,无法恢复出有效信号。

在实际的电路设计中,异步电路的设计在实际应用中的重要意义不言而喻。由于信号在不同时钟域之间传输,容易发生亚稳态的问题导致,不同时钟域之间得到的信号不同。

处理亚稳态常用打两拍的处理方法。

多时钟域的处理方法很多,最有效的方法异步fifo,异步fifo适合处理不同时钟域之间传输的数据组,但有时不同时钟域之间仅仅传递脉冲,异步fifo就显的有点大材小用的,因此单信号的跨时钟域处理通常有:

  • 两级寄存器串联。
  • 脉冲同步器
  • 结绳法。
  • 采用握手。

脉冲同步器一般用在快时钟域信号进入慢时钟域的电路设计中

  1. RTL 代码
`timescale 1ns / 1ps

module pluse_sync(
          input src_clk,
          input src_rst_n,
          input s_pluse,
          input des_clk,
          input des_rst_n,
          output des_pluse
);
                                    

reg 	src_pluse;

always @ (posedge src_clk or negedge src_rst_n)
    if(!src_rst_n)
        src_pluse <= 1'b0;
    else if(s_pluse)
        src_pluse <= ~src_pluse;
        
reg		 d_reg1,d_reg2;

always @ (posedge des_clk or negedge des_rst_n)
    if(!des_rst_n)
        {d_reg1,d_reg2} <= 2'b00;
    else
        {d_reg1,d_reg2} <= {src_pluse,d_reg1};


assign des_pluse = (d_reg1 != d_reg2) ? 1'b1:1'b0;

endmodule

在这里插入图片描述

以上是关于Verilog如何检测一个时钟周期肿的翻转?的主要内容,如果未能解决你的问题,请参考以下文章

数字IC设计verilog编写——6脉冲同步器

数字IC设计verilog编写——6脉冲同步器

数字IC设计verilog编写——6脉冲同步器

verilog分频模块设计

Verilog实现奇分频电路

verilog 实现一个时钟