想请教一下上升沿取反
本帖最后由 zcy0517 于 2014-4-19 16:37 编辑always @(posedge vsync or negedge rst)
if(!rst) flag<=0;
else flag<=~flag;
就这个简单的程序,对上升沿时对flag进行取反。为什么单独拎出来变成一个模块时,可以在vsync跳变时产生flag的取反;而同样的程序放在一个复杂的程序中的一部分flag就呆呆的输出持平为0不变化.
你这里有2个条件啊。
你2种情况 RST电平不一样? lusson 发表于 2014-4-19 16:43
你这里有2个条件啊。
你2种情况 RST电平不一样?
两次的RST电平一样的 zcy0517 发表于 2014-4-19 17:24
两次的RST电平一样的
肯定是你程序哪里有问题,有仿真波型吗? 本帖最后由 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是一个帧同步信号,周期性上升变化的。
你前面的always的代码最好也用begin end关起来。
你的截图只有flag和flag2,没有其他的信号。 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
貌似always下缺少begin end 给你点建议,所有的触发用同一个时钟同步,内部用始能逻辑;所有的控制信号用主时钟同步后再用 cuiliang1984 发表于 2014-4-20 09:43
给你点建议,所有的触发用同一个时钟同步,内部用始能逻辑;所有的控制信号用主时钟同步后再用 ...
Ja~~~爱因斯坦!
页:
[1]