想不明白了为什么输出一直是低电平
module test6(clkin,clkout);
parameter N=6400;
input clkin;
output clkout;
reg clkout;
integer i=0;
//***********************************//
always @(posedge clkin)begin
begin
if (i==N-1)
i=0;
else
i=i + 1;
end
if(0<=i%512<437) clkout<=0;
elseclkout<=1;
end
endmodule
这是编译时的警告:Warning: Reduced register "clkout~reg0" with stuck data_in port to stuck value GND
问一下这到底是什么问题啊,该怎么解决?
i的定义有问题吧,定义成reg[15:0] i要好一点。
还有你的这段程序写的不太好,看看别人的计数器代码是怎么写的。
你写这个是用来仿真的还是综合的?
if(0<=i%512<437)这个写法不对头!你去查查语法
%用硬件很痛苦的哦
其实可以用一个counter在用一个比较,大于一个值就清counter,小于的话继续判断,大于什么值输出一个电平,小于什么值输出一个电平。
0<=i%512<437
应该分开成两个吧,这样写象做数学作业,在C语言中也不是这样写的
顶下拉 哦!
谢谢各位达人了,不要bs我
刚接触硬件,有些编程规范不是很明白。
还请各位指点一二
实际上我的程序的目的是要实现输入一个时钟,然后输出复合视频信号的。
复合视频信号的特点是它由场同步脉冲、均衡脉冲、以及行同步脉冲组成的,每一种脉冲
都是由不同的占空比的周期组成。通过输入时钟分不同的频率来实现,下面这段代码就是其中的一部分,if(i<2560)中的2560表示在前2560个时间单位实现场同步,在接下来的2560个时间单位
也就是if(i<5120)表示均衡脉冲。
我知道下面这些代码的实现太笨了,各位达人指点一下有什么好的方法来节省资源以及我的代码规范有什么问题都帮我指出来,小弟不胜感激!
module test5(clkin,clkout);
parameter M=512;
parameter N=640000;
input clkin;
output clkout;
reg clkout;
integer count;
integer i=0;
//***********************************//
always @(posedge clkin)begin
begin
if (i==N-1)
i=0;
else
i=i + 1;
end
//**********实现奇数场同步脉冲(M=512)**********//
if(i<2560)
begin
if (count==(M-1))
count=0;
else
count=count + 1;
if (count==437)
clkout<=1;
else if (count==511)
clkout<=0;
end
//**********实现后均衡脉冲(M=512)**********//
else if(i<=5120)
begin
if (count==(M-1))
count=0;
else
count=count + 1;
if (count==38)
clkout<=1;
else if (count==511)
clkout<=0;
end
end
endmodule