zcy0517 发表于 2014-4-19 16:27:42

想请教一下上升沿取反

本帖最后由 zcy0517 于 2014-4-19 16:37 编辑

always @(posedge vsync or negedge rst)
if(!rst) flag<=0;
else flag<=~flag;

就这个简单的程序,对上升沿时对flag进行取反。为什么单独拎出来变成一个模块时,可以在vsync跳变时产生flag的取反;而同样的程序放在一个复杂的程序中的一部分flag就呆呆的输出持平为0不变化.

lusson 发表于 2014-4-19 16:43:14

你这里有2个条件啊。
你2种情况 RST电平不一样?

zcy0517 发表于 2014-4-19 17:24:05

lusson 发表于 2014-4-19 16:43
你这里有2个条件啊。
你2种情况 RST电平不一样?

两次的RST电平一样的

lusson 发表于 2014-4-19 17:30:21

zcy0517 发表于 2014-4-19 17:24
两次的RST电平一样的

肯定是你程序哪里有问题,有仿真波型吗?

zcy0517 发表于 2014-4-19 19:19:54

本帖最后由 zcy0517 于 2014-4-19 19:22 编辑

lusson 发表于 2014-4-19 17:30
肯定是你程序哪里有问题,有仿真波型吗?

module test(CLK_100Mhz,rst,vsync1,vsync1_req,flag,flag2);
input CLK_100Mhz;
input rst;
input vsync1;
output vsync1_req;
output flag;
output flag2;
reg flag2;
reg flag;
/**/
always @(posedge vsync1_req or negedge rst)
if(!rst) flag<=0;
elseflag<=~flag;

always @(posedge vsync1 or negedge rst)
if(!rst) flag2<=0;
elseflag2<=~flag2;

        reg vsync1_buff1;
        reg vsync1_buff2;
        wire vsync1_req;
        always @(posedge CLK_100Mhz or negedge rst)
        begin
        vsync1_buff1<=vsync1;
        vsync1_buff2<=vsync1_buff1;
        end
        assign vsync1_req = vsync1_buff1 & ~vsync1_buff2; //上升沿为1

endmodule

看看这个程序,出来的图像居然是这样的,flag居然没有动。而且flag也很乱。vsync是一个帧同步信号,周期性上升变化的。

lusson 发表于 2014-4-19 19:36:42

你前面的always的代码最好也用begin end关起来。
你的截图只有flag和flag2,没有其他的信号。

zcy0517 发表于 2014-4-19 19:57:07

lusson 发表于 2014-4-19 19:36
你前面的always的代码最好也用begin end关起来。
你的截图只有flag和flag2,没有其他的信号。 ...

我刚才试了一下,把1部分改成2部分就可以了。觉得好奇怪
1、always @(posedge CLK_100Mhz or negedge rst)
      begin
      vsync1_buff1<=vsync1;
      vsync1_buff2<=vsync1_buff1;
      end
      assign vsync1_req = vsync1_buff1 & ~vsync1_buff2; //上升沿为1
2、        always @(posedge CLK_100Mhz or negedge rst)
        if(!rst) begin vsync1_buff1<=0;vsync1_buff2<=0;end
        else begin
                        vsync1_buff1<=flag1;
                        vsync1_buff2<=vsync1_buff1;
                        end
        assign vsync1_req = vsync1_buff1 &~vsync1_buff2; //上升沿为1
       

Hunter 发表于 2014-4-19 21:17:13

貌似always下缺少begin end

cuiliang1984 发表于 2014-4-20 09:43:02

给你点建议,所有的触发用同一个时钟同步,内部用始能逻辑;所有的控制信号用主时钟同步后再用

zcy0517 发表于 2014-4-20 09:50:11

cuiliang1984 发表于 2014-4-20 09:43
给你点建议,所有的触发用同一个时钟同步,内部用始能逻辑;所有的控制信号用主时钟同步后再用 ...

Ja~~~爱因斯坦!
页: [1]
查看完整版本: 想请教一下上升沿取反