微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求助,一个简单电路的时序解释,求各位好心人解释下,谢谢!

求助,一个简单电路的时序解释,求各位好心人解释下,谢谢!

时间:10-02 整理:3721RD 点击:
现在想做一个3分频电路,知道这样设计是不合理的,存在竞争和冒险的风险,但是,我想分析下这个电路的时序问题,代码如下:
module div_3(
       input clk,
                 input rst,
                 output clk_out
    );
reg q1;
reg q2;
wire clk1;
wire clk2;
assign clk1=clk^q2;
assign clk2=q1;
always @(posedge clk1 or posedge rst)begin
    if(rst)begin
            q1<=0;
         end
         else begin
       q1<=~q1;
    end
end
always @(posedge clk2 or posedge rst)begin
    if(rst)begin
       q2<=0;
    end
    else begin
       q2<=~q2;
    end
end         
assign clk_out=q2;
endmodule



问:为什么clk2,也就是q1的状态好像不单单是在clk1上升沿采样,和clk_out和clk的异或也有关系?但是我在代码中写的就是异或后产生clk1信号,再在clk1的上升沿采样,这个时序不是很懂,求各位好心人解释下。

自顶一下,求助。

没人回答啊,不要沉了

module div15(clkin, clkout, rstn)input clkin;input rstn;output clkout;//自己补充reg ...wire ...always @(posedge clkin or negedge rstn)   begin            if(!rstn)                clk_d2 <= 1'b0;            else                clk_d2 <= ~clk_d2;endassign clk_neg = ~clkin;assign clkout = clk_neg ^ clk_d2;endmodule


寄存器的赋值加 #1 延迟,然后你再看波形和你想象的有什么不同

不懂,同问

图中,q1的下降沿是在clk1的上升沿完成的,但q1是如何变成高电平的呢



    是啊,一直想不明白,q1是怎么变高电平的



    和这个有什么关系吗?求详细解答呀



    这个语句是可综合的语句吗




哦,找到原因了

这是做ASIC的吗? 没做过。
FPGA上是不能这么做的,你的时钟还与了一下,这都不好,我印象中奇数倍的是上升沿和下降沿做的。



    恩,是的,基本上不会用clk来做组合逻辑,我只是想知道那个时序是怎么回事



    谢谢啊,我在ise里仿真,怎么clk1的信号没有这个小脉冲



    加上小编的#1也没小脉冲吗

你这个代码风格让人蛋疼,写东西总有思想的,不知道你是按怎么个思路写出这么个东西,囧。

最怕的就是clk来自于组合电路

敢这么写的人基本都是很清楚会发生什么才能写。所以你写出来的东西自己应该最清楚才对。



    不是我写的,我只是在看它里面的时序,OK?



    为什么要这样?



    是不是反相器的延迟造成的

总算看懂了。这个要不就是很久以前的代码,要不就是写的人思考了很久。不过还没想出他为什么这么干。感觉有点像逆推的,反正能想到的人很有想法。

5楼说的对!仿真循环时要加延迟的!
复位结束后:
clk  clk1  clk2  clkout
  0     0     0     0
  1     1     1     1
  1     0     1     1
  0     1     0     1
  1     0     0     1
  0     1     1     0
  0     0     1     0
  1     1     0     0
  0     0     0     0

學習!學習!

大有收获。

同步执行,,,理解这句话

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top